// CRIA E RETORNA UM OBJETO HTTPREQUEST
function getConector() {
   var xmlreq = false;
   if (window.XMLHttpRequest) {
      xmlreq = new XMLHttpRequest();
   }
   else if (window.ActiveXObject) {
      try {
         xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e1) {
         try {
            xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
         }
         catch (e2) {
         }
      }
   }
   return xmlreq;
}

// OBJETO AJAX
function tAjax() {
   
   this.LastModified = 'Sat, 1 Jan 2000 00:00:00 GMT';
   this.xmlreq = getConector();

   this.getXML = function (url,responseXmlHandler,extra) {
      if ( ! this.xmlreq ) return false;
      var myself = this;
      this.xmlreq.open("GET", url , true);

      this.xmlreq.onreadystatechange = function() 
      {

// 0 - UNINITIALIZED, open() has not been called. 
// 1 - LOADING, open() has been called but send() has not been called. 
// 2 - LOADED, send() has been called and the response status and headers have been received. 
// 3 - INTERACTIVE, the response data is being downloaded. 
// 4 - COMPLETE, the request has completed and all response data has been 

         //if (myself.xmlreq.readyState < 4) 
         //{
	      //   document.getElementById("mensagem").innerHTML = "Carregando";
	      //}
			//else
         if (myself.xmlreq.readyState == 4) 
         {
            if (myself.xmlreq.status == 200) 
            {
               myself.LastModified = myself.xmlreq.getResponseHeader("Last-Modified");
			   	//alert(myself.xmlreq.responseText)
               responseXmlHandler(myself.xmlreq.responseXML,extra);
            }
	         //document.getElementById("mensagem").innerHTML = "Ok";
         }

      }

      this.xmlreq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      this.xmlreq.setRequestHeader("If-Modified-Since", this.LastModified );

      this.xmlreq.send(null);
   }
}

// CRIA E RETORNA UM OBJETO XML (OPCIONALMENTE COM UM ELEMENTO RAIZ)
function criaXMLDoc(rootElement) {
   var xmldoc = false;
   if (window.DOMParser) {
      xmldoc = new DOMParser();
      if (rootElement) {
         xmldoc = xmldoc.parseFromString("<"+rootElement+"></"+rootElement+">", "text/xml");
      }
   }
   else if (window.ActiveXObject) {
      try {
         xmldoc = new ActiveXObject("Msxml2.DOMDocument");
      }
      catch (e1) {
         try {
            xmldoc = new ActiveXObject("Microsoft.XMLDOM");
         } catch (e2) {
         }
      }
      if (rootElement) {
         xmldoc.appendChild(xmldoc.createNode("element", rootElement, ""));
      }
   }
   return xmldoc;
}

// CRIA E RETORNA UM NODE XML (OPCIONALMENTE COM UM TEXTNODE DENTRO)
function criaXMLNode(nodename, texto) {
	var myXml = criaXMLDoc("DUMMY");
	var nodeElm = (window.ActiveXObject) ? myXml.createNode("element", nodename, "") : myXml.createElement(nodename);
	if (texto != 'undefined') {
		var nodeTxt = myXml.createTextNode(texto+"");
		nodeElm.appendChild(nodeTxt);
	}
	return nodeElm;
}

// CARREGA E TRANSFORMA TEMPLATES XSLT
function tXslt() {

   this.init = function (url, divname) {
      this.conteudo = divname;
      var xmlreq = getConector();
      if ( ! xmlreq ) { return false; }
      xmlreq.open("GET", url, false);
      xmlreq.send("");
      if (window.ActiveXObject) {
         this.xsltp = criaXMLDoc();
         this.xsltp.async = false;
         this.xsltp.load(url);
      } else {
         this.xsltp = new XSLTProcessor();
         this.xsltp.importStylesheet(xmlreq.responseXML);
      }
   }

   this.transform = function (xmldoc) {
      if (window.ActiveXObject) {
         var fragment = xmldoc.transformNode(this.xsltp);
         document.getElementById(this.conteudo).innerHTML = fragment;
      } else {
         var fragment = this.xsltp.transformToFragment(xmldoc, document);
         document.getElementById(this.conteudo).innerHTML = "";
         document.getElementById("donotdelete").innerHTML = "";
         document.getElementById("donotdelete").appendChild(fragment);
         var ihtm = document.getElementById("donotdelete").innerHTML;
         ihtm = ihtm.replace(/&lt;/g, "<");
         ihtm = ihtm.replace(/&gt;/g, ">");

         document.getElementById("donotdelete").innerHTML = "";
         document.getElementById(this.conteudo).innerHTML = ihtm;
      }
   }

}
