function Vazio(oCampo, sMensagem) {
    if ((oCampo.value == null) || (oCampo.length == 0) || (oCampo.value == 0)) {
        if (sMensagem != "") {
            alert(sMensagem);
            oCampo.focus();
        }
        return true;
    } else {
        return false;
    }
}

function VerificarEmail(sEmail) {
   var s = new String(sEmail);
   // { } ( ) < > [ ] | \ /
   if ((s.indexOf("{")>=0) || (s.indexOf("}")>=0) || (s.indexOf("(")>=0) || (s.indexOf(")")>=0) || (s.indexOf("<")>=0) || (s.indexOf(">")>=0) || (s.indexOf("[")>=0) || (s.indexOf("]")>=0) || (s.indexOf("|")>=0) || (s.indexOf("\"")>=0) || (s.indexOf("/")>=0) )
      return false;
   // & * $ % ? ! ^ ~ ` ' "
   if ((s.indexOf("&")>=0) || (s.indexOf("*")>=0) || (s.indexOf("$")>=0) || (s.indexOf("%")>=0) || (s.indexOf("?")>=0) || (s.indexOf("!")>=0) || (s.indexOf("^")>=0) || (s.indexOf("~")>=0) || (s.indexOf("`")>=0) || (s.indexOf("'")>=0) )
      return false;
   // , ; : = #
   if ((s.indexOf(",")>=0) || (s.indexOf(";")>=0) || (s.indexOf(":")>=0) || (s.indexOf("=")>=0) || (s.indexOf("#")>=0) )
      return false;
   // procura se existe apenas um @
   if ( (s.indexOf("@") < 0) || (s.indexOf("@") != s.lastIndexOf("@")) )
      return false;
   // verifica se tem pelo menos um ponto após o @
   if (s.lastIndexOf(".") < s.indexOf("@"))
      return false;
   return true;
}

function ValidarEmail(oCampo) {
    if ((!VerificarEmail(oCampo.value)) && (Trim(oCampo.value) != "")) {
        alert("E-mail incorreto!");
  			oCampo.focus();
  			oCampo.select();
  			return false;
    } else {
        return true;
    }
}

/*******************************************************************************************************/
/* função que retorna true se o ano for bissexto e false se não for                                    */
/*******************************************************************************************************/
function isBissexto(iAno){
	return ((iAno % 4 == 0) && ((iAno % 100 != 0) || (iAno % 400 == 0)));
}

/*******************************************************************************************************/
/* Retorna a sString com todos os caracteres sCar trocados por sCarNovo                                */
/*******************************************************************************************************/
function Trim(sString) {
	var sStringNovo = sString;
	while (sStringNovo.charAt(0) == " ") {
		sStringNovo = sStringNovo.substring(1, sStringNovo.length);
	}

	while (sStringNovo.charAt(sStringNovo.length - 1) == " ") {
		sStringNovo = sStringNovo.substring(0, sStringNovo.length - 1);
	}
	
	return sStringNovo
}

/*******************************************************************************************************/
/* Retorna a sString com todos os caracteres sCar trocados por sCarNovo                                */
/*******************************************************************************************************/
function TrocarCar(sString, sCar, sCarNovo) {
	var x, sStringNovo = "";
	sString = sString.toString();
	if (sCar.length > 0) {
		for (x = 0; x < sString.length; x++) {
			if (sString.substring(x, x + sCar.length) == sCar) {
				sStringNovo += sCarNovo;
				x += sCar.length - 1;
			} else {
				sStringNovo += sString.charAt(x);
			}
		}
	}
	return sStringNovo
}

/*******************************************************************************************************/
/* Função para validação de datas                                                                      */
/*******************************************************************************************************/
function ValidarData(objData) {
	objData.value = TrocarCar(objData.value, " ", "");

	if (objData.value != "") {
		var sAux, iMes;
		
		/* verifica se existe a primeira barra */
		if (objData.value.indexOf("/") == -1) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}
		/* verifica se existe a segunda barra */
		if (objData.value.substring(objData.value.indexOf("/") + 1, objData.value.length).indexOf("/") == -1) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

		/* verifica se a quantidade de caracteres e menor que 6 (d/m/aa) ou mair que 10 (dd/mm/aaaa)
		   que são os extremos de uma data correta */
		if (objData.value.length < 6 || objData.value.length > 10 ) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

		/* coloca zero no dia, caso nao exista e o dia seja de apenas um dígito */
		sAux = objData.value.substring(0, 2);
		if (sAux.indexOf("/") != -1) {
			sAux = "0" + sAux.charAt(0);
			objData.value = sAux + objData.value.substring(1, objData.value.length);
		}
		/* verifica se o dia é uma sequência de caracteres */
		if (isNaN(sAux) == true) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

		/* coloca zero no mês, caso nao exista e o mês seja de apenas um dígito */
		sAux = objData.value.substring(3, 5);
		if (sAux.indexOf("/") != -1) {
			sAux = "0" + sAux.charAt(0);
			objData.value = objData.value.substring(0, 3) + sAux + "/" + objData.value.substring(5, 10);
		}
		/* verifica se o mês é uma sequência de caracteres */
		if ((isNaN(sAux) == true) || (eval(sAux) < 1 && eval(sAux) > 12)) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

		/* coloca os dois primeiros dígitos do ano, se não existirem */
		sAux = objData.value.substring(6, objData.value.length);
		if (sAux.length == 2) {
			if (eval(sAux) > 50)
				sAux = "19" + sAux
			else
				sAux = "20" + sAux;
			objData.value = objData.value.substring(0, 6) + sAux;
		} else if (sAux.length != 4) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}
		/* verifica se o ano é uma sequência de caracteres */
		if (isNaN(sAux) == true) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

		/* verifica se o mês está dentro dos limites */
		if ((eval(objData.value.substring(3, 5)) < 1) || (eval(objData.value.substring(3, 5)) > 12)) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

		/* Array dos dias para cada mês */
		var dias_mes = new Array(13);
		dias_mes[1]  = 31;
		if (isBissexto(objData.value.substring(6, 10))) {
			dias_mes[2] = 29;
		} else {
			dias_mes[2] = 28;
		}
		dias_mes[3]  = 31;
		dias_mes[4]  = 30;
		dias_mes[5]  = 31;
		dias_mes[6]  = 30;
		dias_mes[7]  = 31;
		dias_mes[8]  = 31;
		dias_mes[9]  = 30;
		dias_mes[10] = 31;
		dias_mes[11] = 30;
		dias_mes[12] = 31;

		/* verifica se o dia está dentro dos limites do mês */
		sAux = objData.value.substring(0, 2);
		if ((eval(sAux) < 1) || (eval(sAux) > dias_mes[eval(objData.value.substring(3, 5))])) {
			alert("Data incorreta.");
			objData.focus();
			objData.select();
			return false;
		}

	}
	
	return true;
}

