// Funções usadas em todos os formulários

// Auxilia o preenchimento das datas com horas colocando as barras e pontos
function FillDtHr(campo,key) {
  if(key != 8){
		if (campo.value.length == 2) campo.value += "/"
		if (campo.value.length == 5) campo.value += "/"
		if (campo.value.length == 10) campo.value += " "
		if (campo.value.length == 13) campo.value += ":"
		if (campo.value.length == 16) campo.value += ":"
  }
  return true
}

// Auxilia o preenchimento das datas com horas colocando as barras e pontos
//Formato dd/mm/aaa hh:mm
function FillDtHM(campo,key) {
  if(key != 8){
		if (campo.value.length == 2) campo.value += "/"
		if (campo.value.length == 5) campo.value += "/"
		if (campo.value.length == 10) campo.value += " "
		if (campo.value.length == 13) campo.value += ":"
  }
  return true
}

// Auxilia o preenchimento das datas com horas colocando as barras e pontos
//Formato dd/mm/aaa hh:mm
function FillDHM(campo,key) {
  if(key != 8){
		if (campo.value.length == 2) campo.value += "/"
		if (campo.value.length == 5) campo.value += "/"
		if (campo.value.length == 8) campo.value += " "
		if (campo.value.length == 11) campo.value += ":"
  }
  return true
}

// Auxilia o preenchimento das datas colocando as barras
function FillData(campo,key) {
  if(key != 8){
		if (campo.value.length == 2) campo.value += "/"
		if (campo.value.length == 5) campo.value += "/"
  }
  return true
}

// Auxilia o preenchimento das datas simples colocando a barra
function FillDt(campo,key) {
  if(key != 8){
		if (campo.value.length == 2) campo.value += "/"
  }
  return true
}

// Auxilia no preenchimento dos campos com hora e minuto
function FillHM(campo,key) {
	if(key != 8){
		if (campo.value.length == 2) campo.value += ":"
	}
	return true
}

// Auxilia no preenchimento dos campos de CEP
function FillCEP(campo,key) {
	if(key != 8){
		if (campo.value.length == 5) campo.value += "-"
	}
	return true
}

// Auxilia no preenchimento dos campos de moeda
function FillMoney(campo) {
 var len = campo.value.length 
 var clearnbr = ''
 var formatnbr = ''
 for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i) 
	if (letra >= "0" && letra <= "9") clearnbr += letra
 }
 len = clearnbr.length
 if (len > 2){
	for (var i=len; i >0 ; i--){
		var letra = clearnbr.charAt(i-1) 
		if (i == (len-2)) formatnbr = "," + formatnbr
		for (j=5;j<=23;j+=3) 
			if (i == (len-j)){
				formatnbr = "." + formatnbr
				break
			}
		formatnbr = letra + formatnbr
	}
 }
 else formatnbr = clearnbr
 campo.value = formatnbr
 return
}

// Auxilia no preenchimento dos campos de moedas com tres casas decimais
function FillMoney3(campo) {
 var len = campo.value.length 
 var clearnbr = ''
 var formatnbr = ''
 for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i) 
	if (letra >= "0" && letra <= "9") clearnbr += letra
 }
 len = clearnbr.length
 if (len > 3){
	for (var i=len; i >0 ; i--){
		var letra = clearnbr.charAt(i-1) 
		if (i == (len-3)) formatnbr = "," + formatnbr
		for (j=5;j<=23;j+=3) 
			if (i == (len-j)){
				formatnbr = "." + formatnbr
				break
			}
		formatnbr = letra + formatnbr
	}
 }
 else formatnbr = clearnbr
 campo.value = formatnbr
 return
}

// Auxilia no preenchimento dos campos de moeda com valores negativos inclusos
function FillNMoney(campo) {
 var len = campo.value.length 
 var neg = (campo.value.indexOf('-')==-1) ? false : true
 var clearnbr = ''
 var formatnbr = ''
 for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i) 
	if (letra >= "0" && letra <= "9") clearnbr += letra
 }
 len = clearnbr.length
 if (len > 2){
	for (var i=len; i >0 ; i--){
		var letra = clearnbr.charAt(i-1) 
		if (i == (len-2)) formatnbr = "," + formatnbr
		for (j=5;j<=23;j+=3) 
			if (i == (len-j)){
				formatnbr = "." + formatnbr
				break
			}
		formatnbr = letra + formatnbr
	}
 }
 else formatnbr = clearnbr

 if(neg) campo.value = "-" + formatnbr
 else campo.value = formatnbr

 return
}

