// JavaScript Document
/*
	xmlRequest 对象编
	20080318
	
*/

// 建立xmlhttp
function createXmlhttp(){
	if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
		if (xmlHttp.overrideMimeType){
			xmlHttp.overrideMimeType("text/xml");
		}

	}
	else if(window.ActiveXObject){
		try{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	if(!xmlHttp){
		window.alert("Your broswer not support XMLHttpRequest!");
	}
	return xmlHttp;
}
// xmlRequest 对象
function xmlRequest(){
	//加载文件 和 区域数组
	this.loadArray=new Array("");
	this.areaArray=new Array("");
	this.n=0;//当前处理
	
	// 逐个加载 适用于 页面onload 
	this.loadList=function(){
		/*
		for(i=0;i<this.loadArray.length;i++){
			this.loadPage(this.loadArray[i],null,"GET",document.getElementById(this.areaArray[i]));
		}
		*/
		
		if(this.loadArray.length==0) return;
		if(this.n>=this.loadArray.length) return;
		var loading_msg='Loading...';//the text shows on the container on loading. 	
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		loader.open("GET", this.loadArray[this.n], true);
		loader.setRequestHeader("Cache-Control","no-cache"); 
		var area=this.areaArray[this.n];
		this.n++;
		loader.onreadystatechange=function(){ 
			if (loader.readyState==1) 
			{ 
				document.getElementById(area).innerHTML=loading_msg; 
			} 
			if (loader.readyState==4) 
			{ 
				if (loader.status == 200 || loader.status == 0)document.getElementById(area).innerHTML=loader.responseText; 
			} 
		}
		loader.send(null);
		this.loadList();
	}
	// 加载单个 支持 post 
	this.loadPage=function(url,request,method,container){ 
		method=method.toUpperCase(); 
		var loading_msg='Loading...';//the text shows on the container on loading. 	
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		if (method=='GET') { 
			urls=url.split("?"); 
			if (urls[1]=='' || typeof urls[1]=='undefined'){
				url=urls[0]+"?"+request; 
			}else{ 
				url=urls[0]+"?"+urls[1]+"&"+request; 
			} 
			request=null;//for GET method,loader should send NULL 
		} 
		loader.open(method,url,true); 
		loader.setRequestHeader("If-Modified-Since","0");
		if(method=="GET")loader.setRequestHeader("Cache-Control","no-cache"); 
		if (method=="POST") loader.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
		loader.onreadystatechange=function(){ 
			if (loader.readyState==1){ 
				container.innerHTML=loading_msg; 
			} 
			if (loader.readyState==4){ 
				container.innerHTML=loader.responseText; 
			} 
		} 
		loader.send(request); 
	}
	
	//调用界面 执行 func function
	this.loadAndEval=function(url,request,method,container,func){ 
		method=method.toUpperCase(); 
		var loading_msg='Loading...';//the text shows on the container on loading. 	
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		if (method=='GET') { 
			urls=url.split("?"); 
			if (urls[1]=='' || typeof urls[1]=='undefined'){
				url=urls[0]+"?"+request; 
			}else{ 
				url=urls[0]+"?"+urls[1]+"&"+request; 
			} 
			request=null;//for GET method,loader should send NULL 
		} 
		loader.open(method,url,true); 
		loader.setRequestHeader("If-Modified-Since","0");
		if(method=="GET")loader.setRequestHeader("Cache-Control","no-cache"); 
		if (method=="POST") loader.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
		loader.onreadystatechange=function(){ 
			if (loader.readyState==1){ 
				container.innerHTML=loading_msg; 
			} 
			if (loader.readyState==4){ 
				container.innerHTML=loader.responseText; 
				func;
			} 
		} 
		loader.send(request); 
	}
	// load 返回文本数据 调用相关操作 该操作 采用eval函数 注意返回文本 可能产生的问题
	this.loadDo=function(url,request,hanlder){
		method="GET"; 
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		
		urls=url.split("?");
		if (urls[1]=='' || typeof urls[1]=='undefined'){
			url=urls[0]+"?"+request; 
		}else{ 
			url=urls[0]+"?"+urls[1]+"&"+request; 
		} 
				 
		loader.open(method,url,true); 
		loader.setRequestHeader("If-Modified-Since","0");
		if(method=="GET")loader.setRequestHeader("Cache-Control","no-cache"); 
		
		loader.onreadystatechange=function(){ 
			if (loader.readyState == 4) {
				if (loader.status == 200) {
					//alert(loader.responseText);
					handler(loader.responseText); 
				}
			}
			
		} 
		loader.send(request); 
	}
	
	// 返回 可执行的 javascript 字符串
	this.evalPage=function(url,request,method){ 
		method=method.toUpperCase(); 
		var loading_msg='Loading...';//the text shows on the container on loading. 	
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		if (method=='GET') { 
			urls=url.split("?"); 
			if (urls[1]=='' || typeof urls[1]=='undefined'){ 
				url=urls[0]+"?"+request; 
			}else{ 
				url=urls[0]+"?"+urls[1]+"&"+request; 
			} 
			request=null;//for GET method,loader should send NULL 
		} 
		loader.open(method,url,true); 
		loader.setRequestHeader("If-Modified-Since","0");
		if(method=="GET")loader.setRequestHeader("Cache-Control","no-cache"); 
		if (method=="POST") loader.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
		loader.onreadystatechange=function(){ 
			if (loader.readyState==1){ 
				//container.innerHTML=loading_msg; 
			} 
			if (loader.readyState==4){ 
				//container.innerHTML=loader.responseText; 
				eval(loader.responseText);
			} 
		} 
		loader.send(request); 
	}
	
	//返回值
	
	this.loadValue=function(url,request,method){ 
		method=method.toUpperCase(); 
		var loading_msg='Loading...';//the text shows on the container on loading. 	
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		if (method=='GET') { 
			urls=url.split("?"); 
			if (urls[1]=='' || typeof urls[1]=='undefined'){ 
				url=urls[0]+"?"+request; 
			}else{ 
				url=urls[0]+"?"+urls[1]+"&"+request; 
			} 
			request=null;//for GET method,loader should send NULL 
		} 
		loader.open(method,url,true); 
		loader.setRequestHeader("If-Modified-Since","0");
		if(method=="GET")loader.setRequestHeader("Cache-Control","no-cache"); 
		if (method=="POST") loader.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
		loader.onreadystatechange=function(){ 
			if (loader.readyState==1){ 
				//container.innerHTML=loading_msg; 
			} 
			if (loader.readyState==4){ 
				//container.innerHTML=loader.responseText; 
				return loader.responseText;
			} 
		} 
		loader.send(request); 
	}
	
	// 表单提交 转换为 字符串
	this.formToRequestString= function (form_obj) { 
		var query_string=''; 
		var and=''; 
		//alert(form_obj.length); 
		for (i=0;i<form_obj.length;i++) { 
			e=form_obj[i]; 
			if (e.name!=''){ 
				if (e.type=='select-one'){ 
					element_value=e.options[e.selectedIndex].value; 	
				} 
				else if (e.type=='checkbox' || e.type=='radio') { 
					if (e.checked==false){ 
						break; 
					} 
					element_value=e.value; 

					}else { 
						element_value=e.value; 
					} 
				query_string+=and+e.name+'='+element_value.replace(/\&/g,"%26"); 
				and="&" 
			} 
		} 
		return query_string; 
	} 
	//表单提交 返回字符串
	this.formSubmit=function(form_obj,container){ 
		this.loadPage(form_obj.getAttributeNode("action").value,this.formToRequestString(form_obj),form_obj.method,container) 
	}
	//表单提交 返回执行 字符串
	this.formSubmit1=function(form_obj){ 
		//alert(this.formToRequestString(form_obj));
		this.evalPage(form_obj.getAttributeNode("action").value,this.formToRequestString(form_obj),form_obj.method) 
	}
	
	//加载 xml 执行相关动作 url xml文件地址 handler 执行的方法
	this.loadXml=function(url,handler){
		var loader=createXmlhttp();//require Cross-Browser XMLHttpRequest 
		
//		urls=url.split("?"); 
//		if (urls[1]=='' || typeof urls[1]=='undefined'){
//			url=urls[0]+"?"+request; 
//		}else{ 
//			url=urls[0]+"?"+urls[1]+"&"+request; 
//		} 
				 
		loader.open("GET",url,true); 
		loader.setRequestHeader("If-Modified-Since","0");
		loader.setRequestHeader("Cache-Control","no-cache"); 
		
		loader.onreadystatechange=function(){ 
			if (loader.readyState==4) 
			{ 
				if (loader.status == 200) { // 信息已经成功返回，开始处理信息
					handler(loader.responseXML);
				}
			}
			
		} 
		loader.send(""); 
	}
	
}
