function IsDate(sObject, sErrorMessage) {
	var reDate = /^((0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3})$/;
	data = sObject.value;
	
	if (data.length < 10) {
		alert(sErrorMessage);
		sObject.focus();
		return false;
	} 
	
	arrData = new Array();
	arrData = data.split("/");
	iMonth = arrData[1];
	iDay = arrData[0];
	iYear = arrData[2];
	
	iMonth = parseInt(iMonth) - 1;
	var tempDate = new Date(iYear, iMonth, iDay);
	
	if (((tempDate.getFullYear() != iYear) || (iMonth != tempDate.getMonth()) || (iDay != tempDate.getDate())) && (reDate.test(data) == false)) {
		alert(sErrorMessage);
		sObject.focus();
		return false;
	}
	return true;
}


function IsTime(sObject, sErrorMessage) {
	var reTime = /^(([01][0-9]|2[0-3]):[0-5][0-9])$/;
	if (reTime.test(sObject.value) == false) {			
		alert(sErrorMessage);
		sObject.focus();
		return false;
	}
	return true;
}

function IsNumeric(sObject, sErrorMessage) {
	var reFloatPt = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
	if (!reFloatPt.test(sObject.value)) {			
		alert(sErrorMessage);
		sObject.focus();
		return false;
	}
	return true;
}

function IsPath(sObject, sErrorMessage) {
	var rePath = /([a-zA-Z]:(\\w+)*\\[a-zA-Z0_9]+)?.[jpg|JPG]/;
	if (!rePath.test(sObject.value)) {			
		alert(sErrorMessage);
		sObject.focus();
		return false;
	}
	return true;
}


/********************************************************************
IsCard - Funcao para validar Cartão de Crédito
Syntax: isCreditCard(
				st (número do cartão de crédito)
			  )
********************************************************************/
function isCreditCard(st) {
  if (st.length > 19) {
  	alert("Cartão Inválido");
    return (false);
  }
  
  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  if ((sum % 10) == 0)
    return (true);
  else {
   	alert("Cartão Inválido");
    return (false);
  }
}

/********************************************************************
IsCPF - Funcao para validar CPF
********************************************************************/
function IsCPF (myForm, CPF) {
	myFormValue = myForm.value;
	strAlert = "CPF preenchido inválido."
	if (myFormValue.length != 11 || CPF == "00000000000" || CPF == "11111111111" ||
		CPF == "22222222222" ||	CPF == "33333333333" || CPF == "44444444444" ||
		CPF == "55555555555" || CPF == "66666666666" || CPF == "77777777777" ||
		CPF == "88888888888" || CPF == "99999999999") {
		alert(strAlert)
		return false; }
	soma = 0;
	for (i = 0; i < 9; i ++) {
		soma += myFormValue.charAt(i) * (10 - i);
	}
	digito1 = 11 - (soma % 11);
	if (digito1 >= 10) { digito1 = 0; }

	soma = 0;
	for (i = 0; i < 10; i ++) {
		soma += myFormValue.charAt(i) * (11 - i);
	}
	digito2 = 11 - (soma % 11);
	if (digito2 >= 10) { digito2 = 0; }
	if (digito1 != myFormValue.charAt(9) || digito2 != myFormValue.charAt(10)) {
		alert(strAlert);
		myForm.focus();
		return false;
	}
	
	return true;
}

/********************************************************************
IsCGC - Funcao para validar CGC
********************************************************************/
function IsCGC(myForm, CGC) {
	myFormValue = myForm.value;
	soma = (myFormValue.charAt(0) * 5) + (myFormValue.charAt(1) * 4) + (myFormValue.charAt(2) * 3) + (myFormValue.charAt(3) * 2) + (myFormValue.charAt(4) * 9) + (myFormValue.charAt(5) * 8) + (myFormValue.charAt(6) * 7) + (myFormValue.charAt(7) * 6) + (myFormValue.charAt(8) * 5) + (myFormValue.charAt(9) * 4) + (myFormValue.charAt(10) * 3) + (myFormValue.charAt(11) * 2);
	digito1 = 11 - (soma % 11);
	if (digito1 >= 10) { digito1 = 0; }
	
	soma = (myFormValue.charAt(0) * 6) + (myFormValue.charAt(1) * 5) + (myFormValue.charAt(2) * 4) + (myFormValue.charAt(3) * 3) + (myFormValue.charAt(4) * 2) + (myFormValue.charAt(5) * 9) + (myFormValue.charAt(6) * 8) + (myFormValue.charAt(7) * 7) + (myFormValue.charAt(8) * 6) + (myFormValue.charAt(9) * 5) + (myFormValue.charAt(10) * 4) + (myFormValue.charAt(11) * 3) + (myFormValue.charAt(12) * 2);
	digito2 = 11 - (soma % 11);
	if (digito2 >= 10) { digito2 = 0; }
	
	if (digito1 != myFormValue.charAt(12) || digito2 != myFormValue.charAt(13)) { 
		alert("Por favor, preencha o campo \'CNPJ\' com um valor válido");
		myForm.focus();
		return false; 
	}
	return true;
}

