/**
*  sajax submit callback function

*  @return null
*/
function sajaxSubmit_cb(z){
//alert('sajaSubmi-cb\r\n'+z);
	var sio = new sajaxIO();
	Res= sio.getMsg(z);
	//document.getElementById("msgbox").innerHTML = msghead + Res.Content + msgtail;
	sio.executeJsFunction(Res.JsFunction) ;
	//listall();
}
function x__displayProgram() {
	sajax_do_call("_displayProgram",x__displayProgram.arguments);
					  
}

/**
*  sajax submit

*  @return null
*/
function x_sajaxSubmit() {
	sajax_do_call("sajaxSubmit",x_sajaxSubmit.arguments);
}

/**
*  packet information to object;

*  @param string RecCode return code;
*  @param string jsFunction javascript to execute;
*  @param string Contentdisplay content;
*  @param string other display content;
*  @param string tagid display div;
*  @param string divid display div;
*  @return object;
*/
function Response(RetCode,jsFunction,Content,other,tagid,divid) {
   this.RetCode = RetCode;   	// return code
	this.JsFunction = trim(jsFunction); //  javascript to execute 
	this.Content = Content; 	// display content .
	this.Other = other; 	// display content .
	this.TagId = tagid; 	// display div  .
	this.DivId = divid; 	// display div  .
	return this;
}
function sajaxIO() {	
	this.break_up_char = "+++L+++";
	this._Debug=false;
	return this;
}

/**
*  parse xml content received from server;

*  @param z the xml content received from server;
*  @return object
*/
sajaxIO.prototype.getMsg = function (z){
	if(typeof (this.break_up_char)=="undefined") break_up_char = "+++L+++";
	else break_up_char = this.break_up_char;
	var zz = z.split(break_up_char);
	if(this._Debug)
		alert(z);
	//instantiate the W3C DOM Parser
	var parser = new DOMImplementation();

	//load the XML into the parser and get the DOMDocument
	var domDoc = parser.loadXML(zz[1]);

	//get the root node (in this case, it is Response)
	var docRoot = domDoc.getDocumentElement();
	//get the first "TAG1" element
	var tag1 = docRoot.getElementsByTagName("JsFunction").item(0);
	var tag2 = docRoot.getElementsByTagName("Content").item(0);
	var tag3 = docRoot.getElementsByTagName("RetCode").item(0);
	var tag4 = docRoot.getElementsByTagName("Other").item(0);
	var obj5 = docRoot.getElementsByTagName("DivId");
	var obj6 = docRoot.getElementsByTagName("TagId");
	var tag5;
	if(obj5!=null)
		tag5 = obj5.item(0);
	if(obj6!=null)
		tag6 = obj6.item(0);
	var jsfun = "";
	var content = "";
	var retcode = "";
	var other = "";
	var tagid = "";
	var divid = "";

	if(tag1.getFirstChild()) jsfun = tag1.getFirstChild().getNodeValue(); 
	if(tag2.getFirstChild()) content = tag2.getFirstChild().getNodeValue(); 
	if(tag3.getFirstChild()) retcode = tag3.getFirstChild().getNodeValue(); 
	if(tag4.getFirstChild()) other = tag4.getFirstChild().getNodeValue(); 
	if(obj5!=null)
		if(tag5.getFirstChild()) divid = tag5.getFirstChild().getNodeValue(); 
	if(obj6!=null)
		if(tag6.getFirstChild()) tagid = tag6.getFirstChild().getNodeValue(); 
	res = new Response(retcode,jsfun,content,other,tagid,divid);
	return res;
	//return content;
}

/**
*  convert key and value to xml format;

*  @param string k key;
*  @param string v value;
*  @return string.
*/
sajaxIO.prototype.getXMLValue = 	function(k,v){
	var len = k.length;
	if(len != v.length) return "error";

	var xmlVal = "<Input>";
	for(var i=0;i<len;i++){
		xmlVal += "<F><K>"+k[i]+"</K><V>"+v[i]+"</V></F>";
	}
	xmlVal += "</Input>";
	return xmlVal;
}

