// XML Send and receive simplified functions, for XML and XMLHTTP and XMLDOM, Microsoft
// Nicola Zordan: 10:31 5/12/2006
// www.NicolaZordan.net
// www.ZordanSoftware.com


function XMLsendReceive (url,SOAPmethod,sendXMLtextIn) {
  var sendXMLtext=sendXMLtextIn;
  var result;
  //var xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
  //var xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
  var xmlHttp=GetXMLHTTP();
  //xmlHttp.open('GET',url,true); // async
  xmlHttp.open('POST',url,false); // sync: OK
  //xmlHttp.setRequestHeader("Man", "POST http://api.google.com/search/beta2 HTTP/1.1");
  //xmlHttp.setRequestHeader("MessageType", "CALL");
  xmlHttp.setRequestHeader("Content-Type", "text/xml");
  //xmlHttp.setRequestHeader("Content-Length", sendXMLtext.length+);
  //xmlHttp.setRequestHeader("SOAPAction", "http://ZordanSoftware.com/WorkRecord/ProjectSelect");
  //alert(SOAPmethod);
  if (SOAPmethod!=null && SOAPmethod.length>0) {
    xmlHttp.setRequestHeader("SOAPAction", SOAPmethod);
  } else {
    // spacing ** NZ **, like web form in
    //sendXMLtext='  \n'+sendXMLtext;
    sendXMLtext='in='+sendXMLtext;
  };
/*
  xmlHttp.onreadystatechange=function () {
    if (xmlHttp.readyState==HTTPdataReceived) {
      var txt=xmlHttp.responseText;
      var xml=xmlHttp.responseXML;
      var root=null;
      if (xml!=null) {
        root=xml.documentElement;
      };
      if (root==null) {
        alert('No XML sitemap found at \n'+url);
        return;
      };
      //getSiteMapXSL();
      var html=XML2HTMLbyXSL(xml);
      //var html=SiteMapHTML(xml);
      //alert(html);
      //WriteHTML(html);
    };
  };
*/
  //xmlHttp.async = false;
  xmlHttp.send(sendXMLtext);
  result=xmlHttp.responseXML;
  return result;
};

var HTTPdataReceived=4;
function XMLload (url) {
  //var xmlObj=new ActiveXObject('Microsoft.XMLHTTP');
  var xmlObj=GetXMLHTTP();
  //var xmlObj = new ActiveXObject("Microsoft.XMLDOM");
  //-xmlObj.async = false;
  //xmlObj.load(url);
  //xmlObj.open('GET',url,true); // async
  xmlObj.open('GET',url,false); // sync: OK
  var txt,xml;
  xmlObj.onreadystatechange=function () {
    if (xmlObj.readyState==HTTPdataReceived) {
      var txt=xmlObj.responseText;
      var xml=xmlObj.responseXML;
    };
  };
  xmlObj.send(null);
  //var result=xmlObj.responseXML;
  var result=String2XML(xmlObj.responseText);
  //alert(url+'\nxml:'+xmlObj.responseXML+'\ntext:'+xmlObj.responseText);
  return result;
};

function HTMLload (url) {
  return TEXTload(url);
};

function TEXTload (url) {
  //var xmlObj=new ActiveXObject('Microsoft.XMLHTTP');
  var xmlObj=GetXMLHTTP();
  //var xmlObj = new ActiveXObject("Microsoft.XMLDOM");
  //-xmlObj.async = false;
  //xmlObj.load(url);
  //xmlObj.open('GET',url,true); // async
  xmlObj.open('GET',url,false); // sync: OK
  var txt,xml;
  xmlObj.onreadystatechange=function () {
//alert(xmlObj.readyState);
    if (xmlObj.readyState==HTTPdataReceived) {
      txt=xmlObj.responseText;
      xml=xmlObj.responseXML;
    };
  };
//xmlObj.onreadystatechange=W3state_Change;
//alert('retrieve file: ['+url+']');
  xmlObj.send(null);
/*
  while (txt==undefined) {
    //wait for the xml to load
    //window.status='please wait';
    for (var delay=100;delay>0;delay--) {
      window.status='please wait '+delay+' '+txt;
    }; 
  };
*/
  var result=xmlObj.responseText;
//alert('result:\n\n'+result);
  //alert(url+'\nxml:'+xmlObj.responseXML+'\ntext:'+xmlObj.responseText);
  return result;
};


function XMLtransform(urlXML,urlXSL) {
  var xml=XMLload(urlXML);
  //alert(urlXML+'\n'+xml);
  var xsl=XMLload(urlXSL);
  var result=null;
  if (xml!=null) {
    result=xml.transformNode(xsl);
  };
  return result;
};

function putInDocument (id,content) {
  //document.all[id].innerHTML=content;
  GetElementId(id).innerHTML=content;
};

function putInDocumentText (id,content) {
  //document.all[id].innerText=content;
  GetElementId(id).innerText=content;
};

function String2XML (xmlText) {
  //var xmlObj=new ActiveXObject('Microsoft.XMLDOM');
  var xmlObj=GetXMLDOM();
  xmlObj.async=false;
  xmlObj.loadXML(xmlText);
  return xmlObj;
};


// MultiBrowser XMLHTTP and XMLDOM

function GetXMLDOM () {
  var xmlhttp=null;
  xmlhttp=null
  // code for Mozilla, etc.
  if (document.implementation &&
      document.implementation.createDocument)
    {
    xmlhttp=document.implementation.createDocument("","",null);
    }
  // code for IE
  else if (window.ActiveXObject)
    {
    xmlhttp=new ActiveXObject("Microsoft.XMLDOM")
    };
  return xmlhttp;
};



