//---------------------------------------------
//POST数据
//参数1 formID 表单ID POST的url会从表单的action里获得
//参数2 回调函数 不填写会默认调用postBackCall
//--------------------------------------------------
function postSend(formID) 
{

	
	if(arguments.length==1)	
	
		AJAXFORM(formID,"postBackCall");//FormID,回调函数,参数
	
	else
		AJAXFORM(formID,arguments[1])
}


//----------------------------------------
//默认post数据回调函数
//返回
//requestHttp返回一个xmlHttp对象
//---------------------------------------
function postBackCall(requestHttp)
{
	parseXml(requestHttp)
}


//---------------------------------------------
//GET数据
//参数1.表单ID
//参数2.回调函数 不填写会默认调用postBackCall
//---------------------------------------------
function getSend(url)
{
	if(arguments.length==1)	
		AJAXCALL(url,"getBackCall");
	else
		AJAXCALL(url,arguments[1]);
}

//-------------------------------
//默认GET回调函数
//-------------------------------
function getBackCall(requestHttp)
{
	parseXml(requestHttp)
}

//-----------------------------------
//解析xml函数
//-----------------------------------
function parseXml(requestHttp)
{

			var xmlObj=requestHttp.responseXML;
			//$("errTxt").value+=xmlObj.xml;
			var errMsgObj=null
			var jsCommandObj=null
		    errMsgObj= xmlObj.getElementsByTagName("ErrMsg")?xmlObj.getElementsByTagName("ErrMsg")[0]:null;
			jsCommandObj= xmlObj.getElementsByTagName("jsCommand")?xmlObj.getElementsByTagName("jsCommand")[0]:null;
		
			if(errMsgObj!=null && jsCommandObj!=null)
			{
				arg2=getXmlNodeText(jsCommandObj)
				alert(getXmlNodeText(errMsgObj),arg2);
			}
			else if(errMsgObj)
			{
				alert(getXmlNodeText(errMsgObj))
			}
			else if(jsCommandObj)
			{	
				try{
				eval(getXmlNodeText(jsCommandObj));
				}catch(e){}
			}
			requestHttp=null;
		
}

//取得某个节点的文本
function getXmlNodeText(node) {
    var undefined;
    if (node !== null) {  // 判断节点不为空才获取
          if(node.text)	//ie
		  	return node.text
		  else
           	return  node.textContent;
    }    
    return temp
}


//------------------------------------------------------------
//	函数：AJAXCALL	ajax函数										  	
//  参数：															  			
//		url 			要请求的url									  	
//		handleResponse  回调函数
//		param			method="POST或GET",isCache="true或false,attach：扩展参数，
//								可以传递自定义的值，比如DIV的id等"    
//		例				AJAXCALL(url,"testCall","method=GET ,isCache=true")
//-----------------------------------------------------------
function AJAXCALL(url,handleResponse,param)
{
    var isCache=false;//false:no-cache or true:cache
    var method="GET";//GET or POST
	var attach="";
	if(param)
	{
	   re = / /g; 
	   param=param.replace(re, "");
	   var tmp=param.split(",");//extends param array
	   for(var i=0;i<tmp.length;i++)
	   {
		      var pa=tmp[i].substr(0,3);
			  var ct=tmp[i].split("=")[1];
		      switch (pa){

				  case "isC":
				  if(ct=="true"){
					  isCache= true; 
				  }else{
					  isCache= false; 
				  }
				  break;
				  case "met":
				  method=ct;
				  break;
				  case "att":
				  attach=ct;
				  case "sta":
					
				  break;
			  }
	    }	
	}
	if(!isCache)
	{
		var t=new Date().getTime();
		if(url.indexOf("?")>0){
	        url+="&t="+t;
		}else{
			url+="?t="+t;
		}
	}	
	var postdata=null;
	if(method=="POST"){
		purl=url.split("?");
		url=purl[0];
		postdata=purl[1];//must urlencoded first
	}
	RequestHTTP(url,handleResponse,method,postdata,attach);
}

