/////////////////////////////////////////////////////////////
// Conjunto de funcoes Javascript para uso de Validações e formatações
// 
//  Edson Dias 
//  License Company
/////////////////////////////////////////////////////////////

/// Formata valores com formato de moeda, e opcionalmente mostra o valor por extenso
function FormataMoeda(campoMoeda, decimais, campoExtenso)
{	
	if(campoMoeda != null)
	{
		if ( campoMoeda.value != null && campoMoeda.value.length > 0)
		{
			var strMoeda = FormataNumero(campoMoeda.value, campoMoeda.maxLength, decimais);
			campoMoeda.value = strMoeda;
			
			if (campoExtenso != null)
				campoExtenso.innerHTML = FormataExtenso(strMoeda);	
		}
		else
		{
			if (campoExtenso != null)
				campoExtenso.innerHTML = "";
		}
	}
}

// Formata numero com pontuação brasileira
function FormataNumero(strNum, nMaxLen, nDec)
{     	
	var strParteDec = new String("");
	var strParteInt = new String("");
	var i = strNum.indexOf(",");
	if (nMaxLen == null || nMaxLen == 'undefined')
		nMaxLen = 0;
		
	if (nDec == null || nDec == 'undefined')
		nDec = 0;
		
	if (i > 0)
	{
		strParteInt = strNum.substr(0,i);
		strParteDec = strNum.substr(i+1, strNum.length - i);
	}	else 
	{
	  if (nDec > 0)
	  {
			//debugger;
			if (nMaxLen > 0 &&  (strNum.length > (nMaxLen - nDec) ) )
			{
				strParteInt  = strNum.substr(0,  (nMaxLen - nDec)); 
				strParteDec  = strNum.substr( (nMaxLen - nDec) );
			}
			else
			{
				strParteInt = strNum;
				strParteDec = "0"; 			
			}
			
		}
		else
		{
			strParteInt = strNum;
			strParteDec = "0"; 
		}
	}
		
	strParteInt = Replace(strParteInt, ".", "");
	//if (isNumeric(strParteInt))
	//	strParteInt = new String(parseInt(strParteInt,10));
		
	var re = /(\d+)(\d{3})/;
	while (re.test(strParteInt)) {
      strParteInt = strParteInt.replace(re, "$1.$2");
	}			
				
	while (strParteDec.length < nDec) 			
		strParteDec += "0";

	if(nDec > 0)
		return strParteInt + ","  + strParteDec;
	else
		return strParteInt;
}


///
function KeyControl(tecla) 
{
	var alt		= window.event.altKey;
	var shift	= window.event.shiftKey;	
	var ctl = window.event.ctrlKey			
	return (ctl && (tecla ==67 || tecla==86)) || ( tecla == 16 || (shift && tecla == 16) || alt || tecla == 8 || tecla == 9 || tecla == 13 || tecla == 35 || tecla == 36 || tecla == 37 || tecla == 38 || tecla == 39 || tecla == 40 || tecla == 45 || tecla == 17 );
}

function KeyControlMultiLine(tecla) 
{
	var alt		= window.event.altKey;
	var shift	= window.event.shiftKey;	
	var ctl = window.event.ctrlKey	
		
	return (ctl && (tecla ==67 || tecla==86)) || ( tecla == 16 || (shift && tecla == 16) || alt || tecla == 8 || tecla == 9 || tecla == 35 || tecla == 36 || tecla == 37 || tecla == 38 || tecla == 39 || tecla == 40 || tecla == 45 || tecla == 17 );
}

