﻿/*----------------------------------------------------------+
 +	AJAX X													+
 +	Ver: 1.1												+
 +	Programmer: THINH TRAN									+
 +	Email: thinh.tranvan@gmail.com							+
 +															+
 +	AJAX Class free for user only							+
 +----------------------------------------------------------*/

function ajaxx(){
	this.XMLHttpRequest=null;
	this.url="";
	this.requestMethod="GET";
	this.asynchronous=true;
	this.parameters=null;
	this.handlers = {
		complete: null,
		failure: null
	};
	
	this.username = null;
	this.password = null;
	
	this.readyState = 0;
	this.status = 400;
	this.translatedState = "Uninitialized";
	this.responseXML = null;
	this.responseText = null;
	
	this.XMLHttpRequest = initXMLHttpRequest();


	this.sendForm = function(form, handlers, divid){
		//SEND ALL FORM DATA
		var element;
		var i;
		var queryString="";
		try{
			for(i=0;i<form.length;i++){
				element=form.elements[i];
				if(element.type=="checkbox" || element.type=="radio"){
					if(element.value!="" && element.name!="" && element && element.value && element.checked){
						if(queryString!=""){
							queryString+="&";
						}
						queryString+=(element.name+"="+escape(element.value));
					}
				}else{
					if(element.value!="" && element.name!="" && element && element.value){
						if(queryString!=""){
							queryString+="&";
						}
						queryString+=(element.name+"="+escape(element.value));
					}
				}
			}
			this.requestMethod = form.method;
			this.parameters = queryString;
			this.send(form.action, handlers, divid);		
			return false;
		}catch(e){
			if (refObj.handlers.failure != null){
				this.handlers.failure();
			}else{
				alert("Error occured during send form process");
			}
			return false;
		}
	}
	this.abort=function(){
		this.XMLHttpRequest.abort();	
	}
	this.setRequestHeader = function (label, value){this.XMLHttpRequest.setRequestHeader(label,value);}
	
	this.setHandlers = function(value){
		if(value){
			if(typeof value=="function"){
				this.handlers.complete=value;
			}else if(typeof value=="object"){
				this.handlers.complete=value[0];
				this.handlers.failure=value[1];
			}
		}
	}
	
	this.send = function(url, handlers, divid, parameters, requestMethod){
		var sUrl;
		var sParams=null;
		var qPos;
		
		
		if(url!="" && url){
			this.url = url;
		}
		this.setHandlers(handlers);
		
		if(requestMethod!="" && requestMethod){
			this.requestMethod = requestMethod;
		}
		if(parameters!="" && parameters){
			this.parameters = parameters;
		}
		
		sUrl=this.url;
		sParams=this.parameters;
		
		qPos=sUrl.indexOf("?");
		if(qPos>=0){
			if(sUrl.length-1>qPos){
				if(sParams){
					sParams+="&"+sUrl.substring(qPos+1, sUrl.length);
				}else{
					sParams=sUrl.substring(qPos+1, sUrl.length);
				}
			}
			if(qPos>0){
				//sUrl=sUrl.substring(0, qPos-1);
				sUrl=sUrl.substring(0, qPos);
			}
		}
		if(this.requestMethod.toUpperCase()=="GET"){
			if(sParams){
				sUrl+=("?"+sParams);
			}
			sParams=null;
		}
		
		
		this.url=sUrl;
		this.parameters = sParams;
		

		this.status       = null;
		this.translatedState   = null;
		this.responseText = null;
		this.responseXML  = null;
		this.odiv=getObject(divid);
		
		var refObj = this;
		
		if(this.XMLHttpRequest){
			this.XMLHttpRequest.open(this.requestMethod, this.url, this.asynchronous , this.username, this.password);//Gui request (METHOD, URL, ASYNCHRONOUS)
			this.XMLHttpRequest.onreadystatechange = function(){
				refObj.readyState = refObj.XMLHttpRequest.readyState;
				var textState = new Array("Uninitialized","Loading","Loaded","Interactive","Complete");
				refObj.translatedState=textState[refObj.readyState];
				refObj.odiv.style.display="block"; //aaaaaaaaaaaaaaaaaaaaa
				if (refObj.readyState == 4){
					refObj.status = refObj.XMLHttpRequest.status;
					
					if (refObj.status == 200){
						refObj.responseText = refObj.XMLHttpRequest.responseText;
						refObj.responseXML = refObj.XMLHttpRequest.responseXML;
						
						if(refObj.responseText!=""){
							refObj.odiv.innerHTML = refObj.responseText; //aaaaaaaaaaaaaaaaaaaaa
							//refObj.odiv.style.display="block";
						}else{
							refObj.odiv.innerHTML = "<center>Thông tin đang cập nhật!</center>"; //aaaaaaaaaaaaaaaaaaaaa
							//refObj.odiv.style.display="none";
						}
						
						if (refObj.handlers.complete)
							refObj.handlers.complete(refObj);
					}else{
						
						if (refObj.handlers.failure){
							refObj.handlers.failure();
						}else if(refObj.oDiv){
							refObj.oDiv.innerHTML="Unable to load,";
							//alert("Ko the load dc");
						}else{
							alert("Bad Request,\nFile request may be not exist");	
						}
					}
				}else{
					refObj.odiv.innerHTML = "<div style=\"width:'100%';height:'100%';text-align:center;vertical-align:middle\"><img src=\"images\\loading.gif\" /><br/> Loading ....</div>"; //aaaaaaaaaaaaaaaaaaaaa
					if (refObj.handlers.complete != null)
						refObj.handlers.complete(refObj);
				}
				
			};
			if(this.requestMethod.toUpperCase()=="POST"){
				this.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
				this.setRequestHeader("Content-length", this.parameters.length);
			}
			this.XMLHttpRequest.send(this.parameters);//chuoi~ truy van .. a=&q=thinh di cung` khi POST (unused in GET)			
		}
	}
	
	this.toString = function(){
		return "REQUEST METHOD: " + this.requestMethod + "\n"
					+ "ASYNCHRONOUS: " + this.asynchronous + "\n"
					+ "URL: " + this.url +  "\n"
					+ "PARAMETERS: " + this.parameters +  "\n"
					+ "STATE: " + this.state + "\n"
					+ "STATUS: " + this.status + "\n"
				//	+ "TIMEOUT: " + this.timeout + "\n"
					+ "COMPLETE HANDLER: " + this.handlers[0] +  "\n"
					+ "FAILURE HANDLER: " + this.handlers[1] +  "\n";
	}
}





