﻿Tygrik.Ajax = function()
{
   var iParameters = 0;
   var qParNames = new Array();
   var qParValues = new Array();
   var sPage = "";
   this.sOnFire = "";
   this.sIdentifikace = "";
   this.oHttpRequest = null;

   this.Parameter = function(sName, sValue)
   {
      qParNames[iParameters] = sName;
      qParValues[iParameters] = sValue;
      iParameters++;
   }

   this.AskParGet = function()
   {
      var sResult = "";
      for (var iPar = 0; iPar < iParameters; iPar++)
      {
         var sName = qParNames[iPar];
         var sValue = qParValues[iPar];
         
         if (sResult.length != 0)
         {
            sResult = sResult + ",";
         }
         sResult = sResult + sName;
         sResult = sResult + "=";
         sResult = sResult + sValue;
      }
      return sResult;
   }

   this.AskParPost = function()
   {
      var sResult = "";
      for (var iPar = 0; iPar < iParameters; iPar++)
      {
         var sName = qParNames[iPar];
         var sValue = qParValues[iPar];
         
         if (sResult.length != 0)
         {
            sResult = sResult + "&";
         }
         sResult = sResult + "My_";
         sResult = sResult + sName;
         sResult = sResult + "=";
         sResult = sResult + sValue;
      }
      return sResult;
   }
   
   var MakeRequest = function()
   {
      var oAjaxHttpRequest = null;
      if (oAjaxHttpRequest == null)
      {
         try
         {
            if (window.XMLHttpRequest)
            { // Mozilla, Safari,...
               oAjaxHttpRequest = new XMLHttpRequest();
               if (oAjaxHttpRequest.overrideMimeType)
               {
                  oAjaxHttpRequest.overrideMimeType('text/html');
               }
            }
         }
         catch (e) {}
      }

      if (oAjaxHttpRequest == null)
      {
         try
         {
            if (window.ActiveXObject)
            { // IE
               oAjaxHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            }
         }
         catch (e) {}
      }
   
      if (oAjaxHttpRequest == null)
      {
         try
         {
            if (window.ActiveXObject)
            { // IE
               oAjaxHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            }
         }
         catch (e) {}
      }
 
      if (oAjaxHttpRequest == null)
      {
         //alert("Browser error: Cannot create XMLHTTP instance for ajax operation. / Chyba prohlížeče: Nelze vytvořit XMLHTTP ");
         return null;
      }

      return oAjaxHttpRequest;
   };

   this.DoGet = function(sPagePa, sOnFirePa)
   {
      this.oHttpRequest = MakeRequest();
      if (this.oHttpRequest == null)
      {
         return;
      }
   
      sPage = sPagePa;
      this.sOnFire = sOnFirePa;
      var sIdent = Tygrik.Change.RandomString(32);
      this.sIdentifikace = sIdent;

      Tygrik.Ajax.qAjaxes[Tygrik.Ajax.qAjaxes.length] = this;

      var sParameterToGet = this.AskParGet();
      if (sParameterToGet.length != 0)
      {
         sParameterToGet = sParameterToGet + ",";
      }
      sParameterToGet = sParameterToGet + "Random=" + this.sIdentifikace;
          
      this.oHttpRequest.onreadystatechange = function() { Tygrik.Ajax.onAjaxHandler(sIdent); };
      this.oHttpRequest.open("GET", sPage + (sParameterToGet.length != 0 ? "," : "") + sParameterToGet + ".htm", true);
      //this.oHttpRequest.setRequestHeader("Connection", "close");
      //this.oHttpRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
      //this.oHttpRequest.setRequestHeader("Pragma", "no-cache");
      this.oHttpRequest.send(null);   
   }
   
   this.DoPost = function(sPagePa, sOnFirePa)
   {
      this.oHttpRequest = MakeRequest();
      if (this.oHttpRequest == null)
      {
         return;
      }
   
      sPage = sPagePa;
      this.sOnFire = sOnFirePa;
      var sIdent = Tygrik.Change.RandomString(32)
      this.sIdentifikace = sIdent;

      Tygrik.Ajax.qAjaxes[Tygrik.Ajax.qAjaxes.length] = this;

      var sParameterToPost = this.AskParPost();
      if (sParameterToPost.length != 0);
      {
         sParameterToPost = "&" + sParameterToPost;
      }
      sParameterToPost = "My_Xxx_Reserved_Form=" + sPage + sParameterToPost;

      this.oHttpRequest.onreadystatechange = function() { Tygrik.Ajax.onAjaxHandler(sIdent); };
      this.oHttpRequest.open("POST", "Default.aspx", true);
      //this.oHttpRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
      //this.oHttpRequest.setRequestHeader("Pragma", "no-cache");
      this.oHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.oHttpRequest.setRequestHeader("Content-length", sParameterToPost.length);
      this.oHttpRequest.setRequestHeader("Connection", "close");
      this.oHttpRequest.send(sParameterToPost);  
   }

   this.IsDone = function()
   {
      if (this.oHttpRequest.readyState == 4)
      {
         if (this.oHttpRequest.status == 200)
         {
            return true;
         }
      }
      return false;
   }

   this.Result = function()
   {
      return Tygrik.Change.Cut(this.oHttpRequest.responseText, Tygrik.Change.MarkerDo(Tygrik.MarkerStart), Tygrik.Change.MarkerDo(Tygrik.MarkerStop));
   }

   this.Clear = function()
   {
      var iParameters = 0;
      var qParNames = null;
      var qParValues = null;
      var sPage = "";
      this.sOnFire = "";
      this.oHttpRequest = null;
      this.sIdentify = "";
   }
}

Tygrik.Ajax.qAjaxes = new Array();

Tygrik.Ajax.onAjaxHandler = function(sIdent)
{
   var sFunctionFireHandler = "";
   var sFunctionFireResult = "";
   
   var iAjaxes = Tygrik.Ajax.qAjaxes.length;
   for (var iAjax = 0; iAjax < iAjaxes; iAjax++)
   {
      var oAjaxNow = Tygrik.Ajax.qAjaxes[iAjax];
      if (oAjaxNow.sIdentifikace == sIdent)
      {
          if (oAjaxNow.IsDone())
          {
             sFunctionFireResult = oAjaxNow.Result();
             sFunctionFireHandler = oAjaxNow.sOnFire + "(sFunctionFireResult)";

             oAjaxNow.Clear();
             Tygrik.Ajax.qAjaxes.splice(iAjax, 1);

             break;
          }
      }
   }
   
   if (sFunctionFireHandler.length != 0)
   {
      eval(sFunctionFireHandler);
   } 
}