///Captura as teclas digitadas e ignora conforme a mascara
function Textbox_KeyDown(pControle, pDecimals) 
{
	var shift = window.event.shiftKey;
	var tecla = (window.Event) ? window.event.which : window.event.keyCode;
	if(!KeyControl(tecla)) {
		if(shift || (! (tecla >= 48 && tecla <= 57) && ! (tecla >= 96 && tecla <= 105)) && tecla != 188 && tecla != 110 && tecla != 46) 
		{
			event.keyCode = 0;
			event.returnValue = false;
		}
		else 
		{
			if (((tecla == 188) || (tecla == 110)) && (pDecimals == 0)) 
			{
				event.keyCode = 0;
				event.returnValue = false;
			}
			else 
			{
				pos = pControle.value.indexOf(',');
				if (pos != -1) 
				{
					if ((tecla == 188) || (tecla == 110)) 
					{
						event.keyCode = 0;
						event.returnValue = false;
					}
					else 
					{
						curPos = textPos(pControle);
						if (pos > -1 && pos < (curPos - pDecimals - 1)) {
							event.keyCode = 0;
							event.returnValue = false;
						}
					}
				}
			}
		}
	}
}


///// 
function textPos(textEl)
{
	var i=textEl.value.length+1;
	if (textEl.createTextRange) {
		theCaret = document.selection.createRange().duplicate();
		while (theCaret.parentElement() == textEl && theCaret.move('character',1)==1)
			--i;
		return i;
	}
	else{
		return -1;
	}
}

///
function validChar(pControle, pMask, pPos)
{
	var shift = window.event.shiftKey;
  var tecla = (window.Event) ? window.event.which : window.event.keyCode;
	if (pControle.value.length >= pMask.length) 
	{
		return false
	}
	charMask = pMask.substring(pPos - 1, pPos - 0);
	if (charMask == '#') 
	{
		if(shift || (! (tecla >= 48 && tecla <= 57)) && (! (tecla >= 96 && tecla <= 105))) 
			return false;

	}
	else if (charMask == 'X')
	{
		if(! (tecla >= 65 && tecla <= 90)) 
		{
			return false;
		}
		else 
		{
			return true;
		}
	}
	else if (charMask == '@')
	{
		return true;
	}
	else {
		lastchar = pControle.value.substring(pControle.value.length-1,pControle.value.length)

		if (lastchar==charMask) 
		{
			event.keyCode = 0;
			event.returnValue = false;
			return false;
		}

		pControle.value = pControle.value + charMask;
		if (! validChar(pControle, pMask, pPos + 1)) 
		{
			event.keyCode = 0;
			event.returnValue = false;
		}
	}
	return true;
}

///
function Textbox_Mask(pControle, pMask) 
{
	var shift = window.event.shiftKey;
	var tecla = window.event.keyCode;
	var ctl = window.event.controlKey;
		
	if(! KeyControl(tecla)) 
	{
		curPos = textPos(pControle);
		if (tecla == 46) 
		{
			pControle.value = pControle.value.substring(0, curPos -1);
			//event.keyCode = 0;
			//event.returnValue = false;
		}
		else {
			if (! validChar(pControle, pMask, curPos)) {
				event.keyCode = 0;
				event.returnValue = false;
			}
		}
	}
}

/// Validação de CNPJ
function ValidaCNPJ(source, arguments)
{
	arguments.IsValid = true;				
	var strCNPJ = new String(arguments.Value);
	
	if (strCNPJ == 'undefined' || strCNPJ.length == 0)
	{
		arguments.IsValid = false;	
		return;
	}

	strCNPJ = Replace(strCNPJ, '.','');
	strCNPJ = Replace(strCNPJ, '-','');
	strCNPJ = Replace(strCNPJ, ',','');
	strCNPJ = Replace(strCNPJ, '/','');
	
	if ( strCNPJ.length == 14 &&
		(strCNPJ != "11111111111111"
		|| strCNPJ != "22222222222222"
		|| strCNPJ != "33333333333333"
		|| strCNPJ != "44444444444444"
		|| strCNPJ != "55555555555555"
		|| strCNPJ != "66666666666666"
		|| strCNPJ != "77777777777777"
		|| strCNPJ != "88888888888888"
		))
	{
		if (strCNPJ == '00000000000000') 
		{
			arguments.IsValid = false;
			return;
		}
		if(strCNPJ != "99999999999999")
		{
			var nMult1 = '543298765432', nMult2 = '6543298765432', nDig1 = 0, nDig2 = 0, lVal = false;
			for ( i = 0; i < 12; i++ ) 
			{
				nDig1 += parseInt( strCNPJ.substring( i, i + 1 ) ) * parseInt( nMult1.substring( i, i + 1 ) );
			}
			for ( i = 0; i < 13; i++ ) 
			{
				nDig2 += parseInt( strCNPJ.substring( i, i + 1 ) ) * parseInt( nMult2.substring( i, i + 1 ) );
			}
			nDig1 = ( nDig1 * 10 ) % 11;
			nDig2 = ( nDig2 * 10 ) % 11;
			if ( nDig1 == 10 ) { nDig1 = 0; }
			if ( nDig2 == 10 ) { nDig2 = 0; }
			if ( nDig1 != strCNPJ.substring( 12, 13 ) || nDig2 != strCNPJ.substring( 13, 14 ) ) 
			{
				arguments.IsValid = false;		
			}
		}
	}
	else 
	{
		if (strCNPJ.length > 0 ) 
		{			
			arguments.IsValid = false;		
		}
	}
}