// Auxilia no preenchimento dos campos de numéricos sem casas decimais SEM pontos nos milhares
function FillNumb(campo) {
  var len = campo.value.length
  var clearnbr = ''
  for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i)
	if (letra >= '0' && letra <= '9') clearnbr += letra
  }
  campo.value = clearnbr
  return
}

// Auxilia no preenchimento dos campos de numéricos sem casas decimais SEM pontos nos milhares
function FillSumb(campo) {
  var len = campo.value.length
  var clearnbr = ''
  for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i)
	if ((letra >= '0' && letra <= '9') || letra == '-') clearnbr += letra
  }
  campo.value = clearnbr
  return
}

// Auxilia no preenchimento dos campos de numéricos sem casas decimais mas com pontos nos milhares
function FillNumber(campo) {
 var len = campo.value.length 
 var clearnbr = ''
 var formatnbr = ''
 for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i) 
	if (letra >= "0" && letra <= "9") clearnbr += letra
 }
 len = clearnbr.length
 if (len > 2){
	for (var i=len; i >0 ; i--){
		var letra = clearnbr.charAt(i-1) 
		for (j=3;j<=30;j+=3) 
			if (i == (len-j)){
				formatnbr = "." + formatnbr
				break
			}
		formatnbr = letra + formatnbr
	}
 }
 else formatnbr = clearnbr
 campo.value = formatnbr
 return
}

// Auxilia no preenchimento dos campos de CPF
function FillCPF(campo) {
 var len = campo.value.length 
 var clearnbr = ''
 var formatnbr = ''
 if (len > 14){
	 // Se o valor for maior que 14 então tem algo errado
	 campo.value = campo.value.substring(0,14)
	 return
 }
 for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i) 
	if (letra >= "0" && letra <= "9") clearnbr += letra
 }
 len = clearnbr.length
 for (var i=0; i < len ; i++){
	var letra = clearnbr.charAt(i) 
	if (i == 3) formatnbr += "." 
	if (i == 6) formatnbr += "."
	if (i == 9) formatnbr += "-"
	formatnbr += letra
 }
 campo.value = formatnbr
 return
}

// Auxilia no preenchimento dos campos de CNPJ
function FillCNPJ(campo) {
 var len = campo.value.length 
 var clearnbr = ''
 var formatnbr = ''
 if (len > 18){
	 // Se o valor for maior que 18 então tem algo errado
	 campo.value = campo.value.substring(0,18)
	 return
 }
 for (var i=0; i<len; i++){
	var letra = campo.value.charAt(i) 
	if (letra >= "0" && letra <= "9") clearnbr += letra
 }
 len = clearnbr.length
 for (var i=0; i < len ; i++){
	var letra = clearnbr.charAt(i) 
	if (i == 2) formatnbr += "." 
	if (i == 5) formatnbr += "."
	if (i == 8) formatnbr += "/"
	if (i == 12) formatnbr += "-"
	formatnbr += letra
 }
 campo.value = formatnbr
 return
}

// Checa se o CPF é válido com relação ao dígito verificador
function checkCPF(campo) {
	var len = campo.value.length 
	var clearnbr = ''
	var msg = "CPF Inválido"
	for (var i=0; i<len; i++){
		var letra = campo.value.charAt(i) 
		if (letra >= "0" && letra <= "9") clearnbr += letra
	}
	len = clearnbr.length
	if (len != 11 || clearnbr == "00000000000" || clearnbr == "11111111111" ||
	clearnbr == "22222222222" ||	clearnbr == "33333333333" || clearnbr == "44444444444" ||
	clearnbr == "55555555555" || clearnbr == "66666666666" || clearnbr == "77777777777" ||
	clearnbr == "88888888888" || clearnbr == "99999999999") return msg

	var soma = 0
	for (i=0; i < 9; i++) soma += (clearnbr.charAt(i) * (10 - i))
	var resto = 11 - (soma % 11)
	if (resto == 10 || resto == 11) resto = 0
	if (resto != clearnbr.charAt(9)) return msg
	soma = 0
	for (i=0; i < 10; i++) soma += (clearnbr.charAt(i) * (11 - i))
	var resto = 11 - (soma % 11)
	if (resto == 10 || resto == 11) resto = 0
	if (resto != clearnbr.charAt(10)) return msg
  return ""
}

