/** Classe de validação */
function Validation(){
	
	/**
	checkBanner
	Verifica se é um arquivo para o padrão adotado no website
	@param | string | Caminho do arquivo
	@return | boolean
	*/
	this.checkBanner = function(checkBannerPath){
		var $path = checkBannerPath;
		var $parse = new Parse();
		var $type = $parse.getTypeFile($path);
		switch($type){
			case 'jpg':
			case 'gif':
			case 'png':
			case 'swf':
				$return = true;
				break;
			default:
				$return = false;
				break;
		}
		return $return;
	}
	
	/**
	checkSWF
	Verifica se é um arquivo do tipo SWF
	@param | string | Caminho do arquivo
	@return | boolean
	*/
	this.checkSWF = function(checkSWFPath){
		var $path = checkSWFPath;
		var $parse = new Parse();
		var $type = $parse.getTypeFile($path);
		if($type=='swf'){
			$return = true;
		}else{
			$return = false;
		}
		return $return;
	}
	
	/**
	checkCEP
	Verifica se é um cep brasileiro no formato '00000-000'
	@param | string | Valor
	@return | boolean
	*/
	this.checkCEP = function(checkCEPValue){
		var $valid = /^[0-9]{5}-[0-9]{3}$/;
		var $number = checkCEPValue;
		var $src = $number.search($valid);
		if($src===0){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	checkCNPJ
	Verifica se é um CNPJ
	@param | string | Valor
	@return | boolean
	*/
	this.checkCNPJ = function(checkCNPJStr) {
		var $cnpj = checkCNPJStr;
		var $valid = /^([0-9]){2,3}\.[0-9]{3}\.[0-9]{3}\/[0-9]{4}\-[0-9]{2}$/;
		$src = $cnpj.search($valid);
		if($src==-1){
			return false;
		}
		if($cnpj.length==18){
			var $chars = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
		}else{
			var $chars = new Array(7,6,5,4,3,2,9,8,7,6,5,4,3,2);
		}
		// remove outros caracteres
		var $rep = /\.|\/|\-/g;
		var $int = $cnpj.replace($rep,'');
		// gerando o primeiro dígito
		var $soma = 0;
		for(var $i=0;$i<$int.length-2;$i++){
			$soma+= $int.substr($i,1)*$chars[$i+1];
		}
		var $rest = $soma%11;
		var $firstDigit = $rest<2 ? 0 : (11-$rest);
		// gerando o segundo dígito
		$soma = 0;
		for(var $i=0;$i<$int.length-1;$i++){
			$soma+= $int.substr($i,1)*$chars[$i];
		}
		$rest = $soma%11;
		var $secondDigit = $rest<2 ? 0  : (11-$rest);
		// verificando ultimos dígitos
		var $pD = $int.substr($int.length-2,1);
		var $uD = $int.substr($int.length-1,1);
		if($firstDigit!=$pD){
			return false;
		}else if($secondDigit!=$uD){
			return false;
		}else{
			return true;
		}
	}
	
	/**
	checkCPF
	Verifica se é um CPF
	@param | string | Valor
	@return | boolean
	*/
	this.checkCPF = function(checkCPFValue){
		var $valid = /^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}$/;
		var $cpf = checkCPFValue;
		var $src = $cpf.search($valid);
		if($src!=0){
			return false;
		}
		// remove outros caracteres
		$cpf = $cpf.replace(/\./g,"");
		$cpf = $cpf.replace(/\-/g,"");
		
		var $array = new Array();
		for(var $i=0;$i<$cpf.length;$i++){
			$array[$i] = $cpf.substr($i,1);
		}
		
		for($i=1;$i<=9;$i++){
			$error = new String();
			for(var $j = 0;$j<11;$j++){
				$error+=$i;
			}
			if($error===$cpf){
				return false;
			}
		}
		
		// gerando o primeiro dígito
		var $add = 0;
		for($i=0;$i<9;$i++){
			$add += $array[$i]*(10-$i);
		}
		$rest = $add%11;
		if($rest<2){
			$firstDigit = 0;
		}else{
			$firstDigit = 11-$rest;
		}
		// verificando o primeiro dígito
		if($firstDigit!=$array[9]){
			return false;
		}
		
		// gerando o segundo dígito
		$add = 0;
		for($i=0;$i<10;$i++){
			$add += $array[$i]*(11-$i);
		}
		$rest = $add%11;
		if($rest<2){
			$secondDigit = 0;
		}else{
			$secondDigit = 11-$rest;
		}
		
		// verificando o segundo dígito
		if($secondDigit!=$array[10]){
			return false;
		}
		
		return true;
	}
	
	/**
	checkDate
	Verifica se é uma data no formato 'DD/MM/AAAA'
	@param | string | Valor
	@return | boolean
	*/
	this.checkDate = function(checkDateValue){
		var $value = checkDateValue;
		var $reg = /^((0[0-9]|[12][0-9]|3[01])\/(0[13578]|1[02])|(0[0-9]|[12][0-9]|3+0)\/(0[469]|1[1])|([012][0-9])\/(0+2))\/(1+9|2[01])[0-9]{2}$/;
		var $check = $value.search($reg);
		if($check!='0'){
			return false;
		}else{
			return true;
		}
	}
	
	/**
	checkDDD
	Verifica se é um DDD no formato '99'
	@param | string | Valor
	@return | boolean
	*/
	this.checkDDD = function(checkDDDStr){
		var $str = checkDDDStr;
		var $src = /^[0-9]{2}$/;
		return $str.search($src)==0 ? true : false;
	}
	
	/**
	checkEmail
	Verifica se é um email
	@param | string | Valor
	@return | boolean
	*/
	this.checkEmail = function(checkEmailValue){
		var $valid = /^[\.,\w,-]*?\w*@[\w,-]*\.\w*[\.,\w,-]*?$/;
		var $email = checkEmailValue;
		var $src = $email.search($valid);
		return $src===0 ? true : false;
	}
	
	/**
	checkImg
	Verifica se é uma imagem para o padrão adotado no site
	@param | string | Valor
	@return | boolean
	*/
	this.checkImg = function(checkImgPath){
		var $path = checkImgPath;
		var $parse = new Parse();
		var $type = $parse.getTypeFile($path);
		switch($type){
			case 'jpg':
			case 'gif':
			case 'png':
				$return = true;
				break;
			default:
				$return = false;
				break;
		}
		return $return;
	}
	
	/**
	checkInt
	Verifica se é um inteiro
	@param | string | Valor
	@return | boolean
	*/
	this.checkInt = function(checkIntStr){
		var $str = checkIntStr;
		var $src = /^[0-9]/g;
		return $str.search($src)==0 ? true : false;
	}
	
	/**
	checkLogin
	Verifica se é um login/password
	@param | string | Valor
	@return | boolean
	*/
	this.checkLogin = function(checkLoginStr){
		var $str = checkLoginStr;
		var $src = /^[a-zA-Z0-9]{5,10}$/;
		return $str.search($src)==0 ? true : false;
	}
	
	/**
	checkMoney
	Verifica se é um valor monetário no formato 9.999,99
	@param | string | Valor
	@return | boolean
	*/
	this.checkMoney = function(checkMoneyValue){
		var $money = checkMoneyValue;
		var $reg = /^[0-9\.]*?[0-9]*\,[0-9]{2}$/;
		var $check = $money.search($reg);
		return $check!='0' ? false : true;
	}
	
	/**
	checkDDDPhone
	Verifica se é um telefone no formato (99) 9999-9999
	@param | string | Valor
	@return | boolean
	*/
	this.checkDDDPhone = function(checkDDDPhoneValue){
		var $valid = /^\([0-9]{2}\) [0-9]{4}-[0-9]{4}$/;
		var $phone = checkDDDPhoneValue;
		var $src = $phone.search($valid);
		if($src===0){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	checkPhone
	Verifica se é um telefone no formato 99 99999999
	@param | string | Valor
	@return | boolean
	*/
	this.checkPhone = function(checkPhoneValue){
		var $valid = /^[0-9]{2} [0-9]{8}$/;
		var $phone = checkPhoneValue;
		var $src = $phone.search($valid);
		if($src===0){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	checkPhoneNumber
	Verifica se é um telefone no formato 99999999
	@param | string | Valor
	@return | boolean
	*/
	this.checkPhoneNumber = function(checkPhoneNumberStr){
		var $str = checkPhoneNumberStr;
		var $src = /^[0-9]{8}$/;
		return $str.search($src)==0 ? true : false;
	}
	
	/**
	checkSizeStr
	Verifica se a quantidade de caractere de um conteúdo coincide com os valores max e min
	@param | string | Valor
	@param | int | Máximo
	@param | int | Mínimo
	@return | boolean
	*/
	this.checkSizeStr = function(checkSizeStrStr,checkSizeStrMax,checkSizeStrMin){
		var $str = checkSizeStrStr;
		var $max = checkSizeStrMax;
		var $min = checkSizeStrMin;
		
		var $size = $str.length;
		return $size>=$min&&$size<=$max ? true : false;
	}
	
	/**
	checkUF
	Verifica se é um uf no formato XX
	@param | string | Valor
	@return | boolean
	*/
	this.checkUF = function(checkUFValue){
		var $valid = /^[a-zA-Z]{2}$/;
		var $uf = checkUFValue;
		var $src = $uf.search($valid);
		return $src===0 ? true : false;
	}
	
	/**
	checkTime
	Verifica se é uma hora no formato '00:00:00'
	@param | string | Valor
	@return | boolean
	*/
	this.checkTime = function(checkTimeStr){
		var $valid = /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
		var $str = checkTimeStr;
		var $src = $str.search($valid);
		return $src===0 ? true : false;
	}
	
}