//-----------------------------------------------
//	POST表单数据
//	参数：表单ID,回调函数,参数
//-------------------------------------------------
function AJAXFORM(formID,handleResponse,param){
var attach="";
if(param)
{
   re = / /g; 
   param=param.replace(re, "");
   var tmp=param.split(",");//extends param array
   for(var i=0;i<tmp.length;i++)
   {
		  var pa=tmp[i].substr(0,3);
		  var ct=tmp[i].split("=")[1];
		  switch (pa)
		  {

			  case "att":
			  attach=ct;
			  break;
		  }
	}
  
 }

var url=$(formID).action;
var data=getForm(formID);
//$("errTxt").value+="\n"+(data)+"\n"
RequestHTTP(url,handleResponse,"POST",data,attach);
}

//----------------------------------------
//得到表单数据
//参数：表单ID
//----------------------------------
function getForm(theFormName){
   var form = document.forms[theFormName];
   if(typeof form.name == "undefined" || form.name=="")
	   form = $(theFormName);

	var formData = "";
	var element;
  
   for (var i = 0; i < form.elements.length; i++) {
      element = form.elements[i];
      var type=element.type.toLowerCase();      
      if (type == "hidden" ||type == "text" || type == "password" || type == "textarea"){      	
       formData += element.name + "=" + escape(element.value) + "&";
	  }else if (element.type.indexOf("select") != -1) {
            formData +=  element.name + "=" + escape(element.options[element.selectedIndex].value) + "&";
      }
      else if (element.type == "checkbox") {
		 if (element.checked) formData += element.name + "=" + escape(element.value) + "&";
	  }
      else if (element.type == "radio") {
		  if (element.checked == true) formData += element.name + "=" + escape(element.value) + "&";
	  }
   }
   return formData.substring(0, formData.length - 1);
}


//------------------------------------------------------------------
//ajax核心函数
//	burl 地址
//	rdRandleResponse 回调函数
//	bmethod	发送方法 GET || POST
//	Formdata 表单数据
//	attach	参数
//------------------------------------------------------------------
function RequestHTTP(burl,rdRandleResponse,bmethod,Formdata,attach){
var http_request = false;
function doHttpRequest()
{	
       if (window.XMLHttpRequest) {
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) {
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }
        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }

    http_request.onreadystatechange=handleStateChange;	
    try
	{
		http_request.open(bmethod,burl,true);

		if(Formdata){
		http_request.setRequestHeader("Content-Length",Formdata.length);   
		http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		http_request.send(Formdata);
		}else{
			/*if(bXML){
				http_request.setRequestHeader("Content-Type","text/xml");
				//charset "text/xml;charset=utf-8";
			}else{*/
			 http_request.setRequestHeader("Content-Type","text/html");
		   // }
			 http_request.send(null);
		}
	}catch(e)
	{
		defalutOnErr(e)	
	}
	
	
}

function handleStateChange()
{
		  
	var states =["正在初始化...","正在传送数据...","成功!正在接收数据...","完成!正在解析...","完成"]
  	alert.loading(states[http_request.readyState])
  //$("txt").value+=http_request.readyState+"\n" 
  if(http_request.readyState==4 )
	{
	   if(http_request.status==200 || http_requset.status==0)
	   {
			alert.delLoading()
			if(typeof rdRandleResponse == "function"){
				 rdRandleResponse(http_request, attach);
			}else{
			eval(rdRandleResponse+"(http_request,attach)");
			}
			
	    }
		else 
		{
		  	try
			{
				throw("连接错误!\status:"+requestHttp.startus+" \r\n"+requestHttp.responseText)
			}
			catch(e){defalutOnErr(e)}
		 }

    }

	

}
doHttpRequest();
}

//------------------------------------------------------------
//默认错误处理函数
//------------------------------------------------------------
function defalutOnErr(e)
{
	
	alert(e.description);	
}

//---------------------------------------
//得到一个对象里的tagName为tag的第一个
//-------------------------------------
function getTagValue(doc, tag){
     var elems = doc.getElementsByTagName(tag)[0].firstChild.nodeValue;
     return elems; 
}

//-----------------------------
//getElementById()简化
//-----------------------------
function $(obj){
  return document.getElementById(obj);	
}


//-----------------------------------------
// document.getElementsByTagName 简化
//--------------------------------------
function $T(obj){
  return document.getElementsByTagName(obj).value;
}


function $U(str){
  return encodeURIComponent(escape(str));	
}

function $E(str){
  return escape(str);	
}

//-------------------------------------------------------
//	在node里得到CLASS名为searchClass而且tagName为tag的对象
// 	node为空默认为document，tag为空就是所有tag
//	
//--------------------------------------------------------
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

