/*

Objetivo:				Trabalhar com campos de formulario

Data Criacao:			11/03/2002

Data Atualizacao:		29/07/2005

*/





/**************************************************************

 variaveis

**************************************************************/

var objMascarado = null;

var mascara = "";

var ultTecla = 0;

var enterAutotab = false;





// cod para teclas

var codCima = 38;

var codEsquerda = 37;

var codDireita = 39;

var codBaixo = 40;

var codEspaco = 32;

var codEnter = 13;

var codTab = 9;

var codHome = 36;

var codEnd = 35;

var codPageUp = 33;

var codPageDown = 34;

var codEsc = 27;

var codShift = 16;

var codCtrl = 17;

var codAlt = 18;

var codCaps = 20;

var codBackSpace = 8;

var codDelete = 46;

// JavaScript Document
var HTMLCarregando    = '<span> <img src="../../imagens/carregando.gif" width="16" height="16"> </span>';




/***************************************************************************

 desabilitar auto completar dos campos texto

***************************************************************************/

function setAutoCompletar(valor)

{

	var autoCompletar = valor ? "on" : "off";

	

	if (document.getElementsByTagName) {

		var inputElements = document.getElementsByTagName("input");

		for (i=0; inputElements[i]; i++) {

			inputElements[i].setAttribute("autocomplete", autoCompletar);

		}

	}

}







/**************************************************************

 habilita o ENTER para auto_tab

**************************************************************/

function setEnterAutotab()

{

	enterAutotab = true;

}







/**************************************************************

 tabulacao automatica entre os campos

**************************************************************/

function autotab(obj, maxlength)

{

	var form, prox_obj = null;

	var i, j;

	

	

	if (!obj) return false;

	form = obj.form;

	if (!form) return false;





	// autotab invertido ?

	if (ultTecla == codBackSpace)

	{

		autotabInvertido(obj);

		//alert(1);

		return false;

	}

	

	// verificar se nao e uma tecla especial

	if (teclasEspeciais(ultTecla, obj))

	{

		return false;

	}

	

	obj.value = obj.value.substr(0, maxlength);

	

	if (obj.type != "text" && obj.type != "textarea")

	{

		//if (obj.type != "select-one")

			return false;

	}

	else

	{

		if (maxlength > obj.value.length)

			return false;

	}

	

	focarProximoObjeto(obj);

	

	return true;

}





/**

* retorna o proximo objeto focavel do formulario

*/

function getProximoObjetoFocavel(obj, form)

{

	var prox_obj = null;

	var i, j;

	

	if (!obj && !form)

		return;



	if (obj)

	{

		form = obj.form;

		for (i = 0; i < form.length; i++)

		{

			if (form[i] == obj)

				break;

		}

	}

	else

	{

			i = -1;

	}



	for (j = i + 1; j < form.length; j++)

	{

		if (form[j].type != "hidden" && !form[j].readOnly && !form[j].disabled)

		{

			prox_obj = form[j];

			break;

		}

	}



	return prox_obj;

}







/**

* foca o proximo objeto focavel

*/

function focarProximoObjeto(obj, form)

{

	var proxObj = getProximoObjetoFocavel(obj, form);

	

	while (proxObj)

	{

		try

		{

			proxObj.focus();

			return true;

		}

		catch(e)

		{

			proxObj = getProximoObjetoFocavel(proxObj);

		}

	}

	

	return false;

}









/**************************************************************

 tabulacao automatica invertida entre os campos

**************************************************************/

function autotabInvertido(obj)

{

	var form, obj_ant = null;

	var i, j;

	

	if (!obj) return false;

	form = obj.form;

	if (!form) return false;





	if (obj.type != "text" && obj.type != "textarea")

	{

		//if (obj.type != "select-one")

			return false;

	}

	

	if (obj.value.length > 0)

		return false;

	

	// encontrar o objeto anterior

	for (i = 0; i < form.length; i++)

	{

		if (form[i] == obj)

		{

			obj_ant = form[i - 1];

			if (!obj_ant || obj_ant.name != obj.name)

				return false;

				

			obj_ant.focus();

			var temp = obj_ant.value;

			obj_ant.value = "";

			obj_ant.value = temp;

			

			break;

		}

	}

	

	return true;

}





