/**
 * @author Thiago
 * @updater Rafael Descio
 */
/**
 * Procura um valor do array
 * @param {Object} arrei
 * @param {Object} valor
 */
function no_array(arrei, valor){
	count = arrei.length;
	for(i=0;i<count;i++){
		if(arrei[i] == valor){
			return true;
		}
	}
	return false;
}
/**
 * Veirifa se foi digitado um número ou não
 * caso não seja um número ou uma das excessoes
 * ("del","direcionais","home","end","backspace")
 * ele retorna true, senão retona false
 * @param {Event} event Evento do teclado
 * @return {Boolean}
 * 
 * @TODO Fazer funcionar para o opera
 */
function isNumero(event){
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	var excessoes = Array(9,8,13,35,36,37,39,46);
	if((keyCode>=48 && keyCode<=57)||(keyCode>=96 && keyCode<=105) || no_array(excessoes,keyCode)){
		return true;
	}else{
		return false;
	}
}

function correctPNG() { // correctly handle PNG transparency in Win IE 5.5 or higher.
 	
	for(var i=0; i<document.images.length; i++) {
   
		var img = document.images[i];
		var imgName = img.src.toUpperCase();
   
		if(imgName.substring(imgName.length-3, imgName.length) == "PNG") {
			
			var imgID = (img.id) ? "id='" + img.id + "' " : "";
			var imgClass = (img.className) ? "class='" + img.className + "' " : "";
			var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
			var imgStyle = "display:inline-block;" + img.style.cssText;
			var imgAttribs = img.attributes;
		
			for(var j=0; j<imgAttribs.length; j++) {
				
				var imgAttrib = imgAttribs[j];
				
				if(imgAttrib.nodeName == "align") {
				 	
					if(imgAttrib.nodeValue == "left") 
						imgStyle = "float:left;" + imgStyle;
					
					if(imgAttrib.nodeValue == "right")
						imgStyle = "float:right;" + imgStyle;
			      	
					break;
		
				}
		
			}
	
	    	var strNewHTML = "<span " + imgID + imgClass + imgTitle;
	
			strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";";
			strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
			strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
			img.outerHTML = strNewHTML;
			i = i-1;
		}
	}
} // function correctPNG()
/**
 * Faz uma pausa em um espaço de tempo
 * @param {int} millis tempo em milisegundos
 */
function delay(millis){
		var date = new Date();
		var curDate = null;
		
		do { curDate = new Date(); } 
		while(curDate-date < millis);
	}
/**
 * Essa é uma classe que faz a inclusão do arquivo
 */
function file(){

	var criarTag = function(arquivo){
		document.write("<script  type='text/javascript' id='script' src="+arquivo+"><\/script>");
		var script = document.getElementById("script");

	}


	var _this = this;
	/**
	 * Evento a ser definido pelo desenvolvedor
	 */
	this.onread = function(){}
	if(Browser.ie()){
		this.include = function(arquivo){
				criarTag(arquivo);
				script.onreadystatechange = function() {    
					if (script.readyState == "complete") {
							_this.onread();
					
					}
				}	
			}
	}else if(Browser.ff() || Browser.op()){
		this.include = function(arquivo){
			criarTag(arquivo);
			document.addEventListener("DOMContentLoaded", _this.onread, false);
		}
	}else if(Browser.sf()){
		this.include = function(arquivo){
			criarTag(arquivo);
			var intervalo = setInterval(function() {
				if(document.readyState == 'complete'){
					_this.onread();
					clearInterval(intervalo);
				}
			},10);
		}
	}
}

/**
 * @method isNumero
 * @param {Object} Variavel
 * Compara, usando Expressões Regulares, se a variável passada
 * é um número, retorna verdadeiro se sim e falso se não.
 * @return (Boolean)
 */
// ESTA FUNÇÃO ESTAVA APRESENTANDO PROBLEMAS POIS ANTES HAVIA UMA FUNÇÃO COM O MESMO NOME EM QUE ELA UTILIZAVA EVENT
//AGORA ESTA FUNÇÃO SE ENCONTRA EM /js/Utils/Validacao.js COM ESSE MESMO NOME
/*function isNumero(Variavel)
{
	ExpDigitos = new RegExp(/^\d+$/);
	//alert (ExpDigitos.test(Variavel));
	return ExpDigitos.test(Variavel);
}*/

/**
 * @method isString
 * @param {Object} Variavel
 * Compara, usando Expressões Regulares, se a variável passada
 * é um String, retorna verdadeiro se sim e falso se não.
 * Aceitando carácteres alfanuméricos e "_" (underline).
 * @return (Boolean)
 */
function isString(Variavel)
{
	ExpString = new RegExp(/^\w+$/);
	//alert (ExpString.test(Variavel));
	return ExpString.test(Variavel);
}

/**
 * @method isBoolean
 * @param {Object} Variavel
 * Compara, usando Expressões Regulares, se a variável passada
 * é do tipo booleana, retorna verdadeiro se sim e falso se não.
 * @return (Boolean)
 */