/// Validação de CPFs
function ValidaCPF(source, arguments)
{
	arguments.IsValid = true;				
	var strCPF = new String(arguments.Value);
	
	if (strCPF == 'undefined' || strCPF.length == 0)
	{
		arguments.IsValid = false;	
		return;
	}
		
	strCPF = Replace(strCPF, '.','')
	strCPF = Replace(strCPF, '-','')
	strCPF = Replace(strCPF, ',','')
	strCPF = Replace(strCPF, '/','')
	
	if ( strCPF.length == 11 ) 
	{
		var nDig1 = 0, nDig2 = 0, lVal = false;		
		for ( i = 0; i < 11; i++ ) 
		{
			if ( strCPF.substring( i, i + 1 ) != strCPF.substring( 0, 1 ) ) { lVal = true; }
		}
		for ( i = 10; i > 1; i-- ) 
		{
			nDig1 += parseInt( strCPF.substring( 10 - i, 11 - i ) ) * i;
		}
		for ( i = 11; i > 1; i-- ) 
		{
			nDig2 += parseInt( strCPF.substring( 11 - i, 12 - i ) ) * i;
		}
		nDig1 = ( nDig1 * 10 ) % 11;
		nDig2 = ( nDig2 * 10 ) % 11;
		if ( nDig1 == 10 ) { nDig1 = 0; }
		if ( nDig2 == 10 ) { nDig2 = 0; }
		if ( nDig1 != strCPF.substring( 9, 10 ) || nDig2 != strCPF.substring( 10, 11 ) || !lVal ) 
		{			
			arguments.IsValid = false;				
		}
	}
	else
	{
		if (strCPF.length > 0 ) 
		{			
			arguments.IsValid = false;				
		}
	}
}

/// Validação de Horas
function ValidaHora(src, args) 
{
	var CONST_REGEX_HORA = new RegExp("^((([0]?[1-9]|1[0-2])(:)[0-5][0-9]((:)[0-5][0-9])?( )?)|(([0]?[0-9]|1[0-9]|2[0-3])(:)[0-5][0-9]((:)[0-5][0-9])?))$");
	
	args.IsValid = true;
	var strValor = new String(args.Value);

	if (strValor == 'undefined' ) 
	{
		args.IsValid = false;
		return;
	}
	var matches = strValor.match(CONST_REGEX_HORA) ;
	args.IsValid = (matches != null);	
}


function ValidaMoeda(src, args)
{
	var CONST_REGEX_MOEDA = new RegExp("^(\\d{1,3}|\\.?\\d{3})+(,\\d{2,10})?$");
	args.IsValid = true;
	var strValor = new String(args.Value);

	if (strValor == 'undefined' ) 
	{
		args.IsValid = false;
		return;
	}
	var matches = strValor.match(CONST_REGEX_MOEDA) ;
	args.IsValid = (matches != null);
}


