/*Creates a new XMLHttpRequest and returns it*/
var isIe = false;

function getNewXMLHttpRequest()
{
    var request;
    if (typeof(XMLHttpRequest) != "undefined")
	    request = new XMLHttpRequest();
	else if (typeof(ActiveXObject) != "undefined")
	{
	    isIe = true;
	    try
	    {
	        if(request == null)
	        { 
	            request = new ActiveXObject("Msxml2.XMLHTTP.4.0"); 
	        }
	    }
	    catch(e)
	    {
	        request = new ActiveXObject("Microsoft.XMLHTTP"); 
	    }
	}
    
	return request;
}

function TestingCallback(req)
{
    try
    {
        if(req.readyState == 4)
        {
            /*alert(req.responseText);*/
        }
    }
    catch(e)
    {
        /*alert(e);*/
    }
}


function LoadData(callback, url, urlXSLT, data, ForwardData, isAsync)
{
    if (isAsync == null) isAsync = true;
    else if (isAsync != true) isAsync = false;
    
	/*alert(callback)
	alert(url)
	alert(urlXSLT)
	alert(data)*/
	var request = getNewXMLHttpRequest();
	var ie = isIe;
	if(request != null)
	{
		var f;
		if(callback == null)
		{
			f = new Function("", "");
			request.onreadystatechange = function(){TestingCallback(request);};
		}
		else
		{
			if(urlXSLT == null)
			{
				f = new Function("oXml, ForwardData", callback + "(oXml, ForwardData);");
				request.onreadystatechange = function()
				                             {
				                                try
				                                {
				                                    if(request.readyState == 4)
				                                    {
				                                        f(request.responseText, ForwardData); 
				                                        if(ie)
				                                        {
				                                            request.abort(); 
				                                            request = null;
				                                        }
				                                    }
				                                 }
				                                 catch(e)
				                                 {
				                                    /*alert(e);*/
				                                 } 
				                              };
			}
			else
			{
				f = new Function("callback, url, XmlHttp, ForwardData", "LoadTransform(callback, url, XmlHttp, ForwardData);");
				request.onreadystatechange = function()
				                             {
				                                try
				                                {
				                                    if(request.readyState == 4)
				                                    {
				                                        f(callback, urlXSLT, request.responseText, ForwardData); 
				                                        if(ie)
				                                        {
				                                            request.abort(); 
				                                            request = null;
				                                        }
				                                    }
				                                }
				                                catch(e)
				                                {
				                                    /*alert(e);*/
				                                } 
				                            };
			}
		}
		var method = "GET";
		if(data != null)
		{
			method = "POST";
		}
		
		if(url.indexOf(".xsl") == -1)
		{
			if(url.indexOf("?") == -1)
			{
			    url += "?ClientDateTime=" + Date();}else{url += "&ClientDateTime=" + Date();
			}
			url += "&TimeZone=" + (new Date()).getTimezoneOffset();
			url += "&Language=" + top.getTopWindow().CurrentLanguage;
			url += "&Currency=" + top.getTopWindow().currency.Current;
		}
		
		url = encodeURI(url);
		
		if (isAsync == false && f != null)
		{
		    request.onreadystatechange = function () { };
	    }
				
		
		request.open (method, url, isAsync);
		
		if(data != null)
		{
			request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		}
		
		request.send(data);
		
		if (isAsync == false && f != null)
		{
		    if (request.status == 200) 
		    {
                if(callback == null)
                {
                    /*nothing*/
                }
                else if (urlXSLT == null)
                {
		            f(request.responseText, ForwardData);
                } 
                else
                {
                    f(callback, urlXSLT, request.responseText, ForwardData); 
                }
            }
            else 
            {
                /*alert('there was a problem with receiving response');*/
            }
		}
		
		return request;
	}
}

function LoadTransform(callback, url, XmlHttp, ForwardData)
{
	var request = getNewXMLHttpRequest();
	var ie = isIe;
	if(request != null)
	{
		var f;
		if(callback == null)
		{
			f = new Function("", "");
		}
		else
		{
			f = new Function("oXml, oXsl, ForwardData", callback.toString() + "(oXml, oXsl, ForwardData);");
			request.onreadystatechange = function()
			                             {
			                                try
			                                {
			                                    if(request.readyState == 4)
			                                    {
			                                        f(XmlHttp, request.responseText, ForwardData); 
			                                        if(ie)
			                                        {
			                                            request.abort(); 
			                                            request = null;
			                                        }
			                                    }
			                                }
			                                catch(e)
			                                {
			                                    /*alert(e);*/
			                                } 
			                            };
		}
		var method = "GET";
		request.open (method, url, true);
		request.send(null);
	}
}

function GetDoc(XmlHttp)
{
	var doc;
	if (typeof(ActiveXObject) != "undefined")
	{
	    try{doc = new ActiveXObject("Msxml2.DOMDocument.4.0");}catch(e){}
		if(doc == null) doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.loadXML(XmlHttp);/*.responseText*/
	}
	else
	{
		try
		{
			var parser = new DOMParser();
			doc = parser.parseFromString(XmlHttp, "text/xml");/*.responseText*/
		}
		catch(e)
		{}
	}
	return doc;
}

function TransformXmlHttp(XmlHttp, XslHttp, p)
{
	/*alert("called")*/
	try{
		var x = GetDoc(XmlHttp);
		var s = GetDoc(XslHttp);
		/*alert(XmlHttp)*/
		var i = 0;
		if(p != null)
		{
			for(i = 0; i < p.length; i++)
			{
				var tempnode = x.createElement(p[i][0]);
				var tempnodevalue = x.createTextNode(p[i][1]);
				tempnode.appendChild(tempnodevalue);
				x.documentElement.appendChild(tempnode);
			}
		}
		try
		{
			var xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(s);
			var frag = xsltProcessor.transformToFragment(x, document);
			var temp = document.createElement("div");
			temp.appendChild(frag);
			return temp.innerHTML;
		}
		catch(ex1)
		{
			try
			{
				/*/alert(ex1.message);*/
				return x.transformNode(s);
			}
			catch(ex2)
			{}/*alert(ex2.message);*/
		}
	}
	catch(ex0){alert(ex0);}
	return "";
}

function execJS(node, affectedDocument)
{
    if (affectedDocument == null) affectedDocument = document;
    var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
    var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
    var bMoz = (navigator.appName == 'Netscape');

    if (!node) return;

    /* IE wants it uppercase */
    var st = node.getElementsByTagName('SCRIPT');
    var strExec;

    for(var i=0;i<st.length; i++)
    {
        if (bSaf) 
        {
            strExec = st[i].innerHTML;
            st[i].innerHTML = "";
        } 
        else if (bOpera) 
        {
            strExec = st[i].text;
            st[i].text = "";
        } 
        else if (bMoz) 
        {
            strExec = st[i].textContent;
            st[i].textContent = "";
        } 
        else 
        {
            strExec = st[i].text;
            st[i].text = "";
        }
                      

        try 
        {
            var x = affectedDocument.createElement("script");
            x.type = "text/javascript";

            /* In IE we must use .text! */
            if ((bSaf) || (bOpera) || (bMoz))
                x.innerHTML = strExec;
            else x.text = strExec;

            affectedDocument.getElementsByTagName("head")[0].appendChild(x);
        } 
        catch(e) 
        {
            alert(e);
        }
    }
}

