XC = XHConn();


var active_form;
var submit_call_fun = new function(){};

/*
使用XML HTTP 方式提交数据，优点是可提交数据多的表单；缺点是控制不灵活
xh_submit_form(表单名称, 提交网址, 返回结果回调函数)

如：
<form action=# name=form1 onsubmit="if(autocheck(this)) xh_submit_form(this, 'index.php?action=update',  show_message); return false;">
*/
function xh_submit_form(frm, url, call_fun){
	active_form = frm;
	if(call_fun)submit_call_fun = call_fun;
	try{
		var data = "";
		for(var i = 0; i < frm.elements.length; i++){
			//with(frm.elements[i]){ 
				var form_item	=	frm.elements[i];
				var type	=	form_item.getAttribute('type');
				var name	=	form_item.getAttribute('name');
				var value	=	form_item.value;
				if(type == 'radio' && !form_item.checked){
					continue;
				}
				if(type == 'checkbox' &&  !form_item.checked){
					continue;
				}
				if(name == 'btn_submit' ||  name == 'btn_return'){
					continue;
				}		
				data += "&" + name + "=" + escape(value);
			//}
		}
	
		XC.connect(url, "POST", data, show_message)
	}catch(e){
		//alert('submit:'+e);
		frm.btn_submit.disabled=false;
		//frm.btn_return.disabled=false;
	}
}

/*
使用 js src 方式提交数据，优点是支持服务器判断的js脚本推送，可灵活控制；缺点是不适合大数据的提交
用法：
	xh_submit_form(表单名称, 提交网址, 返回结果回调函数)
服务器端：
	需要编写一个javascript escape的解码函数

示范：
	<form action=# name=form1 onsubmit="if(autocheck(this)) js_submit_form(this, 'index.php?action=update'); return false;">
*/
function js_submit_form(frm, url){
	active_form = frm;

	try{
		var data = "";
		for(var i = 0; i < frm.elements.length; i++){
			//with(frm.elements[i]){ 
				var form_item	=	frm.elements[i];
				var type	=	form_item.getAttribute('type');
				var name	=	form_item.getAttribute('name');
				var value	=	form_item.value;
				if(type == 'radio' && !form_item.checked){
					continue;
				}
				if(type == 'checkbox' &&  !form_item.checked){
					continue;
				}	
				if(name == 'btn_submit' ||  name == 'btn_return'){
					continue;
				}
				if(value.length>255){
					continue;
				}	
				data += "&" + name + "=" + escape(value);
			//}
		}

		load_script(url  + data);
	}catch(e){
		//alert('submit:'+e);
		try{frm.btn_submit.disabled=false;}catch(e){}
		//frm.btn_return.disabled=false;
	}
}
function reset_submit(){
	active_form.btn_submit.disabled=false;
}
function show_message(oXML){
	try{
		var data = unescape(oXML.responseText); //unescape();
 		if(data.length>0 && data.length<500)alert(data);
		//document.write(data);
		active_form.btn_submit.disabled=false;
		//active_form.btn_return.disabled=false;
	}catch(e){
		//alert('rcv:'+e);
	}
	try{
		submit_call_fun();
	}catch(e){
	}
}

//ajax类
/*
如：
XC = new XHConn();

POST方式提交：
XC.connect(url, "POST", dataArray, 返回结果回调函数);

GET方式提交：
XC.connect(url, "GET", dataArray, 返回结果回调函数);
*/
function XHConn()
{
	var xmlhttp, bComplete = false;
	try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");}
	catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) { try { xmlhttp = new XMLHttpRequest(); }
	catch (e) { xmlhttp = false; }}}
	if (!xmlhttp) return null;
	
	this.connect = function(sURL, sMethod, sVars, fnDone)
	{
		if (!xmlhttp) return false;
		bComplete = false;
		sMethod = sMethod.toUpperCase();

		try {
			if (sMethod == "GET")
			{
				//if(sVars.indexOf('&') != -1){sVars += "&timestamp=" + new Date().getTime();}
				xmlhttp.open(sMethod, sURL+"?"+sVars, true);
				sVars = "";
			}
			else
			{
				try{ 
					xmlhttp.open(sMethod, sURL, true);

					xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
					//xmlhttp.setRequestHeader("Content-Type","text/xml;charset=gb2312");
					
					xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				}catch(e){
					//alert(e);
				}


			}
			xmlhttp.onreadystatechange = function(){
				if (xmlhttp.readyState == 4 && !bComplete)
				{
					if(xmlhttp.status == 200){
						bComplete = true;
						fnDone(xmlhttp);
					}else{
						
					}

				}


			};

			//if(sVars.indexOf('&') != -1){sVars += "&timestamp=" + new Date().getTime();}
			xmlhttp.send(sVars );
		}
		catch(z) {return false; }
		return true;
	};
	return this;
}
function load_script(url) {
	try{
		//if(url.indexOf('?') != -1){url += "&timestamp=" + new Date().getTime();}
		var script = document.createElement("script");
		script.type = "text/javascript";
		script.src = url;
		document.getElementsByTagName("head")[0].appendChild(script);
	}catch(e){
		//alert(e);
	}

}

function load_json(url, call_fun){
	var XC = new XHConn();
	XC.connect(url, "POST", null, function(req){
			
			if(!req){
				call_fun(null);
			}else{
				var str = unescape(req.responseText);
				if(str.length > 0){
					call_fun(eval('(' + str + ')'));
				}else{
					//alert(req)

				}
			}
			
			
				
		});
}
