﻿// JScript File
// function to clear the selected listbox
var SURVEY_START_URL_REDIRECT = "0";
var SURVEY_START_AFFIRMATIONS = "1";
var SURVEY_START_ERROR = "2";
var SURVEY_START_SHOW_PROFILE = "3";
var SURVEY_START_GET_AFFIRMATIONS = "4";
var SURVEY_START_INCENTIVE_DISPLAY="5";
var FLASH_DATA_AG_KEY = "agid";
var FLASH_DATA_INET_KEY = "inid";
var FLASH_DATA_IN_KEY = "invalue";
var ERROR = 1;
var WARNING = 2;
var INFORMATION = 3;


function AJAXGetInviteSurveyURL(method, cultureID, brandID, errorMessageHandler, movie, agData, inData, bhData, inValue, inviteData, jitOrder)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode(method);
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
    addInviteData(requestContentDocument, varRequestbodyNode, inviteData, jitOrder)
    
    addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue);
    
    sendInviteSurveyURLXmlRequest("../AjaxDataPage.aspx", requestContentDocument, errorMessageHandler, movie);	
}
function sendInviteSurveyURLXmlRequest(strPage, obXmlContent, errorMessageHandler, movie)
{
	var reqTransport = g_oAjaxEngine.getXmlHTTPTransport();
	var reqObject = new UPSAjaxObject.AjaxRequest();
	reqObject.setRequestTransport(reqTransport);
	reqObject.setRequestTarget(strPage);
	reqObject.setTypePOST();
	reqObject.addRequestContent(obXmlContent.getDocument());
	reqObject.openRequest(true);
	reqTransport.onreadystatechange=function()
	{
		if (reqTransport.readyState == 4)
		{    
		    var isError = false;
			var ajaxResponse = new UPSAjaxObject.AjaxResponse();
			ajaxResponse.parseXmlResponse(reqTransport.responseXML);			
			
			// We always expect to get a Status node as even the error conditions send back a fullResponse
            var oResponseBody = ajaxResponse.getResponseBody();
            if(oResponseBody != null)
            {
		        var statusNode = oResponseBody.selectSingleNode("Status");
	            if (ajaxResponse.getStatusCode() != 200)
	            {
	                isError = true;
	            }
	            else
	            {
		            var status=statusNode.attributes.getNamedItem("value").value;
		            if(status!=null && status=="0")
		            {
		                setAJAXFlashData(movie, statusNode);
		                var redirectUrl=statusNode.selectSingleNode("Redirect");
		                var url =redirectUrl.attributes.getNamedItem("url").value;
		                if(url!=null && url!="")
		                {
		                    top.location=URLDecode(url);
		                }
		            }
		            else
		            {
    	                isError = true;
		            }
		        }
		        if(isError)
		        {// Server side error
	                var errorMessageNode=statusNode.selectSingleNode("ErrorMessage");
	                var errorMessage="";
	                if(errorMessageNode != null)
	                    errorMessage = errorMessageNode.attributes.getNamedItem("message").value;
	                errorMessageHandler(errorMessage);
		        }
		    }
		    else
		    {// Unknown error. We expect that the error handler will implement a general message, if we pass it the empty error message.
                errorMessageHandler("");
		    }

            document.body.style.cursor="default";
		 }
		
	}
	reqObject.sendRequest(reqTransport.responseXML);
}
function AJAXGetDirectInvitePhysicianValidated(cultureID, brandID, errorMessageHandler, movie, agData, inData, bhData,inValue,profileObjects, inviteData, jitOrder)
{
     //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_GetPhysicianValidation");
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);
    
    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
    addInviteData(requestContentDocument, varRequestbodyNode, inviteData, jitOrder)
    
    addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue);
    
   //for(var index in virtualPanelObjects) ////// Changed for Mac Safari Support
    for(var index=0;index<profileObjects.length;index++) 	
    {
        var profileObject = profileObjects[index];
        requestContentDocument.addElementToParent(varRequestbodyNode, profileObject.toXmlNode(requestContentDocument));
    }
    sendInviteSurveyURLXmlRequest("../AjaxDataPage.aspx", requestContentDocument, errorMessageHandler, movie);	
}
function processExternalInviteRequest(cultureID, brandID, profileObjects, inviteData, inviteType, initiateID, responseData, errorMessageHandler, movie, agData, inData, bhData, inValue)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement;
    if(responseData != "")// We have response data. We need to get the survey
        obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_GetExternalInviteSurvey");
    else 
        obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_SaveExternalInviteRespondent");
	
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
    // Add the External Invite data
    addExternalInviteData(requestContentDocument, varRequestbodyNode, inviteData, inviteType, initiateID, responseData)
    
    for(var index=0;index<profileObjects.length;index++) 	
    {
        var virtualPanelObject = profileObjects[index];
        requestContentDocument.addElementToParent(varRequestbodyNode, virtualPanelObject.toXmlNode(requestContentDocument));
    }
    
    // Add the Flash Data to the Ajax call.
    addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue);
    
    sendAJAXOutsideSampleRequest("../AjaxDataPage.aspx", requestContentDocument, inviteData, inviteType, initiateID, responseData, cultureID, brandID, errorMessageHandler, movie, agData, inData, bhData, inValue);	
}

function sendAJAXOutsideSampleRequest(strPage, obXmlContent, inviteData, inviteType, initiateID, responseData, cultureID, brandID, errorMessageHandler, movie, agData, inData, bhData, inValue)
{
	var reqTransport = g_oAjaxEngine.getXmlHTTPTransport();
	var reqObject = new UPSAjaxObject.AjaxRequest();
	reqObject.setRequestTransport(reqTransport);
	reqObject.setRequestTarget(strPage);
	reqObject.setTypePOST();
	reqObject.addRequestContent(obXmlContent.getDocument());
	reqObject.openRequest(true);
	reqTransport.onreadystatechange=function()
	{
		if (reqTransport.readyState==4)
		{
			OutsideSampleAJAXResponseHandler(reqTransport.responseXML, inviteData, inviteType, initiateID, responseData, cultureID, brandID, errorMessageHandler, movie, agData, inData, bhData, inValue);
		}
	}
	reqObject.sendRequest(reqTransport.responseXML);
}

