var x=1;
var divDiag ='error';
var exec = false;
var show = true;
var putForm = false;
var temporisado;
var error = document.getElementById('error');

function ajaxFila(url)
{
	ajaxExec(url,'POST','',false,false);
}

function ajaxReturn(url,div)
{
	putForm = true;
	ajaxExec(url,'POST',div,true,false);
}

function ajaxLink(url,div)
{
	alerta(null,'Processando... Aguarde um momento!',error);
	ajaxExec(url,'POST',div,true,false);
}

function ajaxHTML(url,div)
{
	ajaxExec(url,'POST',div,false,true);
}

function ajaxFormHTML(form)
{
	url = form.action;
 metodoEnvio = form.method.toUpperCase();
 elementos_form = BuscaElementosForm(form);
	divDiag = form.div;
	ajaxExec(url + '&' + elementos_form, metodoEnvio, divDiag, false, true);
	return false;
}

function ajaxForm(form)
{
	error=document.getElementById('error');
 alerta(null,'Processando... Aguarde um momento!',error);
	url = form.action;
 metodoEnvio = form.method.toUpperCase();
 elementos_form = BuscaElementosForm(form);
	ajaxExec(url + '&' + elementos_form, metodoEnvio, divDiag, true, false);
	return false;
}

function ajaxHTMLForm(form,div)
{
 error=document.getElementById('error');
 //alerta(null,'Processando... Aguarde um momento!',error);
	url = form.action;
 metodoEnvio = form.method.toUpperCase();
 elementos_form = BuscaElementosForm(form);
	ajaxExec(url + '&' + elementos_form, metodoEnvio, div, false, true);
	return false;
}


function ajaxExec(url,metodo,div,eVal,mostrar)
{
	mostrar = (mostrar==undefined?true:mostrar);
	//if(mostrar) document.getElementById(div).innerHTML="<table width='90%' height='90%'><tr valign='middle'><td align='center'><img src='carregando.gif' /></td></tr></table>";
	if(mostrar) document.getElementById(div).innerHTML="<center><img src='carregando.gif'></center>";
	if(metodo == "GET")
	{
		eval("http"+x+" = new createRequestObject();");
		eval("http"+x+".open('GET', url);");
		eval("http"+x+".onreadystatechange = onreadystatechange('http"+x+"',div,eVal,mostrar,url);");
		try
		{
			eval("http"+x+".send(null);");			
		}
		catch(objExecption)
		{
			eval("erroNumber = http"+x+".status;");
			switch(erroNumber)
			{
				case 122:
				{
					alerta(null,"Muito informação digitado, resume seu texto!",error);
				}	
			}
		}
	}
	else
	{
		eval("http"+x+" = new createRequestObject();");
		eval("http"+x+".open('POST', url);");
		eval("http"+x+".onreadystatechange = onreadystatechange('http"+x+"',div,eVal,mostrar,url);");
		eval("http"+x+".setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');");
		eval("http"+x+".setRequestHeader('Cache-Control', 'no-store, no-cache, must-revalidate');");
		eval("http"+x+".setRequestHeader('Cache-Control', 'post-check=0, pre-check=0');");
		eval("http"+x+".setRequestHeader('Pragma', 'no-cache');");
		try
		{
			eval("http"+x+".send(url);");
		}
		catch(objExecption)
		{
			eval("erroNumber = http"+x+".status;");
			switch(erroNumber)
			{
				case 122:
				{
					alerta(null,"Muito informação digitado, resume seu texto!",error);
				}	
			}
		}
	}
	x++;
}


function onreadystatechange(http,divDiag,exec,show,url)
{
	urlGlobal = url;
	eval("http = "+http+";");
	return function ()
	{
		var arr; //array com os dados retornados
		if(http.readyState == 4)
		{
			var response = http.responseText
			 //resultado formatado
			if (response=='' && show)
			{
				report('Retorno em branco. Confira...  <br> O Suporte está sendo avisado.');
				return false;
			}

			if (exec == true)
			{
				try
				{
					arr=window.eval(response); //a função eval transforma em uma matriz
				}
				catch(objExecption)
				{
					//getFrame();
					//url = "../sistema/erro/processador.php?&err_descricao=Erro de Sistema&err_url="+escape(urlGlobal)+"&err_modulo="+escape(obj.TOPTexto.innerHTML)+"&metodo=insert&retornaCod=true";
					//ajaxFila(url);
					//msg = "O erro foi relatado ao suporte.<br><br> Para informar mais detalhes desse problema <span style='cursor:pointer' onclick=\"sobeFrame('../sistema/erro/link.php');\"><br><br><b>Clique Aqui</b></span>.";
					//report(msg);
					window.open(urlGlobal);
					if(show) document.getElementById(divDiag).innerHTML = 'Erro no carregamento...';
					return false;
				}
				if (putForm == true)
				{
					putForm = !putForm;
					if (arr!=undefined)
					{
						try
						{
							for (x = 0; x < arr.length ; x++)
							{
								try
								{
									document.getElementById(arr[x][0]).value = arr[x][1];
								}
								catch(objExecpiton)
								{
									report(arr[x][0]+' Não existe.');
								}
							}
						}
						catch(objExecption)
						{
							report('Não foi possivel percorrer o arr.');
						}
					}
				}
				if(show) document.getElementById(divDiag).innerHTML="Dados carregados com Sucesso.";
			}
			else
			{
				if(show) document.getElementById(divDiag).innerHTML = response;
			}
		}
	}
}

