
function ajax(target,msg,url,fecha){
var ativo;
	if(fecha){
		ativo = document.getElementById("ativo").innerHTML;
		if(document.getElementById(target).innerHTML==""){
			ajx = new Object(ajaxutil);
			ajx.method = "GET";
			ajx.target = document.getElementById(target)
			ajx.msg = msg;
			ajx.request(url)
		}
		if(ativo!=""){
			if(target!=ativo){
				document.getElementById(ativo).innerHTML = "";	
			}else{
				document.getElementById(target).innerHTML = "";	
			}
		}
		document.getElementById("ativo").innerHTML = target;
	}else{
		ajx = new Object(ajaxutil);
		ajx.method = "GET";
		ajx.target = document.getElementById(target)
		ajx.msg = msg;
		ajx.request(url)	
	}	
}

// ********************************************
// CRIA CLASSE PARA UTILIZACAO DE AJAX
// ********************************************
// Cria o objeto
var ajaxutil = new Object()

// Define propriedades e valores iniciais
ajaxutil.method = "POST"; //metodo para envio dos dados, padrão é POST
ajaxutil.target = ""; //objeto - innerHTML - de retorno 
ajaxutil.contentType = ""; //header content type, definido padrão mais embaixo
ajaxutil.msg = "<img src='img/loading.gif'>"; //msg padrão de exibição
ajaxutil.button = ""; //
ajaxutil.TipoEnvio = ""; //assincrono = true, sincrono=false
ajaxutil.userStatus = 0;
ajaxutil.arrTrigger = new Array(); //Trigger (status,objhtml,funcao)

var bEndTrigger = false;

if(ajaxutil.TipoEnvio == "") {
	ajaxutil.TipoEnvio = true
}

