// JavaScript Document
/*
 xmlRequest 对象编
 20080318 基础
 20081013	新写法 修改
 建议用重建实例方式调用
 如 	var tempClass=new Function();
	tempClass.prototype=xmlr;
	var outputXmlr = new tempClass;
	避免因为xml文档加载时间不同产生的问题
20081029 更新类 写法
 */

var xmlRequest = Class.create();    
Object.extend(xmlRequest.prototype, {    
	initialize: function() {    
			
	} ,    
	onloadFn : '',//读取完 加载 的 function 
 	loadArray : new Array(),
    areaArray : new Array(),
	fnName : '',
	createXmlhttp : function(){ // 
		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;
	},
	// 加载列表
	n : 0 ,
	loadList1 : function(){
        try{
			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 = this.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++;
			var loaderN=this.n;
			var loaderMaxLength=this.loadArray.length;
			var loaderFnName=this.fnName;
        	loader.onreadystatechange = function(){
            	if (loader.readyState == 1) {
                	try {
						document.getElementById(area).innerHTML = loading_msg;
					}catch(e){}
            	}
            	if (loader.readyState == 4) {
                	if (loader.status == 200 || loader.status == 0) 
                    	try{
						document.getElementById(area).innerHTML = loader.responseText;
						//if(loaderN == loaderMaxLength)if(loaderFnName!='')eval(loaderFnName+'()');
						if(typeof(loaderFnName)=='function')loaderFnName();
						}catch(e){}
            	}
        	}
        	loader.send(null);
        	this.loadList();
		}catch(e){
			alert("xmlr.loadList:"+e);
			return false;
		}
    },
	loadList : function(){
		try {
			for (var i = 0; i < this.loadArray.length; i++) {
				if(document.getElementById(this.areaArray[i]))this.loadPage(this.loadArray[i], '', 'get', document.getElementById(this.areaArray[i]));
			}
		}catch(e){}
	},
	// 加载单个页面
	loadPage : function(url, request, method, container){
        method = method.toUpperCase();
        var loading_msg = 'Loading...';//the text shows on the container on loading. 	
        var loader = this.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");
        if (arguments.length > 4) {
           var func = arguments[4];
            loader.onreadystatechange = function(){
                if (loader.readyState == 1) {
                    container.innerHTML = loading_msg;
                }
                if (loader.readyState == 4) {
                    container.innerHTML = loader.responseText;
                    
					if (typeof(func) == 'function') {
                        func()
                    }
                }
            }
        }
        else {
            loader.onreadystatechange = function(){
                if (loader.readyState == 1) {
                    container.innerHTML = loading_msg;
                }
                if (loader.readyState == 4) {
                    try {
						container.innerHTML = loader.responseText;
					}catch(e){}
				}
            }
        }
        
        loader.send(request);
    },
	// 执行页面 返回javascript 代码 参数2 加载执行代码 参数 3 判断执行代码 参数 4 判断执行a 反之b
    evalPage : function(url, request){
        //var loading_msg = 'Loading...';//the text shows on the container on loading. 	
        var loader = this.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;
        }
        request = null;//for GET method,loader should send NULL 
        
        loader.open('GET', url, true);
        loader.setRequestHeader("If-Modified-Since", "0");
        loader.setRequestHeader("Cache-Control", "no-cache");
        
        if (arguments.length > 2) {
            if (arguments.length = 3) {
                var func = arguments[2];
                loader.onreadystatechange = function(){
                    if (loader.readyState == 1) {
                        //container.innerHTML=loading_msg; 
                    }
                    if (loader.readyState == 4) {
                        if (typeof(func) == 'function') {
                            if (loader.responseText) {
                                if (loader.responseText != true){
									alert(loader.responseText);
								} else{
									func();
								}
                            }
                            else {
                                alert('error !');
                            }
                        }
                    }
                }
            }
			if(arguments.length = 4){
				var func = arguments[2];
				var nfunc = arguments[3];
                loader.onreadystatechange = function(){
                    if (loader.readyState == 1) {
                        //container.innerHTML=loading_msg; 
                    }
                    if (loader.readyState == 4) {
                        
                            if (loader.responseText) {
                                if (loader.responseText != true) {
									alert(loader.responseText);
								}
								else {
									if (typeof(func) == 'function') {
										func();
									}
								}
                            }
                            else {
                                //alert('error !');
								if (typeof(nfunc) == 'function') {
									nfunc();
								}
                            }
                        
                    }
                }
			}
        }
        else {
            loader.onreadystatechange = function(){
                if (loader.readyState == 1) {
                    //container.innerHTML=loading_msg; 
                }
                if (loader.readyState == 4) {
                    eval(loader.responseText);
                }
            }
        }
        loader.send(request);
    },
	evalPage1 : function(url, request, method){
        method = method.toUpperCase();
        //var request=""; 
        var loading_msg = 'Loading...';//the text shows on the container on loading. 	
        var loader = this.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");
        
        if (arguments.length > 3) {
            var func = arguments[3];
			var func1=false;
			if(arguments.length>4)func1=arguments[4];
            loader.onreadystatechange = function(){
                if (loader.readyState == 1) {
                    //container.innerHTML=loading_msg; 
                }
                if (loader.readyState == 4) {
                    
                        if (loader.responseText) {
                            if (loader.responseText != true) {
                                alert(loader.responseText);
                            }
                            else {
                               // new func;
							   if (typeof(func) == 'function')func();
                            }
                            
                        }
                        else {
                            if(typeof(func1) == 'function'){
								func1();
								return;
							}
							alert('error !');
                        }
                    
                }
            }
        }
        else {
            loader.onreadystatechange = function(){
                if (loader.readyState == 1) {
                    //container.innerHTML=loading_msg; 
                }
                if (loader.readyState == 4) {
                    eval(loader.responseText);
                }
            }
        }
       
        loader.send(request);
    },
	// 表单提交 转换为 字符串
    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) {
                            continue ;
                        }
                        element_value = e.value;
                        
                    }
                    else {
                        element_value = e.value;
                    }
                query_string += and + e.name + '=' + element_value.replace(/\&/g, "%26");
                and = "&"
            }
        }
        return query_string;
    },
	//表单提交 返回字符串
	formSubmit1 : function(form_obj, container){
        this.loadPage(form_obj.getAttributeNode("action").value, this.formToRequestString(form_obj), form_obj.method, container)
    },
	//表单提交 返回执行 字符串 该方法比较常用
    formSubmit : function(form_obj){
        if (arguments.length > 1) {
           if(arguments.length > 2){
		   		this.evalPage1(form_obj.getAttributeNode("action").value, this.formToRequestString(form_obj), form_obj.method, arguments[1],arguments[2]);
				return ;
		   }
		   this.evalPage1(form_obj.getAttributeNode("action").value, this.formToRequestString(form_obj), form_obj.method, arguments[1]);
		}
        else {
           this.evalPage1(form_obj.getAttributeNode("action").value, this.formToRequestString(form_obj), form_obj.method);
        }
    },
	 //加载 xml 执行相关动作 url xml文件地址 handler 执行的方法
    loadXml : function(url, fnName){
        var loader = this.createXmlhttp();//require Cross-Browser XMLHttpRequest 
        
		loader.open("GET", url, true);
        loader.setRequestHeader("If-Modified-Since", "0");
        loader.setRequestHeader("Cache-Control", "no-cache");
        var xx=this;
        loader.onreadystatechange = function(){
            if (loader.readyState == 4) {
                if (loader.status == 200) { // 信息已经成功返回，开始处理信息
                	if (typeof(fnName) == 'function') 
						fnName(loader.responseXML);
					if(typeof(fnName) == 'string')
						eval(fnName+'(loader.responseXML)');
					if (!fnName) {
						//xx.displayFn(loader.responseXML);
						eval ('xx.'+xx.onloadFn+'(loader.responseXML)');
						//xx.onloadFn(loader.responseXML);
					}
//     				if (typeof(obj) == 'object') {
//						if (typeof(fnName) == 'function') 
//							fnName.call(obj, loader.responseXML);
//					}
//					else {
//						if (typeof(fnName) == 'function') 
//							fnName(loader.responseXML);
//					}
                }
            }
        }
        loader.send(null);
    },
	//读取变量值 执行相关函数
    loadValue : function(url, fnName){
        var loader = this.createXmlhttp();//require Cross-Browser XMLHttpRequest 
        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) { // 信息已经成功返回，开始处理信息
                    fnName(loader.responseText);
                }
            }
        }
        loader.send(null);
    }
});



