/*
var nomeCampos = new Array ("email","data","hora");
var descCampos = new Array ("E-mail","Data","Hora");
var tipoCampos = new Array ("email","data","hora");
var obriCampos = new Array (true,true,true);
*/

//TIPOS: char, int, bit, memo, codigo, fone, cnpj, cpf, ie, data, hora, estado

var browser;
if(navigator.userAgent.indexOf("MSIE") >= 0 && parseInt(navigator.appVersion) >= 4) browser = "ie";
else if(navigator.userAgent.indexOf("MSIE") < 0 && parseInt(navigator.appVersion) >= 4) browser = "nn";
else browser = "gb";

function checkEnter(event, formName, fieldName)
{
	if ((browser == "ie" && event.keyCode == 13) || (browser == "nn" && event.which == 13))
	{
		if (fieldName == "enviar" || fieldName == "submit" || fieldName == "validaForm") validaForm(formName);
		else if (getFormIndex(formName) != -1 && getFieldIndex(formName,fieldName) != -1 ) document.forms[getFormIndex(formName)].elements[getFieldIndex(formName,fieldName)].focus();
	}
}
function getFormIndex(formName)
{
	for(var x = 0; x < document.forms.length; x++)
	{	if (document.forms[x].name == formName) return x;	}
	alert ("ERRO DE SCRIPT: O Form \'"+formName+"\' não existe.");
	return (-1);
}
function getFieldIndex(formIndex,fieldName)
{
	for(var x = 0; x < document.forms[formIndex].elements.length; x++)
	{	if (document.forms[formIndex].elements[x].name == fieldName) return x;	}
	alert ("ERRO DE SCRIPT: O Campo \'forms["+formIndex+"]."+fieldName+"\' não existe.");
	return (-1);
}
function getFieldName(formIndex,fieldIndex)
{
	if (!(document.forms[formIndex])) return("[form inexistente]");
	if (!(document.forms[formIndex].elements[fieldIndex])) return("[campo inexistente]");
	return (document.forms[formIndex].elements[fieldIndex].name);
}

function inArray(str,arr)
{
	var i = arr.length;
	for (var x = 0; x < i; x++)
	{ if (str == array[x]) return(x); }
	return(-1);
}
function chartimes(str,chr)
{
	var count = 0;
	var pos = str.indexOf(chr);
	while ( pos != -1 )
	{ count++;
	  pos = str.indexOf(chr,pos+1); }
	return(count);
}
function substituiCharInval(str)
{
	while (str.indexOf("\"") > -1)
	{ str =	str.replace("\"","&quot;") };
	while (str.indexOf("'") > -1)
	{ str =	str.replace("'","&#39;") };
	return (str);
}

function validaFone(str, obr)
{	// formato: (xx)nnnn-nnnn ou (xx)nnn-nnnn
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\(?\d{2}\)?[-,. ]?\d{2,4}[-,. ]?\d{4})?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaCep(str, obr)
{ //formato 90000-000 ou 90.000-000
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\d{2}\.?\d{3}-?\d{3})?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaEmail(str, obr)
{	// formato: a@b.ccc
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^([A-Za-z0-9_-]+(\.[A-Za-z0-9_\-]+)*@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)+)?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaData(str, obr)
{	// formato: dd/mm/aaaa || d/m/aa
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\d{1,2}\/\d{1,2}\/\d{2}(\d{2})?)?$/
	if (str.search(re) == -1) return(false);
	re = /^\d{1,2}\//
	var dd = new String(str.match(re));
	dd = dd.substring(0,dd.length - 1);
	if (parseInt(dd) > 31) return(false);
	re = /\/\d{1,2}\//
	var mm = new String(str.match(re));
	mm = mm.substring(1,mm.length -1);
	if (parseInt(mm) > 12) return(false);