function OutsideSampleAJAXResponseHandler(responseXML, inviteData, inviteType, initiateID, responseData, cultureID, brandID, errorMessageHandler, movie, agData, inData, bhData, inValue)
{
        var isError = false;
        var ajaxResponse = new UPSAjaxObject.AjaxResponse();
	    
        var VIRTUAL_PANEL_PROCESS_AFFIRMATIONS = 2;
	    
        ajaxResponse.parseXmlResponse(responseXML);			
	    
        // We always expect to get a Status node as even the error conditions send back a fullResponse
        var oResponseBody = ajaxResponse.getResponseBody();
        if(oResponseBody != null)
        {
            var statusNode = oResponseBody.selectSingleNode("Status");
            if (ajaxResponse.getStatusCode() != 200)
            {
                isError = true;
            }
            else
            {
                var status=statusNode.attributes.getNamedItem("value").value;
                if(status!=null)
                {
                    setAJAXFlashData(movie, statusNode);
                    switch (status)
                    {
	                    case SURVEY_START_URL_REDIRECT:
		                    var redirectUrl=statusNode.selectSingleNode("Redirect");
		                    var url =redirectUrl.attributes.getNamedItem("url").value;
                    	
		                    if(url!=null && url!="")
		                    {
			                    top.location = URLDecode(url);
		                    }
		                    else
		                    {
			                    isError = true;
		                    }
		                    document.body.style.cursor="default";    
		                    //Don't enable the button on a redirect
		                    break;
	                    case SURVEY_START_GET_AFFIRMATIONS:
		                    // The profile was saved successfully, we now go to request survey from the server.
		                    var profileObjects = new Array(0);
		                    var response = statusNode.selectSingleNode("Response");
		                    responseData = response.attributes.getNamedItem("data").value;
                    	
		                    if(responseData!=null && responseData!="")
		                    {
			                    responseData =  URLDecode(responseData);
			                    //Don't enable the button here because we are coming back
			                    processExternalInviteRequest(cultureID, brandID, profileObjects, inviteData, inviteType, initiateID, responseData, errorMessageHandler, movie, agData, inData, bhData, inValue)
		                    }
		                    else
		                    {
			                    isError = true;
		                    }
		                    break;
	                    default:
		                    isError = true;
		                    break;
                    }
                }
                else
                    isError = true;
            }
            if(isError)
            {
                var errorMessageNode=statusNode.selectSingleNode("ErrorMessage");
                
                var errorMessage="";
                if(errorMessageNode != null)
                    errorMessage = errorMessageNode.attributes.getNamedItem("message").value;
                
                errorMessageHandler(errorMessage);
            }
        }
        else
        {// Unknown error. We expect that the error handler will implement a general message, if we pass it the empty error message.
            errorMessageHandler("");
        }
}

function AJAXGetWrongIdentityOperation(cultureID, brandID, profileDisplayHandler, errorMessageHandler)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_GetWrongIdentityOperation");
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Panel Type ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));

    sendWrongIdentityOperationXmlRequest("../AjaxDataPage.aspx", requestContentDocument, profileDisplayHandler, errorMessageHandler);	
}
function sendWrongIdentityOperationXmlRequest(strPage, obXmlContent,profileDisplayHandler, errorMessageHandler)
{
	var reqTransport = g_oAjaxEngine.getXmlHTTPTransport();
	var reqObject = new UPSAjaxObject.AjaxRequest();
	reqObject.setRequestTransport(reqTransport);
	reqObject.setRequestTarget(strPage);
	reqObject.setTypePOST();
	reqObject.addRequestContent(obXmlContent.getDocument());
	reqObject.openRequest(true);
	reqTransport.onreadystatechange=function()
	{
		if (reqTransport.readyState==4)
		{    
		    var isError = false;
			var ajaxResponse = new UPSAjaxObject.AjaxResponse();
			ajaxResponse.parseXmlResponse(reqTransport.responseXML);			
			
			// We always expect to get a Status node as even the error conditions send back a fullResponse
            var oResponseBody = ajaxResponse.getResponseBody();
            if(oResponseBody != null)
            {
		        var statusNode = oResponseBody.selectSingleNode("Status");
	            if (ajaxResponse.getStatusCode() != 200)
	            {
	                isError = true;
	            }
	            else
	            {
		            var status=statusNode.attributes.getNamedItem("value").value;
		            if(status!=null && status=="0")
		            {// This has to be a panelist. We redirect them to the PAM Login page.
		                var redirectUrl=statusNode.selectSingleNode("Redirect");
		                var url =redirectUrl.attributes.getNamedItem("url").value;
		                if(url!=null && url!="")
		                {
		                    top.location=URLDecode(url);
		                }
		            }
		            else if(status!=null && status=="3")
		            {// River respondent, we have to display the profile and hide the affirmations & Identity div
		                profileDisplayHandler();
		            }
		            else
		            {
    	                isError = true;
		            }
		        }
		        if(isError)
		        {
	                var errorMessageNode=statusNode.selectSingleNode("ErrorMessage");
	                
	                var errorMessage="";
	                if(errorMessageNode != null)
	                    errorMessage = errorMessageNode.attributes.getNamedItem("message").value;

	                errorMessageHandler(errorMessage);
		        }
		    }
		    else
		    {// Unknown error. We expect that the error handler will implement a general message, if we pass it the empty error message.
                errorMessageHandler("");
		    }

            document.body.style.cursor="default";

		 }
		
	}
	reqObject.sendRequest(reqTransport.responseXML);
}

function saveAJAXVirtualPanelObjects(cultureID, brandID, requestTypeID, virtualPanelObjects, btnSave, errorMessageHandler, affirmationXMLNodesHandler, movie, agData, inData, bhData, inValue)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_GetNextAffirmations");
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
    // Add the Virtual Panel Request Type ID
    var varVirtualPanelRequestTypeNode = new UPSAjaxObject.GetVirtualPanelProcessTypeID();
    varVirtualPanelRequestTypeNode.setVirtualPanelProcessTypeID(requestTypeID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varVirtualPanelRequestTypeNode.toXmlNode(requestContentDocument));
    
    //for(var index in virtualPanelObjects) ////// Changed for Mac Safari Support
    for(var index=0;index<virtualPanelObjects.length;index++) 	
    {
        var virtualPanelObject = virtualPanelObjects[index];
        requestContentDocument.addElementToParent(varRequestbodyNode, virtualPanelObject.toXmlNode(requestContentDocument));
    }
    
    // Add the Flash Data to the Ajax call.
    addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue);
    
    sendAJAXVirtualPanelObjects("../AjaxDataPage.aspx", requestContentDocument,btnSave, cultureID, brandID, errorMessageHandler, affirmationXMLNodesHandler, requestTypeID, movie, agData, inData, bhData, inValue);	
}

function sendAJAXVirtualPanelObjects(strPage, obXmlContent, btnSave, cultureID, brandID, errorMessageHandler, affirmationXMLNodesHandler, requestTypeID, movie, agData, inData, bhData, inValue)
{
	var reqTransport = g_oAjaxEngine.getXmlHTTPTransport();
	var reqObject = new UPSAjaxObject.AjaxRequest();
	reqObject.setRequestTransport(reqTransport);
	reqObject.setRequestTarget(strPage);
	reqObject.setTypePOST();
	reqObject.addRequestContent(obXmlContent.getDocument());
	reqObject.openRequest(true);
	reqTransport.onreadystatechange=function()
	{
		if (reqTransport.readyState==4)
		{
			VirtualPanelAJAXResponseHandler(reqTransport.responseXML,btnSave, cultureID, brandID, errorMessageHandler, affirmationXMLNodesHandler, requestTypeID, movie, agData, inData, bhData, inValue);
		}
	}
	reqObject.sendRequest(reqTransport.responseXML);
}

