/* -----------------------------------------------------------------------

	VIE Portal - AJAX Libray
	Written by Quynh Nguyen - quynhnguyen@hanoisoftware.com.vn
	
-----------------------------------------------------------------------	*/

// common Ajax object class 
function Ajax() {
	
	// get settings
	var onStateChangeFunction  = arguments[0]||'';		// name of the function will use for processing when state change
	var overrideMimeType = arguments[1]||false;				// by default, MimeType in FireFox is 'text/xml', then override MimeType as 'text/html' when setting is TRUE
	
	// create XmlHttpRequest object
	this.httpRequest = null;

	// check browser is not IE (FireFox, Sarafi, Netscape, ...)
	if(window.XMLHttpRequest)
		this.httpRequest = new XMLHttpRequest();
	
	// IE
	else if(window.ActiveXObject)
	{
		try 
		{
			this.httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch(e) 
		{
			try
			{
				this.httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {}
		}
	}

	// check available
	if(this.httpRequest == null)
	{
		alert('Please install and use lastest web browser: Microsoft Internet Explorer 6, FireFox 1.5, or Opera 8...');
		return null;
	}

	// override MIME type	
  if (overrideMimeType && this.httpRequest && this.httpRequest.overrideMimeType)
		this.httpRequest.overrideMimeType('text/html');
	
	// assign function to process when state change
	if(onStateChangeFunction!='')
		eval('this.httpRequest.onreadystatechange = ' + onStateChangeFunction + ";");

	// return Ajax object
	return this;
}

// -----------------------------------------------------------------------	
// create new HttpRequest object
Ajax.prototype.overrideMimeType = function (mimeType) {
	if(this.httpRequest==null)
		return;
	if (this.httpRequest.overrideMimeType && mimeType!='')
		this.httpRequest.overrideMimeType(mimeType);
}

// -----------------------------------------------------------------------	
// assign function to process when state change
Ajax.prototype.assignOnStateChangeFunction = function (functionName) {
	if(this.httpRequest==null)
		return;
	if(functionName!='')
		eval('this.httpRequest.onreadystatechange = ' + functionName + ";");
}

// -----------------------------------------------------------------------	
// make GET request
Ajax.prototype.makeGETRequest = function (url, parameters) {
	this.httpRequest.open('GET', url + parameters, true);
  this.httpRequest.send(null);
}

// -----------------------------------------------------------------------	
// make POST request (submit a form)
Ajax.prototype.makePOSTRequest = function (url, parameters) {
	this.httpRequest.open('POST', url, true);
	this.httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	this.httpRequest.setRequestHeader("Content-length", parameters.length);
	this.httpRequest.setRequestHeader("Connection", "close");
	this.httpRequest.send(parameters);
}

// -----------------------------------------------------------------------	
// get ready state status
Ajax.prototype.getReadyState = function () {
	return this.httpRequest.readyState;
}

// -----------------------------------------------------------------------	
// return TRUE is the process of Ajax object is completed
Ajax.prototype.isCompleted = function () {
	return this.httpRequest.readyState==4;
}

// -----------------------------------------------------------------------	
// get response status
Ajax.prototype.getResponseStatus = function () {
	return this.httpRequest.status;
}

// -----------------------------------------------------------------------	
// get response text from server
Ajax.prototype.getResponseText = function () {
	if(this.httpRequest.readyState==4 && this.httpRequest.status==200)
		return this.httpRequest.responseText;
	else
		return "";
}
