//--------------------
// Funçao para escopo de janela
function enviar(title,cdnome,labelcodigo,labeldescricao){

	var lista1 = title.split("Y");
	var lista2 = lista1[1].split("X");
	var numero = lista2[1];
	var formId = lista2[0].split("Z");
	var form = formId[0];
	var id = formId[1];

	var cdnomeArray = cdnome.split("&");
	var codigo = cdnomeArray[0].split("=")[1];

	var nome = cdnomeArray[1].split("=")[1];
	var identificadorMD = '';
	if (id.length!=0){
		identificadorMD = id+'['+numero+'].';
	} 

	eval('window.opener.document.'+form).elements[identificadorMD+labelcodigo].value=codigo;
	eval('window.opener.document.'+form).elements[identificadorMD+labeldescricao].value=nome;		

	if (self.name.substring(0,12) == 'filharefresh') {
		refreshPai();
	}

	window.close();
}

function imprimirSeTitulo(impressao,titulo){
	if (self.name.substring(0,titulo.length)==titulo){
		document.write(impressao);
	}
}
//-----------------------------------------------------------------------------
//Função para Cálculo do Digito do CPF/CNPJ
function DigitoCPFCNPJ(numCIC) {
var numDois = numCIC.substring(numCIC.length-2, numCIC.length);
var novoCIC = numCIC.substring(0, numCIC.length-2);
switch (numCIC.length){
 case 11 :
  numLim = 11;
  break;
 case 14 :
  numLim = 9;
  break;
 default : return false;
}
//
var numSoma = 0;
var Fator = 1;
for (var i=novoCIC.length-1; i>=0; i--) {
 Fator = Fator + 1;
 if (Fator > numLim) {
  Fator = 2;
 }
 numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
var numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
   if (numResto > 1) {
 numResto = 11 - numResto;
   }
   else {
 numResto = 0;
   }
   //-- Primeiro dígito calculado.  Fará parte do novo cálculo.
   //--
   var numDigito = String(numResto);
   novoCIC = novoCIC.concat(numResto);
   //--
numSoma = 0;
Fator = 1;
for (var i=novoCIC.length-1; i>=0; i--) {
 Fator = Fator + 1;
 if (Fator > numLim) {
  Fator = 2;
 }
 numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
numResto = numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
   if (numResto > 1) {
 numResto = 11 - numResto;
   }
   else {
 numResto = 0;
   }
//-- Segundo dígito calculado.
numDigito = numDigito.concat(numResto);
//
if (numDigito == numDois) {
 return true;
}
else {
 return false;
}
}
//--< Fim da Função >--

//-- Retorna uma string apenas com os números da string enviada
function ApenasNum(strParm) {
strParm = String(strParm);
var chrPrt = "0";
var strRet = "";
var j=0;
for (var i=0; i < strParm.length; i++) {
 chrPrt = strParm.substring(i, i+1);
 if ( chrPrt.match(/\d/) ) {
  if (j==0) {
   strRet = chrPrt;
   j=1;
  }
  else {
   strRet = strRet.concat(chrPrt);
  }
 }
}
return strRet;
}
//-- Fim da Função --

//-- Somente aceita os caracteres válidos para CPF e CNPJ.
function PreencheCIC(objCIC) {
var chrP = objCIC.value.substring(objCIC.value.length-1, objCIC.value.length);

if ( !chrP.match(/[0-9]/) && !chrP.match(/[\/.-]/) ) {
 objCIC.value = objCIC.value.substring(0, objCIC.value.length-1);
 return false;
}
return true;
}
//--< Fim da Função >--

function FormataCIC (numCIC) {
numCIC = String(numCIC);
switch (numCIC.length){
case 11 :
 return numCIC.substring(0,3) + "." + numCIC.substring(3,6) + "." + numCIC.substring(6,9) + "-" + numCIC.substring(9,11);
case 14 :
 return numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
default : 
 alert("Tamanho incorreto do CPF ou CNPJ!");
 return "";
}
}

//-- Remove os sinais, deixando apenas os números e reconstroi o CPF ou CNPJ, verificando a validade
//-- Recebe como parâmetros o número do CPF ou CNPJ, com ou sem sinais e o atualiza com sinais é validado.
function ConfereCIC(objCIC) {
if (objCIC.value == null) {
 alert("Preenchimento obrigatório do CPF ou CNPJ");
 return false;
}
var strCPFPat  = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
var strCNPJPat = /^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/;

numCPFCNPJ = ApenasNum(objCIC.value);

 if (numCPFCNPJ.length != 11 && numCPFCNPJ.length != 14)
             { alert("CPF   deve ter 11 posições \nCNPJ deve ter 14 posições."); return false;}

             var c=0, igual = false;
             while (c < numCPFCNPJ.length)
            {
            if (numCPFCNPJ.charAt(c) != numCPFCNPJ.charAt(0))
            {  igual=false; break;}
            else igual=true;
            c++;
            }
           if (igual==true) {alert("CPF/CNPJ Inválido! \nTodos os algarismos são iguais."); return false;} 

if (!DigitoCPFCNPJ(numCPFCNPJ)) {
 alert("Atenção o Dígito verificador do CPF ou CNPJ é inválido!");
 return false;
}

objCIC.value = FormataCIC(numCPFCNPJ);

if (objCIC.value.match(strCNPJPat)) {
 return true;
}
else if (objCIC.value.match(strCPFPat)) {
 return true;
}
else {
 alert("Digite um CPF ou CNPJ válido!");
 return false;
}
}
//-----------------------------------------------------------------------------
var campo_nao_alteravel_valor;

function gravavalor(campo){
	campo_nao_alteravel_valor = campo.value;
}

function recuperavalor(campo){
  alert("Este campo nao pode ser alterado.");
  campo.value = campo_nao_alteravel_valor;
}

//-----------------------------------------------------------------------------

function checkchars(campo,tam,teclapres) { 
      	        if(navigator.appName.indexOf("Netscape")!= -1)
	   	      	var tecla= teclapres.which;
	        else
			var tecla= teclapres.keyCode;
		max=tam; 
		if (tecla == 8 || tecla == 46 ||tecla == 35 || tecla == 36 || tecla == 37 || tecla == 38 || tecla == 39 || tecla == 40)  return true; 
		if (campo.value.length >= max) return false; 
		else return true; 
}

//-----------------------------------------------------------------------------

function incluirLinha(nome_grid) {
	//alert("Inserindo na linha " + (eval("grid_contadores_" + nome_grid)[0] + 1));
	eval("grid_tabela_" + nome_grid).insertRow(eval("grid_contadores_" + nome_grid)[0] + 1);

	eval("grid_contadores_" + nome_grid)[0]++;
	eval("grid_contadores_" + nome_grid)[1]++;
	//alert("grid_contador == " + eval("grid_contadores_" + nome_grid)[1]);

	linha = eval("grid_tabela_" + nome_grid).rows[eval("grid_contadores_" + nome_grid)[0]];
	linha.id = eval("grid_contadores_" + nome_grid)[1];

	//alert(eval("grid_linhaNova_" + nome_grid).length);
	for (i=0; i<eval("grid_linhaNova_" + nome_grid).length; i++) {
		//alert(i);
		linha.insertCell(i);
		conteudoCelula = eval("grid_linhaNova_" + nome_grid)[i][0];
		//alert(conteudoCelula);
		if (eval("grid_linhaNova_" + nome_grid)[i].length>1) {
			for (e=1; e<eval("grid_linhaNova_" + nome_grid)[i].length-1; e++) {
				conteudoCelula += eval("grid_contadores_" + nome_grid)[1] + eval("grid_linhaNova_" + nome_grid)[i][e];
			}
			conteudoCelula += eval("grid_contadores_" + nome_grid)[1] + eval("grid_linhaNova_" + nome_grid)[i][eval("grid_linhaNova_" + nome_grid)[i].length-1];
		}
		linha.cells[i].className = eval("grid_estilos_" + nome_grid)[i];

		linha.cells[i].innerHTML = conteudoCelula;	

		//alert("Inserindo na coluna " + (i+1) + " o conteúdo:\n\n" + conteudoCelula);
	}
}

function excluirLinha(nome_grid, numLinha) {
	if (!confirm ("Você realmente deseja excluir este item?")){return}
	//alert("Procurando por linha " + numLinha);
	for (i=1; i<eval("grid_tabela_" + nome_grid).rows.length; i++) {
		//alert("Linha " + eval("grid_tabela_" + nome_grid).rows[i].id);
		if (eval("grid_tabela_" + nome_grid).rows[i].id == numLinha) {
			//alert("Apagando...");
			eval("grid_tabela_" + nome_grid).deleteRow(i);
			eval("grid_contadores_" + nome_grid)[0]--;
			//alert("grid_numLinhas == " + eval("grid_contadores_" + nome_grid)[0]);
			break;
		}
	}
}

//-----------------------------------------------------------------------------

var paginaAtual;
var paginaAnterior;

function selecionaPagina(pagina, estiloPaginaAtiva, estiloPaginaInativa) {
	paginaAnterior = paginaAtual;
	paginaAtual = pagina;
	eval("guia_" + paginaAnterior).className = estiloPaginaInativa;
	eval("document.all.pagina_" + paginaAnterior).style.display = "none";
	eval("guia_" + paginaAtual).className = estiloPaginaAtiva;
	eval("document.all.pagina_" + paginaAtual).style.display = "";
	//alert(paginaAtual.substring(0, paginaAtual.indexOf('_')));
	//alert(paginaAtual.substring(paginaAtual.indexOf('_') + 1));
	//alert("pctrlactv_" + paginaAtual.substring(0, paginaAtual.indexOf('_')));
	//alert(eval("document.forms[0].pctrlactv_" + paginaAtual.substring(0, paginaAtual.indexOf('_'))).value);
	eval("document.forms[0].pctrlactv_" + paginaAtual.substring(0, paginaAtual.indexOf('_'))).value = paginaAtual.substring(paginaAtual.indexOf('_') + 1);
}

function inicializaControladorDePagina(pagina, estiloPaginaAtiva, estiloPaginaInativa) {
	paginaAtual = pagina;
	eval("guia_" + paginaAtual).className = estiloPaginaAtiva;
	eval("document.all.pagina_" + paginaAtual).style.display = "";
}

//-----------------------------------------------------------------------------
	
function preparaHtmlArea(editorurl){
	_editor_url = editorurl;
	var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);
	if (navigator.userAgent.indexOf('Mac')        >= 0) { win_ie_ver = 0; }
	if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }
	if (navigator.userAgent.indexOf('Opera')      >= 0) { win_ie_ver = 0; }
	if (win_ie_ver >= 5.5) {
	  document.write('<scr' + 'ipt src="' +editorurl+ 'editor.js"');
	  document.write(' language="Javascript1.2"></scr' + 'ipt>');  
	}
	else { 
		document.write('<scr'+'ipt>function editor_generate() { return false; }</scr'+'ipt>'); 
	}
	//alert(_editor_url);
}