function VirtualPanelAJAXResponseHandler(responseXML,btnSave, cultureID, brandID, errorMessageHandler, affirmationXMLNodesHandler, requestTypeID, movie, agData, inData, bhData, inValue)
{
        var isError = false;
	    var ajaxResponse = new UPSAjaxObject.AjaxResponse();
	    
	    var VIRTUAL_PANEL_PROCESS_PROFILE = 1;
        var VIRTUAL_PANEL_PROCESS_AFFIRMATIONS = 2;
        var VIRTUAL_PANEL_PROCESS_SURVEYS = 3;
	    
	    ajaxResponse.parseXmlResponse(responseXML);			
	    
	    // We always expect to get a Status node as even the error conditions send back a fullResponse
        var oResponseBody = ajaxResponse.getResponseBody();
        if(oResponseBody != null)
        {
            var statusNode = oResponseBody.selectSingleNode("Status");
            if (ajaxResponse.getStatusCode() != 200)
            {
                isError = true;
            }
            else
            {
                var status=statusNode.attributes.getNamedItem("value").value;
                if(status!=null)
                {
		            setAJAXFlashData(movie, statusNode);
                    switch (status)
                    {
	                    case SURVEY_START_URL_REDIRECT:
		                    var redirectUrl=statusNode.selectSingleNode("Redirect");
		                    var url =redirectUrl.attributes.getNamedItem("url").value;
                    	
		                    if(url!=null && url!="")
		                    {
			                    top.location = URLDecode(url);
		                    }
		                    else
		                    {
			                    isError = true;
		                    }
		                    document.body.style.cursor="default";    
		                    //Don't enable the button on a redirect
		                    break;
	                    case SURVEY_START_AFFIRMATIONS:
		                    var affirmationsNode = statusNode.selectSingleNode("Affirmations");
		                    if (affirmationsNode != null)
		                    {
			                    var affirmationXMLNodes=affirmationsNode.selectNodes("Affirmation");
			                    if(affirmationXMLNodes!=null && affirmationXMLNodes.length > 0)
			                    {
				                    affirmationXMLNodesHandler(affirmationXMLNodes);
			                    }
		                    }
		                    document.body.style.cursor="default";
		                    btnSave.disabled=false;
		                    break;
	                    case SURVEY_START_GET_AFFIRMATIONS:
		                    // The profile was saved successfully, we now go to request affirmations from the server.
		                    var affirmationObjects = new Array(0);
		                    //Change the state of the UI here, we are certainly in the affirmation process
		                    requestTypeID = VIRTUAL_PANEL_PROCESS_AFFIRMATIONS;
		                    //Don't enable the button here because we are coming back
		                    saveAJAXVirtualPanelObjects(cultureID, brandID, requestTypeID, affirmationObjects, btnSave, errorMessageHandler, affirmationXMLNodesHandler, movie, agData, inData, bhData, inValue);
		                    break;
	                    case SURVEY_START_INCENTIVE_DISPLAY:
	                        //
	                        var surveyText=statusNode.selectSingleNode("SurveyAttribute");
		                    var displayText =surveyText.attributes.getNamedItem("text").value;
                    	
		                    if(displayText!=null && displayText!="")
		                    {
			                    //Display the Survey Incentive Div
		                        ShowSurveyIncentive(HtmlDecode(displayText.replace("&apos","'")));
		                    }
		                    else
		                    {
			                    isError = true;
		                    }
		                    document.body.style.cursor="default";    
		                    //Don't enable the button on a redirect
	                        
		                    break;
	                    default:
		                    isError = true;
		                    break;
                    }
                }
                else
                    isError = true;
            }
            if(isError)
            {
                var errorMessageNode=statusNode.selectSingleNode("ErrorMessage");
                
                var errorMessage="";
                if(errorMessageNode != null)
                    errorMessage = errorMessageNode.attributes.getNamedItem("message").value;
                
                errorMessageHandler(errorMessage);
            }
        }
        else
	    {// Unknown error. We expect that the error handler will implement a general message, if we pass it the empty error message.
            errorMessageHandler("");
	    }
}
function ProcessSurveyDisplay(cultureID, brandID, requestTypeID, virtualPanelObjects, btnSave, errorMessageHandler, affirmationXMLNodesHandler, movie, agData, inData, bhData, inValue)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_DisplaySurvey");
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
    // Add the Virtual Panel Request Type ID
    var varVirtualPanelRequestTypeNode = new UPSAjaxObject.GetVirtualPanelProcessTypeID();
    varVirtualPanelRequestTypeNode.setVirtualPanelProcessTypeID(requestTypeID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varVirtualPanelRequestTypeNode.toXmlNode(requestContentDocument));
    
    //for(var index in virtualPanelObjects) ////// Changed for Mac Safari Support
    for(var index=0;index<virtualPanelObjects.length;index++) 	
    {
        var virtualPanelObject = virtualPanelObjects[index];
        requestContentDocument.addElementToParent(varRequestbodyNode, virtualPanelObject.toXmlNode(requestContentDocument));
    }
    
    // Add the Flash Data to the Ajax call.
    addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue);
    
    sendAJAXVirtualPanelObjects("../AjaxDataPage.aspx", requestContentDocument,btnSave, cultureID, brandID, errorMessageHandler, affirmationXMLNodesHandler, requestTypeID, agData, inData, bhData, inValue);	
}
function saveMSCAJAXAffirmations(cultureID, brandID,  requestTypeID, affirmationObjects, btnSave, errorMessageHandler, affirmationXMLNodesHandler, movie, agData, inData, bhData, inValue)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_GetMSCAffirmations");
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
    // Add the Virtual Panel Request Type ID
    var varVirtualPanelRequestTypeNode = new UPSAjaxObject.GetVirtualPanelProcessTypeID();
    varVirtualPanelRequestTypeNode.setVirtualPanelProcessTypeID(requestTypeID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varVirtualPanelRequestTypeNode.toXmlNode(requestContentDocument));
    
    //for(var index in affirmationObjects) ////// Changed for Mac Safari Support
    for(var index=0;index<affirmationObjects.length;index++) 	
    {
        var affirmationObject = affirmationObjects[index];
        requestContentDocument.addElementToParent(varRequestbodyNode, affirmationObject.toXmlNode(requestContentDocument));
    }
    
    // Add the Flash Data to the Ajax call.
    addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue);
    
    sendAJAXVirtualPanelObjects("../AjaxDataPage.aspx", requestContentDocument, btnSave, cultureID, brandID, errorMessageHandler, affirmationXMLNodesHandler, requestTypeID, movie, agData, inData, bhData, inValue);	
}
function HandleAJAXVirtualPanelSession(cultureID, brandID,sessionState)
{
    //debugger;
    var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
    var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_HandleVirtualPanelSession");
    requestContentDocument.addDocumentElement(obDocumentElement);
    var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
    requestContentDocument.addElementToRoot(varRequestbodyNode);

    // Add the Culture ID
    var varCultureIDTypeNode = new UPSAjaxObject.GetCultureID();
    varCultureIDTypeNode.setCultureID(cultureID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varCultureIDTypeNode.toXmlNode(requestContentDocument));

    // Add the Brand ID
    var varBrandIDTypeNode = new UPSAjaxObject.GetBrandID();
    varBrandIDTypeNode.setBrandID(brandID);
    requestContentDocument.addElementToParent(varRequestbodyNode, varBrandIDTypeNode.toXmlNode(requestContentDocument));
    
     //SessionState Node
    var sessionStateNode=requestContentDocument.createElementNode("SessionState","");
    requestContentDocument.addAttributeToNode(sessionStateNode, "id", sessionState );
    requestContentDocument.addElementToParent(varRequestbodyNode,sessionStateNode);
    
    sendAJAXVirtualPanelSession("../AjaxDataPage.aspx", requestContentDocument, cultureID, brandID);	
}