/// Validação de CEPs
function ValidaCEP(src, args) 
{
	var CONST_REGEX_CEP = new RegExp("^\\d{5}((-)?\\d{3})?$");

	args.IsValid = true;
	var strValor = new String(args.Value);

	if (strValor == 'undefined' ) 
	{
		args.IsValid = false;
		return;
	}
	var matches = strValor.match(CONST_REGEX_CEP) ;
	args.IsValid = (matches != null);
}

/// Validação de Números
function ValidaNumero(src, args) 
{
	args.IsValid = true;
	var strValor = new String(args.Value);

	if (strValor == 'undefined' ) 
	{
		args.IsValid = false;
		return;
	}
	
	args.IsValid = isNumeric(Replace(strValor, ".", ""));
}

///
function FormataData(str)
{
  var strFormatada, re, tam;
  re = /\//g;
  strFormatada = new String(str);
  strFormatada = strFormatada.replace(re,"");
  strFormatada = strFormatada.substr(0,8);
  tam = strFormatada.length;
  if (tam > 2 && tam < 5) 
		strFormatada = strFormatada.substr(0,2) + "/" + strFormatada.substr(2,2);
  
  if (tam > 4) 
		strFormatada = strFormatada.substr(0,2) +"/"+ strFormatada.substr(2,2) +"/"+ strFormatada.substr(4,4);
  return strFormatada;
}

/////////////////////////////////////////////////////////////
// Retorna se umo objeto Date a partir de uma data no formato dd/mm/yyyy
// strData = string de Data dd/mm/yyyy
// retorno objeto Date 
function DateObj(strData) 
{	
	var strDia = new String(strData.substr(0,2));
	var strMes = new String(strData.substr(3,2));
	var strAno = new String(strData.substr(6,4));
	var dtNova=new Date(parseInt(strAno,10),parseInt(strMes,10)-1,parseInt(strDia,10));

//comentado por não ter função aparente e a função getDate() apresenta valores diferentes no IE6 e IE7 gerando falasa invalidações de data
//	var iDia = parseInt(strDia,10);
//	var iMes = parseInt(strMes,10)-1;
//	var iAno = parseInt(strAno,10);
	
//	if ( (dtNova.getDate()!= iDia) || (dtNova.getMonth()!=iMes) || (dtNova.getFullYear()!=iAno) )
//		return null;
//comentado por não ter função aparente e a função getDate() apresenta valores diferentes no IE6 e IE7 gerando falasa invalidações de data
	
	return dtNova;
}

/// Validação de Datas
function ValidaData(src, args) 
{
	var MSG_ERRO_DATA_INVALIDA = "Data inválida.";
	var MIN_DATA = '01/01/1890';
	var MAX_DATA = '31/12/2100';
	
	args.IsValid = true;
	var strData = new String(args.Value);

	if (strData == 'undefined' || strData == '00/00/0000') 
	{
		src.errormessage = MSG_ERRO_DATA_INVALIDA;
		src.title = src.errormessage;
		args.IsValid = false;
		return;
	}
	
	var dtTemp = DateObj(strData);
	if (dtTemp == null)
	{		
		src.errormessage = MSG_ERRO_DATA_INVALIDA;
		src.title = src.errormessage;
		args.IsValid = false;
		return;
	} 

	//debugger;
	var dtMin = DateObj(MIN_DATA);
	var dtMax = DateObj(MAX_DATA);
	if (dtTemp < dtMin || dtTemp > dtMax  )
	{
		src.errormessage =  MSG_ERRO_DATA_INVALIDA + ' A data precisa estar entre ' + MIN_DATA  + ' e ' + MAX_DATA;
		src.title = src.errormessage;
		args.IsValid = false;
		return;
	}
			
} 

///
function isNumeric(v)
{
	return /^[0-9]+$/.test(v);
}

///
function isAlfa(v)
{
	return /^[a-zA-ZáéíóúçãõâêôàÁÉÍÓÚÇÃÕÂÊÔÀ]+$/.test(v);
}

///
function isAlfaNumeric(v)
{
	return (isAlfa(v) && isAlfa(v));
}