//	alert(dd +":"+ mm);
	return(true);
}
function validaHora(str, obr)
{ // formato hh:mm ou hh:mm:ss
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\d{2}(\:\d{2}){1,2})?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaCnpj(str, obr)
{ // formato nn.nnn.nnn/nnnn-nn podendo-se omitir qualquer da pontuação
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2})?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaCpf(str, obr)
{ // formato nnn.nnn.nnn/nn  podendo-se omitir qualquer da pontuação
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\d{3}\.?\d{3}\.?\d{3}\/?\d{2})?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaIe(str, obr)
{ // formato nnn.nnn.nnn.nnnn  podendo-se omitir qualquer da pontuação
	if (!validaObrigatorio(str,obr)) return(false);
	if (str.indexOf("isen") != -1) return(true);
	if (str.indexOf("ISEN") != -1) return(true);
	if (str.indexOf("Isen") != -1) return(true);
	re = /^([\d\.]{2,16})?$/
	if (str.search(re) == -1) return(false);
	return(true);
}
function validaInt(str, obr)
{ //formato nnnnn...
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^(\d*)?$/
	if (isNaN(str)) return(false);
	return(true)
}
function validaDouble(str, obr)
{
	if (!validaObrigatorio(str,obr)) return(false);
	re = /^((\d*)([\.\,]\d*)*)?$/
	if (isNaN(str)) return(false);
	return(true)
}
function validaEstado(str, obr)
{
	if (!validaObrigatorio(str,obr)) return(false);
	return(true);
}
function validaChar(str, obr)
{
	if (!validaObrigatorio(str,obr)) return(false);
	return(true);
}
function validaObrigatorio(str, obr)
{
	if (obr && !((str != "") && (str != null) && (str.length > 0))) return(false);
	return(true);
}


function verificaForm(formName)
{
	var formIndex = getFormIndex(formName);
	for(var x = 0; x < document.forms[formIndex].length; x++)
	{ if (document.forms[formIndex].elements[x].type == "text" || document.forms[formIndex].elements[x].type == "textarea") document.forms[formIndex].elements[x].value = substituiCharInval(document.forms[formIndex].elements[x].value); }

	var formValid = true;
	var fieldIndex = -1;
	var fieldObrig = false;
	for(var x = 0; x < nomeCampos.length; x++)
	{
		if ((fieldIndex = getFieldIndex(formIndex, nomeCampos[x])) != -1);
		{
//			alert(fieldIndex + ":" + nomeCampos[x]);
			str = document.forms[formIndex].elements[fieldIndex].value;
			switch (tipoCampos[x])
			{
				case "char":
					if (!(formValid = validaChar(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' é de preenchimento Obrigatório.");
					break;
				case "int":
					if (!(formValid = validaInt(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve conter um número inteiro.");
					break;
				case "bit":

					break;
				case "memo":
					if (!(formValid = validaChar(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' é de preenchimento Obrigatório.");
					break;
				case "codigo":
					if (!(formValid = validaInt(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve conter um número inteiro.");
					break;
				case "fone":
					if (!(formValid = validaFone(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido no formato:\n\n   (NN) NNNN-NNNN\  ou  (NN) NNN-NNNN.\n");
					break;
				case "cep":
					if (!(formValid = validaCep(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido no formato:\n\n                  NNNNN-NNN \n\n ou sem pontuação, com um CEP válido.")
					break;
				case "email":
					if (!(formValid = validaEmail(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido com um e-mail válido");
					break;
				case "cnpj":
					if (!(formValid = validaCnpj(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido no formato:\n\n 00.000.000.0000-00 \n\n ou sem pontuação, com um CNPJ/CGC válido.");
					break;
				case "cpf":
					if (!(formValid = validaCpf(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido no formato:\n\n 000.000.000/00 ou sem pontuação, \n\n com um CPF válido.");
					break;
				case "ie":
					if (!(formValid = validaIe(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido com um número de I.E. válido, com ou sem pontuação.\n\n No caso de isenção, preencha \"isento\".");
					break;
				case "data":
					if (!(formValid = validaData(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido no formato:\n\n dd/mm/aaaa  ou  dd/mm/aa\n\n com uma data válida.");
					break;
				case "hora":
					if (!(formValid = validaHora(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' deve ser preenchido no formato:\n\n hh:mm:ss  ou  hh:mm\n\n");
					break;
				case "estado":
					if (!(formValid = validaChar(str, obriCampos[x]))) alert("O campo \'" + descCampos[x] + "\' é de preenchimento Obrigatório.");
					break;
				case "select":
					if (!(formValid = validaChar(str, obriCampos[x]))) alert("Escolha " + descCampos[x] + "");
					break;
				default:
					break;
			}
			if (!formValid)
			{
				document.forms[formIndex].elements[fieldIndex].focus();
				return(false);
			}
		}
	}
	return(true);
}

function validaForm(formName)
{
	var formIndex = getFormIndex(formName);
	if (!verificaForm(formName)) return(false);
	if (submitForm(formIndex)) return(true);
	return(false);
}

function submitForm(formIndex)
{
	document.forms[formIndex].submit();
	return(true);
}