function sendAJAXVirtualPanelSession(strPage, obXmlContent, cultureID, brandID,sessionState)
{
	var reqTransport = g_oAjaxEngine.getXmlHTTPTransport();
	var reqObject = new UPSAjaxObject.AjaxRequest();
	reqObject.setRequestTransport(reqTransport);
	reqObject.setRequestTarget(strPage);
	reqObject.setTypePOST();
	reqObject.addRequestContent(obXmlContent.getDocument());
	reqObject.openRequest(true);
	reqTransport.onreadystatechange=function()
	{
		if (reqTransport.readyState==4)
		{
		    var ajaxResponse = new UPSAjaxObject.AjaxResponse();
			ajaxResponse.parseXmlResponse(reqTransport.responseXML);			
	        var oResponseBody = ajaxResponse.getResponseBody();
            var statusNode = oResponseBody.selectSingleNode("Status");
            if(statusNode!=null)
            {
                var redirectUrl=statusNode.selectSingleNode("Redirect");
		        var url =redirectUrl.attributes.getNamedItem("url").value;
		        if(url!=null && url!="")
		        {
		            window.location=URLDecode(url);
		         }
             }
		}
	}
	reqObject.sendRequest(reqTransport.responseXML);
}

function logMessageAsError(msg, type)
{
	//debugger;
	var requestContentDocument = UPSXmlEngine.prototype.createXmlDocument("xml", "");
	var obDocumentElement = requestContentDocument.createAjaxRequestNode("STM_LogJavascriptException");
	requestContentDocument.addDocumentElement(obDocumentElement);
	var varRequestbodyNode = requestContentDocument.createElementNode("requestBody","");
	requestContentDocument.addElementToRoot(varRequestbodyNode);

	var msgDataNode=requestContentDocument.createElementNode("msg", "" );
	requestContentDocument.addAttributeToNode(msgDataNode, "data", msg);
	requestContentDocument.addElementToParent(varRequestbodyNode,msgDataNode);
	
	var typeDataNode=requestContentDocument.createElementNode("type", "" );
	requestContentDocument.addAttributeToNode(typeDataNode, "id", type);
	requestContentDocument.addElementToParent(varRequestbodyNode,typeDataNode);

	var reqTransport = g_oAjaxEngine.getXmlHTTPTransport();
	var reqObject = new UPSAjaxObject.AjaxRequest();
	reqObject.setRequestTransport(reqTransport);
	reqObject.setRequestTarget("../AjaxDataPage.aspx");
	reqObject.setTypePOST();
	reqObject.addRequestContent(requestContentDocument.getDocument());
	reqObject.openRequest(true);
	reqTransport.onreadystatechange=function()
	{
		if (reqTransport.readyState==4)
		{// Do nothing as we do not need to do anything. We can even remove this. It is just kept in case we need to add processing in the future.
		}
		
	}
	reqObject.sendRequest(reqTransport.responseXML);
}


function addInviteData(requestContentDocument, varRequestbodyNode, inviteData, jitOrder)
{
    var inviteDataNode=requestContentDocument.createElementNode("invite", "" );
    requestContentDocument.addAttributeToNode(inviteDataNode, "data", inviteData );
    requestContentDocument.addElementToParent(varRequestbodyNode,inviteDataNode);
    var jitOrderDataNode=requestContentDocument.createElementNode("jitOrder", "");
    requestContentDocument.addAttributeToNode(jitOrderDataNode, "data", jitOrder );
    requestContentDocument.addElementToParent(varRequestbodyNode,jitOrderDataNode);
}

function addExternalInviteData(requestContentDocument, varRequestbodyNode, inviteData, inviteType, initiateID, responseData)
{
    var inviteDataNode=requestContentDocument.createElementNode("InviteData", "" );
    requestContentDocument.addAttributeToNode(inviteDataNode, "data", inviteData );
    requestContentDocument.addElementToParent(varRequestbodyNode,inviteDataNode);
    var inviteTypeDataNode=requestContentDocument.createElementNode("InviteType", "");
    requestContentDocument.addAttributeToNode(inviteTypeDataNode, "data", inviteType );
    requestContentDocument.addElementToParent(varRequestbodyNode,inviteTypeDataNode);
    var initiateIDDataNode=requestContentDocument.createElementNode("InitiateID", "");
    requestContentDocument.addAttributeToNode(initiateIDDataNode, "data", initiateID );
    requestContentDocument.addElementToParent(varRequestbodyNode,initiateIDDataNode);
    var responseDataNode=requestContentDocument.createElementNode("Response", "");
    requestContentDocument.addAttributeToNode(responseDataNode, "data", responseData );
    requestContentDocument.addElementToParent(varRequestbodyNode,responseDataNode);
}

function addAJAXFlashData(requestContentDocument, varRequestbodyNode, agData, inData, bhData, inValue)
{
    var flashAGDataNode=requestContentDocument.createElementNode("agData", "" );
    requestContentDocument.addAttributeToNode(flashAGDataNode, "id", agData );
    requestContentDocument.addElementToParent(varRequestbodyNode,flashAGDataNode);
    var flashRelDataNode=requestContentDocument.createElementNode("inData", "");
    requestContentDocument.addAttributeToNode(flashRelDataNode, "id", inData  );
    requestContentDocument.addElementToParent(varRequestbodyNode,flashRelDataNode);
    var flashRelDetailsNode=requestContentDocument.createElementNode("inDetails", "" );
    requestContentDocument.addAttributeToNode(flashRelDetailsNode, "data", bhData );
    requestContentDocument.addElementToParent(varRequestbodyNode,flashRelDetailsNode);
    var flashRelValueNode=requestContentDocument.createElementNode("inValue", "" );
    requestContentDocument.addAttributeToNode(flashRelValueNode, "data", inValue );
    requestContentDocument.addElementToParent(varRequestbodyNode,flashRelValueNode);
}