/// Transformar Valores em strings com formatacao de zeros a esquerda
function strZero(nVal, nCasas) 
{	
	var ret = "";
	var nTam = nCasas - (nVal.toString().length);
	for(var i=0; i < nTam;i++)
		ret +="0";
		
 return  ret + nVal.toString();
 
}

///   Retorna uma porção de uma string a partir do inicio e tamanho
///   Simulação da funcao Mid$ do VB/ASP
function Mid(str, start, len)
{
  if (start < 0 || len < 0) return "";       
  return str.substr(start-1, len);      
}

/// Remove todos os espacos a esquerda e direita de uma string
function AllTrim(str)
{
	return LTrim( RTrim(str) );
}

/// Remove os espacos a direita de uma string  
function RTrim(str)
{
  var whitespace = new String(" \t\n\r");
  var s = new String(str);

  if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      var i = s.length - 1;       
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
          i--;

      s = s.substring(0, i+1);
  }

  return s;
}

/// Remove os espacos a esquerda de uma string  
function LTrim(str)
{
	var whitespace = new String(" \t\n\r");
	var s = new String(str);

	if (whitespace.indexOf(s.charAt(0)) != -1) {
		var j=0, i = s.length;

		while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
				j++;

		s = s.substring(j, i);
	}

	return s;
}
    
/// Retorna um valor formatado por extenso

