﻿// Ajax Engine --- Return a XmlHttpRequest object

function CreateXmlHttp()
{
	if (typeof XMLHttpRequest != "undefined")
	{
		return new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
		"MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp"];
		
		for(var i = 0; i < aVersions.length; i++)
		{
			try{
				var oXmlHttp = new ActiveXObject(aVersions[i]);
				return oXmlHttp;
			}
			catch(oError)
			{
			}
		}
		throw new Error("MSXML is not installed.");
	}
}


// XML Engine --- return a XML object and offers get methods

function CreateXml(xmlText)
{
    var xml = null;
    if (document.implementation && document.implementation.createDocument)
    {
        xml = document.implementation.createDocument("", "", null);
        var xmlParser = new DOMParser();
        xml = xmlParser.parseFromString(xmlText,"text/xml"); 
        xml.resolveExternals=false;
        xml.async=false;       
    }
    else if (window.ActiveXObject){    
        xml =new ActiveXObject("Microsoft.XMLDOM");
        xml.async="false";
        xml.loadXML(xmlText);
    }
    return xml;
}

function GetAttributeValue(xmlNode, attributeName)
{
    for(var i = 0; i < xmlNode.childNodes.length; i ++)
        if (xmlNode.childNodes[i].tagName == attributeName && 
            xmlNode.childNodes[i].tagName.length == attributeName.length)               
            return (navigator.appName == "Netscape" ? xmlNode.childNodes[i].textContent : 
                            (navigator.appName.indexOf("Microsoft")!= -1 ? xmlNode.childNodes[i].text : ''));
}

function GetControlAttribute(control, attributeName)
{
    for(var i = 0; i < control.attributes.length; i ++)
        if (control.attributes[i].nodeName == attributeName)
            return control.attributes[i].nodeValue;
}

//--

function MakeAjaxRequest(parameters, handler)
{
    try{
        if (!parameters)
            throw new Error('The function : "MakeAjaxRequest" takes at least one parameter');
        
        urlLocation = window.location.href;
        if (urlLocation.indexOf('#') != -1)
            urlLocation = urlLocation.substring(0, urlLocation.indexOf('#'));
        if (urlLocation.indexOf('?') != -1)
            urlLocation = urlLocation.substring(0, urlLocation.indexOf('?'));
        ajxRequest = CreateXmlHttp();
        ajxRequest.open('POST', urlLocation + '?rand=' + Math.random(), true);
        ajxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        postData = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=&__CALLBACKID=" + "AjaxRequest" + 
        "&__CALLBACKPARAM=" + parameters;
        if (handler)
            ajxRequest.onreadystatechange = function(){
                    if (ajxRequest.readyState == 4 || ajxRequest.readyState == 'complete')                    
                        if(ajxRequest.status == 200)
                            handler(ajxRequest.responseText);
                        else
                            throw new Error(errMakingRequest);
                }
        else
            ajxRequest.onreadystatechange = function()
                {};
        ajxRequest.send(postData);        
    }catch(ex){
        throw new Error(errMakingRequest);
    }
}