function isBoolean(Variavel)
{
	Variavel.toString;
	if(Variavel ==="false" || Variavel==="true"  || Variavel ==="0" || Variavel==="1" || Variavel === "Null" || Variavel === "null" || Variavel === "NaN")
	{
	//alert (false);
	return true;
	}
	else{
		//alert (false);
		return false;
		}
}
/**
 * @method trim
 * @param {Object} Variavel
 * Retira todos os espaços encontrados na Variável passada como parâmetro.
 * Ex:  trim("     Vovó foi a missa      ") retorna a string "Vovófoiamissa";
 * @return (String)
 */

function trim(Variavel)
{
	Variavel.toString;
	//alert ("antes: "+Variavel);
	ExpTrim = new RegExp(/\s*/g);
	Variavel = Variavel.replace(ExpTrim,"");
	//alert ("depois: "+Variavel);
	return Variavel;
}

/**
 * @method lrim
 * @param {Object} Variavel
 * Retira todos os espaços encontrados a esquerda da Variável passada como parâmetro.
 * Ex:  lrim("     Vovó foi a missa      ") retorna a string "Vovó foi a missa      ";
 * @return (String)
 */
function lrim(Variavel)
{
	Variavel.toString;
	//alert ("antes: "+Variavel+"fim!");
	ExpLrim = new RegExp(/^\s*/);
	Variavel = Variavel.replace(ExpLrim,"");
	//alert ("depois: "+Variavel+"fim!");
	return Variavel;
}

/**
 * @method rrim
 * @param {Object} Variavel
 * Retira todos os espaços encontrados a direita da Variável passada como parâmetro.
 * Ex:  lrim("     Vovó foi a missa      ") retorna a string "     Vovó foi a missa";
 * @return (String)
 */
function rrim(Variavel)
{
	Variavel.toString;
	//alert ("antes: "+Variavel+"fim!");
	ExpRrim = new RegExp(/\s*$/);
	Variavel = Variavel.replace(ExpRrim,"");
	//alert ("depois: "+Variavel  +"fim!");
	return Variavel;
}
/**
 * @method json_decode
 * @param {Object} Objeto
 * Converto o objeto passado para um formato manipulável em javascript. 
 */
function json_decode(Objeto) 
{
	eval(Objeto);
	return Objeto;
}

/**
 * @method isCep
 * @param {Object} Variavel
 * Compara a Variável passada com o padrão brasileiro de formato CEP( XXXXX-XXX,
 * onde X pode ser qualquer número de 0-9).
 * Retorna 'true' se for igual e 'false' se não. 
 */

function isCep(Variavel)
{
	ExpCEP = new RegExp(/^\d{5}(\-\d{3})$/);
	//alert (ExpCEP.test(Variavel));
	return ExpDigitos.test(Variavel);
}
/**
 * @method isPhone
 * @param {Object} Variavel
 * Compara a Variável passada com o padrão brasileiro de formato Telefone((XX)XXXX-XXXX ,
 * onde X pode ser qualquer número de 0-9).
 * Retorna 'true' se for igual e 'false' se não.
 * @return (Boolean) 
 */
function isPhone(Variavel)
{
	ExpFone = new RegExp(/^(\(\d{2}\))(\d{4}\-\d{4})$/);;
	//alert (ExpFone.test(Variavel));
	return ExpDigitos.test(Variavel);
}

/**
 * @method isEmail
 * @param {Object} Variavel
 * Compara se Variável passada é um e-mail válido, para isto é utilizado
 * Expressões Regulares.
 * Nas expressões regulares abaixo, temos:
 * Livre — ExpEmail1 - Aceita nome-local com todos os caracteres permitidos 
 * 		na RFC 2822: [\w!#$%&'*+/=?^`{|}~-]; e o domínio tem definição bem livre, 
 * 		por nome basicamente fixando apenas que o TLD deve ter entre 2 e 6 
 * 		caracteres:	[A-Za-z]{2,6}; ou por número IP entre colchetes: \[\d{1,3}(\.\d{1,3}){3}\]. 
 * Compacto — ExpEmail2 - Limita os caracteres permitidos no nome-local de forma mais 
 * 		compacta e restritiva, porém cobre os casos mais comuns. Aceita como nome-local 
 * 		uma ou mais palavras separadas por ponto ([\w-]+(\.[\w-]+)*), onde cada palavra 
 * 		é definida por [\w-]+ permitindo assim letra, dígito, sublinhado e hífen. Também 
 * 		limita o tamanho de nomes de domínio entre 2 e 63 caracteres apenas com letras, 
 * 		dígitos, sublinhado e hífen: [\w-]{2,63}. 
 * Restrito — ExpEmail3 - É uma variação da ExpEmail2, mas força nomes de domínio entre 2 e 
 * 		63 caracteres, deixa de usar a seqüência \w para não permitir o sublinhado e 
 * 		garante que não há hífen nem na primeira nem na última posição, conforme 
 * 		RFC 1034/1035. O resultado é o seguinte para representar um nome de domínio: 
 * 		[A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d].
 * 
 *  Retorna verdadeiro para um e-mail válido e falso caso contrário.
 *  @return (Boolean)
 */