function FormataExtenso(strValor)
{		
	var unidade = new Array(11),
		dezena1 = new Array(11),
		dezena2 = new Array(11),
		centena = new Array(11),
		diverso = new Array(8),
		plurais = new Array(9);
		
	var str = strValor;//new String(strValor);	
	var i = str.indexOf(",");
	if (i < 0)	
	{
		str += ",00";	
		i = str.lenght;	
	}
		
	str = str.substr(0, i + 3);
		
	//str = str.replace(",", ":");
	//str = str.replace(".", "");
	//str = str.replace(":", ".");
	var Valor;  //ToDouble(str, 2);
	Valor = Replace(str, ',','');
	Valor = Replace(Valor, '.','');
	
	var strMoeda = new String("real"),
		strMoedas = new String("reais");
	
	var strCent = new String("centavo"),
		strCents= new String("centavos");
	
	strMoeda = strMoeda.toLowerCase();
	strMoedas = strMoedas.toLowerCase();
	
	strCent = strCent.toLowerCase();
	strCents= strCents.toLowerCase();
	
	unidade[1] = "";
	unidade[2] = "um ";
	unidade[3] = "dois ";
	unidade[4] = "três ";
	unidade[5] = "quatro ";
	unidade[6] = "cinco ";
	unidade[7] = "seis ";
	unidade[8] = "sete ";
	unidade[9] = "oito ";
	unidade[10] = "nove ";
	
	dezena1[1] = "dez ";
	dezena1[2] = "onze ";
	dezena1[3] = "doze ";
	dezena1[4] = "treze ";
	dezena1[5] = "quatorze ";
	dezena1[6] = "quinze ";
	dezena1[7] = "dezesseis ";
	dezena1[8] = "dezessete ";
	dezena1[9] = "dezoito ";
	dezena1[10] = "dezenove ";
	
	dezena2[1] = "";
	dezena2[2] = "";
	dezena2[3] = "vinte ";
	dezena2[4] = "trinta ";
	dezena2[5] = "quarenta ";
	dezena2[6] = "cinquenta ";
	dezena2[7] = "sessenta ";
	dezena2[8] = "setenta ";
	dezena2[9] = "oitenta ";
	dezena2[10] = "noventa ";
	
	centena[1] = "";
	centena[2] = "cento ";
	centena[3] = "duzentos ";
	centena[4] = "trezentos ";
	centena[5] = "quatrocentos ";
	centena[6] = "quinhentos ";
	centena[7] = "seiscentos ";
	centena[8] = "setecentos ";
	centena[9] = "oitocentos ";
	centena[10] = "novecentos ";
	
	diverso[1] = "quatrilhão ";
	diverso[2] = "trilhão ";
	diverso[3] = "bilhão ";
	diverso[4] = "milhão ";
	diverso[5] = "mil ";
	diverso[6] = "";
	diverso[7] = "";
	
	plurais[1] = "quatrilhões ";
	plurais[2] = "trilhões ";
	plurais[3] = "bilhões ";
	plurais[4] = "milhões ";
	plurais[5] = "mil ";
	plurais[6] = "";
	plurais[7] = "";
	plurais[8] = "";
			
	var strRet= new String(" "),
		nCont= 1,
		strTemp = new String(""),
		strDigito = "";
	
	//var nVal = (Valor * 100);//.toFixed(2);
	strTemp = strZero(Valor, 20);
	//strTemp = Valor;
	
	if(parseFloat(strTemp) > 99 )
	{
		while(nCont< 7)
		{
			if(nCont== 7)
				break;
	
			strDigito = Mid(strTemp, nCont* 3 - 2, 3);
	
			if(strDigito != "000")
			{
				if( strRet.length != 1 && nCont != 1 )
					strRet= AllTrim(strRet) + ", ";
				if( strDigito == "100" )
					strRet += "cem ";
				else
				{
					strRet += centena[parseInt(Mid(strDigito, 1, 1),10) + 1];
					if( Mid(strDigito, 2, 2) != "00" )
					{
						if( Mid(strDigito, 1, 1) != "0" )
							strRet += "e ";
						if( Mid(strDigito, 2, 1) == "1" )
							strRet += dezena1[parseInt(Mid(strDigito, 3, 1),10) + 1];
						else
						{
							strRet += dezena2[parseInt(Mid(strDigito, 2, 1),10) + 1];
	
							if( Mid(strDigito, 3, 1) != "0" && Mid(strDigito, 2, 1) != "0" && Mid(strDigito, 2, 1) != "2" )
								strRet += "e ";
	
							strRet += unidade[parseInt(Mid(strDigito, 3, 1),10) + 1];
						}
					}
				}
	
				if( strDigito == "001" )
					strRet += diverso[nCont];
				else
					strRet +=  plurais[nCont];
			}
			nCont++;
		}
	
		if( parseInt(Mid(strTemp, 1, 18),10) == 1 )
			strRet += strMoeda + " ";
		else if( parseInt(strTemp,10) >= 1000000 && Mid(strTemp, 13, 6) == "000000" )
			strRet += "de " + strMoedas + " ";
		else
			strRet += strMoedas + " ";
	}
	
	strDigito = Mid(strTemp, 19, 2);
	
	if(parseInt(strDigito,10) > 0) {
		if(parseInt(strTemp,10) > 99)
			strRet += "e ";
	
		if(Mid(strDigito, 1, 1) == "1")
			strRet += dezena1[parseInt(Mid(strDigito, 2, 1),10) + 1];
		else
		{
			strRet += dezena2[parseInt(Mid(strDigito, 1, 1),10) + 1];
	
			if(Mid(strDigito, 2, 1) != "0" && Mid(strDigito, 1, 1) != "0" && Mid(strDigito, 1, 1) != "2" )
				strRet += "e ";
	
			strRet += unidade[parseInt(Mid(strDigito, 2, 1),10) + 1];
		}
	
		if( parseInt(strDigito,10) == 1 )
			strRet= strRet+ strCent ;
		else
			strRet= strRet+ strCents;
	}

	strRet = AllTrim(strRet);
	//strRet = Mid(strRet,1,1).toUpperCase() + Mid(strRet, 2);
	return  strRet;

}
///

function ToDouble(strVal, nCasas) 
{					  	
	var str = new String(strVal);					
	var r1 = str.match("\\.\\d{" +  nCasas.toString() + "}$");
	var r2 = str.match("\\,\\d{" +  nCasas.toString() + "}$");	
	
	if ( r1 )			
		str = str.replace(',', '');
	else	if (r2 )			
	{
		while (str.indexOf(".") > -1)
			str = str.replace('\.', '');
		
		while (str.indexOf(",") > -1)
			str = str.replace('\,', '\.');
	}									
				
	var intValor = parseInt(str);
	var decValor = parseFloat(str.substr(str.indexOf(".") + 1))/100;				
	decValor = parseFloat( decValor.toFixed(nCasas) );
	var r = intValor + decValor;
	
	return r;
	
}

