
/**

   Sample for the AjaxObject   
   var  ajaxObj=new AjaxObject();
   var text=ajaxObj.postReturnHtml("/kri/js/xml.jsp?code=1");
   
**/
function AjaxObject(muteConnectionFailedAlert,callBackFunction) {
  if (document.all) {
    this.httpObj = new ActiveXObject("Microsoft.XMLHttp"); 
  } else {
    this.httpObj = new XMLHttpRequest();
  }

 //public functions

  this.getReturnArray = httpGetReturnArray;
  this.postReturnArray = httpPostReturnArray;

  this.getReturnHtml = httpGetReturnHtml;
  this.postReturnHtml = httpPostReturnHtml;

  this.muteConnectionFailedAlert=muteConnectionFailedAlert;

  this.callBackFunction=callBackFunction;



  //private functions
  this.httpGet = httpGet;
  this.httpPost = httpPost;

 
  this.arrayDelim = "|+_";
  this.lineStart = "_+|";
  
}

String.prototype.trim = function()
{
    //use regular expr to replace pre- or post- blank chars with empty string.
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.startWith = function (sStr) {
	var s = this.substring(0, sStr.length);
	return s.toLowerCase() == sStr.toLowerCase();
}

function httpPostReturnHtml(URL,edpAppletObj) {
	var ret =null;
	//handle offline model  by Alan 2009/07/31
	if(edpAppletObj!=null ){
      var json=urlToJson(URL);
      ret=edpAppletObj.executeToJson(jsonToString(json));
	 
     
	}else{
		//It seams not work,open this will affect the autoinput control
		//URL=encodeURI(URL);
        ret = this.httpPost(this.httpObj, URL);


	}
	
	
	return ret;
}

function httpGetReturnHtml(URL) {	
	var ret = this.httpGet(this.httpObj, URL);
	return ret;
}


function httpGetReturnArray(URL) {	
	var ret = this.httpGet(this.httpObj, URL);
	if (ret == null || !ret.startWith(this.lineStart))
		return null;
	ret = ret.substring(3);	
	
	if (ret && ret != null && ret != '') {
		return ret.split(this.arrayDelim);
	} else
		return null;
}

function httpPostReturnArray(URL) {
	var ret = this.httpPost(this.httpObj, URL);
	if (ret == null || !ret.startWith(this.lineStart))
		return null;
	ret = ret.substring(3);

	if (ret && ret != null && ret != '') {
		return ret.split(this.arrayDelim);
	} else
		return null;
}


function httpGet(oXmlHttp,URL) {
  oXmlHttp.open('GET',URL,false);
  oXmlHttp.send(null);

  if (oXmlHttp.readyState == 4) {
       if (oXmlHttp.status == 200) {         
        }else{
		  alert("Fail to request server,request status: "+oXmlHttp.status+"!");	
		  return null;

		}
   }


  var response=oXmlHttp.responseText;
  if (response!=null)
    return response.trim();
  else
    return null;
}


function httpPost(oXmlHttp,URL,data) {
  if ((arguments.length<2) || (arguments.length>3)) {
    alert("Invalid HttpPost Arguments.");
    return null;
  }

var synFlag=false;
if(this.callBackFunction) {
       synFlag=true;

}

var localCallBackFunction=this.callBackFunction;


 var result= oXmlHttp.open('POST',URL,synFlag);
 
 if(synFlag) oXmlHttp.onreadystatechange =function (){

   if(oXmlHttp.readyState == 4 && oXmlHttp.status==200){    
	 
       localCallBackFunction(oXmlHttp.responseText);
    }
 }






  if (arguments.length==3)
    oXmlHttp.send(data);
  else
    oXmlHttp.send("");




 if(!synFlag) {

		  if (oXmlHttp.readyState == 4) {
			   if (oXmlHttp.status == 200) {         
				}else{
				  if(!this.muteConnectionFailedAlert)  alert("Fail to request server,request status: "+oXmlHttp.status+"!");	
				  return null;

				}
		   }
		   var response=oXmlHttp.responseText;
		  if (response!=null)
			return response.trim();
		  else
			return null;
 }else{



     return null;
      

 }



}






//form to json code

function getFormJson(obj)                            {//提取form内容生成json格式
 var inputlist=obj.getElementsByTagName("INPUT");
 var selectlist=obj.getElementsByTagName("SELECT");
 var textarealist=obj.getElementsByTagName("TEXTAREA");
 var strJson = "{";
 var chk_array=new Array();  
 var rdo_array=new Array();
 for(var i=0;i<inputlist.length;i++){
  switch(inputlist[i].type){
   case "text":
    strJson += "\'" + inputlist[i].name +"\':\'"+encodeURIComponent(inputlist[i].value)+"\',";
   break;
   case "password":
    strJson += "\'" + inputlist[i].name +"\':\'"+encodeURIComponent(inputlist[i].value)+"\',";
   break;
   case "checkbox":
     var k=0;
     for(var j=0;j<chk_array.length;j++){
         if(inputlist[i].name==chk_array[j][0]){k=k+1;break;}
     }
     if(k==0) chk_array[chk_array.length] = [inputlist[i].name];
   break;
   case "radio":
     var k=0;
     for(var j=0;j<rdo_array.length;j++){
         if(inputlist[i].name==rdo_array[j][0]){k=k+1;break;}
     }
     if(k==0) rdo_array[rdo_array.length] = [inputlist[i].name];
   break;
   case "hidden":
     strJson += "\'" + inputlist[i].name +"\':\'"+encodeURIComponent(inputlist[i].value)+"\',";
   break;
   default:break;
  }
 }
 for(var i=0;i<chk_array.length;i++){//get check box list
     var temp="";
     var k=0;
     for(var j=0;j<inputlist.length;j++){
      if(chk_array[i][0]==inputlist[j].name && inputlist[j].checked==true){
             if(k>0) temp+=",";
       temp += inputlist[j].value;        
       k++;
      }
     }
     strJson += "\'" + chk_array[i][0] +"\':\'"+temp+"\',";
 }
 for(var i=0;i<rdo_array.length;i++){//get radio list
     var temp="";
     for(var j=0;j<inputlist.length;j++){
      if(rdo_array[i][0]==inputlist[j].name && inputlist[j].checked==true){
       temp+= inputlist[j].value;        
      }
     }
     strJson += "\'" + rdo_array[i][0] +"\':\'"+temp+"\',";
 }
 for(var i=0;i<selectlist.length;i++){
  if(selectlist[i].options.length>0){
   var temp="";
   var sel=selectlist[i].options.selectedIndex;
   if(sel>-1) temp=selectlist[i].options[sel].value
   strJson+="\'"+selectlist[i].name+"\':\'"+temp+"\',";
  }else{
     strJson+="\'"+selectlist[i].name+"\':\'\',";
  }
 }
 for(var i=0;i<textarealist.length;i++){
  var str=textarealist[i].value;  
    str=str.replace(/\r\n/g,'') 
  strJson += "\'" + encodeURIComponent(textarealist[i].name) +"\':\'"+str+"\',";
 }
 if(strJson.length>1)strJson=strJson.substr(0,strJson.length-1);
 strJson+="}";

  var myObject = eval('(' + strJson + ')');
  return myObject;
}







// form - the form to rechieve formContent
function getFormContent(form) {
var elements = form.elements;// Enumeration the form elements
var element;
var i;
var postContent = "";// Form contents need to submit

for(i=0;i<elements.length;++i) {
var element=elements[i];

if(element.type=="text" || element.type=="textarea" || element.type=="hidden") {
postContent += encodeURIComponent(element.name) + "=" + 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.name) + "=" + encodeURIComponent(item.value) + "&";
}
}
} else if(element.type=="checkbox"||element.type=="radio") {
if(element.checked) {
postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";
}
} else if(element.type=="file") {
if(element.value != "") {
postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";
}
} else {
postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";
}
}

return postContent;

}