function BuscaElementosForm(idForm)
{
    var elementosFormulario = idForm;
    var qtdElementos = elementosFormulario.length;
    var queryString = "";
    var elemento;

    //Cria uma funcao interna para concatenar os elementos do form
    this.ConcatenaElemento = function(nome,valor) {
                                if (queryString.length>0) {
                                    queryString += "&";
                                }
                                queryString += escape(nome) + "=" + escape(valor);
                             };

    //Loop para percorrer todos os elementos
    for (var i=0; i<qtdElementos; i++) {
        //Pega o elemento
        elemento = elementosFormulario[i];
        if (!elemento.disabled) {
            //Trabalha com o elemento caso ele nao esteja desabilitado
            switch(elemento.type) {
                //Realiza a acao dependendo do tipo de elemento
                case 'text': case 'password': case 'hidden': case 'textarea':
                    this.ConcatenaElemento(elemento.name,elemento.value);
                    break;
                case 'select-one':
                    if (elemento.selectedIndex>=0) {
                        this.ConcatenaElemento(elemento.name,elemento.options[elemento.selectedIndex].value);
                    }
                    break;
                case 'select-multiple':
                    for (var j=0; j<elemento.options.length; j++) {
                        if (elemento.options[j].selected) {
                            this.ConcatenaElemento(elemento.name,elemento.options[j].value);
                        }
                    }
                    break;
                case 'checkbox': case 'radio':
                    if (elemento.checked) {
                        this.ConcatenaElemento(elemento.name,elemento.value);
                    }
                    break;
            }
        }
    }
    return queryString;
}

function createRequestObject() {
   var ro;
   var browser = navigator.appName;
   if(browser == "Microsoft Internet Explorer"){
       ro = new ActiveXObject("Microsoft.XMLHTTP");
   }else{
       ro = new XMLHttpRequest();
   }
   return ro;
}

function report(msg)
{
	div1 = document.createElement("<div id='errorJs' style='background-color:#FFFFFF; position:absolute; vertical-align: middle; text-align: center; border: 1px dashed #6FC9F4; padding: 2px; padding-bottom: 5px; width:350px; height:40px; color:#FF0000; top:40%; right:25%;'>");
	div2 = document.createElement("<div style='background-color:#6699CC; color:#FFFFFF; position:relative; top: -6px; border: 1px dotted; font-weight:bold;'>");
	div2.innerHTML = "Falha de Execução";
	divFechar = document.createElement("<div style='position:absolute; width:5px; height:5px; color:red; right:4px; top:0px; cursor:pointer' onclick='document.body.removeChild(errorJs);'>");	
	divFechar.innerHTML = "x";
	span1 = document.createElement("SPAN");
	span1.innerHTML = msg;

	div1.appendChild(div2);
	div1.appendChild(span1);
	div2.appendChild(divFechar);
	document.body.appendChild(div1);
	setTimeout("try{document.body.removeChild(errorJs);}catch(objExecpiton){}","8000");
	if(show) document.getElementById(divDiag).innerHTML = 'Erro no carregamento...';
	return false;
}
function alerta(lugarFormat,txtDiv,divs)
{
	clearTimeout(temporisado);
	divs.style.display = 'block';
	divs.innerHTML = txtDiv;
	temporisado = setTimeout("document.getElementById('"+divs.id+"').innerHTML = ''; document.getElementById('"+divs.id+"').style.display='none'",'8000');

	try
	{
		lugarFormat.className += ' alerta';
		try{lugarFormat.focus();}catch(objExeption){}
		try{lugarFormat.select();}catch(objExeption){}
	}
	catch(objExeption)
	{}
}

function passa(lugarFormat)
{
	lugarFormat.className = lugarFormat.className.replace("alerta","");
}
