﻿var esIE= document.all;
function AJAX(){
        this.responseText = null;
        this.responseXML = null;
        this.status = null;
        
        this.getXmlHttp= function(){
                var xmlhttp = null;
                try{
                        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }catch(e){
                        try{
                                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                        }catch (E) {}
                }
        
                if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
                        xmlhttp = new XMLHttpRequest();
                }
                return xmlhttp;
        }

        this.dispose = function(){
                this.XMLHTTP = null;
        }
        
		this.download = function(url, params, method){
			if(arguments.length==2){
					method = "GET"
			}
			
			this.XMLHTTP = this.getXmlHttp();
			if(this.XMLHTTP){
					xmlhttp = this.XMLHTTP;
					xmlhttp.open(method,url,false); //Async = false
					var params = this.getParamsString(params)
					if (params!=null){
							xmlhttp.setRequestHeader("Content-Length",params.length);
							xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					}
					xmlhttp.send(params);
					if(esIE){
						var xmldoc = new ActiveXObject("Microsoft.XmlDom");
						xmldoc.async = false;
						xmldoc.loadXML(xmlhttp.responseText);
						if(xmldoc.parseError.errorCode != 0){
							return null;
						}else{
							return xmldoc;
						}
					}else{
						return xmlhttp.responseXML;
					}
			}
		}
		
        this.startDownload = function(url, params, method){
				/*if(params!=null){
					debug.writeLine(url + "&" + this.getParamsString(params))
				}*/
				if(arguments.length==2){
                        method = "GET"
                }
                
                this.XMLHTTP = this.getXmlHttp();
                if(this.XMLHTTP){
                        xmlhttp = this.XMLHTTP;
                        var params = this.getParamsString(params);
                        var miObj = this;
                        xmlhttp.onreadystatechange = function(){
                                
                                if(xmlhttp.readyState==4){
                                        miObj.status = xmlhttp.status;
                                        miObj.responseXML = xmlhttp.responseXML;
                                        miObj.responseText = xmlhttp.responseText;
                                        miObj.onDownloadComplete();
                                }
                        }                        
                        
                        if(method.toUpperCase()=="POST"){
                            xmlhttp.open(method,url,true); //Async = true
                            if (params!=null){
                                    xmlhttp.setRequestHeader("Content-Length",params.length);
                                    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
                            }
                            xmlhttp.send(params);
                        }
                        else
                        {
                            xmlhttp.open(method,url + "?" + params,true); //Async = true
                            xmlhttp.send(null);
                        }
                }
        }

        this.getParamsString = function(params){
                if(!params) return null;
                var strParams = "";
                for(var i=0;i<params.length;i++){
                        var keyValueObj = params[i];
                        if(i>0) strParams += "&";
                        strParams += keyValueObj.key + "=" + escape(keyValueObj.value);
                }
                if(strParams=="") strParams = null;
                return strParams;       
        }
        
        this.onDownloadComplete=function(){};
}

function KeyValue(key,value){
        this.key = key;
        this.value = value;
}

