function Ajax() {
	var http_request = '';
	var url = '';
	var postData = '';
	var submitButton = '';
	var callbackFunction = '';
	var submitOnSuccess;
	var valid = false;
	var form = '';
	var formName = '';
	
	this.init = function() {
		http_request = this.createXMLHttpRequest();	
        if (!document.all)
			http_request.overrideMimeType('text/xml');
			
		url = '';
		postData = '';
	}

	this.createXMLHttpRequest = function() {
		try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
		try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
		try { return new XMLHttpRequest();                   } catch(e) {}
		alert("XMLHttpRequest not supported");
		return null;
	}
	this.getSubmitOnSuccess = function() {
		return submitOnSuccess;
	}
	this.setSubmitOnSuccess = function(sos) {
		submitOnSuccess = sos;
	}
	
	this.isValid = function () {
		return valid;
	}
	
	this.setURL = function(url) {
		this.url = url;
	}
	
	this.setForm = function(formName) {
		this.form = document.getElementById(formName);
		this.formName = formName;
		if (this.form)
			this.encodeForm();
	}
	
	this.setButton = function(btn) {
		submitButton = btn;
	}
	
	this.disableButton = function() {
		submitButton.disabled = 1;
	}

	this.enableButton = function() {
		submitButton.disabled = 0;
	}
	
	this.submitForm = function() {
		if (submitOnSuccess)
			this.form.submit();
	}
	
	this.encodeForm = function() {
		this.postData = '';
		children = document.forms[this.formName].elements;

		for (var i = 0; i < children.length; i++) {
	 		switch(children[i].tagName) {
				case "INPUT": 						
					switch(children[i].getAttribute('type')) {
						case "submit" :
						case "button" :
						case "hidden" : 
						case "password" : 
						case "text": this.postData += (this.postData==''?'':'&')+children[i].getAttribute('name')+'='+escape(children[i].value); break;
						case "checkbox" : 
							if(children[i].checked)
								this.postData += (this.postData==''?'':'&')+children[i].getAttribute('name')+'='+escape(children[i].value); break;
					}
				break;
				case "SELECT":
					this.postData += (this.postData==''?'':'&')+children[i].getAttribute('name')+'='+escape(children[i].value); break;					
				break;
				case "TEXTAREA":
					this.postData += (this.postData==''?'':'&')+children[i].getAttribute('name')+'='+escape(children[i].value); break;
					//if (children[i].childNodes[0].nodeType && children[i].childNodes[0].nodeType == Node.TEXT_NODE)							
				break;
			}		
		}
	}
	
	this.alertContents = function() {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
				submitButton.disabled = 0;
               	callbackFunction(http_request);
			} 
		}
	}
		
	this.makeRequest = function(callback) {
		callbackFunction = callback;
	    http_request.onreadystatechange = this.alertContents;
        http_request.open('POST', this.url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        http_request.send(this.postData);
    }
	
	this.makeQuery = function(url,callback) {
		callbackFunction = callback;
	    http_request.onreadystatechange = this.alertContents;
        http_request.open('GET', url, true);
		http_request.send(null)
	}
}

