﻿//debugger;
var pubQueue                      = new Array();
var pubObject                     = ["Columns","Rows","Clear","List"];
var pubSign                       = "|||";
var pubSignDB                     = "|&|";
var pubSignList                   = "|$|";

function newObj()
{     
   Object.prototype.Columns       = new Object();
   Object.prototype.Rows          = new Object();
   Object.prototype.Columns.Add   = addColumns;   
   Object.prototype.Rows.Add      = addRows;
   Object.prototype.List          = new Object();
   Object.prototype.List.Add      = addList;
   Object.prototype.Clear         = clearObj;
   var objDictionary              = new Object();   
   objDictionary.Rows["Count"]    = 0;
   objDictionary.Columns["Count"] = 0;
   objDictionary.List["Count"]    = 0;
   return objDictionary;
}
function addColumns(name)
{
   if (name==null  || name=="") { return ; }
   if (this.Columns[name]==null)   
   {   
       this.Columns[name]                 = name;
       this.Columns[this.Columns.Count]   = name;              
       for(var i=0;i<this.Rows.Count;i++) { this.Rows[i][name] = ""; }
       this.Columns.Count++;
   }
}
function addRows()
{
   if (this.Rows[this.Rows.Count]==null)
   {
     this.Rows[this.Rows.Count] = new Object();     
     for(var i=0;i<this.Columns.Count;i++) { this.Rows[this.Rows.Count][this.Columns[i]] = ""; }
     this.Rows.Count++;
   }   
}
function addList(value)
{
   if (value==null  || value=="") { return ; }   
   if (this.List[this.List.Count]==null)
   {   
     this.List[this.List.Count] = value;
     this.List.Count++
   }
}
function clearObj()
{
   Object.prototype.Columns       = new Object();
   Object.prototype.Rows          = new Object();
   Object.prototype.List          = new Object();
   this.Rows.Count                = 0;
   this.Columns.Count             = 0;
   this.List.Count                = 0;
}

function getXmlHttpRequest()
{
   var xmlhttp = null;
   if(window.ActiveXObject)
   {
        var ieArr=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
        for(var i=0;i<ieArr.length;i++)
        {
        	try
            {
              xmlhttp= new ActiveXObject(ieArr[i]);
              if(xmlhttp!=null) { break; }
            }
            catch(e){}
        }            
   } 
   else if(window.XMLHttpRequest)
   {
        xmlhttp= new XMLHttpRequest();
   }
   return xmlhttp;
}

function getXmlDomRequest()
{ 
   var xmlDom = null;
   if(window.ActiveXObject)
   {        
        xmlDom = new ActiveXObject("Microsoft.XMLDOM");            
   } 
   else if(document.implementation && document.implementation.createDocument)
   {
        xmlDom = document.implementation.createDocument("","doc",null);
   }
   return xmlDom;
}

function getRequestStr(url) 
{
     if (url==null || url=="") { return ""; }
     var xmlhttp = getXmlHttpRequest();
     if (xmlhttp != null)
     {         
         xmlhttp.open('GET', url, false);
         xmlhttp.send(null);
         return xmlhttp.responseText;
     }
     return "";
}

function postRequestStr(url,obj,asyncfun,state)
{        
	if (url!=null && url!="")
	{
	    var Params = [url,obj,asyncfun,state];
	    pubQueue.push(Params);
	    if (pubQueue.length==1) { exeRequestStr(url,obj,asyncfun,state);}
	}
	else
	{
	    if (pubQueue.length>0)
	    {
	        var Params = pubQueue[0];
            exeRequestStr(Params[0],Params[1],Params[2],Params[3]);
        }
	}
}

