 var first=0;
 var size = 0;
 function getHTML()
 {
   this.xslt_status=false;
   this.xml_status=false;
   this.noxml_status=false;
//   this.funkcja=funkcja;
   this.timer=null;
   this.xml_dom=false;
   this.xslt_dom=false;
   this.noxml_data=false;
   this.xslt_curr='';
   this.post_data='';
   this.a_loader=null;
   this.error_url='xslt.php?a=error_js';

   var self = this;


   this.load_ajax = function(url, co)
    {
      var xmlHttp=false;

      if(window.XMLHttpRequest)
      {
        xmlHttp=new XMLHttpRequest();

        if(xmlHttp.overrideMimeType) xmlHttp.overrideMimeType('text/xml');
      } else if(window.ActiveXObject)
      {
         try {
             xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
             try {
               xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
             } catch (e) {}
         }
      }
/*
      xmlHttp.onprogress=function (event) 
      {
        if (co=='xml'&&first==0)
        {
          first=1;
          size = event.totalSize;
        }
        var percentComplete = parseInt((event.position / event.totalSize)*100);
        self.a_loader.progressSetPercent(co, percentComplete);
      }
*/
      xmlHttp.onreadystatechange=function ()
      {
        try 
        { 
          if(xmlHttp.readyState==4)
          {
            if(xmlHttp.status==200)
            {

              if(window.XMLHttpRequest)
              {
                var xmldoc = xmlHttp.responseXML;
              } else if(window.ActiveXObject)
              {
                var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
                xmldoc.loadXML(xmlHttp.responseText);
              }
      
              if (co=='xslt')
              {
                self.xslt_dom = xmldoc;
                self.xslt_status=true;
              }
              else if (co=='noxml')
              {
                self.noxml_data = xmlHttp.responseText;
                self.noxml_status=true;
              }
              else
              {
                self.xml_dom = xmldoc;
                self.xml_status=true;
      
                first=0;
              }
            } 
            else if (xmlHttp.status == 12152)
            {
              self.load_ajax(url, co);
            }
            else if (xmlHttp.status == 202)
            {
        
            }
            else 
            {
//              alert('ERROR'+co);
              self.load_ajax(url, co);
            }
          }
        } 
        catch(e) 
        {
          self.load_ajax(url, co); 
        };
      }
    
      xmlHttp.open(((co=='xml'||co=='noxml')&&self.post_data.length>0?"POST":"GET"),url,true);

      if ((co=='xml'||co=='noxml')&&self.post_data.length>0)
        xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

      xmlHttp.send(((co=='xml'||co=='noxml')&&self.post_data.length>0?self.post_data:null));
    }
    
   this.set_a_loader = function(obj_loader)
   {
     self.a_loader=obj_loader;
   }

   this.getData = function (xml_url, xslt_url, post_id)
   {
//      self.a_loader.progressCreate('xml');
//      self.a_loader.progressCreate('xslt');
    
      self.post_data='';
      if (post_id)
        self.post_data=self.getPostData(post_id);

      if (self.xslt_status)
      {
        self.xslt_status=(self.xslt_curr==xslt_url);
      }
      self.xslt_curr=xslt_url;
      self.xslt_status=false;
      self.xml_status=false;
    
    
      if (self.xml_status==false)
        self.load_ajax(xml_url, 'xml');
      if (self.xslt_status==false)
        self.load_ajax(xslt_url, 'xslt');//+'&xx='+Math.random()
    
      self.isAllLoaded();
   }

   this.sendFormData = function(post_id, func_data, action_x, noxml)
   {
//       alert(action_x);
     if (typeof(post_id)=='string')
       var el = document.getElementById(post_id);
     else
       var el = post_id;

     if (typeof(noxml)=="undefined") noxml=false;

     self.post_data='';
     if (el != null)
     {
       if (typeof(action_x)!='undefined') action=action_x;
       else action = el.getAttribute('action');

       if( action!=null );
       {
         var method = el.getAttribute('method');
         var onsubmit=el.getAttribute('onmysubmit');
         var data=self.getPostData(el);
         var xslt_url=el.getAttribute('xslt_url');

         if (onsubmit==null||trim(onsubmit).length==0||eval(onsubmit))
         {
           if (method=='get')
            action+='?'+data;
           else
           {
//             data+='&hash='+window.location.hash;
             self.post_data=data;
           }

           self.xslt_status=(xslt_url == null);

           self.xml_status=false;
           self.noxml_status=false;
           if (typeof(func_data) == 'function') 
             self.run=func_data;

           if (xslt_url != null)
           {
             if (self.xml_status==false)
               self.load_ajax(xslt_url, 'xslt');
           }

           if (noxml)
           {
             if (self.noxml_status==false)
               self.load_ajax(action, 'noxml');
           }
           else
           {
             if (self.xml_status==false)
               self.load_ajax(action, 'xml');
           }

           if (xslt_url != null)
             self.isAllLoaded();
           else if (noxml)
             self.isAllLoadedNoXML();
           else
             self.isAllLoadedXML();
         }
       }

     }
     return false;
   }
   
   this.getDataXSLT = function (xslt_url, func_data, xml_data)
   {
//      self.a_loader.progressCreate('xslt');
      self.xslt_status=false;
      self.xslt_curr=xslt_url;
      self.xml_status=true;

      if (typeof func_data == 'function') 
        self.run=func_data;

      if (self.xslt_status==false)
        self.load_ajax(xslt_url, 'xslt');//+'&xx='+Math.random()

      if (typeof xml_data=='object')
      {
        self.xml_dom=xml_data;
      }
      else
      {
        if (document.implementation && document.implementation.createDocument) 
        {   
          self.xml_dom=document.implementation.createDocument(null, 'data', null);   
        }   
        else 
        { 
          self.xml_dom = new ActiveXObject("MSXML2.DOMDocument");
          self.xml_dom.loadXML('<data></data>'); 
        }
      }
      self.isAllLoaded();
   }

   this.getDataXML = function (xml_url, func_data)
   {
      self.post_data='';
//      self.a_loader.progressCreate('xslt');
    
      self.xslt_status=true;
      self.xml_status=false;
      if (typeof func_data == 'function') 
        self.run=func_data;

      if (self.xml_status==false)
        self.load_ajax(xml_url, 'xml');

      self.isAllLoadedXML();
   }

   this.getDataNoXML = function (noxml_url, func_data)
   {
      self.post_data='';
//      self.a_loader.progressCreate('xslt');
    
      self.xslt_status=true;
      self.xml_status=false;
      self.noxml_status=false;

      if (typeof func_data == 'function') 
        self.run=func_data;

      if (self.xml_status==false)
        self.load_ajax(noxml_url, 'noxml');

      self.isAllLoadedNoXML();
   }

   this.isAllLoadedNoXML = function ()
   {
     if (self.noxml_status)
     {
//       alert(self.a_loader.obj.parentNode);
//       self.a_loader.obj.parentNode.removeChild(self.a_loader.obj);
//       alert(self.run);
       clearTimeout(self.timer);

       self.run(self.noxml_data);

//       alert(typeof(self.a_loader));
//       if (typeof(self.a_loader)=='object')
       if (self.a_loader!=null && self.a_loader.exist)
         self.a_loader.hide();
  
     }
     else
     {
       self.timer = setTimeout(function () {self.isAllLoadedNoXML()}, 100);
     }
   }

   this.isAllLoadedXML = function ()
   {
     if (self.xml_status)
     {
//       alert(self.a_loader.obj.parentNode);
//       self.a_loader.obj.parentNode.removeChild(self.a_loader.obj);
//       alert(self.run);
       clearTimeout(self.timer);

       self.run(self.xml_dom);

//       alert(typeof(self.a_loader));
//       if (typeof(self.a_loader)=='object')
       if (self.a_loader!=null && self.a_loader.exist)
         self.a_loader.hide();
  
     }
     else
     {
       self.timer = setTimeout(function () {self.isAllLoadedXML()}, 100);
     }
   }
   
   this.isAllLoaded = function ()
   {
     if (self.xml_status && self.xslt_status)
     {
       clearTimeout(self.timer);

       try
       {
         var scripts_for_eval=new Array();
         if(document.implementation&&document.implementation.createDocument)
         {
            var processor=new XSLTProcessor();
            processor.importStylesheet(self.xslt_dom);
            
            var xxx = processor.transformToFragment(self.xml_dom,document);
  /*
            var fragment = processor.transformToFragment(self.xml_dom,document);

            var xx=document.createElement('div');
            xx.appendChild(fragment);

            var xxx=xx.innerHTML;

  */
         }
         else if(window.ActiveXObject)
         {
            var datt=self.xml_dom.transformNode(self.xslt_dom);
  /*
            var xxx= new ActiveXObject("MSXML2.DOMDocument"); 
  //.childNodes.length
            self.xml_dom.transformNodeToObject(self.xslt_dom, xxx);
            alert(xxx.text);
  /*
            xxx=html;
  alert(html.getElementsByTagName('table').length);
  */

            
  //          document.removeChild(xx);
  //alert(datt);
  //          var xxx1 = new ActiveXObject("MSXML2.DOMDocument");
  //          xxx1.loadXML(datt); 
  //          alert(datt);
  //          alert(xxx1.documentElement.firstChild.tagName);
  //          var xxx = xxx1.documentElement.cloneNode(true);
  //          alert(xxx.firstChild.tagName);
  /*
            var html = new ActiveXObject("Microsoft.XMLDOM");
            html.loadXML(datt);
            var scripts_xml=html.documentElement.getElementsByTagName('script');
            alert(scripts_xml[0].tagName);
  */          
            var headID = document.getElementsByTagName("head")[0];
            var scripts=new Array();
            var re = new RegExp(/\<script([^\>]{0,})\>([^<]{0,})\<\/script\>/ig);
            var f_styles=new Array();
            var re_css = new RegExp(/\<link([^\>]+)\>/ig);
            var re_css1 = new RegExp(/([^=]+)="([^"]+)"([ ]{0,})/ig);

            var tmp01=null;
            while ((tmp01= re_css.exec(datt))!==null)
            {
              var n=f_styles.length;
              f_styles[n]=new Array();
              var tmp02=null;
              while ((tmp02=re_css1.exec(tmp01[1]))!==null)
              {
                var m=f_styles[n].length;
                f_styles[n][m]=new Array();
                f_styles[n][m][0]=tmp02[1];
                f_styles[n][m][1]=tmp02[2];
              }
            }

            for (i=0,n=f_styles.length; i<n; i++)
            {
               var xlink=document.createElement('link');
               var last_href='';
               for (j=0,m=f_styles[i].length; j<m; j++)
                 xlink.setAttribute(trim(f_styles[i][j][0]),trim(f_styles[i][j][1]));

               headID.appendChild(xlink);
            }

            while ((m = re.exec(datt))!==null)
            {
              scripts[scripts.length]=m;
            }

            var re1 = new RegExp(/src="([^"]+)"/i);

            for (var i=0, n=scripts.length;i<n;i++)
            {
              var xsrc=re1.exec(scripts[i][1]);
              if (scripts[i][2].length>0)
              {
                scripts_for_eval[scripts_for_eval.length]=scripts[i][2];
              }
              else if(xsrc != null)
              {
                var xscript=document.createElement('script');
                xscript.type='text/javascript';
  //              alert(xsrc[1]);
                xscript.src=xsrc[1]+'?'+randed(10);
                headID.appendChild(xscript);
              }
            }

            var xxx=document.createElement('span');
  //          xxx.appendChild(xxx1.documentElement.cloneNode(true));
            xxx.innerHTML=datt;
         }
         self.xml_dom=null;
  //       self.a_loader.progressSetPercent('xslt', 100);
  //       self.a_loader.progressSetPercent('xml', 100);
         self.a_loader.hide();

         self.run(xxx, scripts_for_eval);
       }
       catch (e)
       {
         
         self.post_data='error='+encodeURI("Lok.: "+document.location+"\n "+"Hash: "+window.location.hash+"\n "+e.name+": "+e.message+' line: '+e.lineNumber+' file: '+e.fileName).replace('+', '%2b');
         self.xslt_status=false;
         self.xml_status=false;
         self.load_ajax(self.error_url, 'xml');
       }
     }
     else
     {
       self.timer = setTimeout(function () {self.isAllLoaded()}, 100);
     }
   }

   this.getPostData = function (post_id, join_sym)
   {
     if (typeof(join_sym)=='undefined') join_sym='&';
     if (typeof(post_id)=='string')
       var el = document.getElementById(post_id);
     else
       var el = post_id;

     if (el!=null)
     {
       var elements=el.getElementsByTagName('*');
       var params=new Array();

       for (var i=0,m=elements.length; i<m; i++)
       {
         if ((elements.item(i).tagName.toLowerCase()=='input'||elements.item(i).tagName.toLowerCase()=='select'||elements.item(i).tagName.toLowerCase()=='textarea')&&elements.item(i).name.length>0&&elements.item(i).disabled==false)
         {
           if (elements.item(i).type=='text'||elements.item(i).type=='password'||elements.item(i).type=='hidden')
           {
             params[params.length]=encodeURI(elements.item(i).name).replace('+', '%2b')+'='+encodeURI(elements.item(i).value).replace('+', '%2b');
           }
           else if (elements.item(i).type.toLowerCase()=='checkbox'&&elements.item(i).checked)
           {
             params[params.length]=encodeURI(elements.item(i).name).replace('+', '%2b')+'='+(elements.item(i).value.length==0?'on':encodeURI(elements.item(i).value).replace('+', '%2b'));
           }
           else if (elements.item(i).type.toLowerCase()=='radio'&&elements.item(i).checked)
           {
             params[params.length]=encodeURI(elements.item(i).name).replace('+', '%2b')+'='+encodeURI(elements.item(i).value).replace('+', '%2b');
           }
           else if (elements.item(i).tagName.toLowerCase()=='select')
           {
             params[params.length]=encodeURI(elements.item(i).name).replace('+', '%2b')+'='+encodeURI(elements.item(i).value).replace('+', '%2b');
           }
           else if (elements.item(i).tagName.toLowerCase()=='textarea')
           {
             params[params.length]=encodeURI(elements.item(i).name).replace('+', '%2b')+'='+encodeURI(elements.item(i).value).replace('+', '%2b');
           }
         }
       }
       return params.join(join_sym);
     }
     return '';
   }
   
   this.run = function (xxx)
   {


   }
 }