function initXMLHttpRequest (){ 
	var oXMLHttpRequest=null;
	var arrHttp = new Array(
			'Msxml2.XMLHTTP.5.0',
			'Msxml2.XMLHTTP.4.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP');
	for (var i = 0; i < arrHttp.length; i++) {
		try {
			oXMLHttpRequest = new ActiveXObject(arrHttp[i]);
			//oXMLHttpRequest.onreadystatechange=handler;
			return oXMLHttpRequest;
		} catch (e) {
			oXMLHttpRequest = null;
		}
	}
		
	if(!oXMLHttpRequest){
		if(typeof XMLHttpRequest != "undefined"){
			oXMLHttpRequest = new XMLHttpRequest();
			if(oXMLHttpRequest.overrideMimeType){
				//Dinh nghia lai header do server gui den neu ko fai la "text/xml" (1 so trinh duyet mozilla loi~)
				oXMLHttpRequest.overrideMimeType("text/xml");
			}
			//oXMLHttpRequest.onload=handler;
			//oXMLHttpRequest.onerror=handler ;
			return oXMLHttpRequest;
		}else{
			alert("Error. Scripting for ActiveX might be disabled");
			return null;
		}
	}
}

function getObject(id){
	//if(document.getElementById(id)){
		return document.getElementById(id);
	//}
}