// 
//
//

function XSLParam(name, value) {
   this.name = name;
   this.value = value;
}


function XmlManager() {




this.getDom  = function getDom()
{
if (typeof ActiveXObject != 'undefined') {
  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  }
else {
  var xmlDoc= document.implementation.createDocument("","",null);
  }
  
  return xmlDoc;

}

this.getStringFromDom = function(xmlDoc){
  var xmlString;

  if (typeof ActiveXObject != 'undefined') {// IE
    xmlString = xmlDoc.xml;
  }
  else{
	  var serializer = new XMLSerializer();
	  xmlString = serializer.serializeToString(xmlDoc);
  }
  return xmlString;
}

this.getDomFromFile = function(file) {
			// Load XML

		
			if (typeof ActiveXObject != 'undefined') {// IE
				var xml = new ActiveXObject("Microsoft.XMLDOM");				
				xml.async = false;
				xml.load(file);
				if(xml.xml==""){
				    xml=undefined;
				    }
			}
			else {	// others

				var myXMLHTTPRequest = new XMLHttpRequest();
				myXMLHTTPRequest.open("GET", file, false);
				myXMLHTTPRequest.send(null);
				var xml = myXMLHTTPRequest.responseXML;		
			}
				try{
			}
			catch(e){
			  window.status=e.message ;
			  return ;
			}
			return xml;
}

this.getDomFromUrl = function(url, callback) {	
    if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object
        req = new XMLHttpRequest();
        req.onreadystatechange = function() {
	                if (req.readyState == 4)  { 
	                     callback(req.responseXML, url); 
	                   }      
	                
			}

        req.open("GET", url,true); // Since we don't post XML documents, 'GET' is fine. 
        req.send(null);
    } 
    else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = function() {
	                if (req.readyState == 4)  { 
	                     callback(req.responseXML, url , req.status); 
	                   }   
	                
			}
            req.open("GET", url); // Since we don't post XML documents, 'GET' is fine. 
            req.send();
        }
    }
}
		
this.getDomFromUrlThread2 = function(url, callback) {	
    if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object
        req2 = new XMLHttpRequest();
        req2.onreadystatechange = function() {
	                if (req2.readyState == 4)  { 
	                     callback(req2.responseXML, url); 
	                   }      
	                
			}

        req2.open("GET", url,true); // Since we don't post XML documents, 'GET' is fine. 
        req2.send(null);
    } 
    else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version
        req2 = new ActiveXObject("Microsoft.XMLHTTP");
        if (req2) {
            req2.onreadystatechange = function() {
	                if (req2.readyState == 4)  { 
	                     callback(req2.responseXML, url , req2.status); 
	                   }   
	                
			}
            req2.open("GET", url); // Since we don't post XML documents, 'GET' is fine. 
            req2.send();
        }
    }
}
this.getDomFromXml = function(xml) {
            try{
			if (typeof ActiveXObject != 'undefined') {
				var dom = new ActiveXObject("Microsoft.XMLDOM");
				dom.async = false;
				dom.loadXML(xml);
				if(dom.xml==""){
				    dom=undefined;
				    }			
			}
			else {
				parser = new DOMParser();
				dom = parser.parseFromString(xml, "text/xml");						
			}
			}
			catch(e){
			  window.status=e.message ;
			  return ;
			}
			return dom;
		}

this.setParameters = function(xmlDoc, parameters){
	 var local  = xmlDoc.getElementsByTagName("local")[0];
	 
	 var parametersElement;
	 
	 if(local==undefined){
	 
	     local = xmlDoc.createElement("local"); 
	     xmlDoc.documentElement.appendChild(local);
	 }
	 else{

		    for(var i = local.childNodes.length-1; i>=0;i--){
												     		              	
					 local.removeChild(local.childNodes[i]);
				}
				 

	  }	

	for(var i=0;i<parameters.length;i++){
				 parametersElement = xmlDoc.createElement("parameter");
				 parametersElement.setAttribute('name',parameters[i].name);				
				 parametersElement.setAttribute('value',parameters[i].value);				 
			 	 local.appendChild(parametersElement.cloneNode(true));
			 	 
		 }	 
		 
		 
		 
}	

this.transform = function(xmlDoc,xslDoc,parameters,xmloutput) {

			var transform="";
			var xslt; 
			var xslDoc4;
			parameters=parameters?parameters:new Array();
            
            try{
            	   	xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
					xslDoc4 = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
			}          			 
			catch(e){
			  xslt = undefined;
			  xslDoc4 = undefined;
			}	
			

		    try{
			if (typeof ActiveXObject != 'undefined') {
			
			  if(parameters.length>0 && xslt != undefined && xslDoc4 != undefined  ){   	
					var xslProc;
					xslDoc4.async = false;
					xslDoc4.load(xslDoc);
					xslt.stylesheet = xslDoc4;
					xslProc = xslt.createProcessor();
					xslProc.input = xmlDoc;

					for(var i=0;i<parameters.length;i++){
					     xslProc.addParameter(parameters[i].name, parameters[i].value);
					}
					xslProc.transform();									
					transform = xslProc.output;
				}

				else{
						// Transform
						this.setParameters(xmlDoc,parameters);
						transform = xmlDoc.transformNode(xslDoc);
				}		
				
				  if(xmloutput){
                                        transform = this.getDomFromXml(transform);
                                   }

                                          
				
			}
			else {


                            var xsl = new XSLTProcessor();
                                for(var i=0;i<parameters.length;i++){
                                     xsl.setParameter(null, parameters[i].name, parameters[i].value);
                                }
                                xsl.importStylesheet(xslDoc);

                                if(xmloutput){
                                        transform = xsl.transformToDocument(xmlDoc);
                                }
                                else{
                                  var fragment=xsl.transformToFragment(xmlDoc, document);
                                        if( fragment.childNodes.length>0 ){
                                           for(var t=0;t<fragment.childNodes.length;t++){
                                           transform += fragment.childNodes[t].innerHTML;
                                         }				  
                                       }
				}       
                                
				
			


			 }
			}
			catch(e){
			  window.status=e.message ;
			  return;
			}
			
			
			
			return transform;
			
			
			
		} 
	
	
}   

