var Ajax = {
	http:false,
	req: function makePOSTRequest(url, parameters) {
		if (http = this.http) {
			return http ;
		}
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			http = new XMLHttpRequest() ;
			if (http.overrideMimeType) {
				http.overrideMimeType('text/xml') ;
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http = new ActiveXObject("Msxml2.XMLHTTP") ;
			} catch (e) {
				try {
					http = new ActiveXObject("Microsoft.XMLHTTP") ;
				} catch (e) {}
			}
		}
		if (!http) {
			alert('Cannot create XMLHTTP instance');
			return false;
		}
		this.http = http ;
		return this.http ;
	},
	get: function(returnType, form, funcs, message) {
		if (message && message.id && $(message.id)) {
			$(message.id).innerHTML = message.text ? message.text : 'Loading...' ;
		}
		var url = params = '' ;
		form.params = form.params ? form.params : '' ;
		if (form.method.toUpperCase() == 'POST') {
			form.method = 'POST' ;
			url = form.action ;
			params = form.params ;
		} else {
			form.method = 'GET' ;
			url = form.action + '?' + form.params ;
			params = null ;
		}
		var http = this.req() ;
		http.open(form.method, url, true) ;
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded") ;
		http.setRequestHeader("Content-length", (params ? params.length : 0)) ;
		http.setRequestHeader("Connection", "close") ;
		http.onreadystatechange = function() {
			if (http.readyState == 4) {
				switch (http.status) {
					case 200 :
						if (returnType == 'xml') {
							funcs._200(http.responseXML) ;
						} else {
							funcs._200(http.responseText) ;
						}
					break ;
					case 404 :
						if (funcs._404) {
							funcs._404() ;
						} else {
							alert('"' + form.action + '" page does not exist.') ;
						}
					break ;
				}
			}
		}
		http.send(params) ;
	},
	/*
	form 	= {method:'get', action:'page.php', params:'name1=azat&name2=turkmen'}
	funcs 	= {_200:function(){}, _404:function(){}}
	message = {id:'pre1', text:'loading...'}
	*/
	xml: function(form, funcs, message) {
		this.get('xml', form, funcs, message) ;
	},
	/*
	form 	= {method:'get', action:'page.php', params:'name1=azat&name2=turkmen'}
	funcs 	= {_200:function(){}, _404:function(){}}
	message = {id:'pre1', text:'loading...'}
	*/
	text: function(form, funcs, message) {
		this.get('text', form, funcs, message) ;
	}
}


/**
****************** HOW TO USE ****************** 
function text() {
	Ajax.text(
		{method:'post|get', action:'file.php', params:'action=products&id=555'},
		{_200:function(text){$('pre1').innerHTML = text;}},
		{id:'pre1', text:'Yükleniyor...'}
	)
}
function xml() {
	Ajax.xml(
		{method:'post|get', action:'file.xml', params:null},
		{_200:function(xml){alert(xml.documentElement.childNodes.length)}},
		{id:'pre1', text:'Yükleniyor...'}
	)
}
****************** HOW TO USE ****************** 
**/