//Cria o objeto ActiveXObject
ajaxutil.openAjax = function(){
	var objOpenAjax
	try{
		objOpenAjax = new XMLHttpRequest();
	}
	catch(ee){
		try{
			objOpenAjax = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e){
			try{
				objOpenAjax = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(E){
				objOpenAjax = false;
			}
		}
	}
	return objOpenAjax
}


// Requisita a pagina destino e define o formulario
// para passagem de parâmetros, se for o caso
// pURL = pagina que será requisitada
// pForm = formulário que será processado, enviando dados para pURL (opcional)
ajaxutil.request = function(pUrl,pForm){
	
	var vAjaxTarget = this.target;
	var objAjax = this.openAjax();
	objAjax.abort();
	var vAjaxFormValues = ""
	var vAjaxButton = this.button;
	bEndTrigger = true;
	
	if (!vAjaxTarget.innerHTML) {
		//Teste realizados para funcionamentos sem problemas com IE 6 e Firefox
		vAjaxTarget = document.getElementById(this.target)
		try {
			if (!vAjaxTarget.innerHTML) {}
		}
		catch(err){
			vAjaxTarget = document.getElementById(this.target.id)
		}
	}

	if (pForm == null) {
		vAjaxFormValues = null;
		this.method = "GET";

	}
	else {
		vAjaxFormValues = this.getFields(pForm);
		if(vAjaxFormValues.length == 0){
			vAjaxFormValues = null;
		}
	}

	objAjax.open(this.method, pUrl, this.TipoEnvio)
	if (pForm != null) {
		if (this.contentType == ""){
			this.contentType = "application/x-www-form-urlencoded"
		}
//  	objAjax.setRequestHeader("Method", "POST " + pUrl + " HTTP/1.1");
		objAjax.setRequestHeader("Content-type", "text/html; charset=iso-8859-1");
  		objAjax.setRequestHeader("Content-type", this.contentType);
		objAjax.setRequestHeader("Content-length", vAjaxFormValues.length)
	}

	this.viewMsg (this.msg);
	this.objectsControl (vAjaxButton,false);

	objAjax.onreadystatechange = function() {
		if (objAjax.readyState == 1){
//			document.getElementById(vAjaxTarget).innerHTML = "carregando ";
		}
		if (objAjax.readyState == 4){
			var vAjaxText = objAjax.responseText;
			var vAjaxTargetEnd 
			var bAjaxReturnOK = false;
//		try {
				if (objAjax.status == 200){
					document.getElementById("dvAjaxMsg").style.display = "none";
					vAjaxTargetEnd = vAjaxTarget;
					bAjaxReturnOK = true;
				}
				else{
					bTrigger = false;
					for(var iArrTg = 0; iArrTg < ajaxutil.arrTrigger.length; iArrTg++){
						if(parseInt(objAjax.status) == parseInt(ajaxutil.arrTrigger[iArrTg][0])){
							bTrigger = true;
							document.getElementById("dvAjaxMsg").style.display = "none";
							if(ajaxutil.arrTrigger[iArrTg][1]!=""){
								if(document.getElementById(ajaxutil.arrTrigger[iArrTg][1])){
									vAjaxTargetEnd = document.getElementById(ajaxutil.arrTrigger[iArrTg][1]);
									bAjaxReturnOK = true;
								}
							}
							if(ajaxutil.arrTrigger[iArrTg][2]!=""){
								eval(ajaxutil.arrTrigger[iArrTg][2]);
							}
						}
					}
					
					if (bTrigger == false) {
						bAjaxReturnOK = false;
						document.getElementById("dvAjaxMsg").style.display = "none";
						if (vAjaxText == "" ){
							//Tratativa para IE
							alert('Prezado usuário.\nOcorreu um erro na conexão com o servidor de destino.');
						}
						else if (confirm('Prezado usuário.\nOcorreu um erro na página que foi chamada.\nClique em OK para ver detalhes do erro.')){
							var janAjaxErro = window.open('','janelaErro','scrollbars=1,resizable=0,width=660,height=400');
							janAjaxErro.focus();
							janAjaxErro.document.write(vAjaxText);
							janAjaxErro.document.close();
						}
					}
				}
				
//			}
/*
			catch (e) {
				document.getElementById("dvAjaxMsg").style.display = "none";
				alert('Prezado usuário.\nOcorreu um erro na conexão com o servidor de destino.');
				bAjaxReturnOK = false;
			}
*/			
			if (bAjaxReturnOK) {
				vAjaxTargetEnd.innerHTML = ajaxutil.processJs(vAjaxText);
			}
		}
		ajaxutil.objectsControl (vAjaxButton,true);
	}
	objAjax.send(vAjaxFormValues);

}


ajaxutil.getFields = function(pForm){
	var vAjaxCamposValores = "";
	var vAjaxSepara = "";

	ObjForm = document.getElementById(pForm);

	for (i=0; i < ObjForm.elements.length; i++) {

			if(ObjForm.elements[i].type == "checkbox" || ObjForm.elements[i].type == "radio"){
				if(ObjForm.elements[i].checked){
					vAjaxCamposValores += vAjaxSepara + ObjForm.elements[i].name+"="+url_encode(ObjForm.elements[i].value);
					vAjaxSepara = "&"
					}
				}
			
			else if(ObjForm.elements[i].type == "select-one" || ObjForm.elements[i].type == "select-multiple"){
					for (x=0; x < ObjForm.elements[i].options.length; x++) {
						if(ObjForm.elements[i].options[x].selected){
							vAjaxCamposValores += vAjaxSepara + ObjForm.elements[i].name+"="+url_encode(ObjForm.elements[i].options[x].value);
							vAjaxSepara = "&";
							}
						}
				}
				
			else {
				vAjaxCamposValores += vAjaxSepara + ObjForm.elements[i].name+"="+url_encode(ObjForm.elements[i].value);
				vAjaxSepara = "&";
				}
	}
	return vAjaxCamposValores;
}

ajaxutil.viewMsg = function(pMsgBrowse){
	if (!document.getElementById("dvAjaxMsg")) {
		iDv = document.createElement("DIV");
		iDv.setAttribute("name", "dvAjaxMsg");
		iDv.setAttribute("id", "dvAjaxMsg");
//		iDv.style.top = "34px";
//		iDv.style.left = "698px";
		iDv.style.width = "100px";
		iDv.style.position = "absolute";
 		iDv.style.border = "1px solid #fb1"; //FEA
		iDv.style.display = "none";
		iDv.style.padding = "3px";
		iDv.style.backgroundColor = "#fd3"; //ffD
		document.body.appendChild(iDv);
	}
	else {
		iDv = document.getElementById("dvAjaxMsg")
	}
	var vAjaxTarget = this.target;
	//posiciona a mensagem de acordo com a dimensão da tela
	vAjaxTarget.innerHTML = "<br><br>"+pMsgBrowse;
	//iDv.style.top = yTop + 35+"px";
	//iDv.style.left = xMousePosMax - 150+"px";
	//------------------
	iDv.innerHTML = " " + pMsgBrowse;
	iDv.style.display = "none";
}

ajaxutil.objectsControl = function(pLstObjectsName,pAction){
/* Recebe uma lista dos nomes dos objetos, separados por virgula
que serão desativados e reativados com o processamento do request
pLstObjectsName = nomes dos objetos, separados por virgula
pAction = tipo de acao: true (Ativar) ou false (Desativar)
*/
	if (pLstObjectsName == "") return;
	//Cria um array a partir da virgula
	arAjaxLstObjects = pLstObjectsName.split(",")
	for (x=0; x < arAjaxLstObjects.length; x++) {
		vObjName = arAjaxLstObjects[x];
		vObjName = vObjName.replace(" ","");
		if (document.getElementById(vObjName)) {
			objControl = document.getElementById(vObjName);
			objControl.disabled = !pAction
		}
	}
}

ajaxutil.addTrigger = function(pAddTgStatus,pAddTgObjHTML,pAddTgJS) {
/*
Acrescenta disparadores configuracoes para determinados status da pagina HTML
pAddTgStatus = codigo de status da pagina processada configurado pelo usuario 
pAddTgObjHTML = objeto html que recebera o valor em INNERHTML
pAddTgJS = funcao ou codigo javascript que será executado
*/		if (bEndTrigger == true) return;	

		vCtrlAddTg = this.arrTrigger.length;
		this.arrTrigger[vCtrlAddTg] = new Array(3);
		this.arrTrigger[vCtrlAddTg][0] = pAddTgStatus;	
		this.arrTrigger[vCtrlAddTg][1] = pAddTgObjHTML;
		this.arrTrigger[vCtrlAddTg][2] = pAddTgJS;
	}

ajaxutil.processJs = function(pTxtScript){
/*
Recebe um texto e separa todos os códigos que referente a javascript, identificados pela
TAG "script" e igual a "javascript"
Com o resultado é criado elementos "script" dentro do BODY do documento
permitindo que a expressão seja válida.
Retorna o texto sem todos os codigos de "script"
Testada com FF e IE
*/
	var vJsTxtSrc, vJsTxtScript, vJsIntIni, vJsIntEnd, vJsTxtPart 
	var vJsReturn, vJsReturnIni
	vJsIntIni = 0
	vJsTxtSrc = ""
	mJsScript = pTxtScript.match(/\<script\s+language\s*=["\'\s]*javascript.*>/gi)

	vJsReturn = ""
	vJsReturnIni = 0

	if (mJsScript != null) {
		for (vJsIntCntScpt=0; vJsIntCntScpt < mJsScript.length; vJsIntCntScpt++) {
			vJsTxtPart = mJsScript[vJsIntCntScpt].substring(0,mJsScript[vJsIntCntScpt].indexOf(">")+1)
			vJsIntIni = pTxtScript.indexOf(vJsTxtPart,vJsIntIni);
			mJsSrc = vJsTxtPart.match(/src\s*=\s*".+\.js\s*"/gi);
			if (mJsSrc != null) { 
				vJsTxtSrc = mJsSrc[0].replace(/[\s="]/gi,"").substring(3);
			}
			vJsReturn += pTxtScript.substring(vJsReturnIni,vJsIntIni)
			vJsIntIni = vJsIntIni + vJsTxtPart.length;
			vJsIntEnd = pTxtScript.toLowerCase().indexOf("<\/script>".toLowerCase(),vJsIntIni)
			vJsReturnIni = vJsIntEnd + "<\/script>".length

			if (vJsIntEnd != -1) {
				vJsTxtScript = pTxtScript.substring(vJsIntIni,vJsIntEnd);
				vJsIntIni = vJsIntEnd
				//Cria o elemento script
		        vJsObjScript = document.createElement("script");
				if (vJsTxtSrc != "") vJsObjScript.src = vJsTxtSrc;
				else vJsObjScript.text = vJsTxtScript;
				document.body.appendChild(vJsObjScript)
				vJsObjScript = null;
				vJsTxtSrc = "";
			}
		}
	}
	vJsReturn += pTxtScript.substring(vJsReturnIni)
	return vJsReturn 
}


// ********************************************
// FIM CLASSE DE AJAX
// ********************************************