function GetXMLHTTP () {
  var xmlhttp=null;
  xmlhttp=null
  // code for Mozilla, etc.
  if (window.XMLHttpRequest)
    {
    xmlhttp=new XMLHttpRequest()
    }
  // code for IE
  else if (window.ActiveXObject)
    {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
    };
//alert(xmlhttp);
  return xmlhttp;
};


function LoadXMLfile(url) {
  var xml=W3loadXMLdoc(url)
  return xml;
};

function W3loadXMLdoc(url)
{
/*
xmlhttp=null
// code for Mozilla, etc.
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest()
  }
// code for IE
else if (window.ActiveXObject)
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
*/
xmlhttp=GetXMLHTTP();
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=W3state_Change
  xmlhttp.open("GET",url,true)
  xmlhttp.send(null)
  }
else
  {
  alert("Your browser does not support XMLHTTP.")
  }
  return hmlhttp;
}

function W3state_Change()
{
// if xmlhttp shows "loaded"
if (xmlhttp.readyState==4)
  {
  // if "OK"
  if (xmlhttp.status==200)
    {
    // ...some code here...
alert('load OK');
    }
  else
    {
    alert("Problem retrieving XML data")
    }
  }
}


// MultiBrowser page components ID

function GetElementId(id) {
  var element=null;
  if (document.all) 
     element = document.all[id]
   else 
     element = document.getElementById(id);
  return element;
};

function GetElementHTML(id) {
  var element=GetElementId(id);
  if (element==null) return element
  return element.innerHTML;
};

function SetElementHTML(id,html) {
  var element=GetElementId(id);
  if (element==null) return element;
  element.innerHTML=html;
  return element;
};


function TransformXML4XSL(xml, xsl) {
  var r='';  
  if ( window.XSLTProcessor ) {
   r=transformNodeFirefox (xml,xsl);
alert(r);

/*
    var xp = new XSLTProcessor();
alert('before stylesheet\n'+xsl+'\n'+xml);		
alert('xml\n'+'\n'+xml.xml);		
    //xp.importStylesheet(xsl, 'text/xsl');
    var xmls = new XMLSerializer(); 
    var xslText=xmls.serializeToString(xsl); 
alert('xslText\n'+'\n'+xslText);		
    xp.importStylesheet(xslText);
alert('before transform');		
    var rxml = xp.transformToDocument(xml);
    r=xmls.serializeToString(result); 
    //r = serializeToString(r);
alert(r);
    r = rxml.xml;
alert(r);
*/
   } else if ( window.ActiveXObject ) { 
    r = xml.transformNode(xsl);
  };
  return r;
};


function transformNodeFirefox (xml,oXslDom) {
alert(xml+'\n'+oXslDom);
    var oProcessor = new XSLTProcessor();
    oProcessor.importStylesheet(oXslDom);
    var oResultDom = oProcessor.transformToDocument(xml);
    var sResult = oResultDom.xml;
alert(sResult);
    if (sResult.indexOf("<transformiix:result") > -1) {
        sResult = sResult.substring(sResult.indexOf(">") + 1, 
                                    sResult.lastIndexOf("<"));
    }
alert(sResult);
    return sResult;                
};


function WWWparseXmlFromString(xml) {
	var d = null;
	try {
		if ( window.DOMParser ) {
			var p = new DOMParser();
			d = p.parseFromString(xml, 'text/xml');
		} else if ( window.ActiveXObject ) {
			d = new ActiveXObject('Microsoft.XMLDOM');
			d.async = true;
			d.loadXML(xml);
		}
	} catch (e) {
		alert(e);
	}

	return d;
}

function WWWxslTransform(xmlStr, xslStr) {
	var r = '';
	var xml = parseXmlFromString(xmlStr);
	var xsl = parseXmlFromString(xslStr);
	try {
		if ( window.XSLTProcessor ) {
			var xp = new XSLTProcessor();
			xp.importStylesheet(xsl, 'text/xsl');		
			r = xp.transformToDocument(xml);
			r = serializeToString(r);
		} else if ( window.ActiveXObject ) {
			r = xml.transformNode(xsl);
		}
	} catch(e) {
		alert(e);
	}
	return r;
}


function XML2string (xml) {
  var txt='';

  if (window.ActiveXObject) {
    txt=xml.xml;
   } else {
    // code for Mozilla, Firefox, Opera, etc.
    var xmls = new XMLSerializer(); 
    var txt=xmls.serializeToString(xml); 
  }// documentElement always represents the root node
  return txt;
};



// Override

function String2XML (xmlText) {
  //var xmlObj=new ActiveXObject('Microsoft.XMLDOM');
  //var xmlObj=GetXMLDOM();
  //xmlObj.async=false;
  //xmlObj.loadXML(xmlText);
  //return xmlObj;

  var text=xmlText;
// code for IE
var doc;
if (window.ActiveXObject)
  {
  doc=new ActiveXObject("Microsoft.XMLDOM");
  doc.async="false";
  doc.loadXML(text);
  }
// code for Mozilla, Firefox, Opera, etc.
else
  {
  var parser=new DOMParser();
  doc=parser.parseFromString(text,"text/xml");
  }// documentElement always represents the root node
var x=doc.documentElement;
  var xmlObj=doc;

  return xmlObj;
};



