        // *******************************************************************************************************
        //
        // Welcome to the Vision Public AJAX / Javascript API
        //
        // This file is provided as is - Evolve Relationship Management accept no liability for any damage or loss
        // of service resulting as using this or any of the Vision Application / XML / AJAX API files.
        //
        // If you are more confident you may want to edit the _Callback functions to do alternative things with the
        // returned XML.
        // 
        // Callback functions:
        // GetCampaignList_Callback - Called when campaign list has been retrieved
        // GetSurvey_Callback - Called when a survey has been retrieved
        //
        // Copyright Evolve Relationship Management 2007
        // 
        // *******************************************************************************************************
        
        // These variables need to be amended as they are client specific
        var VISION_USERNAME = "mstannard";     // Your vision username
        var VISION_CLIENT_ID = "27";        // Your vision client id
        var VISION_READ_PROXY = "http://vision.e-rm.org/XML/VisionReadProxy.asp?";  // The address of the AJAX Non XML Proxy
        var VISION_POST_PROXY = "http://vision.e-rm.org/XML/VisionPostProxy.asp?";  // The address of the AJAX XML Proxy
        var LOCAL_BASE = "http://vision.e-rm.org/" // The local host containing the XSL stylesheets
        var VISION_TOKEN = "";  // If you are loading a campaign directly then the token
        var VISION_CAMPAIGN_ID = ""; // If you are loading a campaign directly then the ID
        
        
        // You should not need to edit anything from below this point
        var g_xmlhttp;
        
        
        // *******************************************************************************************************
        //
        // Function: GetHTTPRequest
        // 
        // Arguments: None
        //         
        // Description:
        // This function will return an XMLHTTP object using either the Microsoft libraries, or HTTPRequest 
        // depending upon what is supported by the client browser.
        //                 
        // *******************************************************************************************************
        function GetHttpRequest()
        {
	        var xmlhttp;

	        try
	        {
		        xmlhttp = new XMLHttpRequest();
	        }
	        catch (e)
	        {
		        try 
		        {
	  		        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		        }
		        catch (e)
		        {
			        try
			        {
				        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			        }
			        catch (e)
			        {
				        alert("Your web browser does not support AJAX");
			        }
		        }
	        }

	        return(xmlhttp);
        }
        // End AJAX
        
        // *******************************************************************************************************
        //
        // Function: GetCampaignList
        // 
        // Arguments: None
        //         
        // Description:
        // Initiates an HTTP request to retrieve an XML listing of the Campaignms for the username and client ID
        // specified.
        //
        // When complete calls back the function GetCampaignList_Callback
        //                 
        // *******************************************************************************************************
        function GetCampaignList()
        {
            g_xmlhttp = GetHttpRequest();
            g_xmlhttp.onreadystatechange = GetCampaignList_Callback;
            g_xmlhttp.open("GET",VISION_READ_PROXY + "X_VISION_ACTION=XML/VisionGetCampaigns.asp&Username=" + VISION_USERNAME + "&ClientID=" + VISION_CLIENT_ID,true);
            g_xmlhttp.send(null);
        }
        
        // *******************************************************************************************************
        //
        // Function: GetSurvey
        // 
        // Arguments: None
        //         
        // Description:
        // Initiates an HTTP request to retrieve an XML listing of the Survey for the surveyID, clientID and token
        // specified.
        //
        // When complete calls back the function GetSurvey_Callback
        //                 
        // *******************************************************************************************************
        function GetSurvey()
        {
            var CampaignID;
            
            g_xmlhttp = GetHttpRequest();
            g_xmlhttp.onreadystatechange = GetSurvey_Callback;
            g_xmlhttp.open("GET",VISION_READ_PROXY + "X_VISION_ACTION=XML/VisionXML.asp&Token=" + VISION_TOKEN + "&ClientID=" + VISION_CLIENT_ID + "&CampaignID=" + VISION_CAMPAIGN_ID,true);
            g_xmlhttp.send(null);
            
        }
        
        // *******************************************************************************************************
        //
        // Function: GetSurvey_Callback
        // 
        // Arguments: None
        //         
        // Description:
        // Callback function. This retrieves the XML from the HTTP request and transforms it using the default.xsl
        // stylesheet ouputting the resulting data into a layer on the screen called "lyrResults"
        //                 
        // *******************************************************************************************************
        function GetSurvey_Callback()
        {
            var objLayer;
            var docXSL;
            var strHTML;
            var docXML;
            
            if (g_xmlhttp.readyState == 4)
            {
                // document.getElementById("lyrHeading").innerHTML = "Vision Results for Campaign ID=" + document.frCampaigns.keyCampaigns.options[document.frCampaigns.keyCampaigns.options.selectedIndex].value;
                docXML = g_xmlhttp.responseXML;
                
                objLayer = document.getElementById("lyrResults");
                
                if (objLayer)
                {
                    if(window.ActiveXObject && xsldocloaded)
                    {
                        var strHTML = docXML.transformNode(xsldoc);
                        objLayer.innerHTML = strHTML;
                    }
                    else if(xsldocloaded)
                    {
                      var processor = new XSLTProcessor();
                      processor.importStylesheet(xsldoc);
                      
                      while (objLayer.hasChildNodes())
                      {
                          objLayer.removeChild(objLayer.lastChild);
                      }
                      
                      var strHTML = processor.transformToFragment(docXML, xsldoc);
                      objLayer.appendChild(strHTML);
                    }
                    else
                    {
                      alert("Sorry, XSLT was not found - does your browser support it?");
                    }
                }
                else
                {
                    alert("Could not find content layer");
                }
                
            }
        }
        
        // *******************************************************************************************************
        //
        // Function: GetCampaignList_Callback
        // 
        // Arguments: None
        //         
        // Description:
        // Callback function. This retrieves the XML from the HTTPRequest and appends a list to a form option list
        // called keyCampaigns
        //                 
        // *******************************************************************************************************
        function GetCampaignList_Callback()
        {
            var docXML;
            var ndeCampaigns;
            var nlCampaigns;
            var ndeCampaign;
            
            var ndeItem;
            var iIndex;
            var iIndexCN;
            var iCampID;
            var strCampaignID;
            var strCampaignName;
            var strToken;
            
            var arrID;
            
            strCampaignID = "";
            strCampaignName = "";
            document.frCampaigns.keyCampaigns.options.length = 0;
            
            if (g_xmlhttp.readyState == 4)
            {
                docXML = g_xmlhttp.responseXML;
                
                ndeCampaigns = docXML.childNodes[0].childNodes[0];
                ndeCampaigns = ndeCampaigns.getElementsByTagName('campaigns');
                
                nlCampaigns = ndeCampaigns[0].childNodes;
                    
                for (iIndex = 0 ; iIndex < nlCampaigns.length; iIndex++)
                {
                    if (nlCampaigns[iIndex].nodeName == "campaign")
                    {
                        if (nlCampaigns[iIndex].attributes[0].name == "campaignid")
                        {
                          strCampaignID = nlCampaigns[iIndex].attributes[0].value;
                        }
                        
                        if (nlCampaigns[iIndex].attributes[1].name == "token")
                        {
                          strToken = nlCampaigns[iIndex].attributes[1].value;
                        }
                    
                        if (strCampaignID && strCampaignID != "")
                        {
                          for (iIndexCN=0 ; iIndexCN < nlCampaigns[iIndex].childNodes.length; iIndexCN++)
                          {
                            if (nlCampaigns[iIndex].childNodes[iIndexCN].nodeName == 'campaignname')
                            {
                              strCampaignName = nlCampaigns[iIndex].childNodes[iIndexCN].childNodes[0].nodeValue;
                              break;
                            }
                          }
                          
                          document.frCampaigns.keyCampaigns.options[document.frCampaigns.keyCampaigns.options.length] = new Option(strCampaignName,strCampaignID + "|" + strToken);
                          strCampaignName = "";
                          strCampaignID = "";
                        }
                    }
                }
            }
        }
        
        function SubmitVisionForm(FormToSubmit)
        {
          var docXML;
          var strXML;
          var docReceive;
          
          var ndeAttribute;
          var ndeRoot;
          var ndeSurvey;
          var ndeQuestion;
          var ndeData;
          var objPost;
          var iIndex;
          
          if (FormToSubmit)
          {
             
              
                  // Make the XML as as string, this doesn't do any of the weird escaping yet...
                  strXML = "<?xml version='1.0' encoding='UTF-8'?>\n\n<vision>\n";
                  strXML += "<apiversion>" + FormToSubmit.elements["X_VISION_API_VERSION"].value + "</apiversion>\n";
                  strXML += "<survey clientid=\"" + FormToSubmit.elements["X_VISION_CLIENT_ID"].value + "\" id=\"" + FormToSubmit.elements["X_VISION_CAMP_ID"].value + "\">\n";
                  
                  for (iIndex=0;iIndex<FormToSubmit.elements.length;iIndex++)
                  {
                    if (FormToSubmit.elements[iIndex].name.substring(0,3) == "id_")
                    {
                        // We only want to add these IF selected for checkbox and radios...
                        if (FormToSubmit.elements[iIndex].type == "checkbox" && FormToSubmit.elements[iIndex].checked)
                        {
                              strXML += "<question id=\"" + FormToSubmit.elements[iIndex].name.substring(3) + "\" value=\"" + FormToSubmit.elements[iIndex].value + "\" />\n"    
                        }
                        else if (FormToSubmit.elements[iIndex].type == "radio" && FormToSubmit.elements[iIndex].checked)
                        {
                              strXML += "<question id=\"" + FormToSubmit.elements[iIndex].name.substring(3) + "\" value=\"" + FormToSubmit.elements[iIndex].value + "\" />\n"    
                        }
                    }
                    else
                    {
                      strXML += "<nonquestion element=\"" + FormToSubmit.elements[iIndex].name + "\" value=\"" + FormToSubmit.elements[iIndex].value + "\" />\n"
                    }
                    
                  }
                  
                  strXML += "</survey>\n"
                  strXML += "</vision>\n"
             
                  
                   // The question now is can we submit this with XMLHTTPRequest!?
                  g_xmlhttp = GetHttpRequest();
                  g_xmlhttp.onreadystatechange = SubmitVisionForm_Callback;
                  g_xmlhttp.open("POST",VISION_POST_PROXY + "X_VISION_ACTION=XML/VisionXMLStore.asp",true);
                  //g_xmlhttp.open("POST","http://albert.crl.uk.com/XML/VisionXMLStore.asp",true);
                  g_xmlhttp.setRequestHeader("Content-Type", "text/xml")
                  g_xmlhttp.send(strXML);
                  
          }
        
        
        }
        
        function SubmitVisionForm_Callback()
        {
          var docXML;
          var objLayer;
          var strHTML;
          var strHeaderID;
          var ndeReturn;
          var nlData;
          var iIndex;
          var objRange;
          var objHTML;
          
          if (g_xmlhttp.readyState == 4)
          {
                // We want to update the layer with the HTML returned.
                docXML = g_xmlhttp.responseXML;
                
                if (docXML)
                {
                    objLayer = document.getElementById("lyrResults");
                    
                    if (!document.all)
                    {
                      objRange = document.createRange();
                      objRange.setStartBefore(objLayer);
                    }
                    
                    while (objLayer.hasChildNodes())
                    {
                        objLayer.removeChild(objLayer.lastChild);
                    }
                    
                    ndeReturn = docXML.childNodes[0];
                    ndeReturn = ndeReturn.getElementsByTagName('header');
                    nlData = ndeReturn[0].childNodes;
                    
                    for (iIndex=0;iIndex < nlData.length;iIndex++)
                    {
                      strHeaderID = nlData[iIndex].nodeValue;
                    }
                    
                    strHTML = "<b style='font-size:8pt;font-family:Verdana'>Thank you - Vision stored your response as '" + strHeaderID + "'</b>";
                    
                    if (!document.all)
                    {
                      objHTML = objRange.createContextualFragment(strHTML);
                      objLayer.appendChild(objHTML);
                    }
                    else
                    {
                      objLayer.innerHTML = strHTML;
                    }
                    
                }
           }
        }
        
        
        // *******************************************************************************************************
        //
        // This section loads the XSLT stylesheet
        //
        // *******************************************************************************************************
        // Immediately try to load the xsl file asynchronously
        var xsldocloaded = false;
        var xsldoc;

        if (window.XSLTProcessor)
        {
            // support Mozilla/Gecko based browsers
            xsldoc = document.implementation.createDocument("", "", null);
            xsldoc.addEventListener("load", onXslLoad, false);
            xsldoc.load(LOCAL_BASE + "XML/default.xsl");
        }
        else if(window.ActiveXObject)
        {
            // support Windows / ActiveX
            xsldoc = new ActiveXObject("Microsoft.XMLDOM");
            xsldoc.ondataavailable = onXslLoad;
            xsldoc.load(LOCAL_BASE + "XML/default.xsl");
        }
        else
        {
            alert ("Sorry, your browser does not support XSLT Processing");
        }
        
        function onXslLoad()
        {
            // flag that the xsl is loaded
            xsldocloaded = true;
        } 
        // End XSLT
       