// Checa se o CNPJ é válido com relação ao dígito verificador
function checkCNPJ(campo) {
	var len = campo.value.length 
	var clearnbr = ''
	var msg = "CNPJ Inválido"
	for (var i=0; i<len; i++){
		var letra = campo.value.charAt(i) 
		if (letra >= "0" && letra <= "9") clearnbr += letra
	}
	len = clearnbr.length
	if (len != 14 || clearnbr == "00000000000000") return msg

	if (testaCNPJ(clearnbr,12) && testaCNPJ(clearnbr,13)) return ""
	else return msg
}

// Esta função é chamada internamente pela função checkCNPJ e não tem aplicação sozinha
function testaCNPJ(cnpj,tam){
	var soma=0
  var ind=2
  for (i = tam; i > 0; i-- ){
    soma += parseInt(cnpj.charAt(i-1)) * ind
    if(ind>8) ind=2
		else ind++
  }
  soma %= 11
  if ( soma==0 || soma ==1 ) soma=0
  else soma = 11 - soma

	if ( soma != parseInt(cnpj.charAt(tam)) ) return 0
  else return 1    
}

// Checa se as duas senhas entradas são iguais
function checkPw(pw1,pw2) {
	if (pw1 != pw2) {
	  return "As senhas não são iguais\n Insira as duas novamente\n"
	}
	return ""
}

// Checa se a data de início é maior que a data de fim
function IniGtFim(a,b){
  var c=a.split("/")
	var d=b.split("/")
	if((Date.parse(c[1]+"/"+c[0]+"/"+c[2])) > (Date.parse(d[1]+"/"+d[0]+"/"+d[2]))){
		return "A data de início é maior que a data de fim !\n"
	}
	return ""
}

// Checa se a data e hora de início é maior que a data e hora de fim
function DthIniGtFim(a,b){
	var	DtIni = new Date(a)
	var	DtFim = new Date(b)
	if((DtFim-DtIni)<0) return "A data hora de início é maior que a data hora de fim !\n"
	return ""
}

// Checa se é uma data válida
function isValidDate(dateStr) {
	var datePat =	/^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/
	var matchArray = dateStr.match(datePat) 
	if (matchArray == null) {
	  return "O formato da data não é válido !\n"
	}
	var CfData=dateStr.split("/")
	if(CfData[2].length < 4){
		return "O ano deve ser escrito com quatro dígitos.\n"
	}
	day = parseFloat(CfData[0])
	month = parseFloat(CfData[1])
	year = parseFloat(CfData[2])
	if (month < 1 || month > 12) { 
	  return "O mês deve estar entre 1 e 12.\n"
	}
	if (day < 1 || day > 31) {
	  return "O dia deve estar entre 1 e 31.\n"
	}
	if ((month==4 || month==6 || month==9 || month==11) && 	day==31) {
	  return "O mês "+month+" não tem 31 dias!\n"
	}
	if (month == 2) { 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || 	year % 400 == 0))
		if (day>29 || (day==29 && !isleap)) {
		return "No ano de " + year + " Fevereiro não tem "+day+" dias!\n"
	  }
	}
	return ""
}

// Checa se uma data simples é válida
function isValidDt(dateStr) {
	var datePat =	/^(\d{1,2})(\/|-)(\d{1,2})$/
	var matchArray = dateStr.match(datePat) 
	if (matchArray == null) {
	  return "O formato da data não é válido !\n"
	}
	var CfData=dateStr.split("/")
	day = parseFloat(CfData[0])
	month = parseFloat(CfData[1])
	if (month < 1 || month > 12) { 
	  return "O mês deve estar entre 1 e 12.\n"
	}
	if (day < 1 || day > 31) {
	  return "O dia deve estar entre 1 e 31.\n"
	}
	if ((month==4 || month==6 || month==9 || month==11) && 	day==31) {
	  return "O mês "+month+" não tem 31 dias!\n"
	}
	return ""
}