function exeRequestStr(url,obj,asyncfun,state)
{
	if (url==null   || url=="")   { return ; }    
    if (state==null)              { state=true;}
	var postContent = "";
    xmlhttp         = getXmlHttpRequest();	
    if (xmlhttp != null)
    {
        xmlhttp.onreadystatechange = function postRequestStrAnswer() 
        {  
           if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
           {                
                try
                {   
                   var objText = getReturnStr(xmlhttp.responseText);
                   if (state==true && objText!=null)     { RestoreHtml(objText);}
                   if (asyncfun!=null && objText!=null ) { asyncfun(objText); }
                }
                catch(e) { alert(e); }
                pubQueue.shift(); 
                postRequestStr();
           }
        }
        xmlhttp.open("POST",url,true);	
        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Accept-Encoding", "gzip, deflate");	    
        if (obj!=null)   { postContent  = postConversionStr(obj);}
        if (state==true) { postContent += "&" + postFormStr(); }
        xmlhttp.send(postContent);
    }
}

function postConversionStr(obj){
    if (obj==null) { return ""; }
    var strContent = "";    
    for (var i in obj )
    {     
       var k=0;
       for(var j=0;j<pubObject.length;j++)
       {
          if (i==pubObject[j]) { k=1;break; }
       }
       if (k==0) { strContent += i + "=" + obj[i] + "&"; }              
    }
    if (strContent != "") {strContent = strContent.substring(0,strContent.length-1);}
    return strContent;
}

function postFormStr()
{
    var forms       = document.forms;
    var postContent = "";
    for (var idx=0;idx<forms.length;idx++)
    {    
        var elements = forms[idx].elements;
        var element;            
        var i;        
        for(i=0;i<elements.length;++i)
        {                    
            var element=elements[i];            
            if(element.type=="text" || element.type=="textarea" || element.type=="hidden")
            {
                postContent += encodeURIComponent(element.id) + "=" + encodeURIComponent(element.value) + "&";
            }
            else if(element.type=="select-one"||element.type=="select-multiple")
            {
                var options=element.options,j,item;            
                for(j=0;j<options.length;++j)
                {            
                    item=options[j];            
                    if(item.selected) { postContent += encodeURIComponent(element.id) + "=" + encodeURIComponent(item.value) + "&"; }
                }
            }
            else if(element.type=="checkbox"||element.type=="radio")
            {
                if(element.checked) { postContent += encodeURIComponent(element.id) + "=" + encodeURIComponent(element.value) + "&"; }
            }
            else if(element.type=="file")
            {
                if(element.value != "") { postContent += encodeURIComponent(element.id) + "=" + encodeURIComponent(element.value) + "&"; }
            } 
            else
            {                                  
                postContent += encodeURIComponent(element.id) + "=" + encodeURIComponent(element.value) + "&";
            }
        }
    }   
    return postContent;
}

function getReturnStr(str)
{
   if (str==null || str=="") { return ; }
   var obj           = newObj();
   var alContent     = str.split(pubSign);
   var alContentList = str.split(pubSignList);   
   var alContentDB   = str.split(pubSignDB);
   for (var i=0;i<alContent.length;i++)
   {
      if (alContent[i].indexOf(pubSignDB)!=-1)   { alContent[i]=alContent[i].substring(0,alContent[i].indexOf(pubSignDB)); } 
      if (alContent[i].indexOf(pubSignList)!=-1) { alContent[i]=alContent[i].substring(0,alContent[i].indexOf(pubSignList)); } 
      if (alContent[i]!=null && alContent[i]!="")
      {          
          var key   = alContent[i].substring(0,alContent[i].indexOf("="));
          var value = alContent[i].substring(alContent[i].indexOf("=")+1,alContent[i].length); 
          obj[key]  = value;          
      }
   }   
   for (var i=0;i<alContentList.length;i++)
   {   
      if (alContentList[i].indexOf(pubSign)!=-1)   { alContentList[i]=alContentList[i].substring(0,alContentList[i].indexOf(pubSign)); }
      if (alContentList[i].indexOf(pubSignDB)!=-1) { alContentList[i]=alContentList[i].substring(0,alContentList[i].indexOf(pubSignDB)); }
      if (alContentList[i]!=null && alContentList[i]!="")
      {          
          var number = alContentList[i].substring(0,alContentList[i].indexOf("="));
          var value  = alContentList[i].substring(alContentList[i].indexOf("=")+1,alContentList[i].length); 
          obj = FillInList(obj,number,value);
      }
   }
   var FieldName = "",count=1,k=0;
   for (var i=0;i<alContentDB.length;i++)
   {
      if (alContentDB[i].indexOf(pubSign)!=-1)     { alContentDB[i]=alContentDB[i].substring(0,alContentDB[i].indexOf(pubSign)); }
      if (alContentDB[i].indexOf(pubSignList)!=-1) { alContentDB[i]=alContentDB[i].substring(0,alContentDB[i].indexOf(pubSignList)); }
      if (alContentDB[i]!=null && alContentDB[i]!="")
      {   
          var name  = alContentDB[i].substring(0,alContentDB[i].indexOf("="));
          var value = alContentDB[i].substring(alContentDB[i].indexOf("=")+1,alContentDB[i].length);
          if (obj.Columns[name]!=null && k==0) { FieldName = obj.Columns[name]; k=-1; }
          if (obj.Columns[name] ==FieldName)   { count     = count + 1;obj.Rows.Count=count;}
          obj = FillInDB(obj,name,value,count-1);
       }
   }   
   return obj;
}