/*******************************************************************************************************/
/* Função para validação e ajuste de números                                                           */
/*******************************************************************************************************/
function ValidarNumero(objNumero, iCasas) {
	var novoNumero;
  
	novoNumero = objNumero.value;
	novoNumero = TrocarCar(novoNumero, " ", "");
	if (novoNumero != "") {
		novoNumero = FormatarNumero(novoNumero, iCasas, false);
		if (novoNumero == "") {
			alert("Apenas números podem ser informados nesse campo.");
			objNumero.focus();
			objNumero.select();
			return false;
		} else {
			objNumero.value = novoNumero;
			return true;
		}
	} else {
		objNumero.value = "";
		return true;
	}
}

/*******************************************************************************************************/
/* Função para ajuste de números                                                           */
/*******************************************************************************************************/
function FormatarNumero(sNumero, iCasas, bPorMilhar) {
  var x;
  var posVirg = 0;
  var charValidos = "0123456789.,";
  
  sNumero = TrocarCar(sNumero, " ", "");
  
  if (sNumero != "") {
		if (iCasas < 0) {
			iCasas = 0;
		}

		/* Verifica a existência de algum caractere não-numérico */
		for (x = 0; x < sNumero.length; x++) {
			if (charValidos.indexOf(sNumero.charAt(x)) == -1 ) {
				return "";
			}
		}

		/* Procura pela vírgula. Os pontos também são tratados como vírgula, para facilitar digitação */
		posVirg = -1;
		for (x = sNumero.length - 1; x >= 0; x--) {
			if ((sNumero.charAt(x) == ",") || (sNumero.charAt(x) == ".")) {
				if(posVirg == -1) {
					posVirg = x;
					/* Troca o ponto por vírgula */
					if (sNumero.charAt(x) == ".") {
						sNumero = sNumero.substring(0, x) + "," + sNumero.substring(x + 1, sNumero.length);
					}
				} else {
                                        posVirg--;
					/* Se houver mais de uma vírgula (ou ponto), remove o caractere da expressão */
					sNumero = sNumero.substring(0, x) + sNumero.substring(x + 1, sNumero.length);
				}
			}
		}

		/* Caso seja necessário casas decimais e a vírgula não exista, essa última é inserida no final da expressão */
		if ((posVirg == -1) && (iCasas > 0)) {
			posVirg = sNumero.length;
			sNumero = sNumero + ",";
		}
		
		if (posVirg > -1) {
			if (iCasas > 0) {
				/* Tira as casas depois da vírgula que superarem o solicitado ou insere zeros depois da vírgula
				   caso as casas decimais não tenham sido totalmente preenchidas */
				if (iCasas <= (sNumero.length - posVirg - 1)) {
					sNumero = sNumero.substring(0, posVirg + iCasas + 1);
				} else {
					for(x = 1; (sNumero.length - posVirg - 1) < iCasas; x++) {
						sNumero = sNumero + "0";
					}
				}	
				
				/* Se não for digitado nenhum algarismo antes da vírgula, um zero é inserido */
				if (posVirg == 0) {
					sNumero = "0" + sNumero;
				}
			} else {
				/* Se o solicitado for 0 casas decimais, a vírgula e as casas digitadas serão desprezadas */
				sNumero = sNumero.substring(0, posVirg);
			}
		}
		
		if (posVirg == -1) {
			posVirg = sNumero.length;
		}
		/* Coloca os pontos de milhar na expressão */
    if (bPorMilhar == true) {
        for (x = posVirg - 1; x >= 0; x--) {
            if (((posVirg - x - 1) % 3 == 0) && ((posVirg - x - 1) != 0)) {
                sNumero = sNumero.substring(0, x + 1) + "." + sNumero.substring(x + 1, sNumero.length);
            }
        }
    }
	}
  
	return sNumero;
}