function setAJAXFlashData(movie, statusNode)
{
    if(movie != "")
	{// Since we have a movie name, lets see if we get the data for the movie
	    var agDataNode = statusNode.selectSingleNode("Agdata");
		if(agDataNode != null)
		{
		    var agData=agDataNode.attributes.getNamedItem("data").value;
		    if(agData!=null && agData!="")
		    {
		        setFlashData(movie, FLASH_DATA_AG_KEY, agData);
		    }
		}    
	    var inDataNode = statusNode.selectSingleNode("Indata");
		if(inDataNode != null)
		{
		    var inData=inDataNode.attributes.getNamedItem("data").value;
		    if(inData!=null)
		    {// we allow the setting of an empty string, so that it can clear out data, if the server decides that it is bad.
		        setFlashData(movie, FLASH_DATA_INET_KEY, inData);
		    }
		}    
	    var inValueNode = statusNode.selectSingleNode("Invalue");
		if(inValueNode != null)
		{
		    var inValue=inValueNode.attributes.getNamedItem("data").value;
		    if(inValue!=null)
		    {// we allow the setting of an empty string, so that it can clear out data, if the server decides that it is bad.
		        setFlashData(movie, FLASH_DATA_IN_KEY, inValue);
		    }
		}    
	}
}

function URLEncode(plaintext)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}

