/**
 * Classe para controle de AJAX.
 * 
 * @package LIB
 * @subpackage JAVASCRIPT
 */
function Jajax() {
	
	/**
	 * Array de requisições.
	 * @access public
	 * @name requisicoes
	 */
	this.requisicoes = new Array();
	
	/**
	 * Array que salva o HTML do objeto antes da chamada AJAX.
	 * @access public
	 * @name html_save
	 */
	this.html_save = new Array();
	
	/**
	 * Instancia o objeto XmlHttpRequest
	 * @return XMLHttpRequest
	 */
	this.getInstance = function() {
		
		//Objetos Microsoft
		var msxmlhttp = new Array(
			'Msxml2.XMLHTTP.5.0',
			'Msxml2.XMLHTTP.4.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP'
		);
		
		//Tentando instanciar algum dos objetos AJAX da Microsoft(somente IE).
		for(var i = 0; i < msxmlhttp.length; i++) {
			try {
				instance = new ActiveXObject(msxmlhttp[i]);
			} catch (e) {
				instance = null;
			}
		}
		
		//Caso o navegador não seja IE então instancia o objeto AJAX universal.
		if(!instance && typeof XMLHttpRequest != 'undefined') {
			instance = new XMLHttpRequest();
		}
		
		return instance;
	}
	
	/**
	 * Coloca uma imagem de loader no objeto HTML 
	 * antes de executar a requisição AJAX.
	 * 
	 * @param string $obj_id ID do objeto HTML.
	 * @param int $img Parâmetro que define qual imagem será inserida no objeto HTML.
	 * 		Valores:
	 * 			'1': Loader em forma de bolinha.
	 * 			'2': Loader em forma de barra.
	 */
	this.loader = function(obj_id, img) {
		if(img == '2') {
			var url_img = '/imgs/ajax-loader-bar.gif';
		} else {
			var url_img = '/imgs/ajax-loader.gif';
		}
		document.getElementById(obj_id).innerHTML = '<img src="'+url_img+'" alt="ajax-loader" border="0" />';
	}
	
	/**
	 * Faz uma requisição JSON a um módulo/component.
	 * 
	 * @param string $url URL do módulo/component.
	 * @return bool
	 */
	this.json = function(url) {
		
		//Limpando variável e fazendo a instância.
		var XmlHttp = this.getInstance();
		
		//Salvando requisição.
		this.requisicoes[this.requisicoes.length] = XmlHttp;
		
		var resp = null;
		
		//Capturando eventos da requisição.
		XmlHttp.onreadystatechange = function() {
			if(XmlHttp.readyState == 4) {
				try {
					//Resposta do servidor OK
					//if(XmlHttp.status == 200) {
						resp = XmlHttp.responseText;
						//alert(resp);
					//} else {
						//Exibindo erra na tela.
						//if(XmlHttp.statusText != 'Unknown')	{ alert("Problema: " + XmlHttp.statusText); }
					//}
				} catch(e) {
					return;
				}
			} else {
				//DEBUG da requisição.
				//alert(XmlHttp.readyState);
				return;    	
			}
		}
       //Capturando eventos da requisição.
       
       //Executando chamada ao servidor.
	   XmlHttp.open('GET', url, true);
	   XmlHttp.setRequestHeader('Content-Type', 'text/xml');
	   XmlHttp.setRequestHeader('encoding', 'UTF-8');
	   XmlHttp.send(null);
	   
	   alert(resp);
	   
	   //Limpando objeto da memória.
	   //delete XmlHttp;
	   
	   //Retornando valor.
	   //return resp;
	}
	
	/**
	 * Faz uma requisição AJAX.
	 * 
	 * @param string $obj_id ID do objeto HTML que vai receber o HTML da requisição.
	 * @param string $url URL do serviço.
	 */
	this.call = function(obj_id, url) {
		
		//Salvando o HTML anterior do objeto.
		this.html_save[obj_id] = document.getElementById(obj_id);
		
		//Limpando variável e fazendo a instância.
		var XmlHttp = this.getInstance();
		
		//Salvando requisição.
		this.requisicoes[this.requisicoes.length] = XmlHttp;
		
		//Capturando eventos da requisição.
		XmlHttp.onreadystatechange = function() {
			if(XmlHttp.readyState == 4) {
				try {
					//Resposta do servidor OK
					if(XmlHttp.status == 200) {
						document.getElementById(obj_id).innerHTML = XmlHttp.responseText;
					} else {
						//Exibindo erra na tela.
						if(XmlHttp.statusText != 'Unknown')	{ alert("Problema: " + XmlHttp.statusText); }
					}
				} catch(e) {
					return;
				}
			} else {
				//DEBUG da requisição.
				//alert(XmlHttp.readyState);
				return;    	
			}
		}
       //Capturando eventos da requisição.
       
       //Executando chamada ao servidor.
	   XmlHttp.open('GET', url, true);
	   XmlHttp.setRequestHeader('Content-Type', 'text/xml');
	   XmlHttp.setRequestHeader('encoding', 'UTF-8');
	   XmlHttp.send(null);
	   
	   //Limpando objeto da memória.
	   delete XmlHttp;
	}
	
	/**
	 * Cancela a requisição AJAX especificada.
	 * @param string $obj_id ID do objeto HTML que iria receber o HTML da requisição.
	 */
	this.uncall = function(obj_id) {
		this.requisicoes[obj_id].abort();
		this.html_save[obj_id] = '';
		document.getElementById(obj_id).innerHTML = this.html_save[obj_id];
	}
	
}

/** Instanciando a classe **/
var jajax = new Jajax();