//JavaScript
//Biblioteca AJAX

/* variaveis publicas
*/
var httpRequest;
var tagDestino;
var objForm;
var urlDestino;
var pathApp;
var msgEspera = false;

function setaParametros(pathAplic){
	pathApp = pathAplic;
}

function parametroDataHora() {
	return "?timeStamp=" +  new Date().getTime();
}

function criaHttpRequest(usaXml) {	
	
    // mozzila, safari, opera sem activeX
    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();    	
        if (usaXml && httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    } else {     
	// internet explorer
        if (window.ActiveXObject) { 
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
            	try {             
            	    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            	} catch (e) {
					alert("Erro: objeto XmlHttpRequest não pode ser criado.");
                }
             }
        }
    }
    
    if (! httpRequest) {
        alert("Erro: Não foi possível criar o objeto XmlHttpRequest");
        return false;
    }
}

function aguardando(opc){

	//if (opc == 1) {
	//} else { 
	//}
	
	// depende do arquivo aguarde.js
	if (msgEspera) {
		aguarde(opc);
	}

}

function admUrlChamada(callback, tagTarget){
	var msgErroHttp = "";
	//alert('1');
    if (httpRequest.readyState == 4) { // url carregada
		//alert('2');
        // if (httpRequest.status == 200) { // url ok
		if ( (httpRequest.status == 200) || (httpRequest.status == 0)) { // url ok
			//alert('3');
            if (callback != null) {
            	// executa a funcao q o usuário pediu
                callback(httpRequest);
            } else {
				//coloca o valor na tag indicada
				//alert(httpRequest.responseText);
				//if ("msgErroSimples".indexOf(httpRequest.responseText)
				// se não tiver nenhum desvio 
				if (! redirecionarPara(httpRequest.responseText)){
					document.getElementById(tagDestino).innerHTML = httpRequest.responseText;
				} 
            }
			aguardando(0);
		} else {
			//alert('6');
			if (httpRequest.status == 404) { // url não encontrada
				// direcionar para uma pag de erro
				msgErroHttp = 'A página solicitada não foi encontrada.\n'+urlDestino;
			} else {
				if (httpRequest.status == 500) { // internal server error
					msgErroHttp = "Problemas de execução no servidor, verifique.";
					//direcionarPara(pathApp+"tools/ErroJsp.jsp?txtCodErro='"+httpRequest.responseText+"'" );
				} else {
					msgErroHttp = "Código de erro ainda não tratado.\nURL: "+urlDestino;
					alert(httpRequest.responseText);
					alert(httpRequest.readyState);
				} 
			}
			msgErroHttp += "\nErro nº " +httpRequest.status+ "\n";
			alert(msgErroHttp);
		}
	
    } else {
		//alert('7');
		if (httpRequest.readyState == 1) { // url sendo carregada
		//alert('8');
			aguardando(1);
		} else {
			//alert('9');
			if (httpRequest.readyState == 2) { // url carregada
				//alert('10');
				aguardando(0);
			} 
		}
    }
}	

function receberUrlPadrao() {
    admUrlChamada(null);
}

function receberUrlPersonalizada(callback) {
    admUrlChamada(callback);
}

function chamaUrl(metodo, url, dados, tagTarget, callback, usaXml, nmForm) {
	if (url != "") {
	    urlDestino = url; // histórico de acesso
		//
		objForm = document.getElementById(nmForm);
		//
	    criaHttpRequest(usaXml);
	    //url = url + parametroDataHora();
	   	if (metodo == "GET") {
			url = url + parametroDataHora();
			if (dados != null) {
				url = url + "&"+dados;
		   	}
		}
	    httpRequest.open(metodo, url, true);
	    if (callback != null) {
	        httpRequest.onreadystatechange = function() { receberUrlPersonalizada(callback); };
	    } else {
			tagDestino = tagTarget;
	    	httpRequest.onreadystatechange = receberUrlPadrao;
	    }
	    //alert(dados);
	    if (metodo == "POST" && dados != null) {
			dados = parametroDataHora() + "&" + dados;
	        httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	        httpRequest.setRequestHeader('Content-length', dados.length ); 
	    }
	    httpRequest.send(dados);
	} else {
		alert("Url vazia, não foi possível continuar.");
	}
}


function urlExecTag(metodo, url, tagTarget, dados, nmForm) {
    chamaUrl(metodo, url, dados, tagTarget, null, false, nmForm);
}

function urlExecCall(metodo, url, callBack, dados, nmForm) {
    chamaUrl(metodo, url, dados, null, callBack, false, nmForm);
}

function direcionarPara(urlTarget){
	if(objForm != null) {
		objForm.action = urlTarget;
		objForm.submit();
	} else {
		alert("Não foi possível submeter o formulário (2).");		
	}
}

function redirecionarPara(textoRetorno){
	var ret = false;
	if ("submeterForm".indexOf(textoRetorno) > -1){
		if(objForm != null) {
			objForm.submit();
		} else {
			alert("Não foi possível submeter o formulário.");
		}
		ret = true;
	}
	return ret;
	
}
/*
function urlExecTagXml(metodo, url, dados, tagTarget) {
    //chamaUrl(metodo, url, dados, tagTarget, null, true);	
{
	
function urlExecCallXml(metodo, url, dados, tagTarget, callBack) {
    //chamaUrl(metodo, url, dados, tagTarget, callBack, true);	
{
	
*/	
