﻿// JScript File

// Javascript client posting functions //
var req;
var xmlDocument;
var xmlError;
var bUseIE=true;
var sResultText='';
		
function buildSoapEnvelopeHeader(functionName)
{
	var strEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
	strEnvelope += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
	strEnvelope += "<soap:Body>";
	strEnvelope += "<" + functionName + " xmlns=\"http://tempuri.org/\">";
	
	return strEnvelope;
}

function buildSoapEnvelopeFooter(functionName)
{
	var strEnvelope = "</" + functionName + ">";
	strEnvelope += "</soap:Body>";
	strEnvelope += "</soap:Envelope>";
	
	return strEnvelope;
}

function buildSoapParameter(name, value)
{
	return "<" + name + ">" + value + "</" + name + ">";
}

function doFunction(urlRoot, functionName, strEnvelope)
{
	document.body.style.cursor = "wait";
	try{
		req = new ActiveXObject("Microsoft.XMLHTTP");
		bUseIE=true;
	}
	catch(ex)
	{
	    try{
		    req = new XMLHttpRequest();
		    bUseIE=false;
		}
		catch(exo)
		{
		    req  = new ActiveXObject("Msxml2.XMLHTTP");
		    bUseIE=true;
		}
	}
	xmlDocument = null;
	xmlError = null;
	var furl = urlRoot + "ARSGlobal.asmx";
	if (req)
	{
		req.onreadystatechange = processReqChange;		
		req.open("POST", furl, false);
		req.setRequestHeader("Content-Type", "text/xml");
		req.setRequestHeader("SOAPAction", "http://tempuri.org/" + functionName);
		req.send(strEnvelope);		
		if(!bUseIE){
	        if (req.readyState == 4) 
            {
	            if (req.status == 200) {
		            xmlDocument = req.responseXML;
		            sResultText=req.responseText;
		        }
	            else
		            xmlError = req.responseXML;
            }
        }
		req = null;
	}

	document.body.style.cursor = "auto";
	
	if (xmlError)
	{
		var errorMessage = xmlError.selectSingleNode("//faultstring").text;
		if (suppressDoFunctionErrorMessage != 1)
		    alert("An error has occurred.\n\n" + errorMessage);
		
		return false;
	}
	else
		return true;
}

function processReqChange() 
{
	// only if req shows "complete"
	if (req.readyState == 4) 
	{
		// only if "OK"
		if (req.status == 200) {
			xmlDocument = req.responseXML;
			sResultText=req.responseText;
	    }
		else
			xmlError = req.responseXML;
	}
}
function ServiceListByZipCode(zipCode,SiteName)
{
    try
    {
        functionName = 'GetZipCodeServices';
        strEnvelope = buildSoapEnvelopeHeader(functionName);
        strEnvelope += buildSoapParameter('ZipCode', zipCode);
        strEnvelope += buildSoapParameter('SiteName', SiteName);
        strEnvelope += buildSoapEnvelopeFooter(functionName);
        doFunction(RootFolder, functionName, strEnvelope);    //RootFolder: is pushed to JS from Usercontrol
        var sResult = '';
        if(bUseIE){
            if ((xmlDocument != null) && (xmlDocument.selectSingleNode('//soap:Envelope/soap:Body/' + functionName + 'Response/' + functionName + 'Result') != null))
                sResult = xmlDocument.selectSingleNode('//soap:Envelope/soap:Body/' + functionName + 'Response/' + functionName + 'Result').text;
        }
        else{
            sResult=GetResultText(functionName);
        }
        return sResult;
    }
    catch (err)
    {
        return '';
    }
}
function checkIsServiceInZip(zipCode,SiteName,ServiceValue)
{
    try
    {
        functionName = 'IsServiceInZip';
        strEnvelope = buildSoapEnvelopeHeader(functionName);
        strEnvelope += buildSoapParameter('ZipCode', zipCode);
        strEnvelope += buildSoapParameter('SiteName', SiteName);
        strEnvelope += buildSoapParameter('ServiceValue', ServiceValue);
        strEnvelope += buildSoapEnvelopeFooter(functionName);
        doFunction(RootFolder, functionName, strEnvelope);    //RootFolder: is pushed to JS from Usercontrol
        var sResult = '';
        if(bUseIE){
            if ((xmlDocument != null) && (xmlDocument.selectSingleNode('//soap:Envelope/soap:Body/' + functionName + 'Response/' + functionName + 'Result') != null))
                sResult = xmlDocument.selectSingleNode('//soap:Envelope/soap:Body/' + functionName + 'Response/' + functionName + 'Result').text=="true" ? true : false;
        }
        else{
            if (xmlDocument != null){                
                /*var sXPath='//soap:Envelope/soap:Body/' + functionName + 'Response/' + functionName + 'Result';
                var xmlNode=SelectSingleNode(xmlDocument ,sXPath);
                sResult=xmlNode.childNodes[0].nodeValue;*/
                var sTemp=GetResultText(functionName);
                sResult=sTemp=="true" ? true : false;
            }
        }
        return sResult;
    }
    catch (err)
    {
        return false;
    }
}
function GetResultText(functionName){
    if(sResultText!='')
    {
        var sOpenTag='<' + functionName + 'Result>';
        var sCloseTag='</' + functionName + 'Result>';
        var iStart=sResultText.indexOf(sOpenTag) 
        if(iStart>=0){
            iStart=sResultText.indexOf(sOpenTag)+ sOpenTag.length;
            var iEnd=sResultText.indexOf(sCloseTag);
            var sReturnResult=sResultText.substring(iStart,iEnd);
            return sReturnResult;
        }
    }
    return '';
}
function SelectSingleNode(xmlDoc,sXPath) {
    var oEvaluator = new XPathEvaluator();
    var oResult = oEvaluator.evaluate(sXPath, xmlDoc.documentElement, xmlDoc.documentElement.namespaceURI, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	if (oResult != null){
        return oResult.singleNodeValue;
    } else {
        return null;
    }
}              

function SelectSingleNode1(xmlDoc, elementPath){
    if (document.implementation && document.implementation.createDocument){
        var nodes=xmlDoc.evaluate(elementPath, xmlDoc, null,XPathResult.ANY_TYPE, null);
        var results=nodes.iterateNext();
        return results;
    }
}