function FillInList(obj,i,value)
{
   if (obj==null)         { return ; }
   if (i==null)           { return ; }
   if (value==null)       { value =""; }
   if (obj.List.Count<=0) { obj.List.Count  = 0;}
   if (obj.List[i]==null) { obj.List.Count++; }
   obj.List[i] = value;
   return obj;
}

function FillInDB(obj,name,value,count)
{
   if (obj==null)               { return ; }
   if (name==null  || name=="") { return ; }
   if (value==null)             { value =""; }    
   if (count==null || count<0)  { return ; }     
   if (obj.Rows.Count<=0)       { obj.Rows.Count  = 1;}
   if (obj.Rows[count]==null)   { obj.Rows[count] = new Object();}
   if (obj.Columns[name]==null)   
   {
       obj.Columns[obj.Columns.Count]  = name;
       obj.Columns[name]               = name;
       obj.Columns.Count++;
   }
   obj.Rows[count][name]               = value;
   return obj;
}

function RestoreHtml(obj)
{
    if (obj==null) { return ; }
    for (var i in obj )
    {  
       var k=0;
       for(var j=0;j<pubObject.length;j++)
       {
           if (i==pubObject[j]) { k=1;break; }
       }
       if (k==0)
       {
           var element = document.getElementById(i);
           if (element!=null)
           {
              if(element.type=="text" || element.type=="textarea" || element.type=="hidden")
              {
                element.value = obj[i];
              } 
              else if(element.type=="select-one"||element.type=="select-multiple")
              {
                element.value = obj[i];
              }
              else if(element.type=="checkbox"||element.type=="radio")
              {        
                if (element.value == obj[i]){ element.checked=true; }
              }
              else if(element.type=="file")
              {
                element.value = obj[i];
              } 
              else
              { 
                element.value = obj[i];
              } 
           }
       }
    }
}

function ResetHtml()
{
    var forms       = document.forms;
    var postContent = "";
    for (var idx=0;idx<forms.length;idx++)
    {    
        var elements = forms[idx].elements;
        var element;            
        var i;        
        for(i=0;i<elements.length;++i)
        {                    
            var element=elements[i];            
            if(element.type=="text" || element.type=="textarea" || element.type=="hidden")
            {
                element.value = "";
            }
            else if(element.type=="select-one"||element.type=="select-multiple")
            {
                var options=element.options,j,item;   
                if (options.length>0) { element.value=options[0].value; }
            }
            else if(element.type=="checkbox"||element.type=="radio")
            {        
                if(element.checked==true) { element.checked = false; }                  
            }
            else if(element.type=="file")
            {
                element.value = "";
            } 
            else
            {                                  
                element.value = element.value;
            }
        }
    }   
}

function ReadParams(name)
{    
    var str=window.location.search;
    var postContent = "";
    if (str.indexOf(name)!=-1)
    {
       var start = str.indexOf(name) + name.length + 1;
       var end   = str.indexOf("&",start);
       if (end==-1){ postContent = str.substring(start); }
       else { postContent = str.substring(start,end); }
    }
    return postContent;
}