/**************************************************************

 funcao que guarda o objeto e mascara

**************************************************************/

function mascarar(obj, masc)

{

	objMascarado = obj;

	mascara = masc;



	if (mascara == 'CAIXAALTA')

	{

		obj.style.textTransform = "uppercase";

		obj.onblur = caixaAlta;

	}

	else if (mascara == 'CAIXABAIXA')

	{

		obj.style.textTransform = "lowercase";

		obj.onblur = caixaBaixa;

	}

}









/**************************************************************

 retorna a tecla digitada

**************************************************************/

function getTecla(evt)

{

	if (evt)

		return evt.which;

	else

		return event.keyCode;

}







/**************************************************************

 retorna o elemento de formulario atual

**************************************************************/

function getElementoForm(evt)

{

	if (evt)

		return evt.target;

	else

		return event.srcElement;

}





/**************************************************************

 verifica se esta tudo certo para tratar a mascara

**************************************************************/

function mascararOk(tecla, obj)

{

	if (!obj || obj != objMascarado || obj.type != "text" || mascara.length == 0 /*|| tecla == 0 || tecla == 27*/)

		return false;

				

	return true;

}





/**************************************************************

 verifica se o usuario digitou alguma tecla especial

**************************************************************/

function teclasEspeciais(tecla, obj)

{

	switch(tecla)

	{

		case codCima:

		case codEsquerda:

		case codDireita:

		case codBaixo:

		//case codEnter:

		case codTab:

		case codHome:

		case codEnd:

		case codPageUp:

		case codPageDown:

		case codEsc:

		case codShift:

		case codCtrl:

		case codAlt:

		case codCaps:

		case codBackSpace:

		case codDelete:

		{

			return true;

			break;

		}

		

	}

	

	return false;

}













/**************************************************************

 formata caixa alta

**************************************************************/

function caixaAlta()

{

	this.value = this.value.toUpperCase();

	return true;

}





/**************************************************************

 formata caixa baixa

**************************************************************/

function caixaBaixa()

{

	this.value = this.value.toLowerCase();

	return true;

}









/**************************************************************

 tratamento para mascara (filtro)

**************************************************************/

function keypress(evt)

{

	var tecla = getTecla(evt);

	var obj = getElementoForm(evt);

	

	if (!mascararOk(tecla, obj))

		return true;

		

	if (tecla == codEnter)

		return true;

	

	/*if (teclasEspeciais(tecla, obj))

		return true;*/

	if (tecla == 0 || tecla == codBackSpace)

		return true;



	// pegar o caracter da tecla digitada

	var ch = String.fromCharCode(tecla);

		

	// tratar mascara

	switch(mascara)

	{

		case "MOEDA":

		case "REAL":

		{

			// expressao regular para moeda

			if (ch == ",")

				return (obj.value.indexOf(",") == -1);

			

			var re = /^[\d\,]+$/;

			return re.test(ch);

	

			break;

		}

		

		case "TELEFONE":

		case "CEP":

		case "CNPJ":

		case "INTEIRO":

		case "NUMERICO":

		{

			var re = /^[\d]+$/;

			return re.test(ch);

			

			break;

		}

		

		

		/*case "TELEFONE":

		{

			// expressao regular para telefone

			var re = /^[\d \-]+$/;

			return re.test(ch);

			

			break;

		}*/

		

		

		case "CAIXAALTA":

		case "CAIXABAIXA":

		{

			//return !(tecla > 125 || tecla == 96);

			return true;

			

			break;

		}

		

		

		case "DATA":

		{

			// expressao regular para telefone

			if (ch == "/")

			{

				var re = /\/.*\//;

				return !re.test(obj.value); 

			}

			

			var re = /^[\d]+$/;

			return re.test(ch);

			

			break;

		}

	}

	



	return true;

}