function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
}
// HtmlDecode http://lab.msdn.microsoft.com/annotations/htmldecode.js
//   client side version of the useful Server.HtmlDecode method
//   takes one string (encoded) and returns another (decoded)
function HtmlDecode(s)
{
      var out = "";
      if (s==null) return;
      var l = s.length;

      for (var i=0; i<l; i++)
      {
            var ch = s.charAt(i);
            if (ch == '&')
            {
                var semicolonIndex = s.indexOf(';', i+1);
				if (semicolonIndex > 0)
				{
					var entity = s.substring(i + 1, semicolonIndex);
                    if (entity.length > 1 && entity.charAt(0) == '#')
                    {
						if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
						{
							ch = String.fromCharCode(eval('0'+entity.substring(1)));
						}
						else
						{
							 ch = String.fromCharCode(eval(entity.substring(1)));
						}
                }
                else
				{
					switch (entity)
                    {
						case 'quot': ch = String.fromCharCode(0x0022); break;
                        case 'amp': ch = String.fromCharCode(0x0026); break;
                        case 'lt': ch = String.fromCharCode(0x003c); break;
                        case 'gt': ch = String.fromCharCode(0x003e); break;
                        case 'nbsp': ch = String.fromCharCode(0x00a0); break;
                        case 'iexcl': ch = String.fromCharCode(0x00a1); break;
                        case 'cent': ch = String.fromCharCode(0x00a2); break;
                        case 'pound': ch = String.fromCharCode(0x00a3); break;
                        case 'curren': ch = String.fromCharCode(0x00a4); break;
                        case 'yen': ch = String.fromCharCode(0x00a5); break;
                        case 'brvbar': ch = String.fromCharCode(0x00a6); break;
                        case 'sect': ch = String.fromCharCode(0x00a7); break;
                        case 'uml': ch = String.fromCharCode(0x00a8); break;
						case 'copy': ch = String.fromCharCode(0x00a9); break;
						case 'ordf': ch = String.fromCharCode(0x00aa); break;
						case 'laquo': ch = String.fromCharCode(0x00ab); break;
						case 'not': ch = String.fromCharCode(0x00ac); break;
						case 'shy': ch = String.fromCharCode(0x00ad); break;
						case 'reg': ch = String.fromCharCode(0x00ae); break;
						case 'macr': ch = String.fromCharCode(0x00af); break;
						case 'deg': ch = String.fromCharCode(0x00b0); break;
						case 'plusmn': ch = String.fromCharCode(0x00b1); break;
						case 'sup2': ch = String.fromCharCode(0x00b2); break;
						case 'sup3': ch = String.fromCharCode(0x00b3); break;
						case 'acute': ch = String.fromCharCode(0x00b4); break;
						case 'micro': ch = String.fromCharCode(0x00b5); break;
						case 'para': ch = String.fromCharCode(0x00b6); break;
						case 'middot': ch = String.fromCharCode(0x00b7); break;
						case 'cedil': ch = String.fromCharCode(0x00b8); break;
						case 'sup1': ch = String.fromCharCode(0x00b9); break;
						case 'ordm': ch = String.fromCharCode(0x00ba); break;
						case 'raquo': ch = String.fromCharCode(0x00bb); break;
						case 'frac14': ch = String.fromCharCode(0x00bc); break;
						case 'frac12': ch = String.fromCharCode(0x00bd); break;
						case 'frac34': ch = String.fromCharCode(0x00be); break;
						case 'iquest': ch = String.fromCharCode(0x00bf); break;
						case 'Agrave': ch = String.fromCharCode(0x00c0); break;
						case 'Aacute': ch = String.fromCharCode(0x00c1); break;
						case 'Acirc': ch = String.fromCharCode(0x00c2); break;
						case 'Atilde': ch = String.fromCharCode(0x00c3); break;
						case 'Auml': ch = String.fromCharCode(0x00c4); break;
						case 'Aring': ch = String.fromCharCode(0x00c5); break;
						case 'AElig': ch = String.fromCharCode(0x00c6); break;
						case 'Ccedil': ch = String.fromCharCode(0x00c7); break;
						case 'Egrave': ch = String.fromCharCode(0x00c8); break;
						case 'Eacute': ch = String.fromCharCode(0x00c9); break;
						case 'Ecirc': ch = String.fromCharCode(0x00ca); break;
						case 'Euml': ch = String.fromCharCode(0x00cb); break;
						case 'Igrave': ch = String.fromCharCode(0x00cc); break;
						case 'Iacute': ch = String.fromCharCode(0x00cd); break;
						case 'Icirc': ch = String.fromCharCode(0x00ce ); break;
						case 'Iuml': ch = String.fromCharCode(0x00cf); break;
						case 'ETH': ch = String.fromCharCode(0x00d0); break;
						case 'Ntilde': ch = String.fromCharCode(0x00d1); break;
						case 'Ograve': ch = String.fromCharCode(0x00d2); break;
						case 'Oacute': ch = String.fromCharCode(0x00d3); break;
    					case 'Ocirc': ch = String.fromCharCode(0x00d4); break;
						case 'Otilde': ch = String.fromCharCode(0x00d5); break;
						case 'Ouml': ch = String.fromCharCode(0x00d6); break;
						case 'times': ch = String.fromCharCode(0x00d7); break;
						case 'Oslash': ch = String.fromCharCode(0x00d8); break;
						case 'Ugrave': ch = String.fromCharCode(0x00d9); break;
						case 'Uacute': ch = String.fromCharCode(0x00da); break;
						case 'Ucirc': ch = String.fromCharCode(0x00db); break;
						case 'Uuml': ch = String.fromCharCode(0x00dc); break;
						case 'Yacute': ch = String.fromCharCode(0x00dd); break;
						case 'THORN': ch = String.fromCharCode(0x00de); break;
						case 'szlig': ch = String.fromCharCode(0x00df); break;
						case 'agrave': ch = String.fromCharCode(0x00e0); break;
						case 'aacute': ch = String.fromCharCode(0x00e1); break;
						case 'acirc': ch = String.fromCharCode(0x00e2); break;
						case 'atilde': ch = String.fromCharCode(0x00e3); break;
						case 'auml': ch = String.fromCharCode(0x00e4); break;
						case 'aring': ch = String.fromCharCode(0x00e5); break;
						case 'aelig': ch = String.fromCharCode(0x00e6); break;
						case 'ccedil': ch = String.fromCharCode(0x00e7); break;
						case 'egrave': ch = String.fromCharCode(0x00e8); break;
						case 'eacute': ch = String.fromCharCode(0x00e9); break;
						case 'ecirc': ch = String.fromCharCode(0x00ea); break;
						case 'euml': ch = String.fromCharCode(0x00eb); break;
						case 'igrave': ch = String.fromCharCode(0x00ec); break;
						case 'iacute': ch = String.fromCharCode(0x00ed); break;
						case 'icirc': ch = String.fromCharCode(0x00ee); break;
						case 'iuml': ch = String.fromCharCode(0x00ef); break;
						case 'eth': ch = String.fromCharCode(0x00f0); break;
						case 'ntilde': ch = String.fromCharCode(0x00f1); break;
						case 'ograve': ch = String.fromCharCode(0x00f2); break;
						case 'oacute': ch = String.fromCharCode(0x00f3); break;
						case 'ocirc': ch = String.fromCharCode(0x00f4); break;
						case 'otilde': ch = String.fromCharCode(0x00f5); break;
						case 'ouml': ch = String.fromCharCode(0x00f6); break;
						case 'divide': ch = String.fromCharCode(0x00f7); break;
						case 'oslash': ch = String.fromCharCode(0x00f8); break;
						case 'ugrave': ch = String.fromCharCode(0x00f9); break;
						case 'uacute': ch = String.fromCharCode(0x00fa); break;
						case 'ucirc': ch = String.fromCharCode(0x00fb); break;
						case 'uuml': ch = String.fromCharCode(0x00fc); break;
						case 'yacute': ch = String.fromCharCode(0x00fd); break;
						case 'thorn': ch = String.fromCharCode(0x00fe); break;
						case 'yuml': ch = String.fromCharCode(0x00ff); break;
						case 'OElig': ch = String.fromCharCode(0x0152); break;
						case 'oelig': ch = String.fromCharCode(0x0153); break;
						case 'Scaron': ch = String.fromCharCode(0x0160); break;
						case 'scaron': ch = String.fromCharCode(0x0161); break;
						case 'Yuml': ch = String.fromCharCode(0x0178); break;
						case 'fnof': ch = String.fromCharCode(0x0192); break;
						case 'circ': ch = String.fromCharCode(0x02c6); break;
						case 'tilde': ch = String.fromCharCode(0x02dc); break;
						case 'Alpha': ch = String.fromCharCode(0x0391); break;
						case 'Beta': ch = String.fromCharCode(0x0392); break;
						case 'Gamma': ch = String.fromCharCode(0x0393); break;
						case 'Delta': ch = String.fromCharCode(0x0394); break;
						case 'Epsilon': ch = String.fromCharCode(0x0395); break;
						case 'Zeta': ch = String.fromCharCode(0x0396); break;
						case 'Eta': ch = String.fromCharCode(0x0397); break;
						case 'Theta': ch = String.fromCharCode(0x0398); break;
						case 'Iota': ch = String.fromCharCode(0x0399); break;
						case 'Kappa': ch = String.fromCharCode(0x039a); break;
						case 'Lambda': ch = String.fromCharCode(0x039b); break;
						case 'Mu': ch = String.fromCharCode(0x039c); break;
						case 'Nu': ch = String.fromCharCode(0x039d); break;
						case 'Xi': ch = String.fromCharCode(0x039e); break;
						case 'Omicron': ch = String.fromCharCode(0x039f); break;
						case 'Pi': ch = String.fromCharCode(0x03a0); break;
						case ' Rho ': ch = String.fromCharCode(0x03a1); break;
						case 'Sigma': ch = String.fromCharCode(0x03a3); break;
						case 'Tau': ch = String.fromCharCode(0x03a4); break;
						case 'Upsilon': ch = String.fromCharCode(0x03a5); break;
						case 'Phi': ch = String.fromCharCode(0x03a6); break;
						case 'Chi': ch = String.fromCharCode(0x03a7); break;
						case 'Psi': ch = String.fromCharCode(0x03a8); break;
						case 'Omega': ch = String.fromCharCode(0x03a9); break;
						case 'alpha': ch = String.fromCharCode(0x03b1); break;
						case 'beta': ch = String.fromCharCode(0x03b2); break;
						case 'gamma': ch = String.fromCharCode(0x03b3); break;
						case 'delta': ch = String.fromCharCode(0x03b4); break;
						case 'epsilon': ch = String.fromCharCode(0x03b5); break;
						case 'zeta': ch = String.fromCharCode(0x03b6); break;
						case 'eta': ch = String.fromCharCode(0x03b7); break;
						case 'theta': ch = String.fromCharCode(0x03b8); break;
						case 'iota': ch = String.fromCharCode(0x03b9); break;
						case 'kappa': ch = String.fromCharCode(0x03ba); break;
						case 'lambda': ch = String.fromCharCode(0x03bb); break;
						case 'mu': ch = String.fromCharCode(0x03bc); break;
						case 'nu': ch = String.fromCharCode(0x03bd); break;
						case 'xi': ch = String.fromCharCode(0x03be); break;
						case 'omicron': ch = String.fromCharCode(0x03bf); break;
						case 'pi': ch = String.fromCharCode(0x03c0); break;
						case 'rho': ch = String.fromCharCode(0x03c1); break;
						case 'sigmaf': ch = String.fromCharCode(0x03c2); break;
						case 'sigma': ch = String.fromCharCode(0x03c3); break;
						case 'tau': ch = String.fromCharCode(0x03c4); break;
						case 'upsilon': ch = String.fromCharCode(0x03c5); break;
						case 'phi': ch = String.fromCharCode(0x03c6); break;
						case 'chi': ch = String.fromCharCode(0x03c7); break;
						case 'psi': ch = String.fromCharCode(0x03c8); break;
						case 'omega': ch = String.fromCharCode(0x03c9); break;
						case 'thetasym': ch = String.fromCharCode(0x03d1); break;
						case 'upsih': ch = String.fromCharCode(0x03d2); break;
						case 'piv': ch = String.fromCharCode(0x03d6); break;
						case 'ensp': ch = String.fromCharCode(0x2002); break;
						case 'emsp': ch = String.fromCharCode(0x2003); break;
						case 'thinsp': ch = String.fromCharCode(0x2009); break;
						case 'zwnj': ch = String.fromCharCode(0x200c); break;
						case 'zwj': ch = String.fromCharCode(0x200d); break;
						case 'lrm': ch = String.fromCharCode(0x200e); break;
						case 'rlm': ch = String.fromCharCode(0x200f); break;
						case 'ndash': ch = String.fromCharCode(0x2013); break;
						case 'mdash': ch = String.fromCharCode(0x2014); break;
						case 'lsquo': ch = String.fromCharCode(0x2018); break;
						case 'rsquo': ch = String.fromCharCode(0x2019); break;
						case 'sbquo': ch = String.fromCharCode(0x201a); break;
						case 'ldquo': ch = String.fromCharCode(0x201c); break;
						case 'rdquo': ch = String.fromCharCode(0x201d); break;
						case 'bdquo': ch = String.fromCharCode(0x201e); break;
						case 'dagger': ch = String.fromCharCode(0x2020); break;
						case 'Dagger': ch = String.fromCharCode(0x2021); break;
						case 'bull': ch = String.fromCharCode(0x2022); break;
						case 'hellip': ch = String.fromCharCode(0x2026); break;
						case 'permil': ch = String.fromCharCode(0x2030); break;
						case 'prime': ch = String.fromCharCode(0x2032); break;
						case 'Prime': ch = String.fromCharCode(0x2033); break;
						case 'lsaquo': ch = String.fromCharCode(0x2039); break;
						case 'rsaquo': ch = String.fromCharCode(0x203a); break;
						case 'oline': ch = String.fromCharCode(0x203e); break;
						case 'frasl': ch = String.fromCharCode(0x2044); break;
						case 'euro': ch = String.fromCharCode(0x20ac); break;
						case 'image': ch = String.fromCharCode(0x2111); break;
						case 'weierp': ch = String.fromCharCode(0x2118); break;
						case 'real': ch = String.fromCharCode(0x211c); break;
						case 'trade': ch = String.fromCharCode(0x2122); break;
						case 'alefsym': ch = String.fromCharCode(0x2135); break;
						case 'larr': ch = String.fromCharCode(0x2190); break;
						case 'uarr': ch = String.fromCharCode(0x2191); break;
						case 'rarr': ch = String.fromCharCode(0x2192); break;
						case 'darr': ch = String.fromCharCode(0x2193); break;
						case 'harr': ch = String.fromCharCode(0x2194); break;
						case 'crarr': ch = String.fromCharCode(0x21b5); break;
						case 'lArr': ch = String.fromCharCode(0x21d0); break;
						case 'uArr': ch = String.fromCharCode(0x21d1); break;
						case 'rArr': ch = String.fromCharCode(0x21d2); break;
						case 'dArr': ch = String.fromCharCode(0x21d3); break;
						case 'hArr': ch = String.fromCharCode(0x21d4); break;
						case 'forall': ch = String.fromCharCode(0x2200); break;
						case 'part': ch = String.fromCharCode(0x2202); break;
						case 'exist': ch = String.fromCharCode(0x2203); break;
						case 'empty': ch = String.fromCharCode(0x2205); break;
						case 'nabla': ch = String.fromCharCode(0x2207); break;
						case 'isin': ch = String.fromCharCode(0x2208); break;
						case 'notin': ch = String.fromCharCode(0x2209); break;
						case 'ni': ch = String.fromCharCode(0x220b); break;
						case 'prod': ch = String.fromCharCode(0x220f); break;
						case 'sum': ch = String.fromCharCode(0x2211); break;
						case 'minus': ch = String.fromCharCode(0x2212); break;
						case 'lowast': ch = String.fromCharCode(0x2217); break;
						case 'radic': ch = String.fromCharCode(0x221a); break;
						case 'prop': ch = String.fromCharCode(0x221d); break;
						case 'infin': ch = String.fromCharCode(0x221e); break;
						case 'ang': ch = String.fromCharCode(0x2220); break;
						case 'and': ch = String.fromCharCode(0x2227); break;
						case 'or': ch = String.fromCharCode(0x2228); break;
						case 'cap': ch = String.fromCharCode(0x2229); break;
						case 'cup': ch = String.fromCharCode(0x222a); break;
						case 'int': ch = String.fromCharCode(0x222b); break;
						case 'there4': ch = String.fromCharCode(0x2234); break;
						case 'sim': ch = String.fromCharCode(0x223c); break;
						case 'cong': ch = String.fromCharCode(0x2245); break;
						case 'asymp': ch = String.fromCharCode(0x2248); break;
						case 'ne': ch = String.fromCharCode(0x2260); break;
						case 'equiv': ch = String.fromCharCode(0x2261); break;
						case 'le': ch = String.fromCharCode(0x2264); break;
						case 'ge': ch = String.fromCharCode(0x2265); break;
						case 'sub': ch = String.fromCharCode(0x2282); break;
						case 'sup': ch = String.fromCharCode(0x2283); break;
						case 'nsub': ch = String.fromCharCode(0x2284); break;
						case 'sube': ch = String.fromCharCode(0x2286); break;
						case 'supe': ch = String.fromCharCode(0x2287); break;
						case 'oplus': ch = String.fromCharCode(0x2295); break;
						case 'otimes': ch = String.fromCharCode(0x2297); break;
						case 'perp': ch = String.fromCharCode(0x22a5); break;
						case 'sdot': ch = String.fromCharCode(0x22c5); break;
						case 'lceil': ch = String.fromCharCode(0x2308); break;
						case 'rceil': ch = String.fromCharCode(0x2309); break;
						case 'lfloor': ch = String.fromCharCode(0x230a); break;
						case 'rfloor': ch = String.fromCharCode(0x230b); break;
						case 'lang': ch = String.fromCharCode(0x2329); break;
						case 'rang': ch = String.fromCharCode(0x232a); break;
						case 'loz': ch = String.fromCharCode(0x25ca); break;
						case 'spades': ch = String.fromCharCode(0x2660); break;
						case 'clubs': ch = String.fromCharCode(0x2663); break;
						case 'hearts': ch = String.fromCharCode(0x2665); break;
						case 'diams': ch = String.fromCharCode(0x2666); break;
						default: ch = ''; break;

                    }
		}
		i = semicolonIndex;
		}
	}
	out += ch;
}
return out;
}
<!--
// please keep these lines on when you copy the source
// made by: Nicolas - http://www.javascript-page.com