/*****************************************************************
IsCEP - Funcao para validar CEP.
Syntax: IsCEP(
				sCEP (CEP a ser validado),
				sErrorMessage (Mensagem de erro OPCIONAL)
				)
*****************************************************************/
function IsCEP(sObject, sErrorMessage) {
		sCEP = sObject.value;
		if (sCEP.length < 8 || isNaN(sCEP)) {
			if (sErrorMessage) {
				alert(sErrorMessage);
				sObject.focus();
			}
			else {
				alert("Por favor, preencha o campo \"CEP\" com um valor válido.");
				sObject.focus();
			}
			return false;
		}
		return true;
}

/*****************************************************************
IsEmail - Funcao para validar e-mail.
Syntax: IsEmail(
				sEmail (Email a ser validado),
				sErrorMessage (Mensagem de erro OPCIONAL)
				)
*****************************************************************/
function IsEmail(sEmail, sErrorMessage) {
	if (sEmail) {
		var Expression = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
		
		if (!Expression.test(sEmail.value)) {
			if (sErrorMessage) {
				alert(sErrorMessage);
				sEmail.focus();
			}
			else {
				alert("Por favor, preencha o campo \"Email\" com um valor válido.");
				sEmail.focus();
			}
			return false;
		}
		return true;
	}
}

/*****************************************************************
RequiredFields - Obriga o preenchimento de determinados campos
Syntax: RequiredFields(
			Objeto Form,
			'Nome do campo, Nome ficticio'
		)
Exemplo: RequiredFields('document.MyForm', 'nome,Nome','email,E-Mail','fone,Telefone')
*****************************************************************/
function RequiredFields(sObject) {
	var ErrorMessageBegin = "Por favor, preencha o campo \'";
	var ErrorMessageEnd = "' com um valor válido.";
	
	//Loop para cada argumento passado
	for (var i = 1; i < arguments.length; i++) {
		Arguments = new String(arguments[i]);
		ArrFields = Arguments.split(",");
		
		//Verifica preenchimento de chebox
		//alert(eval(sObject)[ArrFields[0]].type)
		if (eval(sObject)[ArrFields[0]].type == "checkbox") {
			if (!eval(sObject)[ArrFields[0]].checked) {
				alert(ErrorMessageBegin + ArrFields[1] + ErrorMessageEnd);
				return false;
			}
		}
		//Verifica preenchimento de text
		else if (eval(sObject)[ArrFields[0]].type == "text" || eval(sObject)[ArrFields[0]].type == "password" || eval(sObject)[ArrFields[0]].type == "textarea" || eval(sObject)[ArrFields[0]].type == "select-one" || eval(sObject)[ArrFields[0]].type == "hidden") {
			if (eval(sObject)[ArrFields[0]].value.length == 0) {
				alert(ErrorMessageBegin + ArrFields[1] + ErrorMessageEnd);
				if (eval(sObject)[ArrFields[0]].type != "hidden") {
					eval(sObject)[ArrFields[0]].focus();
				} else {
					eval(ArrFields[2]).focus();
				}
				return false;
			}
		}
		
		else if (eval(sObject)[ArrFields[0]].type == "select-multiple") {
			if (eval(sObject)[ArrFields[0]].selectedIndex == -1) {
				alert(ErrorMessageBegin + ArrFields[1] + ErrorMessageEnd);
				eval(sObject)[ArrFields[0]].focus();
				return false;
			}
		}
		
		// Verifica preenchimento de input file
		else if (eval(sObject)[ArrFields[0]].type == "file") {
			if (eval(sObject)[ArrFields[0]].value.length == 0) {
				alert(ErrorMessageBegin + ArrFields[1] + ErrorMessageEnd);
				eval(sObject)[ArrFields[0]].focus();
				return false;
			}
		}
		//Verifica preenchimento de radio
		else {
			for (var x = 0; x < eval(sObject)[ArrFields[0]].length; x++) {
				if (eval(sObject)[ArrFields[0]][x].checked) {
					var CheckedOK = true;
				}
			}
			if (!CheckedOK) {
				alert(ErrorMessageBegin + ArrFields[1] + ErrorMessageEnd);
				return false;
			}
		}
	}
	return true;
}