/**************************************************************

 tratamento de teclas especiais

**************************************************************/

function keydown(evt)

{

	var tecla = getTecla(evt);

	var obj = getElementoForm(evt);

	ultTecla = tecla;

	

	if (tecla == codEnter)

	{

		if (enterAutotab && obj.type != "submit")

		{

			autotab(obj, obj.value.length);

			return false;

		}

		else if (enterAutotab && obj.type == "submit")

		{

			if (obj && obj.form && ((obj.form.onsubmit == undefined) || (obj.form.onsubmit())))

				obj.form.submit();

				

			return true;

		}

	}

	

	return true;

}







/**************************************************************

 colocar o foco no primeiro elemento do formulario

 que nao seja campo oculto

**************************************************************/

function focarFormulario()

{

	var form = document.forms[0];

	

	return focarProximoObjeto(null, form);

}







/**************************************************************

 assinalar os eventos abaixo as funcoes

**************************************************************/

document.onkeypress = keypress;

//document.onkeyup = keyup;

document.onkeydown = keydown;











/***************************************************************************

 TRABALHAR COM ALTERACAO DE FORMULARIO

***************************************************************************/





/***************************************************************************

 funcao que engatilha todos os campos de um formulario para registrar uma

 alteracao no mesmo

***************************************************************************/

function engatilharAlteracaoForm(form)

{

	var i;

	

	if (!form)

		form = document.forms[0];

	

	if (!form || form.name.length == 0 || !form._alterado)

		return;

		

	// registrar evento para cada campo de formulario

	for (i = 0; i < form.length; i++)

	{

		var obj = form[i];

		var evento = "";

		

		if ((obj.type.indexOf("text") != -1) || (obj.type.indexOf("password") != -1))

		{

			evento = "change"; // "keypress"

		}

		else if (obj.type == "select-one" || obj.type == "select-multiple" || obj.type == "radio" || obj.type == "checkbox")

		{

			evento = "change";

		}

		

		if (evento != "" && form.getAttribute("title") == null)

		{

			if (obj.addEventListener)

			{

				obj.addEventListener(evento, function () {registrarAlteracaoForm(obj.form)}, false);

			}

			else if (obj.attachEvent)

			{

				obj.attachEvent("on" + evento, function () {registrarAlteracaoForm(obj.form)});

			}

		}

		

		

		/*var temp = "";

		for (prop in obj)

			if (prop.indexOf("on") > -1)

				temp += " " + prop;

				

		temp += " Tipo: " + obj.type;

		if (obj.type != "text")

			alert(temp);*/

	}

}





/***************************************************************************

 funcao que registra uma alteracao no formulario

***************************************************************************/

function registrarAlteracaoForm(form)

{

	if (!form)

		return;

		

	if (!form._alterado)

		return false;

		

	form._alterado.value = "1";

}





/***************************************************************************

 funcao para saber se formulario foi alterado

***************************************************************************/

function verificarAlteracaoForm(form)

{

	if (!form)

		form = document.forms[0];

		

	if (!form._alterado)

		return false;

		

	return form._alterado.value == "1";

}







/***************************************************************************

 Posicao do Formulario em relacao ao deslizamento de barras de rolagem

***************************************************************************/



/**

* ajustar posicao

*/

function ajustarPosicao(form)

{

	if (!form)

		form = document.forms[0];

		

	if (!form._posX || !form._posY)

		return;

		

	if (!document.documentElement)

		return;

	

	var posX = parseInt(form._posX.value);

	var posY = parseInt(form._posY.value);

	

	window.scrollTo(posX, posY);

}





/**

* gravar posicao

*/

function gravarPosicao(form)

{

	if (!form)

		form = document.forms[0];

		

	if (!form._posX || !form._posY)

		return;

	

	var posicoes = posicaoAtual();

	

	form._posX.value = posicoes[0];

	form._posY.value = posicoes[1];

}





