/*
# AJAX.js : Ajax Class
#
# Change Log
#
# 	20-Jun-2007 : Initial contents.
#
# DANIEL ® ANTUNES
# eMail: me@daniel-antunes.com.br
# Icq: 107888741
# Url: http://www.daniel-antunes.com.br/
# GNU/Linux user: #238553
# Written in (vi)mproved
*/
function queueObj(url,element,cbf,lp){
	this.url=url;
	this.urlCacheLess=null;
	this.element=element;
	this.callBackFunction=cbf;
	this.logProcess=lp;
	this.count=".";
}
function AJAX(){
	this.httpRequest=null;
	this.aQueue=new Array();
	this.nQueue=0;
	/* Set Request Object */
	if ((typeof(XMLHttpRequest)).toLowerCase()!='undefined')
		this.httpRequest=new XMLHttpRequest();
	else{
		var arr=[	'Microsoft.XMLHTTP',
							'Msxml2.XMLHTTP',
							'Msxml2.XMLHTTP.6.0',
							'Msxml2.XMLHTTP.4.0',
							'Msxml2.XMLHTTP.3.0'];
		for (var n=0;n<arr.length;n++){
			try{
				if ((typeof(XMLHttpRequest)).toLowerCase()!='undefined'){
					this.httpRequest=new ActiveXObject(arr[n]);
					break;
				}
			}
			catch(e){}
		}
	}
	/* Queue controls */
	this.pushQueue=function(url,element,callBackFunction){
		if ((typeof(callBackFunction)).toLowerCase()=='undefined')
			this.aQueue[this.aQueue.length]=new queueObj(url,element,null,true);
		else
			this.aQueue[this.aQueue.length]=new queueObj(url,element,callBackFunction,true);
		if ((this.nQueue+1)==this.aQueue.length){
			this.execQueue();
		}
	}
	this.execQueue=function(){
		this._get();
		this.nQueue++;
		if (this.nQueue<this.aQueue.length){
			setTimeout("this.execQueue()",20);
		}
	}
	this._get=function(){
		var _self=this;
		var obj=this.aQueue[this.nQueue];
		if (obj.urlCacheLess==null)
			obj.urlCacheLess=cacheLess(obj.url);
		with (_self.httpRequest){
			open('GET',obj.urlCacheLess,true);
			onreadystatechange=function(){
				if (readyState==4){
					if (status==200){
						obj.element.innerHTML=responseText;
						if (obj.callBackFunction!=null)
							obj.callBackFunction();
					}
					else
						_self._log(obj,'<font color=red>Falha, "'+status.toString()+" - "+statusText+'".</font>');
				}
				else
					_self._log(obj);
			}
			setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			setRequestHeader("Cache-Control","no-cache");
			setRequestHeader("Pragma","no-cache");
			_self._log(obj);
			send(null);
		}
	}
	this._log=function(obj,msg){
		if (obj.logProcess){
			if ((typeof(msg)).toLowerCase()=='undefined'){
				obj.element.innerHTML='Carregando'+obj.count;
				obj.count+=".";
			}
			else
				obj.element.innerHTML=msg;
		}
	}
}