var timerID = 0;
var tStart  = null;
var tMessage="Your Session is about to expire. Please click ok to continue with your session.";//Have a default message if no translations are provided.
var tAlertTimeout=900;//The default time in seconds to wait before displaying the alert to indicate timeout.
var tSessionTimeout=1200;//The default in seconds for Session timeout
var tCultureID;
var tBrandID;

function UpdateTimer() {
   if(timerID)
   {
      clearTimeout(timerID);
      clockID  = 0;
   }

    var   tDate = new Date();
    var   tDiff = GetCurrentTimeDiff(tDate);
    tDate.setTime(tDiff);
    
   if(tDiff >=tAlertTimeout * 1000)
   {
       var endSession=true; 
       //alert(tDiff/1000 + " seconds elapsed");
       if(confirm(tMessage))
       {
           //Check whether we reached Session Timeout 
           tDate=new Date(); 
           tDiff= GetCurrentTimeDiff(tDate);
           tDate.setTime(tDiff);
           //alert(tDiff/1000 + " actual seconds elapsed"); 
           if(tDiff<=tSessionTimeout * 1000)
           {
                //Reset the tStart to current time as we are keeping the session alive.
                endSession=false;
                tStart=new Date();
                //Send Ajax message to keep Session alive.
                //alert("Ajax Message sent to keep session alive.");
                HandleAJAXVirtualPanelSession(tCultureID,tBrandID,1);
           } 
       }
       if(endSession)
       {
              //Send Ajax message to redirect to Session End Page.
              //alert("Ajax Message sent to Session End page");
              HandleAJAXVirtualPanelSession(tCultureID,tBrandID,0);
       }
   }
   timerID = setTimeout("UpdateTimer()", 30000);//Update timer every 30 seconds (or 30000 milliseconds)
}
function GetCurrentTimeDiff(tDate)
{
    if(!tStart)
      tStart   = new Date();
    var   tDiff = tDate.getTime() - tStart.getTime();
    return tDiff;      
}
function Start(message,alertTimeout,sessionTimeout,cultureID,brandID) {
   tStart   = new Date();
   tMessage=message;
   tAlertTimeout=alertTimeout;
   tSessionTimeout=sessionTimeout;
   tCultureID=cultureID;
   tBrandID=brandID;
   timerID  = setTimeout("UpdateTimer()", 30000);//Update timer every 30 seconds (or 30000 milliseconds)
}