/// Localiza o proximo controle a receber o foco
/// Move o foco para o proximo TabIndex
function NextField(field, e)
{	
	var keyCode = (window.Event) ? e.which : e.keyCode;	
	if (KeyControl(keyCode)) return ;
		
	if (field == null) return ;	
		
	if(field.value==document.selection.createRange().text) return;	
	
	// se for maior ou igual assume que pode passar para o proximo campo
	if (field.value.length >= field.maxLength)	
	{ 	
		// obtem o proximo campo
		var o = getTabIndexNextElement(field);			
		if (o != null && o.focus && (! o.disabled) )
		{
			try
				{o.focus();}
				catch (ex) {}
		}
	}
}
		
// obtem o proximo Campo pelo tabIndex
function getTabIndexNextElement(field)
{
	if (field == null) return null;
	
	var intTabIndex = field.tabIndex+1;		
	var _frm = field.parentElement.document.forms[0];  // assume que só tem um formulario na pagina
	if (_frm == null || _frm.elements == null ) return null;
				
  for(i=0;i<_frm.elements.length  ;i++)
  {
    if(_frm.elements[i].tabIndex==intTabIndex)
      return _frm.elements[i];
	}
}	

//Autor: Alessandro Paulino
//Valida qualquer tipo de campo que seja requerido
function validarCampoRequerido(objeto,descricaoCampo)
{
	var mensagem = "\u00C9 necess\u00E1rio informar o campo";
	switch(objeto.type.toLowerCase())
	{
		case "text":
			if(objeto.value=="")
			{
				alert(mensagem + " " + descricaoCampo);			
				objeto.focus();
				return false;
			}
			break;
		case "select-one":
			if(objeto.options[objeto.selectedIndex].value=="")
			{
				alert(mensagem + " " + descricaoCampo);			
				objeto.focus();
				return false;			
			}
			break;			
	}
	return true;
}

// Sustitue todas as ocorrencias de uma string dentro de outra
// a funcao .replace da classe string do javascript, substitui 
// apenas a primeira ocorrencia
function Replace(strTexto, strProcurar, strSubstituir)
{
	var str = new String(strTexto);			
	while ( str.indexOf(strProcurar) > -1)							
		str = str.replace(strProcurar, strSubstituir);						
	return str;
} 


function StringToIntArray(str)
{	
	var arr = new Array(str.length);
	for(var i = 0; i < str.length; i++)
		arr[i] = parseInt(str.substr(i,1), 10);
	return arr;	
}

function ArrayProduto(aArray1, aArray2)
{	
	var intProduto = 0;	 
	var intCount = 0;
  
	// verifica qual matriz é menor
	intCount = aArray1.length;
	if (aArray2.length < intCount)
		intCount = aArray2.length;
  
	// multiplica os elementos da matriz e armazena o resultado
	for (var i = 0; i < intCount; i++)
		intProduto += (aArray1[i] * aArray2[i]);
	return intProduto;
}


function SetarValidator(strIDValidator, flag)
{	
	for(var i= 0; i < Page_Validators.length; i++)
    {      
		if (Page_Validators[i].id == strIDValidator)
        {
			Page_Validators[i].enabled = flag;
            break;
        }
                                               
   }   
}

