/*
* Objeto AJAX para comunicao Assincrona com um servidor de aplicaes WEB
*
* PHP version 5
*
* @category   includes
* @package    ajax
* @author     Christian Paul Pach <christian@pach.com.br>
* @copyright  1991-2008 ClickPronto  Solu��es Inteligentes
* @license    http://www.clickpronto.com/license/ae/aesimulador/1.0.txt  ClickPronto-AE Simulador License 1.0
* @version    CVS: $Id:$
* @link       includes/js/
* @since      Arquivo dispon�vel desde a vers�o 1.0.0
*/

	
function _AJAX(url,metodo,params,processa,modo) {
	this.url = url;
	this.metodo = (metodo) ? metodo : 'GET';
	this.params  = (metodo='GET') ? '' : params;
	this.processaresultado = processa;
	this.Header = new Array();
	this.modo = (modo) ? modo : 'T';
	if(this.modo!='T'&&this.modo!='X') {
		this.modo = 'T';
	}
	this.conectar();
}
AJAX.prototype = {
	addHeader:	function(h,v) {
					this.Header[h] = v;
				},
	delHeader:	function(h) {
					delete(this.Header[h]);
				},
	setHeader:	function() {
					if(this.httprequest==null) { return;} 
					if(this.metodo == "POST"){
	                    this.httprequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
						this.httprequest.setRequestHeader("Content-length", this.params.length);
                    }
					for(h in this.Header) {
						this.httprequest.setRequestHeader(h,this.Header[h]);
					}
				},
	conectar:			function() {
							if(this.url==undefined||this.url=='') {
								return; 
							}
							this.httprequest = null;
						   	if (window.XMLHttpRequest) { // Mozilla, Safari,...
					         	this.httprequest = new XMLHttpRequest();
				        	} else if (window.ActiveXObject) { // IE
					         	try {
							     	 this.httprequest = new ActiveXObject("Msxml2.XMLHTTP");
				    	     	} catch (e) {
				               		try {
		        		           	 this.httprequest = new ActiveXObject("Microsoft.XMLHTTP");
									} catch (e) {}
								}
							}
							if(this.httprequest!=null&&this.httprequest!=undefined) {
								var obj = this;
								this.httprequest.onreadystatechange = 	function() {
																			obj.processaretorno.call(obj);
																		}
								if(this.metodo==undefined || this.metodo=='') {
                                    this.metodo = 'GET';
                                }else{
                                    this.metodo = this.metodo.toUpperCase();
                                }
                                
								if(this.metodo == 'GET'){
									while(this.url.indexOf('\n')!=-1){
										this.url=this.url.replace('\n','%0D%0A');
									}
                                    this.url += this.params;
								}
					        	this.httprequest.open(this.metodo,this.url, true);
								this.setHeader();
						        this.httprequest.send(this.params);
							}
						},
	processaretorno:	function() {
							if(this.httprequest.readyState==4) {
								if(this.httprequest.status==200) {
									var resp = (this.modo=='T') ? 
												this.httprequest.responseText : 
												this.httprequest.responseXML;
									if(this.processaresultado!=null) {
										this.processaresultado(resp);
									} else {
										document.write(resp);
									}
								} else { 
									this.processaerro();
								}
							}
						},
	processaerro:		function() {
							alert(this.httprequest.status + '-' + this.httprequest.statusText + ' :-> ' + this.url);
						}
}


function AJAX(url,metodo,params,processa,modo) {
	this.url = url;
	this.metodo = (metodo) ? metodo : 'GET';
	this.params  = (metodo='GET') ? '' : params;
	this.processaresultado = processa;
	this.Header = new Array();
	this.modo = (modo) ? modo : 'T';
	if(this.modo!='T'&&this.modo!='X') {
		this.modo = 'T';
	}
	this.conectar();
}
AJAX.prototype = {
	addHeader:	function(h,v) {
				this.Header[h] = v;
			},
	delHeader:	function(h) {
				delete(this.Header[h]);
			},
	setHeader:	function() {
				if(this.httprequest==null) { return;} 
				if(this.metodo == "POST"){
	                		this.httprequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					this.httprequest.setRequestHeader("Content-length", this.params.length);
                    		}
				for(h in this.Header) {
					this.httprequest.setRequestHeader(h,this.Header[h]);
				}
			},
	conectar:	function() {
				if(this.url==undefined||this.url=='') {
					return; 
				}
				this.httprequest = null;
				if (window.XMLHttpRequest) { // Mozilla, Safari,...
					this.httprequest = new XMLHttpRequest();
				} else if (window.ActiveXObject) { // IE
					try {
						this.httprequest = new ActiveXObject("Msxml2.XMLHTTP");
				    	} catch (e) {
				               	try {
		        		        	this.httprequest = new ActiveXObject("Microsoft.XMLHTTP");
						} catch (e) {}
					}
				}
				if(this.httprequest!=null&&this.httprequest!=undefined) {
					var obj = this;
					this.httprequest.onreadystatechange = 	function() {
											obj.processaretorno.call(obj);
										}
					if(this.metodo==undefined || this.metodo=='') {
                                    		this.metodo = 'GET';
                                	}else{
                                    		this.metodo = this.metodo.toUpperCase();
                                	}
					if(this.metodo == 'GET'){
						while(this.url.indexOf('\n')!=-1){
							this.url=this.url.replace('\n','%0D%0A');
						}
                                    		this.url += this.params;
					}
					this.httprequest.open(this.metodo,this.url, true);
					this.setHeader();
					this.httprequest.send(this.params);
				}
			},
	processaretorno:function() {
				//chama a funcao load para aparecer a imagem
				if(this.httprequest.readyState==1){
					//this.processaLoad.call(this.httprequest.readyState);
				}
				if(this.httprequest.readyState==4) {
					if(this.httprequest.status==200) {
						//chama a funcao load para retirar a imagem
						//this.processaLoad.call(this.httprequest.status);
						var resp = (this.modo=='T') ? this.httprequest.responseText : this.httprequest.responseXML;
						if(this.processaresultado!=null) {
							this.processaresultado(resp);
						} else {
							document.write(resp);
						}
					} else { 
						this.processaerro();
					}
				}
						
					
			},
	processaerro:	function() {
				alert(this.httprequest.status + '-' + this.httprequest.statusText + ' :-> ' + this.url);
			}/*,
	//metodo para aparecer a barrinha de loading
	processaLoad:	function(){
				//verifica se est� completa a transacao
				if(this==200){
					//troca o css da pagina principal
					document.getElementById('load').className = "esconder";
					document.getElementById('loading').className = "esconder";
				}else{
					//troca o css ta pagina principal
					document.getElementById('loading').className = "fundo";
					document.getElementById('load').className = "aparecer";
				}
		
			}//fim do metodo processaLoad*/
}