function Stop() {
   if(timerID) {
      clearTimeout(timerID);
      timerID  = 0;
   }
   tStart = null;
}

function Reset() {
   tStart = null;
}
// JavaScript helper required to detect Flash Player PlugIn version information
function JSGetSwfVer(i){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			descArray = flashDescription.split(" ");
			tempArrayMajor = descArray[2].split(".");
			versionMajor = tempArrayMajor[0];
			versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split("r");
			} else {
				tempArrayMinor = descArray[4].split("r");
			}
      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      	} else {
			flashVer = -1;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	// Can't detect in all other cases
	else {
		
		flashVer = -1;
	}
	return flashVer;
} 
// If called with no parameters this function returns a floating point value 
// which should be the version of the Flash Player or 0.0 
// ex: Flash Player 7r14 returns 7.14
// If called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) 
{
	// Detect Client Browser type
	var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);
   	// loop backwards through the versions until we find the newest version	
	for (i=25;i>0;i--) {	
		if (isIE && isWin && !isOpera) {
			versionStr = VBGetSwfVer(i);
		} else {
			versionStr = JSGetSwfVer(i);		
		}
		if (versionStr == -1 ) { 
			return false;
		} else if (versionStr != 0) {
			if(isIE && isWin && !isOpera) {
				tempArray         = versionStr.split(" ");
				tempString        = tempArray[1];
				versionArray      = tempString .split(",");				
			} else {
				versionArray      = versionStr.split(".");
			}
			versionMajor      = versionArray[0];
			versionMinor      = versionArray[1];
			versionRevision   = versionArray[2];
			
			versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24
			versionNum        = parseFloat(versionString);
        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
			if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {
				return true;
			} else {
				return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );	
			}
		}
	}	
	return (reqVer ? false : 0.0);
}

function thisMovie(movieName) 
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  // If all else fails we try to get the element by ID.
  return document.getElementById(movieName);

}

function setFlashData(movieName, key, data)
{
	var movie = thisMovie(movieName);
	if(movie != null && (typeof(movie) == "object" || typeof(movie) == "function"))
	{
		if(movie.SetData)
		{
    		 movie.SetData(key,data);
        }
	}
}
function getFlashData(movieName, key)
{
	var movie = thisMovie(movieName);
	var data = null;
	if(movie != null && (typeof(movie) == "object" || typeof(movie) == "function"))
	{
		if(movie.GetData)
		{
		    data = movie.GetData(key);
		}
	}
	if(data  == null || typeof(data) == "undefined")
	{
		return "";
	}
	else
	{
		return data;
	}
}

function getCookie(cookieName)
{
    try
    {
        if (document.cookie.length>0)
        {
            var cookieStart=document.cookie.indexOf(cookieName + "=");
            if (cookieStart!=-1)
            { 
                cookieStart=cookieStart + cookieName.length+1; 
                var cookieEnd=document.cookie.indexOf(";",cookieStart);
                if (cookieEnd==-1) cookieEnd=document.cookie.length;
                var cookieValue = unescape(document.cookie.substring(cookieStart,cookieEnd));
                if(cookieValue == null) cookieValue = "";
                return cookieValue;
            } 
        }
    }
    catch(e)
    {}
    return "";
}

// Simple BareBones Http GET using XMLHttpRequest
// Will return the http response as a string by calling supplied method

// Treat as object
// and not singleton so that
// all responses can run simultaneously. 
// Caller is responsible for newing up their own private HttpGet object, and must manage single threading on that instance
function HttpRequest()
{
    this.doRequest = 
    
    function(type, url, data, responseCallback)
     {
        var httpRequest = g_oAjaxEngine.getXmlHTTPTransport();
        
        // Declare a new response method that will in
        // turn call a callback function with the data as a param
        var httpResponse = function()
        {
            // Check for complete
            if (httpRequest.readyState != 4) 
                return;
        
            responseCallback(httpRequest.responseText);
        }
        httpRequest.onreadystatechange = httpResponse;
        
        if ((httpRequest.readyState != 0) && 
                (httpRequest.readyState != 4))
        {
            // Should not get here because
            // request/responses are full closures and should be running 
            // independently from one another
            responseCallback("Ready state error: Attempt to service multiple responses from single request");
            return false;
        }
        // we are either done with last one
        // or ready for new one so no problem
        // Send the request
        httpRequest.open(type, url, true);
        
        httpRequest.send(data);
            
        return true;
    }
}

//-->
// end ajax methods
// JScript File
