/************************************************************************************************
 * Wx7 Marketing Online																		  	*
 * Programador: Marcio Camurati (marcio@wx7.com.br)												*
 * Projeto: Classe Ajax																			*
 * Criação: 16/03/06 - 23:54																	*
 * ToDo: Para substituir o antigo processo utilizando iframe invisível para fazer acesso		*
 *		 aos dados sem a necessidade de refresh da página, foi criada se baseando no conceito	*
 *		 Ajax utilizando como metodologia a criação de objetos para poder se ter mais de um		*
 *		 acesso simultaneo a classe, pois os objetos tem seu funcionamento independente.		*
 * Instanciar classe Ajax:																		*
 *	var ajaxTeste = new ajax("GET", "teste.asp", true, "recebeRetorno");						*
 *	ajaxTeste.ajaxResponse();																	*
 ************************************************************************************************/


/**
 * @method - tipo de método utilizado no acesso (GET / POST)
 * @url - url da página que irá retornar os dados
 * @flag - se a conexão será sincrona ou asincrona
 * @parametro - ?
 * @retorno - function que irá receber o valor de retorno (function nomeFunction(valor) { ... }) | Não pode ter o nome retorno
 * Método que inicializa o XMLHHTTP e cria todas os parametros para acesso no objeto
 **/
function ajax(method, url, flag, parametro, retorno)
{
	this.xmlHttp = null;

	try
	{
		this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}	catch(e)	{
		try
		{
			this.xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}	catch(ex)	{
			if (!this.xmlHttp && typeof XMLHttpRequest != 'undefined')
			{
				this.xmlHttp = new XMLHttpRequest();
			}
		}
	}
	
	this.method = method;
	this.url = url;
	this.flag = flag;
	this.parametro = parametro;
	this.retorno = retorno;
	this.ajaxResponse = ajaxResponse;
}

/**
 * Método que faz a conexão com a URL utilizando os parametros passados
 * na criação do objeto e retornando o valor para a function passada
 * no parametro de retorno
 **/
function ajaxResponse()
{
	with(this)
	{
		if (xmlHttp)
		{
			xmlHttp.open(method, url, flag);
			xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1;");	
			xmlHttp.setRequestHeader("Content-Type", "text/html;charset=iso-8859-1"); 
			/*
			# Caso retorne o Object, adiciona ao xmlHttp	#
			# para contornar o problema de acentuação		#
			# no Mozilla (FireFox, Safari, Netscape)		#
			*/
			if (xmlHttp.overrideMimeType)
			{
				xmlHttp.overrideMimeType("text/html;charset=iso-8859-1");
			}
			
			xmlHttp.onreadystatechange = function()
			{
				if (xmlHttp.readyState == 4)
				{
					if (xmlHttp.status == 200)
					{	
						eval(retorno+"(\"" + encodeURI(xmlHttp.responseText) + "\")");
					}	else	{
						ajaxError(xmlHttp.status);
					}
				}
			}
			
			var query = null;
			
			if (parametro)
			{
				query = parametro;	
			}
			
			xmlHttp.send(query);
		}
	}
}

/**
 * @status - recebe o valor passado pelo XMLHTTP (404)
 * Recebe o valor do erro ocorrido no acesso a URL passada
 * trata o erro e chama a ajasShowError() para exibir uma
 * mensagem amigável para o usuário
 **/
function ajaxError(status)
{
	var error = null;

	switch (status)
	{
		case 401:
			error = "Acesso negado a página";
			break;
		case 404:
			error = "A página passada não foi encontrada.";
			break;
		case 500:
			error = "Erro interno de Servidor.";
			break;
	}
	
	ajaxShowError(error);
}

/**
 * @error - recebe o texto do erro
 * Recebe e exibe para o usuário a mensagem de erro
 **/
function ajaxShowError(error)
{
	alert(error);
}