
// ********** Valida??o de formul?rio gen?rica ********
// Autor: Elvis Dorow

function validacao(valida, numeros, f) {
	for (var i in valida) {	
		if (f[i].type == "text" || f[i].type == "password")
			if (!validaText(f[i], valida[i]))
				return false;
			else
				if (! validaCamposEspeciais(f, numeros))
					return false;
		if (f[i].type == "select-one")
			if (!validaSelect(f[i], valida[i]))
				return false;
		if (f[i].type == "select-multiple")
			if (!validaSelectMultiple(f[i], valida[i]))
				return false;
	}
	if (! validaCamposEspeciais(f, numeros))
		return false;
	
	return true;
}

// Valida campos como e-mail, data e n?meros
function validaCamposEspeciais(f, numeros) {
	for (var x in f) {
		// Se o campo come?ar com "dt_", validar campo de data
		if (x.indexOf('dt_') != -1 && f[x].value.length > 0) {
			if (!check_date(f[x])) {
				alert("Data informada inválida");
				f[x].focus();
				f[x].select();
				return false;
			}
		}
		// Se o campo conter a palavra email, validar como email
		if (x.indexOf('email') != -1 && f[x].value.length > 0) {
			if (!checkEmail(f[x].value)) {
				alert("O e-mail informado não é válido.");
				f[x].focus();
				f[x].select();
				return false;
			}
		}
		
		// Valida campos num?ricos
		if (numeros[x] && isNaN(f[x].value)) {
			alert(numeros[x]);
			f[x].focus();
			f[x].select();
			return false;
		}
	}
	return true;
}

function validaText(campo, msg) {
	if (campo.value.length < 1) {
		alert(msg);
		campo.focus();
		return false;
	}
	return true;
}

function validaSelect(campo, msg) {
	if (campo.selectedIndex < 1) {
		alert(msg);
		campo.focus();
		return false;
	}
	return true;
}

function validaSelectMultiple(campo, msg) {
	if (campo.options.length < 1) {
		alert(msg);
		campo.focus();
		return false;
	}
	return true;
}

// E-mail
function checkEmail(campo) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(campo)){
		return (true)
	}
	return (false)
}

// Valida data
function check_date(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
   err = 0;
   DateValue = DateField.value;
   /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   
   // Elvis
   // verifica se existem apenas n?meros agora
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) == -1) {
	  	erro = 100;
	  	break;
	  }
   }
   
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      return false;
  }
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      return false;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      return false;;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
    return false;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
	    return false;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
    return false;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
    return false;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
    return false;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
    DateField.value = day + seperator + month + seperator + year;
   /* Error-message if err != 0 */
   
   return true;
}
//  End -->