function isEmail(Variavel){
	tempEmail11 = "^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%";
	tempEmail12 ="'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}";
	tempEmail13 ="|\[\d{1,3}(\.\d{1,3}){3}\])$";
	//ExpEmail1 = new RegExp(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/);
	ExpEmail1 = new RegExp("/"+tempEmail11+tempEmail12+tempEmail13+"/");
	ExpEmail2 = new RegExp(/^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/);
	ExpEmail3 = new RegExp(/^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/);

	var Resultado = ExpEmail1.test(Variavel);
	Resultado = Resultado || ExpEmail2.test(Variavel);
	//alert (Resultado || ExpEmail3.test(Variavel));
	return Resultado || ExpEmail3.test(Variavel);
}

/**
 * @method isCpf
 * @param {Object} Variavel
 * Testa se a variável passada corresponde a um CPF(Cadastro de Pessoa Física) válido no Brasil.
 * Os teste são feitos segundo um algoritmo chamado Módulo de 11.
 * @return (Boolean)
 */
function isCpf(Variavel)
{
	ExpCpf = new RegExp(/^(\d{3}\.?\d{3}\.?\d{3}\-?\d{2})$/);
	if(ExpCpf.test(Variavel))							//Verifica se existem 11 números
	{	
		var j = 10;
		var soma = 0;
		ExpTraco = new RegExp(/-/);
		Variavel = Variavel.replace(ExpTraco,"");			//Retira o '-', deixando apenas números
		ExpPonto = new RegExp(/\.*/g);
		Variavel = Variavel.replace(ExpPonto,"");			//Retira o '.', deixando apenas números
		for(var i=0;i<=8;i++)
		{			
			soma = (j*Variavel.charAt(i))+soma;
			j--;
		}
		soma = soma%11;
		if(soma<2)
		{
			soma = 0;
		}else
		{
			 soma= 11-soma;
		}
		if(soma == Variavel.charAt(9) )
		{
			j = 11;
			soma = 0;
			for(var i=0;i<=9;i++)
			{
				soma = (j*Variavel.charAt(i))+soma;
				j--;
			}
			soma = soma%11;
			if(soma<2)
			{
				soma = 0;
			}else
			{
				 soma= 11-soma;
			}
			if(soma == Variavel.charAt(10) )
			{
			//	alert("Aceito");
			//	alert(true);
				return true;
				
			}
			else {
				//alert("Recusado");
				return false;
				}
		}
		else {
			//alert("Recusado");
			return false;}
	}
	else {
			//alert("Recusado");
			return false;}
	
}

/**
 * @method isCnpj
 * @param {Object} Variavel
 * Testa se a variável passada corresponde a um CNPJ(Cadastro Nacional de Pessoa Jurídica) válido no Brasil.
 * Os teste são feitos segundo um algoritmo chamado Módulo de 11.
 * @return (Boolean)
 */
function isCnpj(Variavel)
{
	ExpCnpj = new RegExp(/^(\d{2}\.?\d{3}\.?\d{3}\/?\d{4}\-?\d{2})$/);
	if(ExpCnpj.test(Variavel))							//Verifica se existem 11 números
	{	
		var soma = 0;
		var algoritmo1 = "543298765432";
		ExpTraco = new RegExp(/-/);
		Variavel = Variavel.replace(ExpTraco,"");			//Retira o '-', deixando apenas números
		ExpBarra = new RegExp(/\/*/g);
		Variavel = Variavel.replace(ExpBarra,"");			//Retira o '-', deixando apenas números
		ExpPonto = new RegExp(/\.*/g);
		Variavel = Variavel.replace(ExpPonto,"");			//Retira o '.', deixando apenas números
		for(var i=0;i<=11;i++)
		{			
			soma = (algoritmo1.charAt(i)*Variavel.charAt(i))+soma;
		}
		soma = soma%11;
		if(soma<2)
		{
			soma = 0;
		}else{
			 soma= 11-soma;
			}
		
		if(soma == Variavel.charAt(12) )
		{
			soma = 0;
			algoritmo1="6543298765432";
			for(var i=0;i<=12;i++)
			{
				soma = (algoritimo1.charAt(i)*Variavel.charAt(i))+soma;
			}
			soma = soma%11;
			if(soma<2)
			{
				soma = 0;
			}else
			{
				 soma= 11-soma;
			}
			if(soma == Variavel.charAt(13) )
			{
				//alert("Aceito");
				//alert(true);
				return true;
				
			}
			else {
				//alert("Recusado");
				return false;
				}
		}
		else {
			//alert("Recusado");
			return false;}
	}
	else {
			//alert("Recusado");
			return false;}
	
}