function AplicaMascaras(strValor, strMascara)
{
	var intPos = strValor.length - 1;		
	var strValorFormatado = "";
	for (var intChar = (strMascara.length - 1); intChar >= 0; intChar--)
	{
		if (strMascara.substr(intChar,1) == '#')
		{
			if (intPos >= 0)
			{
				strValorFormatado = strValor.substr(intPos,1) + strValorFormatado;
				intPos--;
			}
			else
			{
				strValorFormatado = "0" + strValorFormatado;
			}
		}
		else
		{
			strValorFormatado = strMascara.substr(intChar, 1) + strValorFormatado;
			if ((intPos >= 0) && (strMascara.substr(intChar,1) == strValor.substr(intPos,1)))
			{
				intPos--;
			}
		}
	}
	
	return strValorFormatado;

}

/////////////////////////////////////////////////////////////
// Formata uma data passada a partir de um objeto Date
// retorna uma string com uma data formatada Dia/Mes/Ano
// objDate= objeto Date a ser formatado
function FormataDataObj(objDate) 
{	
	var dia = new String(objDate.getDate());	
	var ano = new String(objDate.getYear());
	var mes = new String(objDate.getMonth()+1);

	if (dia.length < 2) 
		dia = "0" + dia;
		
	if (mes.length  < 2) 
		mes = "0" + mes;	
		
	return dia + "/" + mes + "/" + ano;	
}


function MostrarAlertData(obj)
{
	var strData = obj.value;
	if(strData != '')
	{
		var dtObj =	DateObj(strData);
		var dtNow = new Date();
		
		if(dtObj)
		{
			var dataMaior30 = new Date(dtNow.getTime() + (60 * 60 * 24 * 30 * 1000));
			var dataMenor30 = new Date(dtNow.getTime() - (60 * 60 * 24 * 30 * 1000));
			if(dtObj > new Date(dataMaior30)) //se for maior que 30 dias
				showMessage("A data informada é maior que " + FormataDataObj(dataMaior30) + "!", 2);
			else if(dtObj < new Date(dataMenor30)) //se menor que 30 dias
				showMessage("A data informada é menor que " + FormataDataObj(dataMenor30) + "!", 2);
		}
	}
	
}

function ValidaTexto(src, args)
{		
	var CONST_REGEX_1A_POSICAO			= new RegExp("^[^a-zA-Z0-9ÀÁÂÃÇÉÊÍÓÔÚáàãâêéíóôõú]");
	var CONST_REGEX_QTDE_CARACTERES = new RegExp('\\w{26}');

	args.IsValid = true;
  var strNum = new String(args.Value);
  if (strNum == 'undefined' || strNum.length == 0)
  {
     args.IsValid = false;
     return;
  }
      
  var txt = document.getElementById(src.controltovalidate);
  strNum = AllTrim(strNum);   // elimina os espacos
  if (txt != null) txt.value = strNum;
	
  var _invalid = strNum.match(CONST_REGEX_1A_POSICAO);
  if (_invalid)
  {    
		src.errormessage = 'A 1ª posição do texto deve conter caracteres de A a Z ou de 0 a 9.';
		src.title = src.errormessage;		
		args.IsValid = false;     
    return;
  }
  
  var _valid = strNum.match(CONST_REGEX_QTDE_CARACTERES);
  if (_valid)
  {    
		src.errormessage = 'O texto não deve conter palavras com mais de 25 caracteres.';
		src.title = src.errormessage;		
		args.IsValid = false;     
    return;
  }

  var _valid = strNum.match('<|>');
  if (_valid)
  {    
		src.errormessage = 'Caracteres < e > não são permitidos.';
		src.title = src.errormessage;		
		args.IsValid = false;     
    return;
  }
  
	return;
}

function ValidaMaxLength(src)
{	
	return;
}

//////////////////////////////////////////////////////
// Retorna a URL do servidor mais o diretório virtual
// Exemplo:  http://localhost/diretorio
function ApplicationURL()
{
	var r = new RegExp('(https?)://([^/\\r\\n]+)/([^/\\r\\n]+)');
	var s = r.exec(document.URL);
	var strRet = '';
	if (s != null)
	{		
		var strProtocolo	= s[1];
		var strServidor		= s[2];
		var strDirVirtual = s[3];		
		strRet = strProtocolo + "://" + strServidor + "/" + strDirVirtual;
	}
	
	return strRet;
}