/**

* le posicoes da tela

*/

function posicaoAtual()

{

	var posicoes = new Array();

	posicoes[0] = (window.pageXOffset) ? (window.pageXOffset) : document.body.scrollLeft;

	posicoes[1] = (window.pageYOffset) ? (window.pageYOffset) : document.body.scrollTop;

	

	return posicoes;

}





/***************************************************************************

 Validacao de formulario

***************************************************************************/





/**

* funcao de encontrar um objeto adapatado do Macromedia DreamWeaver

*/

function MM_findObj(n, d) { //v4.01

  /*var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);

  if(!x && d.getElementById) x=d.getElementById(n); return x;*/

	for (var i = 0; i < document.forms.length ; i++)

	{

		for (var j = 0; j < document.forms[i].length ; j++)

		{

			if (document.forms[i][j].name == n)

			{

					return document.forms[i][j];

			}

		}

	}

	

	if (document.getElementById) 

	{

		return document.getElementById(n);

	}



	return "";

}



/**

* funcao de validar formulario adapatado do Macromedia DreamWeaver

*/

function MM_validateForm() { //v4.0

  var i,p,q,nm,test,num,min,max,pobj=null,obj=null,errors='',args=MM_validateForm.arguments;

  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; obj=val=MM_findObj(args[i]);

    if (val) { nm=MM_findObj("label_"+args[i]); if (nm) nm=nm.innerHTML; if ((val=val.value)!="") {

      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');

        if (p<1 || p==(val.length-1)) errors+='- o campo \''+nm+'\' precisa ser um endereço de e-mail.\n';

      } else if (test!='R') { num = parseFloat(val);

        if (isNaN(val)) errors+='- o campo \''+nm+'\' deve conter um número.\n';

        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');

          min=test.substring(8,p); max=test.substring(p+1);

          if (num<min || max<num) errors+='- o campo \''+nm+'\' deve conter um número entre '+min+' e '+max+'.\n';

    } } } else if (test.charAt(0) == 'R') errors += '- o campo \''+nm+'\''+(obj.type.indexOf('select') != -1 ? ' deve ser selecionado.\n' : ' deve ser preenchido.\n'); }

	if (pobj == null && errors != '') pobj=obj;

  } if (errors) { alert('Erro:\n'+errors); pobj.focus(); }

  document.MM_returnValue = (errors == '');

}

/* VALIDAÇÕES */

