﻿// JScript File 
//encodeURIComponent(data)
 
// day vao ds doi 

var queueAjax = new Array();
function getQueue(url,callback,thamso)
{
    var dataQ;
    var newQueue = new Array();
    for(var i=0;i<queueAjax.length;i++)
        if(queueAjax[i].url==url&&queueAjax[i].callback==callback&&queueAjax[i].thamso==thamso)
            dataQ =queueAjax[i];
        else
            newQueue.push(queueAjax[i]);
   delete queueAjax;      
   queueAjax = newQueue;
   return dataQ;         
}

//queueAjax = queueAjax.reverse()
var send30s;

function fnSend30s()
{
    window.clearTimeout(send30s);
    send30s = null;
    if(queueAjax.length>0)
    {
        
        //alert(queueAjax.length);
        var dataajax = queueAjax.pop();
        //alert(dataajax.XMLHttpRequestObject+' '+dataajax.url);
        dataajax.dem = dataajax.dem+1;
        if(dataajax.dem<1)
        DataReturn(dataajax.url, dataajax.data, dataajax.callback ,dataajax.thamso ,dataajax.method,dataajax.type,dataajax.XMLHttpRequestObject,dataajax.dem);
        else
        {   
             delete dataajax.XMLHttpRequestObject;
             delete dataajax;
        }
    }
}

function taorequestAjax()
{
   try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
  try { return new XMLHttpRequest();                   } catch(e) {}
  alert("XMLHttpRequest not supported");
  return null; 
}
function DataReturn(url, data, callback ,thamso ,method,type,XMLHttpRequestObject,dem)// utien    neu ko duoc huy  
{ 
  data =(data==null)?"random="+Math.random():data;
  var allow = true;
  var hientai = getQueue(url,callback,thamso);
  if(hientai==null)
  {   
    if(XMLHttpRequestObject==null||XMLHttpRequestObject==false)
       XMLHttpRequestObject = taorequestAjax();
    hientai = {url:url, data:data, callback:callback ,thamso:thamso ,method:method,type:type,XMLHttpRequestObject:XMLHttpRequestObject,dem:((dem==null)?0:dem)};   
  }
  else
  {  hientai.data = data;allow = false;}
//  else
//  {
//        if(hientai.XMLHttpRequestObject==null)
//        //    delete hientai.XMLHttpRequestObject
//        hientai.XMLHttpRequestObject = taorequestAjax();
////        else
////        {  alert("Qua Tai Cho 30s thuc hien tiep.");  allowRun=false;}
//  }   
  queueAjax.push(hientai);
  //alert(url+'  '+data)
  if(send30s!=null)
    window.clearTimeout(send30s);
  send30s = window.setTimeout(fnSend30s,10000);
      
 
      
      //alert(queueAjax.length);
  //else
  if(allow)
  {
     
      if(hientai.XMLHttpRequestObject) {
       
        hientai.XMLHttpRequestObject.onreadystatechange = 
        function(ht) {return function() { 
            if (ht.XMLHttpRequestObject.readyState == 4)
            {
                if (ht.XMLHttpRequestObject.status == 200) {
                  if(ht.type=="text")
                    ht.callback(ht.XMLHttpRequestObject.responseText,ht.thamso); 
                  if(ht.type=="xml")
                    ht.callback((window.ActiveXObject)?ht.XMLHttpRequestObject.responseXML.childNodes[1]:
                    ht.XMLHttpRequestObject.responseXML.childNodes[0],ht.thamso);   
                   
                
              //  fnSend30s();
                   //alert(1);
                   //ht.XMLHttpRequestObject.stop();
                   delete ht.XMLHttpRequestObject;
                    var dq =getQueue(ht.url,ht.callback,ht.thamso);
                    
                    delete dq;  
                } 
            }               
         } 
        } (hientai);
         
      
         hientai.XMLHttpRequestObject.open(hientai.method, hientai.url); 
          hientai.XMLHttpRequestObject.setRequestHeader('Content-Type', 
          'application/x-www-form-urlencoded');
           hientai.XMLHttpRequestObject.setRequestHeader("Content-length", hientai.data.length);
           hientai.XMLHttpRequestObject.setRequestHeader("Connection", "close"); 
        hientai.XMLHttpRequestObject.send(hientai.data); 
      }
  }
}
function DataReturnXml(url, data, callback ,thamso ,method)
{
    DataReturn(url, data, callback ,thamso ,method,"xml")
}
function DataReturnText(url, data, callback ,thamso ,method)
{
    DataReturn(url, data, callback ,thamso ,method,"text")
}
function getOfIndex(node,i)
{
    if(window.ActiveXObject)
    return node.childNodes[i];
    return node.childNodes[i*2+1];
}

function getValueNode(node)
{
    try{
    return node.firstChild.nodeValue;
    }catch(e){}
    return '';
}
function getLength(node)
{
    try{
    if(window.ActiveXObject)
    return node.childNodes.length;
    return Math.round(node.childNodes.length/2-1);
    }catch(e){}
    return 0;
}
function getByTag(node,tagName)
{
    try{
    for(var i=0;i<node.childNodes.length;i++)
       if(node.childNodes[i].nodeName==tagName)
        return node.childNodes[i];
    }catch(e){}
    return null;
}
function getJSon(item,root)
{
    var data = new Array();    
    for(var i=0;i<getLength(root);i++) 
    {     
        var row = getOfIndex(root,i);
        if(row.nodeName == item)
        {
            var drow = new Object();
            for(var j=0;j<getLength(row);j++)  
             {
                var node =getOfIndex(row,j);
                drow[node.nodeName]=getValueNode(node);
             }  
             data.push(drow);
        }
    }
    return data;
}
function getNodeOfItem(item,root)
{
    var data = new Array();    
    for(var i=0;i<getLength(root);i++) 
    {     
        var row = getOfIndex(root,i);
        if(row.nodeName == item)
            return row;
     }
     return null;
} 
