var modFORM=true
var NS=(navigator.appName=="Netscape")
var IE=(navigator.appName=="Microsoft Internet Explorer")
var ValidaForm=true
var ultimoDia

document.onkeydown = KeyDown

function KeyDown(evt) {
  evt = (evt) ? evt : window.event
  /*Testa a tecla que foi pressionada e aborta.
	CRTL+E - Pesquisar
	CRTL+H - Historico
	CRTL+I - Favoritos
	CRTL+L - Abrir arquivo(CRTL+O faz a mesma coisa, mas e tecla do windows e não pode ser bloqueada)
	CRTL+N - Abrir nova janela
	*/
	 if ((evt.ctrlKey == true)&& ((evt.keyCode==72) ||(evt.keyCode==73)||(evt.keyCode==76) || (evt.keyCode==78))) {
	 event.returnValue = false;
	 }
	 if (evt.keyCode == 116) {
	 	//alert("OI");
	 	//window.parent.frames[0].form1.sKeyCode.value = "ok";
	 	//window.parent.bla();
	 }
}

function validarCampo(e){
	var input=/^(\?|\!)(ascii|data|hora|alpha|alphaN|int|real|sexo|ocupacao|rua|fone|popup)([\+\-]{0,2}|#?)$/
	if(NS?!e.hasAttribute("condicao"):!(e.getAttribute("condicao")!=null))
		return -1
	var cond=input.exec(e.getAttribute("condicao"))	
	if(!cond){
		alert("Rotina \"validarCondicao\".\nA condição de validação não possui um formato válido.\nNome do campo : "+e.name+"\nCondicao de validaçao : "+e.getAttribute("condicao"))
		return null
	}
	var ret=validar(e,cond)
	switch(e.type){
		case "password":
		case "text":e.style.borderColor=ret>0?"white":"FFD540"
			break
		case "select-one":e.style.backgroundColor=ret>0?"white":"#F0F6C4"		
	}
	return ret
}

function enviarForm(form,destino){

	var pri=null
	var pri_ret=0
	var ret=0
	if (ValidaForm){
		for(var i=form.elements.length;i>=0;i--){
			var e=form.elements[i]
			if(e){
				ret=validarCampo(e)
				if(ret>0){
					pri=e
					pri_ret=ret
				}
			}
		}
	}
	ValidaForm=true
	
	if(pri){
		var desc
		if(NS?pri.hasAttribute("desc"):(pri.getAttribute("desc")!=null))
			desc=pri.getAttribute("desc")
		else
			desc=pri.name
		if(pri_ret==1)//obrigatorio vazio
			alert("O campo \""+desc+"\" é obrigatório")
		else if(pri_ret=2){//valor inválido
			if(pri.type=="select-one")
				alert("É necessário selecionar uma opção do campo \""+desc+"\"")
			else
				alert("O campo \""+desc+"\" possui um valor inválido")
			
		}
		if (pri.visible == true){
		//IF por Jr em 19/10/06
			pri.focus()
		}
	}
	else{

		for(var i=0;i<form.length;i++)
			if( form.elements[i].type=="button" || form.elements[i].type=="reset")
				form.elements[i].disabled=true
		form.action=destino
		form.submit()
		for(var i=0;i<form.length;i++)
			form.elements[i].disabled=true
	}
}

function naoValidaForm(){
	ValidaForm=false;
}

function iniForm(foco){	
	if(document.forms.length>0){	
		if(NS){
			document.addEventListener("blur",evBlurNS,true)
		}else if(IE){
			for(var i=0;i<document.forms[0].elements.length;i++)
			document.forms[0].elements[i].attachEvent("onblur",evBlurIE)
		}
		try{			
			document.getElementById(foco).focus()
		}catch(e){
			ajustarFoco(document.forms[0])
		}
	}
}
function validar(campo,cond){

	var valor=campo.value
	var expressao
	if(!valor.length)return cond[1]=="!"?1:0
	switch(cond[2]){
	case "ascii":return 0
	case "alpha":
		if(cond[3]=="#")
			expressao = /^[:alpha:|:digit:]+$/
		else
			expressao = /^[a-zA-Z:alpha:|:digit: ]+$/
		return expressao.test(valor)?0:2
	case "alphaN":
		if(cond[3]=="#")
			expressao = /^[:alpha:|:digit:]+$/
		else
			expressao = /^[:alpha:|:digit: ]+$/
		return expressao.test(valor)?0:2
	case "data":
		var iDat=valor.split("/")
		var sDat
		var atual = new Date()
		if(iDat.length==1){
			if(valor.length==6 || valor.length==8){
				iDat[0]=valor.substr(0,2)
				iDat[1]=valor.substr(2,2)
				iDat[2]=valor.substr(4)
			}
			else if(valor.length==4){
				iDat[0]=valor.substr(0,2)
				iDat[1]=valor.substr(2)
				iDat[2]=atual.getFullYear()
			}
			else if(valor.length<=2){
				iDat[0]=valor.substr(0)
				iDat[1]=new String(atual.getMonth()+1)
				iDat[2]=atual.getFullYear()
			}
			else return 2		
		}
		else if(iDat.length==2)
			iDat[2]=atual.getFullYear()
		
		if(iDat.length!=3 || isNaN(iDat[0]) || isNaN(iDat[1]) || isNaN(iDat[2])) return 2
		if(iDat[2].length<=2)
			if(iDat[2]>20)
				iDat[2]=1900+parseInt(iDat[2],10)
			else
				iDat[2]=2000+parseInt(iDat[2],10)
		if(iDat[1]>12 || iDat[1]<1)return 2
		
		//verifica se a data é menor que 1
		if (iDat[0]<1)
			return 2
			
		//verifica meses com 31 dias
		if((iDat[1]==1 || iDat[1]==3 || iDat[1]==5 || iDat[1]==7 || iDat[1]==8 || iDat[1]==10 || iDat[1]==12) && (iDat[0]>31))
			return 2
		
		//verifica meses com 30 dias
		if((iDat[1]==4 || iDat[1]==6 || iDat[1]==9 || iDat[1]==11) && (iDat[0]>30))
			return 2

		//verifica ano bissexto para o mes de fevereiro
		if(iDat[1]==2)
			if(AnoBisexto(iDat[2])){
				sDat=iDat[0]+"/"
				if(iDat[0]>29) return 2
			}else{
				sDat=iDat[0]+"/"
				if(iDat[0]>28) return 2
			}
		sDat=iDat[0]+"/"
		
		if(iDat[0].length<2)sDat="0"+sDat
		
		if(iDat[1].length<2)
			sDat+="0"+iDat[1]+"/"
		else
			sDat+=iDat[1]+"/"
		sDat+=iDat[2]
		campo.value=sDat
		return 0
	case "hora":
		var iHor=valor.split(":")
		if(iHor.length<2){
			expressao=/^\d{1,4}$/
			if( !expressao.test(valor)) return 2
			if(isNaN(valor))return 2
			if(valor.length>2){			
				var m=valor.substr(valor.length-2)
				var h=valor.substr(0,valor.length-2)
				if(m>59 || h>23) return 2
				if(h<10 && h.length<2){
					h="0"+h
				}
				campo.value=h+":"+m
			}else{
				if(valor>23) return 2
				if(valor<10 && valor.length<2){
					valor="0"+valor
				}
				campo.value=valor+":00"
			}		
		}else{		
			if(isNaN(iHor[0])||isNaN(iHor[1])) return 2
			if(iHor[1].length<2) return 2			
			if(iHor[0]>23 || iHor[1]>59)
				return 2
			if(iHor[0]<10 && iHor[0].length<2){
				iHor[0]="0"+iHor[0]
				campo.value=iHor[0]+":"+iHor[1]
			}			
		}
		return 0		
	case "int":expressao=/^[\+\-]?[0-9]+$/
		if(!expressao.test(valor)) return 2
		switch(cond[3]){
		case "": return 0
		case "+":return valor>=0?0:2
		case "++":return valor>0?0:2
		case "-":return valor<=0?0:2
		case "--":return valor<0?0:2
		default: return 2
		}
	case "real":expressao=/^[\+\-]?(([0-9]+)|([0-9]*,[0-9]+))$/
		if(!expressao.test(valor)) return 2
		if( valor.indexOf(",")>0){
			var temp = valor.split(",")
			valor = temp[0] + "." + temp[1]
		}
		switch(cond[3]){
		case "":return 0
		case "+":return valor>=0?0:2
		case "++":return valor>0?0:2
		case "-":return valor<=0?0:2
		case "--":return valor<0?0:2
		default: return 2
		}
	case "sexo":expressao=/^(M|F|A|MASC|FEM|MASCULINO|FEMININO|AMBOS){1}$/
		campo.value=valor.toUpperCase()
		return expressao.test(valor.toUpperCase())?0:2
	case "ocupacao":return valor=="pesquise com o botao ao lado..."?2:0
	case "rua":return valor=="pesquise com o botao ao lado..."?2:0
	case "fone":expressao=/^(\d\d\-)?((\d){0,2}(\d\d))\-?\d\d\d\d$/
		return expressao.test(valor)?0:2
	case "popup":
		if(NS)
			return campo.hasAttribute("popupOk")?0:2
		if(IE)
			return campo.getAttribute("popupOk")!=null?0:2
	}
}

function incDateDias( d, dias ){
	if(d.value==""){
		d.value = currentDate();
	}
	var s = d.value.split("/")
	
	s[0] = parseInt(s[0],10) + parseInt(dias,10)

	var n = new Date(s[2],s[1]-1,s[0])
	s[0]=n.getDate()
	s[1]=n.getMonth()+1
	s[2]=n.getFullYear()
	if(s[0]<10) s[0]="0"+s[0]
	if(s[1]<10) s[1]="0"+s[1]
	return s[0]+"/"+s[1]+"/"+s[2]
}

function incDate(d){
	var data = document.getElementById(d).value;
	if(data==""){
		data = currentDate();
	}

	var s = data.split("/");
	s[0]++;
	var n = new Date(s[2],s[1]-1,s[0]);

	s[0]=n.getDate();
	s[1]=n.getMonth()+1;
	s[2]=n.getFullYear();
	if(s[0]<10) s[0]="0"+s[0];
	if(s[1]<10) s[1]="0"+s[1];
	document.getElementById(d).value = s[0]+"/"+s[1]+"/"+s[2];
}
function decDate(d){
	var data = document.getElementById(d).value;
	if(data==""){
		data = currentDate();
	}
	var s = data.split("/");

	s[0]--;
	var n = new Date(s[2],s[1]-1,s[0]);
	s[0]=n.getDate();
	s[1]=n.getMonth()+1;
	s[2]=n.getFullYear();
	if(s[0]<10) s[0]="0"+s[0];
	if(s[1]<10) s[1]="0"+s[1];
	document.getElementById(d).value = s[0]+"/"+s[1]+"/"+s[2];
}

function mesMenos( d ){
	if(d.value==""){d.value = currentDate()}
	var s = d.value.split("/")
	var n = new Date(s[2],s[1]-1,s[0])	
	if (s[0]>1){
		s[0]="1"
		s[1]=n.getMonth()+1
		s[2]=n.getFullYear()
	}
	else{
		s[1]--
		s[0]="1"
		if (s[1]==0){
			s[1] = "12"
			s[2]--
		}
		else{
			s[1]=n.getMonth()
			s[2]=n.getFullYear()
		}
	}
	if(s[0]<10) s[0]="0"+s[0]
	if(s[1]<10) s[1]="0"+s[1]
	d.value = s[0]+"/"+s[1]+"/"+s[2]
}

function mesMais(d){
	if(d.value==""){d.value = currentDate()}
	var s = d.value.split("/")
	var n = new Date(s[2],s[1],s[0])
	pegaUltimoDia(s[1])

	if (s[0]+"/"+s[1]=="01/12" || s[0]+"/"+s[1]=="1/12"){
		d.value = "31/12/"+s[2]
	}else{
		if (s[0]<ultimoDia){
			s[0]=ultimoDia
		}
		else{
			s[1]++
			if (s[1]==13){
				s[1] = "1"
				pegaUltimoDia(s[1])
				s[2]++
				s[0]= ultimoDia
			}
			else{
				s[1]=s[1]
				pegaUltimoDia(s[1])
				s[0]= ultimoDia
				s[2]=n.getFullYear()
			}
		}
	
		if ( s[0].length != 2 ) {
			if ( s[0] < 10 ){
				s[0]="0"+s[0]
			}
		}
		if ( s[1].length != 2 ) {
			if ( s[1] < 10 ){
				s[1]="0"+s[1]
			}
		}
		d.value = s[0]+"/"+s[1]+"/"+s[2]
	}
}

function pegaUltimoDia(m){
	ultimoDia = "30"   
	//if (m=="1" || m=="3" || m=="5" || m="7" || m="8" || m="10" || m="12"){
	//	pegaUltimoDia = "31"
	//}
	if (m==1){
		ultimoDia = "31"
	}
	if (m==2){
		ultimoDia = "28"
	}
	if (m==3){
		ultimoDia = "31"
	}
	if (m==5){
		ultimoDia = "31"
	}
	if (m==7){
		ultimoDia = "31"
	}
	if (m==8){
		ultimoDia = "31"
	}
	if (m==10){
		ultimoDia = "31"
	}
	if (m==12){
		ultimoDia = "31"
	}
}
function dayDate( d ){
	d.value = currentDate();
}

function somaValDate( d, valor ){
	if(d.value==""){
		d.value = currentDate();
	}
	alert(d.value);
	var s = d.value.split("/")
	s[0] = parseInt(s[0]) + parseInt(valor.value)

	var n = new Date(s[2],s[1]-1,s[0])
	s[0]=n.getDate()
	s[1]=n.getMonth()+1
	s[2]=n.getFullYear();
	if(s[0]<10) s[0]="0"+s[0];
	if(s[1]<10) s[1]="0"+s[1];
	d.value = s[0]+"/"+s[1]+"/"+s[2]
}

function subValDate( d, valor ){
	if(d.value==""){
		d.value = currentDate();
	}
	alert(d.value);
	var s = d.value.split("/")
	s[0] = parseInt(s[0]) - parseInt(valor.value)

	var n = new Date(s[2],s[1]-1,s[0])
	s[0]=n.getDate()
	s[1]=n.getMonth()+1
	s[2]=n.getFullYear();
	if(s[0]<10) s[0]="0"+s[0];
	if(s[1]<10) s[1]="0"+s[1];
	d.value = s[0]+"/"+s[1]+"/"+s[2]
}

function currentDate(){
	var x = "00/00/00"
	var s = x.split("/");
	var n = new Date()
	s[0]=n.getDate()
	s[1]=n.getMonth()+1
	s[2]=n.getFullYear();
	if(s[0]<10) s[0]="0"+s[0];
	if(s[1]<10) s[1]="0"+s[1];
	
	return(s[0]+"/"+s[1]+"/"+s[2]);
}

function isNav() {
   return navigator.appName == 'Netscape';
}

function keyPress(evt,objtxt,myForm) {
  if ((objtxt.readOnly == true) || (objtxt.disabled == true) || (objtxt.style.display == "none")) { return; }
	if ((myForm == null) && (document.forms.length==0))	return;
  if (myForm == null) { myForm = document.forms[0]; }	
	if (evt.keyCode==13) {
		window.execFocusBlur = true;
		var i = returnIndex(objtxt);
		i++;
		nextFocus(i);
		if (!isNav()){
			evt.keyCode="";
		}	 
	}
	if (evt.keyCode==27) {
		var i = returnIndex(objtxt);
		i--;
		prevFocus(i);
		if (!isNav()) {
			evt.keyCode="";
		}	 
	} 
}

function nextFocus(i) {	
 if (document.forms.length==0) return;
 var f = window.document.forms[0]; 
 var e = null; 
 var firstLoop = true;
 if (i >= f.elements.length) i = 0;
 	while (f.elements.length>i) {
		e = f.elements[i];		
		if ((e.type == 'hidden') ||(e.type == null)) {
			 i=i+1;
			 if (i >= f.elements.length) {
			 		if (!firstLoop) return;
						 firstLoop=false;
						 i = 0;
			 }
			 continue;
	  }
		if (e.disabled) {
			 i=i+1;
			 if (i >= f.elements.length) {
			 		if (!firstLoop) return;
						 firstLoop=false;
						 i = 0;
			 }
			 continue;
	  }
		if (e.readOnly) {
			 i=i+1;
			 if (i >= f.elements.length) {
			 		if (!firstLoop) return;
			 			 firstLoop=false;
			 			 i = 0;
 			 }
			 continue;
	  }		
		if ((e.style.display == "none") || (e.style.visibility == "hidden")) {
			 i=i+1;
			 if (i >= f.elements.length) {
			 		if (!firstLoop) return;
						 firstLoop=false;
						 i = 0;
			 }
			 continue;
	  }		
	  if (e.getAttribute("tipo") != null)	{
			 i=i+1;
			 if (i >= f.elements.length) {
			 		if (!firstLoop) return;
						 firstLoop=false;
						 i = 0;
			 }
			 continue;
	  }
		e.focus();
		break;
  }
}

function prevFocus(i) {
	var e=null; 
	if (document.forms.length==0)	return;
	while (window.document.forms[0].elements.length>i) {
			if (i==-1) { i = window.document.forms[0].elements.length-1; } 
	 	e=window.document.forms[0].elements[i]		
			if ((e.type == 'hidden') ||(e.type == null)) {
				i=i-1;
		 		continue;
			}
			if (e.disabled) {
				i=i-1;
			continue;
			}
			if (e.readOnly) {
				i=i-1;
				continue;
			}
			if (e.style.display == "none" || e.style.visibility == "hidden") {
				i=i-1;
				continue;
			}
	  if (e.getAttribute("tipo") != null)	{
			 i=i-1;
			 continue;	  	
	  }			
		e.focus();
			break;
	}
}

function returnIndex(objtxt) {
	if (document.forms.length==0)	return -1;
  for (var i=0; i<window.document.forms[0].elements.length; i++) {
    if (window.document.forms[0].elements[i] == objtxt) {
      return i;
    }
  }
  return -1;
}


function IsNumber(campo){
	//Verifica se o campo informado é número
	var ValidChars = "0123456789.";
	var isNumber=true;
	var Char;
	
	for (i = 0; i < campo.toString().length; i++){ 
		Char = campo.toString().charAt(i);
		if (ValidChars.indexOf(Char.toString()) == -1){
			isNumber = false;
		};
	};
	
	return isNumber;
}
function evBlurNS(e){
	if(e.eventPhase==1){
		if(e.target.hasAttribute("condicao"))
			validarCampo(e.target)
	}
}
function evBlurIE(){
	var cond=event.srcElement.getAttribute("condicao")
	if(cond) validarCampo(event.srcElement)
}

function ajustarFoco(form){	
	for(var i=0;i<form.elements.length;i++){
		if(!form.elements[i].readOnly && form.elements[i].type!="hidden" ){ //FAZER
			try{
				if(form.elements[i].type.indexOf("select")>=0)
						form.elements[i].options[0].selected=true
				form.elements[i].focus()
				return
			}catch(e){
				continue
			}
		}
	}
}