//-----------------------------------------------------------------------------

function mascara_data(el){
	var mydata = '';
	mydata = mydata + el.value;
	if (mydata.length == 2){
		mydata = mydata + '/';
		el.value = mydata;
	}
	if (mydata.length == 5){
		mydata = mydata + '/';
		el.value = mydata;
	}
	if (mydata.length == 10){
		if(!verifica_data(mydata))
			el.value='';
	}
}

function valida_tecla(campo, event) {
	var BACKSPACE= 8;
	var key;
	var tecla;
	CheckTAB=true;
	if(navigator.appName.indexOf("Netscape")!= -1)
		tecla= event.which;
	else
		tecla= event.keyCode;
	key = String.fromCharCode( tecla);
	if ( tecla == 13 )   return false;
	if ( tecla == BACKSPACE )  return true;
	return ( isNum(key));
}

function verifica_data (data) {
	dia = (data.substring(0,2));
	mes = (data.substring(3,5));
	ano = (data.substring(6,10));

	situacao = '';
	// verifica o dia valido para cada mes
	if ((dia < 1)||(dia < 1 || dia > 30) && (  mes == 4 || mes == 6 || mes == 9 || mes == 11 ) || dia > 31) {
		situacao = 'falsa';
	}

	// verifica se o mes e valido
	if (mes < 1 || mes > 12 ) {
		situacao = 'falsa';
	}

	// verifica se e ano bissexto
	if (mes == 2 && ( dia < 1 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) {
		situacao = 'falsa';
	}

	if (data == '') {
		situacao = 'falsa';
	}

	if (situacao == 'falsa') {
		alert('Data inválida!');
		return false;
	}
	return true;
}

function validaTecla(campo, event) { 
		var BACKSPACE= 8; 
		var key; 
		var tecla; 

		CheckTAB=true;
      	if(navigator.appName.indexOf("Netscape")!= -1)
	   		tecla= event.which;
	    else
			tecla= event.keyCode;
//alert(tecla);
		key = String.fromCharCode(tecla); 
		if ( tecla == 13 ) 
			return false; 
		if ( tecla == BACKSPACE ) 
			return true;
		if ( tecla == 0 )
		  	return true; 
		return ( isNum(key)); 
}			

function validaTeclaNegativo(campo, event) { 
		var BACKSPACE= 8; 
		var key; 
		var tecla; 

		CheckTAB=true;
      	if(navigator.appName.indexOf("Netscape")!= -1)
	   		tecla= event.which;
	    else
			tecla= event.keyCode;
		
//		alert(campo.value);
		
		key = String.fromCharCode(tecla); 
		if ( tecla == 13 ) 
			return false; 
		if ( tecla == BACKSPACE ) 
			return true;
		if ( tecla == 0 )
		  	return true; 
		if ( tecla == 45 && campo.value == '') //negativo e sem valor
		  	return true; 
		return ( isNum(key)); 
}			


function isNum( caractere ){ 
			var strValidos = '0123456789'; 
			if ( strValidos.indexOf( caractere ) == -1 ) 
				return false; 
			return true; 
}	

function verifica_hora(hour){
		situacao = 1;
		hora = (hour.substring(0,2)); 
		minutos = (hour.substring(3,5)); 
		ponto = (hour.substring(2,3));
		if(hora>24)
			situacao = 0;
		if(minutos>60)
			situacao = 0;
		if(ponto != ':')
			situacao = 0;
		if(situacao==0){
			alert('Hora inválida! Exemplo de hora válida: 09:30');
			hour.value='';
			return false;
		}
		return true;
}

function mascara_hora(el){
		var myhour = '';
		myhour = myhour + el.value; 
		if (myhour.length == 2){ 
			myhour = myhour + ':'; 
			el.value = myhour; 
		}
		if(myhour.length == 5)
			if(!verifica_hora(myhour))
				el.value='';
}

//-----------------------------------------------------------------------------

function inverteTodosCheckbox(form) {
    for (var e = 0; e < eval(form+'.elements.length'); e++) {
        element = eval(form+'.elements['+e+']');
        if (element.type == 'checkbox') {
            element.checked = !(element.checked);
        }
    }
}

function setListaCheckbox(form, listaValor, check) {
   for (var i = 0; i < listaValor.length; i++) {
      for (var e = 0; e < eval(form+'.elements.length'); e++) {
         element = eval(form+'.elements['+e+']');
         if (element.type == 'checkbox' && element.value == listaValor[i]) {
            element.checked = check;
         }
      }
   }
}

function setTodosCheckbox(form, check) {
    for (var e = 0; e < eval(form+'.elements.length'); e++) {
        element = eval(form+'.elements['+e+']');
        if (element.type == 'checkbox') {
            element.checked = check;
        }
    }
}

function inverteListaCheckbox(form, listaValor) {
   for (var i = 0; i < listaValor.length; i++) {
      for (var e = 0; e < eval(form+'.elements.length'); e++) {
         element = eval(form+'.elements['+e+']');
         if (element.type == 'checkbox' && element.value == listaValor[i]) {
            element.checked = !(element.checked);
         }
      }
   }
}

//-----------------------------------------------------------------------------

function FormataValor(campo,teclapres) {
      	if(navigator.appName.indexOf("Netscape")!= -1)
	   	var tecla= teclapres.which;
	    else
		var tecla = teclapres.keyCode;
	tammax = 13;
	vr = campo.value;
	vr = vr.replace( "/", "" );
	vr = vr.replace( "/", "" );
	vr = vr.replace( ",", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	tam = vr.length;

	if (tecla == 188 || tecla == 190 || tecla == 110 || tecla == 108)
	{	return false;
	}
	
	if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }

	if (tecla == 8 ){	tam = tam - 1 ; }
		
	if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
		if ( tam <= 2 ){ 
	 		campo.value = vr ; }
	 	if  (tam > 2) {
	 		campo.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }
	//	if ( (tam >= 6) && (tam <= 8) ){
	 //		campo.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
	 //	if ( (tam >= 9) && (tam <= 11) ){
	 //		campo.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
	 //	if ( (tam >= 12) && (tam <= 14) ){
	 //		campo.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
	 //	if ( (tam >= 15) && (tam <= 17) ){
	// 		campo.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}
	}
	return true;
}

