public void StartWorkflow()
        {
            System.DateTime startTime = DateTime.Now;

            String originalQueryString = ((!String.IsNullOrWhiteSpace(UrlOriginal)) ? ((UrlOriginal.Split('?').Length > 0) ? UrlOriginal.Split('?')[1] : String.Empty) : String.Empty);


            // CREATE WORKFLOW START REQUEST

            Mercury.Server.Application.WorkflowStartRequest workflowStartRequest = new Server.Application.WorkflowStartRequest();

            workflowStartRequest.Arguments = new System.Collections.Generic.Dictionary <String, Object> ();

            workflowStartRequest.WorkflowId = WorkflowId;

            workflowStartRequest.WorkflowInstanceId = WorkflowInstanceId;

            workflowStartRequest.WorkflowName = WorkflowName;

            // LOAD ARGUMENTS FROM ORIGINAL QUERY STRING

            for (Int32 currentIndex = 0; currentIndex < originalQueryString.Split('&').Length; currentIndex++)
            {
                String parameter = originalQueryString.Split('&')[currentIndex];

                String parameterName = ((parameter.Contains("=")) ? parameter.Split('=')[0] : String.Empty);

                String parameterValue = ((parameter.Contains("=")) ? parameter.Split('=')[1] : String.Empty);

                if (!String.IsNullOrWhiteSpace(parameterName))
                {
                    workflowStartRequest.Arguments.Add(parameterName, parameterValue);
                }
            }


            // CALL WORKFLOW START ON MERCURY SERVER

            workflowResponse = MercuryApplication.WorkflowStart(workflowStartRequest);

            System.Diagnostics.Debug.WriteLine("WorkflowStart: " + DateTime.Now.Subtract(startTime).TotalMilliseconds.ToString());

            WorkflowInstanceId = workflowResponse.WorkflowInstanceId; // ASSIGN NEW WORKFLOW INSTANCE ID FOR FUTURE REFERENCE (CONTINUE AND RESUME)


            startTime = DateTime.Now;

            HandleWorkflowResponse();

            actionResultType = Models.ActionResultType.Control;

            System.Diagnostics.Debug.WriteLine("WorkflowStart_HandleResponse: " + DateTime.Now.Subtract(startTime).TotalMilliseconds.ToString());

            return;
        }
        public void ContinueWorkflow(System.Collections.Specialized.NameValueCollection form)
        {
            System.DateTime startTime = DateTime.Now;

            Mercury.Server.Application.WorkflowUserInteractionResponseBase userInteractionResponse = null;


            // COMING BACK IN FROM A POSTBACK (AJAX REQUEST)

            // USE THE SELECTED WORKFLOW CONTROL TO RESTORE STATE AND VALIDATE

            System.Diagnostics.Debug.WriteLine("Workflow Control - Continue Workflow: " + workflowControl);


            // AT THIS POINT, THE WORKFLOW CONTROL HAS BEEN REBUILT AND UPDATED FROM THE CLIENT

            if (workflowControl.Contains("ContactEntity"))
            {
                userInteractionResponse = HandleUserInteraction_ContactEntity(form);
            }

            // IF USER INTERACTION RESPONSE AVAILABLE, CONTINUE WORKFLOW, OR REBUILD EXISTING PAGE

            if (userInteractionResponse != null)
            {
                WorkflowControl = String.Empty;

                workflowResponse = MercuryApplication.WorkflowContinue(WorkflowName, WorkflowInstanceId, userInteractionResponse);

                HandleWorkflowResponse();

                actionResultType = Models.ActionResultType.Control;
            }

            else
            {
                actionResultType = Models.ActionResultType.View;
            }


            System.Diagnostics.Debug.WriteLine("WorkflowContinue_HandleResponse: " + DateTime.Now.Subtract(startTime).TotalMilliseconds.ToString());

            return;
        }