/**
 *@Autor Samuel Herrmann
 *@Patterns
 *  - Sempre ser? utilizado o caracter "_" em funçoes que n?o devem ser usadas fora do escopo do js
 *  - Em variaveis que o escopo seja apenas da função o nome da variavel será "nomeVariavel_nomeFunção"
 */  
	 
	/**
	 * Valida se o valor de entrada é composto apenas por numeros
	 *@param <B>objInput</B> objeto a ser verificado
	 *@return <B>Boolean</B> true caso afirmativo e falso caso contrario
	 */
	function isOnlyNumbers(objInput) {
		var strNumber = "0123456789";
		if (isBlack(objInput))
			return false;
		var objInput = objInput.toString();
		for (var x_isOnlyNumbers = objInput.length - 1; x_isOnlyNumbers > -1; x_isOnlyNumbers--) {
			if (strNumber.indexOf(objInput.charAt(x_isOnlyNumbers)) == -1)
				return false;
		}
		return true;
	}
	
	/**
	 * Valida se o valor de entrada é composto apenas por letras e numeros
	 *@param <B>objInput</B> objeto a ser verificado
	 *@return <B>Boolean</B> true caso afirmativo e falso caso contrario
	 */
	function isOnlyAlphaNumeric(objInput) {
		var strAlphaNumeric = "abcdefghijlmnopqrstuvxzwyk0123456789";
		if (isBlack(objInput))
			return false;
		var objInput = objInput.toString();
		for (var x_isOnlyAlphaNumeric = objInput.length - 1; x_isOnlyAlphaNumeric > -1; x_isOnlyAlphaNumeric--) {
			if (strAlphaNumeric.indexOf(objInput.charAt(x_isOnlyAlphaNumeric)) == -1)
				return false;
		}
		return true;
	}
	
	/**
	 * Valida se o valor de entrada é composto apenas por letras
	 *@param <B>objInput</B> objeto a ser verificado
	 *@return <B>Boolean</B> true caso afirmativo e falso caso contrario
	 */
	function isOnlyAlpha(objInput) {
		var strAlpha = "abcdefghijlmnopqrstuvxzwyk";
		if (isBlack(objInput))
			return false;
		var objInput = objInput.toString();
		for (var x_isOnlyAlpha = objInput.length - 1; x_isOnlyAlpha > -1; x_isOnlyAlpha--) {
			if (strAlpha.indexOf(objInput.charAt(x_isOnlyAlpha)) == -1)
				return false;
		}
		return true;
	}
	
	/**
	 * Valida se o valor de entr????R???k?k???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????›??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????}ada é nullo ou indefinido
	 *@param <B>objInput</B> objeto a ser verificado
	 *@param <B>typRequired</B> não obrigado, caso informado ele verifica se o objeto passado é do tipo necessario
	 *@return <B>Boolean</B> true caso afirmativo e falso caso contrario
	 */
	function isBlack(objInput,typeRequired) {
		if (objInput == undefined || objInput == null)
			return true;
		if (typeRequired != undefined && typeof obj != typeRequired)
			return true;
		return false;
	}
	
	function isDateValid(fieldTest,required) {

	if (fieldTest.value.length != 0) {
		if (fieldTest.value.length != 10)
			return false;

		StrDia = fieldTest.value.substr(0,2);
		StrMes = fieldTest.value.substr(3,2);
		StrAno = fieldTest.value.substr(6,4);

		if (!isOnlyNumbers(StrDia) || !isOnlyNumbers(StrMes) || !isOnlyNumbers(StrAno))
			return false;

		
		if (StrDia < 1 || StrDia > 31 || StrMes < 1 || StrMes > 12)
			return false;

		DataCerta = new Date(StrAno,StrMes - 1,StrDia);
		DataCerta = ((DataCerta.getYear() < 1900) ? DataCerta.getYear() + 1900 : DataCerta.getYear()) + "" +
					(((DataCerta.getMonth() + 1) <= 9) ? "0" + (DataCerta.getMonth() + 1) : (DataCerta.getMonth() + 1)) + "" +
					((DataCerta.getDate() <= 9) ? "0" + DataCerta.getDate() : DataCerta.getDate())
		DataPreenchida = StrAno + StrMes + StrDia;

		if (StrAno < 1901 || StrAno > 2200)
			return false;
		if (DataCerta != DataPreenchida)
				return false;
		return true;
	}else{
		if (required)
			return false;
		else
			return true;
	}		
}