//-----------------------------------------------------------------------------

function windowOpen(url, titulo, parametros) {
		window.open(url, titulo, parametros);
}
	
//-----------------------------------------------------------------------------

function refreshPai() {
	formulario = window.opener.document.forms[0].name.slice(0,-4);
	if (formulario.substring(0,5) != 'lista') {
		window.opener.document.forms[0].action=formulario+".do?pctrlactv_"+formulario+"=2";
		window.opener.document.forms[0].submit();
	}
	window.close();
}

function botaoVoltar(){
	if (self.name.substring(0,5) == 'filha') {
		document.write("<input type='button' value='Voltar' onclick='refreshPai()'>");
	}
}

//-----------------------------------------------------------------------------

function validateRequired(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRequired = new required();
    for (x in oRequired) {
    	var field = form[oRequired[x][0]];
    	
    	if (field == null)
    		continue;
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'file' ||
            field.type == 'select-one' ||
            field.type == 'radio' ||
            field.type == 'password') {
            
            var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
				if (si >= 0) {
					value = field.options[si].value;
				}
			} else {
				value = field.value;
			}
            
            if (value == '') {
            
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oRequired[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateMinLength(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMinLength = new minlength();
    for (x in oMinLength) {
        if (form[oMinLength[x][0]] == null)
            continue;

        if (form[oMinLength[x][0]].type == 'text' ||
            form[oMinLength[x][0]].type == 'textarea') {
            var iMin = parseInt(oMinLength[x][2]("minlength"));
            if (form[oMinLength[x][0]].value.length < iMin) {
                if (i == 0) {
                    focusField = form[oMinLength[x][0]];
                }
                fields[i++] = oMinLength[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateMaxLength(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMaxLength = new maxlength();
    for (x in oMaxLength) {
        if (form[oMaxLength[x][0]] == null)
            continue;

        if (form[oMaxLength[x][0]].type == 'text' ||
            form[oMaxLength[x][0]].type == 'textarea') {
            var iMax = parseInt(oMaxLength[x][2]("maxlength"));
            if (form[oMaxLength[x][0]].value.length > iMax) {
                if (i == 0) {
                    focusField = form[oMaxLength[x][0]];
                }
                fields[i++] = oMaxLength[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateMask(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMasked = new mask();
    for (x in oMasked) {
        if (form[oMasked[x][0]] == null)
            continue;

        if ((form[oMasked[x][0]].type == 'text' ||
             form[oMasked[x][0]].type == 'textarea' ||
             form[oMasked[x][0]].type == 'password') &&
            (form[oMasked[x][0]].value.length > 0)) {
            if (!matchPattern(form[oMasked[x][0]].value, oMasked[x][2]("mask"))) {
                if (i == 0) {
                    focusField = form[oMasked[x][0]];
                }
                fields[i++] = oMasked[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function matchPattern(value, mask) {
   var bMatched = mask.exec(value);
   if (!bMatched) {
       return false;
   }
   return true;
}
    
function validateByte(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oByte = new ByteValidations();
    for (x in oByte) {
    	var field = form[oByte[x][0]];
    	
    	if (field == null)
    		continue;
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
			field.type == 'radio') {

			var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
				if (si >= 0) {
					value = field.options[si].value;
				}
			} else {
				value = field.value;
			}
            
            if (value.length > 0) {

                var iValue = parseInt(value);
                if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oByte[x][1];
                    bValid = false;
                }
			}
			
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateShort(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oShort = new ShortValidations();
    for (x in oShort) {
    	var field = form[oShort[x][0]];
    	
    	if (field == null)
    		continue;
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {
            
            var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
				if (si >= 0) {
					value = field.options[si].value;
				}
			} else {
				value = field.value;
			}
            
            if (value.length > 0) {
            
                var iValue = parseInt(value);
                if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oShort[x][1];
                    bValid = false;
               }
           }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateInteger(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oInteger = new IntegerValidations();
    for (x in oInteger) {
    	var field = form[oInteger[x][0]];

    	if (field == null)
    		continue;
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {
            
            var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
			    if (si >= 0) {
				    value = field.options[si].value;
			    }
			} else {
				value = field.value;
			}
            
            if (value.length > 0) {
            
                if (!isAllDigits(value)) {
                    bValid = false;
                } else {
                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oInteger[x][1];
                        bValid = false;
                   }
               }
           }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function isAllDigits(argvalue) {
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    if (argvalue.substring(0, 2) == "0x") {
       validChars = "0123456789abcdefABCDEF";
       startFrom = 2;
    } else if (argvalue.charAt(0) == "0") {
       validChars = "01234567";
       startFrom = 1;
    }
    for (var n = 0; n < argvalue.length; n++) {
        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
    }
    return true;
}

function validateFloat(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oFloat = new FloatValidations();
    for (x in oFloat) {
    	var field = form[oFloat[x][0]];
    	
    	if (field == null)
    		continue;
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {
            
        	var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
				if (si >= 0) {
				    value = field.options[si].value;
				}
			} else {
				value = field.value;
			}
            
            if (value.length > 0) {
            
                var iValue = parseFloat(value);
                if (isNaN(iValue)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oFloat[x][1];
                    bValid = false;
                }
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateDate(form) {
   var bValid = true;
   var focusField = null;
   var i = 0;
   var fields = new Array();
   oDate = new DateValidations();
   for (x in oDate) {
        if (form[oDate[x][0]] == null)
            continue;

       var value = form[oDate[x][0]].value;
       var datePattern = oDate[x][2]("datePatternStrict");
       if ((form[oDate[x][0]].type == 'text' ||
            form[oDate[x][0]].type == 'textarea') &&
           (value.length > 0) &&
           (datePattern.length > 0)) {
         var MONTH = "MM";
         var DAY = "dd";
         var YEAR = "yyyy";
         var orderMonth = datePattern.indexOf(MONTH);
         var orderDay = datePattern.indexOf(DAY);
         var orderYear = datePattern.indexOf(YEAR);
         if ((orderDay < orderYear && orderDay > orderMonth)) {
             var iDelim1 = orderMonth + MONTH.length;
             var iDelim2 = orderDay + DAY.length;
             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
             if (iDelim1 == orderDay && iDelim2 == orderYear) {
                dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
             } else if (iDelim1 == orderDay) {
                dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
             } else if (iDelim2 == orderYear) {
                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
             } else {
                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
             }
             var matched = dateRegexp.exec(value);
             if(matched != null) {
                if (!isValidDate(matched[2], matched[1], matched[3])) {
                   if (i == 0) {
                       focusField = form[oDate[x][0]];
                   }
                   fields[i++] = oDate[x][1];
                   bValid =  false;
                }
             } else {
                if (i == 0) {
                    focusField = form[oDate[x][0]];
                }
                fields[i++] = oDate[x][1];
                bValid =  false;
             }
         } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
             var iDelim1 = orderDay + DAY.length;
             var iDelim2 = orderMonth + MONTH.length;
             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
             if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                 dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
             } else if (iDelim1 == orderMonth) {
                 dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
             } else if (iDelim2 == orderYear) {
                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
             } else {
                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
             }
             var matched = dateRegexp.exec(value);
             if(matched != null) {
                 if (!isValidDate(matched[1], matched[2], matched[3])) {
                     if (i == 0) {
                         focusField = form[oDate[x][0]];
                     }
                     fields[i++] = oDate[x][1];
                     bValid =  false;
                  }
             } else {
                 if (i == 0) {
                     focusField = form[oDate[x][0]];
                 }
                 fields[i++] = oDate[x][1];
                 bValid =  false;
             }
         } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
             var iDelim1 = orderYear + YEAR.length;
             var iDelim2 = orderMonth + MONTH.length;
             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
             if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                 dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
             } else if (iDelim1 == orderMonth) {
                 dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
             } else if (iDelim2 == orderDay) {
                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
             } else {
                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
             }
             var matched = dateRegexp.exec(value);
             if(matched != null) {
                 if (!isValidDate(matched[3], matched[2], matched[1])) {
                     if (i == 0) {
                         focusField = form[oDate[x][0]];
                      }
                      fields[i++] = oDate[x][1];
                      bValid =  false;
                  }
              } else {
                  if (i == 0) {
                      focusField = form[oDate[x][0]];
                  }
                  fields[i++] = oDate[x][1];
                  bValid =  false;
              }
         } else {
             if (i == 0) {
                 focusField = form[oDate[x][0]];
             }
             fields[i++] = oDate[x][1];
             bValid =  false;
         }
      }
   }
   if (fields.length > 0) {
      focusField.focus();
      alert(fields.join('\n'));
   }
   return bValid;
}

function isValidDate(day, month, year) {
    if (month < 1 || month > 12) {
        return false;
    }
    if (day < 1 || day > 31) {
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) &&
        (day == 31)) {
        return false;
    }
    if (month == 2) {
        var leap = (year % 4 == 0 &&
                   (year % 100 != 0 || year % 400 == 0));
        if (day>29 || (day == 29 && !leap)) {
            return false;
        }
    }
    return true;
}
    
function validateRange(form) {
    return validateIntRange(form);
}

function validateIntRange(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRange = new intRange();
    for (x in oRange) {
        if (form[oRange[x][0]] == null)
            continue;

        if ((form[oRange[x][0]].type == 'text' ||
             form[oRange[x][0]].type == 'textarea') &&
            (form[oRange[x][0]].value.length > 0)) {
            var iMin = parseInt(oRange[x][2]("min"));
            var iMax = parseInt(oRange[x][2]("max"));
            var iValue = parseInt(form[oRange[x][0]].value);
            if (!(iValue >= iMin && iValue <= iMax)) {
                if (i == 0) {
                    focusField = form[oRange[x][0]];
                }
                fields[i++] = oRange[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}
    
function validateFloatRange(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRange = new floatRange();
    for (x in oRange) {
        if (form[oRange[x][0]] == null)
            continue;

        if ((form[oRange[x][0]].type == 'text' ||
             form[oRange[x][0]].type == 'textarea') &&
            (form[oRange[x][0]].value.length > 0)) {
            var fMin = parseFloat(oRange[x][2]("min"));
            var fMax = parseFloat(oRange[x][2]("max"));
            var fValue = parseFloat(form[oRange[x][0]].value);
            if (!(fValue >= fMin && fValue <= fMax)) {
                if (i == 0) {
                    focusField = form[oRange[x][0]];
                }
                fields[i++] = oRange[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}

function validateCreditCard(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oCreditCard = new creditCard();
    for (x in oCreditCard) {
        if (form[oCreditCard[x][0]] == null)
            continue;

        if ((form[oCreditCard[x][0]].type == 'text' ||
             form[oCreditCard[x][0]].type == 'textarea') &&
            (form[oCreditCard[x][0]].value.length > 0)) {
            if (!luhnCheck(form[oCreditCard[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oCreditCard[x][0]];
                }
                fields[i++] = oCreditCard[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}

/**
 * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
 */
function luhnCheck(cardNumber) {
    if (isLuhnNum(cardNumber)) {
        var no_digit = cardNumber.length;
        var oddoeven = no_digit & 1;
        var sum = 0;
        for (var count = 0; count < no_digit; count++) {
            var digit = parseInt(cardNumber.charAt(count));
            if (!((count & 1) ^ oddoeven)) {
                digit *= 2;
                if (digit > 9) digit -= 9;
            };
            sum += digit;
        };
        if (sum == 0) return false;
        if (sum % 10 == 0) return true;
    };
    return false;
}

function isLuhnNum(argvalue) {
    argvalue = argvalue.toString();
    if (argvalue.length == 0) {
        return false;
    }
    for (var n = 0; n < argvalue.length; n++) {
        if ((argvalue.substring(n, n+1) < "0") ||
            (argvalue.substring(n,n+1) > "9")) {
            return false;
        }
    }
    return true;
}

function validateEmail(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oEmail = new email();
    for (x in oEmail) {
        if (form[oEmail[x][0]] == null)
            continue;

        if ((form[oEmail[x][0]].type == 'text' ||
             form[oEmail[x][0]].type == 'textarea') &&
            (form[oEmail[x][0]].value.length > 0)) {
            if (!checkEmail(form[oEmail[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oEmail[x][0]];
                }
                fields[i++] = oEmail[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}

/**
 * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
 * http://javascript.internet.com
 */
function checkEmail(emailStr) {
   if (emailStr.length == 0) {
       return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
       return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
       return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
       for (var i = 1; i <= 4; i++) {
          if (IPArray[i] > 255) {
             return false;
          }
       }
       return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
       return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
       (domArr[domArr.length-1].length > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}

function validateTime(form) {
   var bValid = true;
   var focusField = null;
   var i = 0;
   var fields = new Array();
   oTime = new TimeValidations();
   for (x in oTime) {
        if (form[oTime[x][0]] == null)
            continue;

       var value = form[oTime[x][0]].value;
       var timePattern = oTime[x][2]("timePatternStrict");
       if ((form[oTime[x][0]].type == 'text' ||
            form[oTime[x][0]].type == 'textarea') &&
           (value.length > 0) &&
           (timePattern.length > 0)) {
         var HOUR = "HH";
         var MIN = "mm";
         var orderHour = timePattern.indexOf(HOUR);
         var orderMin = timePattern.indexOf(MIN);
         if ((orderMin > orderHour)) {
             var iDelim1 = orderHour + HOUR.length;
             var delim1 = timePattern.substring(iDelim1, iDelim1 + 1);
             if (iDelim1 == orderMin) {
                timeRegexp = new RegExp("^(\\d{2})(\\d{2})$");
             } else {
                timeRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})$");
             }
             var matched = timeRegexp.exec(value);
             if(matched != null) {
                if (!isValidTime(matched[1], matched[2])) {
                   if (i == 0) {
                       focusField = form[oTime[x][0]];
                   }
                   fields[i++] = oTime[x][1];
                   bValid =  false;
                }
             } else {
                if (i == 0) {
                    focusField = form[oTime[x][0]];
                }
                fields[i++] = oTime[x][1];
                bValid =  false;
             }
         } else if ((orderHour < orderMin)) {
             var iDelim1 = orderMin + MIN.length;
             var delim1 = timePattern.substring(iDelim1, iDelim1 + 1);
             if (iDelim1 == orderHour) {
                 timeRegexp = new RegExp("^(\\d{2})(\\d{2})$");
             } else {
                 timeRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})$");
             }
             var matched = timeRegexp.exec(value);
             if(matched != null) {
                 if (!isValidTime(matched[2], matched[1])) {
                     if (i == 0) {
                         focusField = form[oTime[x][0]];
                     }
                     fields[i++] = oTime[x][1];
                     bValid =  false;
                  }
             } else {
                 if (i == 0) {
                     focusField = form[oTime[x][0]];
                 }
                 fields[i++] = oTime[x][1];
                 bValid =  false;
             }
         } else {
             if (i == 0) {
                 focusField = form[oTime[x][0]];
             }
             fields[i++] = oTime[x][1];
             bValid =  false;
         }
      }
   }
   if (fields.length > 0) {
      focusField.focus();
      alert(fields.join('\n'));
   }
   return bValid;
}

function isValidTime(hour, min) {
    if (hour < 0 || hour > 23) {
            return false;
    }
    if (min < 0 || min > 59) {
            return false;
    }
    return true;
 }
 
function formataDinheiro(valor) {
	var valor = new String(valor);
	if (valor.indexOf(".") != -1) {
		var split_zero = valor.split("."); 
		if (split_zero[1].length == 1) {
			var extra_zero = (split_zero[1] + "0");
		} 
		else if (split_zero[1].length > 2) { 
			var extra_zero = split_zero[1].substr(0, 2);
		} 
		else { 
			var extra_zero = split_zero[1];
		} 
		var texts_nbrs = split_zero[0]; 
	}
	else {
		var texts_nbrs = valor, extra_zero = "00";
	}
	var sum_rplc = 0, all_number = "", len_number = texts_nbrs.length;
	var len_number_din = len_number;
	for (var i = 1; i < Math.ceil((len_number / 3)); i++) {
		all_number  += ("." + texts_nbrs.substring((len_number_din - 3), len_number_din));
		var sum_rplc = (sum_rplc + 3)
		len_number_din -= 3;
	}
	all_number_sep = all_number.split(".");
	all_number = "";
	for (j = all_number_sep.length - 1; j >= 1; j--) {
		all_number += ("." + all_number_sep[j]);
	}
	var str_nbrs  = texts_nbrs.substr(0, (len_number - sum_rplc));
	var sum_shows = (str_nbrs + all_number + "," + extra_zero);
	return sum_shows;
} 