/*
 *	
 *	- Get data method creation example:
 *	
 *	function get_request_data(requestObject, elem) {
 *		if(requestObject.readyState == 4 && requestObject.status == 200) {
 *			var e = document.getElementById(elem);
 *			e.innerHTML = requestObject.responseText;
 *		}
 *	}
 *	
 *	ar.formRequest.onreadystatechange = function() { get_request_data(ar.formRequest, "elem_name"); };
 *	
 */

// Define super variable 

var GET_METHOD = "get";
var POST_METHOD = "post";

// Ajax request class

function AjaxRequest() { 
	this.method = null;
	this.filename = null;
	this.formname = null;

	this.formRequest = CreateXmlHttpReq();

	this.getElemValue = getElemValue;
	this.getQueryString = getQueryString;
	this.getRandom = getRandom;

	// Post query string code

	function getElemValue(qstr, name, value) {
		qstr += (qstr.length > 0 ? "&" : "")
		+ escape(name).replace(/\+/g, "%2B") + "="
		+ escape(value ? value : "").replace(/\+/g, "%2B");

		return qstr;
	}

	function getQueryString(formname) {
		var form = document.forms[formname];
		var qstr = "";

		var elemArray = form.elements;

		for(var i = 0;i < elemArray.length;i++) {
			var element = elemArray[i];
			var elemType = element.type.toUpperCase();
			var elemName = element.name;

			if(elemName) {
				if(elemType == "TEXT"
				    || elemType == "TEXTAREA"
				    || elemType == "PASSWORD"
				    || elemType == "BUTTON"
				    || elemType == "RESET"
				    || elemType == "SUBMIT"
				    || elemType == "FILE"
				    || elemType == "IMAGE"
				    || elemType == "HIDDEN")
					qstr = this.getElemValue(qstr, elemName, element.value);
				else if(elemType == "CHECKBOX" && element.checked)
					qstr = this.getElemValue(qstr, elemName, element.value ? element.value : "On");
				else if(elemType == "RADIO" && element.checked)
					qstr = this.getElemValue(qstr, elemName, element.value);
				else if(elemType.indexOf("SELECT") != -1) {
					for(var j = 0;j < element.options.length;j++) {
						var option = element.options[j];

						if(option.selected)
							qstr = this.getElemValue(qstr, elemName, option.value ? option.value : option.text);
					}
				}
			}
		}

		return qstr;
	}
		
	// Request code 

	function CreateXmlHttpReq() {
		var xmlhttp = null;

		try {
			xmlhttp = new XMLHttpRequest();
		} catch(e) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}

		return xmlhttp;
	}

	function getRandom() {
		var num = Math.random();
		var str = "&randNum=" + escape(num);

		return str;
	}
}

// Public methods

AjaxRequest.prototype.exec_request = function() {
	if(this.method == null)
		return false;

	if(this.method == POST_METHOD && this.formname == null)
		return false;

	if(this.filename == null)
		return false;

	if(this.filename.indexOf("?") == -1)
		this.filename += "?";

	this.formRequest.open(this.method, this.filename + this.getRandom());

	if(this.method == POST_METHOD) {
		this.formRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		this.formRequest.send(this.getQueryString(this.formname));
	}
	else
		this.formRequest.send(null);

	return true;
}