/*

*    Script:    Mascaras em Javascript

*    Autor:    Matheus Biagini de Lima Dias

*    Data:    26/08/2008

*    Obs:    

*/

    /*Função Pai de Mascaras*/

    function Mascara(o,f){

        v_obj=o

        v_fun=f

        setTimeout("execmascara()",1)

    }

    

    /*Função que Executa os objetos*/

    function execmascara(){

        v_obj.value=v_fun(v_obj.value)

    }

    

    /*Função que Determina as expressões regulares dos objetos*/

    function leech(v){

        v=v.replace(/o/gi,"0")

        v=v.replace(/i/gi,"1")

        v=v.replace(/z/gi,"2")

        v=v.replace(/e/gi,"3")

        v=v.replace(/a/gi,"4")

        v=v.replace(/s/gi,"5")

        v=v.replace(/t/gi,"7")

        return v

    }

    

    /*Função que permite apenas numeros*/

    function Integer(v){

        return v.replace(/\D/g,"")

    }

    

    /*Função que padroniza telefone (11) 4184-1241*/

    function Telefone(v){

        v=v.replace(/\D/g,"")                 

        v=v.replace(/^(\d\d)(\d)/g,"($1) $2") 

        v=v.replace(/(\d{4})(\d)/,"$1-$2")    

        return v

    }

    

    /*Função que padroniza telefone (11) 41841241*/

    function TelefoneCall(v){

        v=v.replace(/\D/g,"")                 

        v=v.replace(/^(\d\d)(\d)/g,"($1) $2")    

        return v

    }

    

    /*Função que padroniza CPF*/

    function Cpf(v){

        v=v.replace(/\D/g,"")                    

        v=v.replace(/(\d{3})(\d)/,"$1.$2")       

        v=v.replace(/(\d{3})(\d)/,"$1.$2")       

                                                 

        v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") 

        return v

    }

    

    /*Função que padroniza CEP*/

    function Cep(v){

        v=v.replace(/D/g,"")                

        v=v.replace(/^(\d{5})(\d)/,"$1-$2") 

        return v

    }

    

    /*Função que padroniza CNPJ*/

    function Cnpj(v){

        v=v.replace(/\D/g,"")                   

        v=v.replace(/^(\d{2})(\d)/,"$1.$2")     

        v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") 

        v=v.replace(/\.(\d{3})(\d)/,".$1/$2")           

        v=v.replace(/(\d{4})(\d)/,"$1-$2")              

        return v

    }

    

    /*Função que permite apenas numeros Romanos*/

    function Romanos(v){

        v=v.toUpperCase()             

        v=v.replace(/[^IVXLCDM]/g,"") 

        

        while(v.replace(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"")!="")

            v=v.replace(/.$/,"")

        return v

    }

    

    /*Função que padroniza o Site*/

    function Site(v){

        v=v.replace(/^http:\/\/?/,"")

        dominio=v

        caminho=""

        if(v.indexOf("/")>-1)

            dominio=v.split("/")[0]

            caminho=v.replace(/[^\/]*/,"")

            dominio=dominio.replace(/[^\w\.\+-:@]/g,"")

            caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"")

            caminho=caminho.replace(/([\?&])=/,"$1")

        if(caminho!="")dominio=dominio.replace(/\.+$/,"")

            v="http://"+dominio+caminho

        return v

    }



    /*Função que padroniza DATA*/

    function Data(v){

        v=v.replace(/\D/g,"") 

        v=v.replace(/(\d{2})(\d)/,"$1/$2") 

        v=v.replace(/(\d{2})(\d)/,"$1/$2") 

        return v

    }

    

    /*Função que padroniza DATA*/

    function Hora(v){

        v=v.replace(/\D/g,"") 

        v=v.replace(/(\d{2})(\d)/,"$1:$2")  

        return v

    }

    

    /*Função que padroniza valor monétario*/

    function Valor(v){

        v=v.replace(/\D/g,"") //Remove tudo o que não é dígito

        v=v.replace(/^([0-9]{3}\.?){3}-[0-9]{2}$/,"$1.$2");

        //v=v.replace(/(\d{3})(\d)/g,"$1,$2")

        v=v.replace(/(\d)(\d{2})$/,"$1.$2") //Coloca ponto antes dos 2 últimos digitos

        return v

    }

    

    /*Função que padroniza Area*/

    function Area(v){

        v=v.replace(/\D/g,"") 

        v=v.replace(/(\d)(\d{2})$/,"$1.$2") 

        return v

        

    }	

	function callAjax(div, divAni, nomeFuncao, valor, nomeForm, tipoValor,carregando)
	{
		
		if (nomeForm != "")
			valor = "xajax.getFormValues('"+nomeForm+"',true)";
	
		document.getElementById(div).style.display = 'none';
		if (carregando == "SIMPLES")
			document.getElementById(divAni).innerHTML = HTMLCarregando;
		else	
			document.getElementById(divAni).innerHTML = HTMLCarregando + '&nbsp; <span class="Atencao"> Aguarde ...</atencao>';	
	
		if (tipoValor == "string")
			valor = "'"+valor+"'";
		
	
		if (valor == "")	
			funcao = "xajax_"+nomeFuncao+"('"+div+"', '"+divAni+"')";		
		else	
			funcao = "xajax_"+nomeFuncao+"('"+div+"', '"+divAni+"',"+valor+")";
		
		//alert(funcao);
		eval(funcao);
	}
