//XML XSL Javascript Transform Class for Multiple data and style sources

//Instantiate Class in page like this for each div:

loadData = function(var1,var2,var3,var4,var5,var6) {
	
	dataObjects = new Object();
	dataObjects.pathToXML = var1;
	dataObjects.pathToXSL = var2;
	dataObjects.divToTransform = var3;
	
	if(typeof(var4)=='undefined')
	{
		this.createFragment();
	}
	if(var6==true)
	{
		this.passQuery();
	}
	else
	{
		this.createFragment(var4,var5);
	}
	
	
}

loadData.prototype.createFragment = function(variableName,variableValue){
			if(document.implementation && document.implementation.createDocument){
				// Mozilla
		//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
				var xsltProcessor = new XSLTProcessor();
				
				// load the xslt file
				var myXMLHTTPRequest = new XMLHttpRequest();
				myXMLHTTPRequest.open("GET", dataObjects.pathToXSL, false);
				myXMLHTTPRequest.send(null);
				
				// get the XML document
				xslStylesheet = myXMLHTTPRequest.responseXML;
				xsltProcessor.importStylesheet(xslStylesheet);
				
				
				// load the xml file
				if(variableName != "json")
				{
				myXMLHTTPRequest = new XMLHttpRequest();
				myXMLHTTPRequest.open("GET",dataObjects.pathToXML, false);
				myXMLHTTPRequest.send(null);
				
				var xmlSource = myXMLHTTPRequest.responseXML;
				
				}
				else
				{
				var xmlSource = (new DOMParser()).parseFromString(dataObjects.pathToXML, "text/xml");
				
				}
				
				if(typeof(variableName)!='undefined' && variableName != "json")
				{
					//Insert params into XML DOM
					var nodeVar = new Array();
					var holderNode = xmlSource.childNodes[0];
					
					for(var r = 0; r < variableName.length; r++) {
						nodeVar[r] = holderNode.setAttribute(unescape(variableName[r]), unescape(variableValue[r]));
					}
				}
				
				//transform
				var resultDocument = xsltProcessor.transformToFragment(xmlSource, document);
				document.getElementById(dataObjects.divToTransform).appendChild(resultDocument);
				
				
			}else if(window.ActiveXObject){
				// IE			
				var arrMSXMLProgIDs = ["MSXML4.DOMDocument", "MSXML3.DOMDocument", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XmlDom"];

				var blnSuccess = false;
				  for (var i=0; i < arrMSXMLProgIDs.length && !blnSuccess; i++) {
					try {
					  var xml = new ActiveXObject(arrMSXMLProgIDs[i]);
					  var xsl = new ActiveXObject(arrMSXMLProgIDs[i]);
					  strMSXMLProgID = arrMSXMLProgIDs[i];
					  blnSuccess = true;
					} catch (oException) {
					}
				  }
				  if (!blnSuccess ){
					blnFailed = true;
					strFailedReason = "No suitable MSXML library on machine.";
				  }
				  
				  
				// Load XML
				xml.async = false
				
				if(variableName != "json")
				{
				xml.load(dataObjects.pathToXML);
				}
				else
				{
				xml = new ActiveXObject("Microsoft.XMLDOM");
  				xml.async="false";
  				xml.loadXML(dataObjects.pathToXML);
				}
				// Load XSL For Header and Menu's
				xsl.async = false
				xsl.load(dataObjects.pathToXSL)	
			
				
				
				if(typeof(variableName)!='undefined' && variableName!="json")
				{
					//Insert params into XML DOM
					var nodeVar = new Array();
					var holderNode = xml.childNodes[1];
					
					for(var r = 0; r < variableName.length; r++) {
						nodeVar[r] = holderNode.setAttribute(unescape(variableName[r]), unescape(variableValue[r]));
					}	
				}
						
				// Transform
				document.getElementById(dataObjects.divToTransform).innerHTML=xml.transformNode(xsl);
				
				
			}else{
				// Browser unknown
				alert("Browser unknown");
			}
			
		
}

loadData.prototype.getQueryVariables = function () {
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");

			return pair,vars;
	}

}

loadData.prototype.passQuery = function () {
	
	passingVarValue = new Array();
	passingVar = new Array();
	getUsersVars = this.getQueryVariables();
	for (var i = 0; i < getUsersVars.length; i++)
	{
		var getVar = getUsersVars[i].split("=");
		passingVar[i] = getVar[0];
		passingVarValue[i] = getVar[1];
	}
	
	this.createFragment(passingVar, passingVarValue);

}
