
function showFriendlyError(xml)
{
	function dialogSurrogate(HTML)
	{
		var sHTML = new String(HTML);
		function fnOnLoad(diaDocument)
		{
			var oNewDoc = diaDocument.open("text/html", "replace");
			oNewDoc.write(sResponse)
			
		}
		this.HTML=sHTML;
		this.onload=fnOnLoad
	}
	
	
	// Load the XSL
	
	var xsl = new ActiveXObject("Microsoft.XMLDOM")
	xsl.async = false
	if (xml.selectSingleNode("//isCustomMessage")){
        xsl.load("/Message.asp?dialog=1")	
    }else{
	    xsl.load("/xslerror.asp?dialog=1")
	}
	var sResponse =  xml.ownerDocument.transformNode(xsl)
	
	var diS = new dialogSurrogate(sResponse)
	
	window.showModalDialog("/dialogSurrogate.htm",diS)
	return

}

function buildParseErrorXML(parseError)
{
	var oErrorDom = new ActiveXObject("Microsoft.XMLDOM")
	var oError
	var oElement

	oError = oErrorDom.createElement("error")
	oErrorDom.appendChild (oError)
	
	
	oElement = oErrorDom.createElement("source")
	oElement.text = "MSXML Parser"
	oError.appendChild(oElement)
		
	oElement = oErrorDom.createElement("number")
	oElement.text = parseError.errorCode
	oError.appendChild(oElement)
	
	oElement = oErrorDom.createElement("description")
	oElement.text = parseError.reason + '\r\n' 
	oError.appendChild(oElement)
	
	oElement = oErrorDom.createElement("sourceCode")
	oElement.text = parseError.srcText
	oError.appendChild(oElement)
	
	oElement = oErrorDom.createElement("line")
	oElement.text = parseError.line
	oError.appendChild(oElement)
	
	
	oElement = oErrorDom.createElement("column")
	oElement.text = parseError.linepos
	oError.appendChild(oElement)
	
	return oError
	


}



function expandXML(oXML)
{
	if(arguments.length < 2)
	{
		throw("Not enough arguments, minimum required is 1 xml document, and at least one filter to apply")
	}
	var oInpXML = oXML.cloneNode(true);
	
	for(var i=1 ; i < arguments.length; i++)
	{
		oXML.insertBefore(oXML.createProcessingInstruction("x-unionsquare-expansion", arguments[i]), oXML.documentElement)
	}
	
	var oRetXML 
	oRetXML = postToServer('/XMLExpansion/Expand.asp', oXML, false)
	
	if(oRetXML)
	{
		oXML.async=false;
		oXML.loadXML(oRetXML.xml);
		return oXML;
	}
}

function getExpandedXML(oXML)
{
	if(arguments.length < 2)
	{
		throw ("Not enough arguments, minimum required is 1 xml document, and at least one filter to apply")
	}
	
	for (var i = 1 ; i < arguments.length; i++)
	{
		oXML.insertBefore(oXML.createProcessingInstruction("x-unionsquare-expansion", arguments[i]), oXML.documentElement)
	}
	
	return postToServer('/XMLExpansion/Expand.asp', oXML, false)	
}

function postToServerText(URL, Data, ThrowError)
{
	var oXML = new ActiveXObject("microsoft.xmlhttp")
	var oError; 
	oXML.open("POST", URL, false)
	if (Data || Data == 0)
	{
		oXML.send(Data)
	}
	else
	{
		var dNow = new Date()
		oXML.send(dNow.toDateString())
	}
	
	oError = oXML.responseXML.selectSingleNode("/error")
	
	if (oError)
	{
		if(ThrowError)
		{
			throw oError
		}
		else
		{
			showFriendlyError(oError)
		}
	}
	else
	{
		return oXML.responseText
	}
}

function postToServer(URL, Data, ThrowError)
{
	var oXML = new ActiveXObject("microsoft.xmlhttp")
	var oDOM  = new ActiveXObject("Microsoft.XMLDOM")
	
	
	var oError; 
	oXML.open("POST", URL, false)
	if (Data || Data == 0)
	{
		oXML.send(Data)
	}
	else
	{
		var dNow = new Date()
		oXML.send(dNow.toDateString())
	}

	
	oDOM.loadXML(oXML.responseText);
	if (oDOM.parseError.errorCode)
	{
		oError = buildParseErrorXML (oDOM.parseError)
		
	}
	else
	{
		oError = oXML.responseXML.selectSingleNode("/error")
	}
	
	if (oError)
	{
		if(ThrowError)
		{
			throw oError
		}
		else
		{
			showFriendlyError(oError)
		}
		
	}
	else
	{
		return oDOM
	}
}

function getFromServer(URL, ThrowError) {
    var oXML = new ActiveXObject("microsoft.xmlhttp");
    var oDOM = new ActiveXObject("Microsoft.XMLDOM");

    var oError;
    oXML.open("GET", URL, false);
    oXML.send();

    oDOM.loadXML(oXML.responseText);
    if (oDOM.parseError.errorCode) {
        oError = buildParseErrorXML(oDOM.parseError)
    }
    else {
        oError = oXML.responseXML.selectSingleNode("/error")
    }

    if (oError) {
        if (ThrowError) {
            throw oError
        }
        else {
            showFriendlyError(oError)
        }

    }
    else {
        return oDOM
    }
}