// Checa se um campo Hora minuto segundo é válido
function isValidHour(hourStr) {
	if (hourStr == "") {
	  return "O formato da hora não é válido !\n"
	}
	var CfHour=hourStr.split(":")
	if(CfHour[0].length < 2 || CfHour[1].length < 2 || CfHour[2].length < 2){
		return "Horas e minutos e segundos devem ser escritos com dois dígitos.\n"
	}
	hora = parseFloat(CfHour[0])
	minuto = parseFloat(CfHour[1])
	segundo = parseFloat(CfHour[2])
	if (hora < 0 || hora > 23) { 
	  return "A hora deve estar entre 0 e 23.\n"
	}
	if (minuto <0 || minuto > 59) {
	  return "Os minutos devem estar entre 0 e 59.\n"
	}
	if (segundo <0 || segundo > 59) {
	  return "Os segundos devem estar entre 0 e 59.\n"
	}
	return ""
}

// Checa se um campo Hora minuto é válido
// Obs. Em minutos só são permitidos 00, 15, 30 e 45
function isValidHM(hourStr) {
	if (hourStr == "") {
	  return "O formato da hora não é válido !\n"
	}
	var CfHour=hourStr.split(":")
	if(CfHour[0].length < 2 || CfHour[1].length < 2){
		return "Horas e minutos devem ser escritos com dois dígitos.\n"
	}
	hora = parseFloat(CfHour[0])
	minuto = parseFloat(CfHour[1])
	if (hora < 0 || hora > 23) { 
	  return "A hora deve estar entre 0 e 23.\n"
	}
	if (minuto != 00 && minuto != 15 && minuto != 30 && minuto != 45) {
	  return "Os minutos devem ser 00,15,30 ou 45 somente.\n"
	}
	return ""
}

// Devolve o cálculo do dígito pelo método do módulo 10
function modulo10(seqnum){
	// seqnum é uma string somente com números para o cálculo do dígito 
	var j = 1
	var soma = 0
	for(var i=seqnum.length-1; i>=0; i--){
		var nxt = (j%2) ? '2' : '1'
		var mult = '' + nxt * seqnum.charAt(i)
		soma += (mult.length==1) ? parseInt(mult) : parseInt(mult.charAt(0))+parseInt(mult.charAt(1))
		j++
	}
	var dac = 10 - (soma % 10)
	if(dac == 10) dac = 0
	return dac
}

// Checa se o campo está vazio
function isEmpty(campo,msg){
	if (campo == ''){
	  return msg
	}
  return ""
}

// Checa se o campo possui somente números e é igual a 4 (para cartões de crédito)
function isNumber(campo,msg){
{
   var strValidChars = "0123456789";
   var strChar;
   var blnResult = "";

   if (campo.length < 4) return msg;

   //  test strString consists of valid characters listed above
   for (i = 0; i < campo.length && blnResult == ""; i++)
      {
      strChar = campo.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = msg;
         }
      }
   return blnResult;

}
}
/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 * 
 * Fonte: http://www.sosdesigners.com/colunas-87.html
 */
function trim(str){
	return str.replace(/^\s*/, "").replace(/\s*$/, "");
}

// Checa se o campo só tem números
function onlyNumbers(campo)  {
	 var len = campo.length 
	 for (var i=0; i<len; i++)
		 if (campo.charAt (i) < "0" || campo.charAt (i) > "9")
			 return "Existem caracteres inválidos num campo numérico.\n"
	 return ""
}

// Esta função mostra a mensagem se houver e libera ou não o submit
function Libera(msg){
	if ( msg.length > 0) {
		alert( msg )
		return false
	}
	return true
}
// Esta função mostra imagens flash sem a necessidade de clicarmos nela para eliminarmos aquela borda maldita do IE. É imprescindível que os endereços
// da macromedia estejam com https, ou então quando essa imagem for chamada a partir de um site seguro, o maldito IE irá dizer que contem itens que não são seguros.
function carregaFlash(caminho,largura,altura){
	document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="'+largura+'" height="'+altura+'">');
	document.write('<param name="movie" value="'+caminho+'">');
	document.write('<param name="quality" value="high">');
	document.write('<param name="wmode" value="transparent">');
	document.write('<param name="menu" value="false">');
	document.write('<embed src="'+caminho+'" quality="high" pluginspage="https://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'+largura+'" height="'+altura+'"></embed>');
	document.write('</object>');
}