/**
*  convert key and value into xml format,and insert into a xml string;

*  @param string k key;
*  @param string v value;
*  @param string p_xml xml string;
*  @return  string.
*/
sajaxIO.prototype.insertXMLValue = function(k,v,p_xml){
	var len = k.length;
	if(len != v.length) return "error";

	var val = p_xml.split("</Input>");
	var xmlVal = val[0]; 

	for(var i=0;i<len;i++){
		xmlVal += "<F><K>"+k[i]+"</K><V>"+encodeURIComponent(v[i])+"</V></F>";
	}
	xmlVal += "</Input>";
	return xmlVal;

}

/**
*  convert html string to text string;

*  @param string p_value
*  @return string text
*/
sajaxIO.prototype.validValue = function(p_value){
	if(typeof(p_value)=='undefined') return "";
	var val = p_value.replace(/&/g,"&amp;");
	val = val.replace(/>/g,"&gt;");
	val = val.replace(/</g,"&lt;");
	val = val.replace(/"/g,"&quot;");
	val = val.replace(/'/g,"&apos;");
	return val;

}

/**
*  get key and value in a form ,and convert to xml format;

*  @param string p_form
*  @return string xml
*/
sajaxIO.prototype.keyValue = function (p_form){
	// < ==> &lt;  > == > &gt; " ==> &quot; ' &pos; 
	var keys = new Array();
	var values = new Array();
	var frm;
	if(typeof(p_form)=='object') frm = p_form;
	else frm = eval("document."+p_form);
	var elements = frm.elements;
	var len = elements.length;
	for(var i=0;i<len;i++){
		if(elements[i].type){
			switch(elements[i].type){
				case "checkbox":
						if(elements[i].checked){
							keys[i]=elements[i].name;
							values[i]=encodeURIComponent(elements[i].value);
						}
						 break;
				case "radio":
						if(elements[i].checked){
							keys[i]=elements[i].name;
							values[i]=encodeURIComponent(this.validValue(elements[i].value));
						};
						break;
				default:
						 keys[i]=elements[i].name;
						 values[i]=encodeURIComponent(this.validValue(elements[i].value));
						break;
			}
		}
		else{
			keys[i] = elements[i].name;
			values[i] = encodeURIComponent(this.validValue(elements[i].value));

		}
	}

	return this.getXMLValue(keys,values);
}

/**
*  excute javascript function;

*  @param string JsFunction javascript function;
*  @return null.
*/
sajaxIO.prototype.executeJsFunction = function (JsFunction) {
	if(JsFunction != ""){
		eval(JsFunction+";");
	}
}
// ex. Op=add&QuickAdd=1

/**
*  set debug

*  @return null.
*/
sajaxIO.prototype.setDebug = function(){
	this._Debug=true;
}

/**
*  set uri

*  @param string str
*  @return null.
*/
sajaxIO.prototype.setUri = function(str){
	uri_in_sajax=str;
}

/**
*  packet all datas to  xml format and submit;

*  @return null.
*/
sajaxIO.prototype.sajaxSubmit = function(){
	var a=sajaxIO.prototype.sajaxSubmit.arguments;
	var p_param = a[0];	// param, Op=mod&F
	var p_form = '';	// form
	if(typeof(a[1])!='undefined') p_form = a[1];	// form
	callback = sajaxSubmit_cb;
	if(typeof(a[2])!='undefined') callback = eval(a[2]);
	callsajax = x_sajaxSubmit;
	if(typeof(a[3])!='undefined') callsajax = eval("x_"+a[3]);
   if(typeof(a[4])!='undefined') uri_in_sajax=a[4];//LUOYING
	if(p_form!='') 
		var vars = this.keyValue(p_form);
	else 
		var vars = "<Input></Input>";

	var k = new Array();
	var v = new Array();
	ret = p_param.split("&");
	var len = ret.length;
	for(var i=0;i<len;i++) {
		param = ret[i].split("=");
		k[i] = param[0];
		v[i] = param[1];
	}
	if(this._Debug)
		alert(this.insertXMLValue(k,v,vars));
	callsajax(this.insertXMLValue(k,v,vars),callback);
}
