var reDigits = /^\d+$/;

function doDigits(pStr)
{
	if (reDigits.test(pStr)) {
		alert(pStr + " contém apenas dígitos.");
	} else if (pStr != null && pStr != "") {
		alert(pStr + " NÃO contém apenas dígitos.");
	}
}

var reDecimalPt = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
var reDecimalEn = /^[+-]?((\d+|\d{1,3}(\,\d{3})+)(\.\d*)?|\.\d+)$/;
var reDecimal = reDecimalPt;

function doDecimal(pStr, pLang)
{
	charDec = ( pLang != "En"? ",": "." );
	eval("reDecimal = reDecimal" + pLang);
	if (reDecimal.test(pStr)) {
		pos = pStr.indexOf(charDec);
		decs = pos == -1? 0: pStr.length - pos - 1;
		alert(pStr + " é um float válido (" + pLang + ") com " + decs + " decimais.");
	} else if (pStr != null && pStr != "") {
		alert(pStr + " NÃO é um float válido.");
	}
} // doDecimal

var reMoeda = /^\d{1,3}(\.\d{3})*\,\d{2}$/;

function doMoeda(pStr){
	if (reMoeda.test(pStr)) {
		alert(pStr + " é um valor financeiro válido.");
	} else if (pStr != null && pStr != "") {
		alert(pStr + " NÃO é um valor financeiro válido.");
	}
}

var reDate1 = /^\d{1,2}\/\d{1,2}\/\d{1,4}$/;
var reDate2 = /^[0-3]?\d\/[01]?\d\/(\d{2}|\d{4})$/;
var reDate3 = /^(0?[1-9]|[12]\d|3[01])\/(0?[1-9]|1[0-2])\/(19|20)?\d{2}$/;
var reDate4 = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
var reDate5 = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;
var reDate = reDate4;

function doDate(pStr, pFmt){
	eval("reDate = reDate" + pFmt);
	if (reDate.test(pStr)) {
		//		alert(pStr + " é uma data válida.");
		return true;
	} else if (pStr != null && pStr != "") {
		//		alert(pStr + " NÃO é uma data válida.");
		return false;
	}

} // doDate

var reTime1 = /^\d{2}:\d{2}$/;
var reTime2 = /^([0-1]\d|2[0-3]):[0-5]\d$/;
var reTime3 = /^(0[1-9]|1[0-2]):[0-5]\d$/;
var reTime4 = /^\d+:[0-5]\d:[0-5]\d$/;
var reTime5 = /^\d+:[0-5]\d:[0-5]\.\d{3}\d$/;
var reTime = reTime1;

function doTime(pStr, pFmt)
{
	eval("reTime = reTime" + pFmt);
	if (reTime.test(pStr)) {
		alert(pStr + " é um horário/tempo válido.");
	} else if (pStr != null && pStr != "") {
		alert(pStr + " NÃO é um horário/tempo válido.");
	}
} // doTime

var reEmail1 = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
var reEmail2 = /^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
var reEmail3 = /^[\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 reEmail = reEmail3;

function doEmail(pStr, pFmt)
{
	eval("reEmail = reEmail" + pFmt);
	if (reEmail.test(pStr)) {
		//		alert(pStr + " é um endereço de e-mail válido.");
		return true;
	} else if (pStr != null && pStr != "") {
		//		alert(pStr + " NÃO é um endereço de e-mail válido.");
		return false;
	}
} // doEmail

NUM_DIGITOS_CPF  = 11; // 695.256.091-20
NUM_DIGITOS_CNPJ = 14;	// 50.221.019/0001-36
NUM_DGT_CNPJ_BASE = 8;
NUM_DIGITOS_TITULO = 12; // 0912289302/05
NUM_DIGITOS_DATA = 8;	// 01/01/2001
NUM_DIGITOS_DATA_HORA = 14;	// 01/01/2001 12:20:00
NUM_DIGITOS_CEP = 8; // 71000-000
NUM_DIGITOS_TELEFONE = 10; //(61)2525-4658

/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.lpad = function(pSize, pCharPad)
{
	var str = this;
	var dif = pSize - str.length;
	var ch = String(pCharPad).charAt(0);
	for (; dif>0; dif--) str = ch + str;
	return (str);
} //String.lpad

/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.rpad = function (pSize, pCharPad) 
{
	var str; 
	var str = this.split(''); 
	for (i = 0; i < pSize - this.length; i++) str.push (pCharPad); 
	return str.join('');
} //String.rpad


/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 */
String.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
} //String.trim


/**
 * Elimina caracteres de formatação e zeros à esquerda da string
 * de número fornecida.
 * @param String pNum
 * 	String de número fornecida para ser desformatada.
 * @return String de número desformatada.
 */
function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
} //unformatNumber

/**
 * Formata a string fornecida como CNPJ ou CPF, adicionando zeros
 * à esquerda se necessário e caracteres separadores, conforme solicitado.
 * @param String pCpfCnpj
 * 	String fornecida para ser formatada.
 * @param boolean pUseSepar
 * 	Indica se devem ser usados caracteres separadores (. - /).
 * @param boolean pIsCnpj
 * 	Indica se a string fornecida é um CNPJ.
 * 	Caso contrário, é CPF. Default = false (CPF).
 * @return String de CPF ou CNPJ devidamente formatada.
 */
function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var numero = unformatNumber(pCpfCnpj);
	if(pCpfCnpj != ''){
		numero = numero.substring(0,maxDigitos);
		numero = numero.lpad(maxDigitos, '0');
		if (!pUseSepar) return numero;

		if (pIsCnpj)
		{
			reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
			numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");
		}
		else
		{
			reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
			numero = numero.replace(reCpf, "$1.$2.$3-$4");
		}
	}
	return numero;
} //formatCpfCnpj


/**
 * Calcula os 2 dígitos verificadores para o número-efetivo pEfetivo de
 * CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e
 * informa se o número-efetivo fornecido é CNPJ (default = false).
 * @param String pEfetivo
 * 	String do número-efetivo (SEM dígitos verificadores) de CNPJ ou CPF.
 * @param boolean pIsCnpj
 * 	Indica se a string fornecida é de um CNPJ.
 * 	Caso contrário, é CPF. Default = false (CPF).
 * @return String com os dois dígitos verificadores.
 */
function dvCpfCnpj(pEfetivo, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	var i, j, k, soma, dv;
	var cicloPeso = pIsCnpj? NUM_DGT_CNPJ_BASE: NUM_DIGITOS_CPF;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var calculado = formatCpfCnpj(pEfetivo, false, pIsCnpj);
	calculado = calculado.substring(2, maxDigitos);
	var result = "";

	for (j = 1; j <= 2; j++)
	{
		k = 2;
		soma = 0;
		for (i = calculado.length-1; i >= 0; i--)
		{
			soma += (calculado.charAt(i) - '0') * k;
			k = (k-1) % cicloPeso + 2;
		}
		dv = 11 - soma % 11;
		if (dv > 9) dv = 0;
		calculado += dv;
		result += dv
	}

	return result;
} //dvCpfCnpj


/**
 * Testa se a String pCpf fornecida é um CPF válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCpf
 * 	String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CPF válido.
 */
function isCpf(pCpf)
{
	var numero = formatCpfCnpj(pCpf, false, false);
	var base = numero.substring(0, numero.length - 2);
	var digitos = dvCpfCnpj(base, false);
	var algUnico, i;


	// Valida dígitos verificadores
	if (numero != base + digitos)	 return false;

	/* Não serão considerados válidos os seguintes CPF:
	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
	 */
	algUnico = true;
	for (i=1; i<NUM_DIGITOS_CPF; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	return (!algUnico);
} //isCpf


/**
 * Testa se a String pCnpj fornecida é um CNPJ válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCnpj
 * 	String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CNPJ válido.
 */
function isCnpj(pCnpj)
{
	var numero = formatCpfCnpj(pCnpj, false, true);
	var base = numero.substring(0, NUM_DGT_CNPJ_BASE);
	var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);
	var digitos = dvCpfCnpj(base + ordem, true);
	var algUnico;

	// Valida dígitos verificadores
	if (numero != base + ordem + digitos) return false;

	/* Não serão considerados válidos os CNPJ com os seguintes números BÁSICOS:
	 * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,
	 * 66.666.666, 77.777.777, 88.888.888, 99.999.999.
	 */
	algUnico = numero.charAt(0) != '0';
	for (i=1; i<NUM_DGT_CNPJ_BASE; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	if (algUnico) return false;

	/* Não será considerado válido CNPJ com número de ORDEM igual a 0000.
	 * Não será considerado válido CNPJ com número de ORDEM maior do que 0300
	 * e com as três primeiras posições do número BÁSICO com 000 (zeros).
	 * Esta crítica não será feita quando o no BÁSICO do CNPJ for igual a 00.000.000.
	 */
	if (ordem == "0000") return false;
	return (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
} //isCnpj


/**
 * Testa se a String pCpfCnpj fornecida é um CPF ou CNPJ válido.
 * Se a String tiver uma quantidade de dígitos igual ou inferior
 * a 11, valida como CPF. Se for maior que 11, valida como CNPJ.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCpfCnpj
 * 	String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CPF ou CNPJ válido.
 */
function isCpfCnpj(pCpfCnpj)
{
	var numero = pCpfCnpj.replace(/\D/g, "");
	if (numero.length > NUM_DIGITOS_CPF)
		return isCnpj(pCpfCnpj)
		else
			return isCpf(pCpfCnpj);
} //isCpfCnpj

/**
 * Testa se a String pInscrição fornecida é um Título de Eleitor válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pInscricao
 * 	String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um Título de Eleitor válido.
 */

function isTitulo( pInscricao ){
	var vInscricao = unformatNumber(pInscricao);
	var valor = vInscricao * 1;
//	var valor = pInscricao * 1;
	var strValor = valor + "";

	if (strValor.length < 5) return false;

	var mInscricao = zerosEsquerda(vInscricao, NUM_DIGITOS_TITULO);
	return (mInscricao.substr(10, 2) == dvNumInsc(mInscricao.substr(0, 10)));
}

// Retorna o DV do número da Inscrição
function dvNumInsc(pInscricao){
	var mInscricao = zerosEsquerda(pInscricao, 10);
	var mSoma = 0;

	for (i=0; i<8; i++)
		mSoma += mInscricao.charAt(i)*(9-i);

	var mDV1 = mSoma  % 11;

	if ((mInscricao.substring(8,10) == '01') || (mInscricao.substring(8,10) == '02')){
		if (mDV1 == 1)
			mDV1 = 0;
		else
			if (mDV1 == 0)
				mDV1 = 1;
			else
				mDV1 = 11 - mDV1;
	}else{
		if ((mDV1 == 0) || (mDV1 == 1))
			mDV1 = 0;
		else
			mDV1 = 11 - mDV1;
	}

	mSoma = (mInscricao.charAt(8)*4)+(mInscricao.charAt(9)*3)+(mDV1*2);

	var mDV2 = mSoma  % 11;
	if ((mInscricao.substring(8,10) == '01') || (mInscricao.substring(8,10) == '02')){
		if (mDV2 == 1)
			mDV2 = 0;
		else
			if (mDV2 == 0)
				mDV2 = 1;
			else
				mDV2 = 11 - mDV2;
	}else{
		if ((mDV2 == 0) || (mDV2 == 1))
			mDV2 = 0;
		else
			mDV2 = 11 - mDV2;
	}

	return mDV1 + "" + mDV2;
}

// -Retorna o texto com x zeros a esquerda
function zerosEsquerda(pObject, pLength){
	var mObject = '';

	for (i=0; i<pLength - pObject.length; i++){
		mObject = mObject+'0';
	}
	return mObject+pObject;
}

function _isTitulo( pInscricao ){
	var vInscricao = pInscricao;
	var vSoma = 0;

	var vI = 0;

	while( vI < 8 ){
		vSoma = vSoma + vInscricao.charAt( vI ) * ( 9 - vI );
		++vI;
	}

	var vDV1 = vSoma % 11;

	if( ( vInscricao.substr( 11, 2 ) == '01' )||( vInscricao.substr( 11, 2 ) == '02' ) ){
		if( vDV1 == 1 )
			vDV1 = 0;
		else
			if( vDV1 == 0 )
				vDV1 = 1;
			else
				vDV1 = 11 - vDV1;
	}else{
		if( ( vDV1 == 0 )||( vDV1 == 1 ) )
			vDV1 = 0
			else
				vDV1 = 11 - vDV1;
	}

	vSoma = ( vInscricao.substr( 8, 1 ) * 4 ) + ( vInscricao.substr( 9, 1 ) * 3 ) + ( vDV1 * 2 );

	vDV2 = vSoma%11;

	if( ( vInscricao.substr( 8, 2 ) == '01' )||( vInscricao.substr( 8, 2 ) == '02' ) ){
		if( vDV2 == 1 )
			vDV2 = 0;
		else
			if( vDV2 == 0 )
				vDV2 = 1;
			else
				vDV2 = 11 - vDV2;
	}else{
		if( ( vDV2 == 0 )||( vDV2 == 1 ) )
			vDV2 = 0;
		else
			vDV2 = 11 - vDV2;
	}

	return ( ( vDV1 +''+ vDV2 ) == pInscricao.substr( pInscricao.length - 2 ) );
}



/**
* Formata a string fornecida como Titulo de eleitor, adicionando zeros
* à esquerda se necessário e caracteres separadores, conforme solicitado.
* @param String pTitulo
* 	String fornecida para ser formatada.
* @param boolean pUseSepar
* 	Indica se devem ser usados caracteres separadores (. - /).
* @return String de Titulo de Eleitor devidamente formatada.
*/
function formatTituloEleitor(pTitulo, pUseSepar){
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = NUM_DIGITOS_TITULO;
	var numero = unformatNumber(pTitulo);
	if(pTitulo != ''){
		numero = numero.lpad(maxDigitos, '0');
		if (!pUseSepar) return numero;

		reTitulo  = /(\d{9})(\d{2})$/;
		numero = numero.replace(reTitulo, "$1/$2");
	}
	return numero;
} //formatTituloEleitor

/**
 * Formata a string fornecida como Data, adicionando 
 * se necessário caracteres separadores, conforme solicitado.
 * @param String pData
 * 	String fornecida para ser formatada.
 * @return String de Data devidamente formatada.
 */
function formatData(pData){
	var maxDigitos = NUM_DIGITOS_DATA;
	var numero = unformatNumber(pData);
	if(pData != ''){
		numero = numero.lpad(maxDigitos, '0');
		reData  = /(\d{2})(\d{2})(\d{4})$/;
		numero = numero.replace(reData, "$1/$2/$3");
	}
	return numero;
} //formatData


/**
 * Formata a string fornecida como Data Hora, adicionando 
 * se necessário caracteres separadores, conforme solicitado.
 * @param String pDataHora
 * 	String fornecida para ser formatada.
 * @return String de Data e Hora devidamente formatada.
 */
function formatDataHora(pDataHora){
	var maxDigitos = NUM_DIGITOS_DATA_HORA;
	var numero = unformatNumber(pDataHora);
	
	if(pDataHora != ''){
		if( numero.length < 8 ){
			numero = numero.lpad(8, '0');
			numero = numero.rpad(maxDigitos, '0');
		}else
			numero = numero.lpad(maxDigitos, '0');
		reDataHora  = /(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})(\d{2})$/;
		numero = numero.replace(reDataHora, "$1/$2/$3 $4:$5:$6");
	}
	return numero;
} //formatDataHora


function unformatData(pData){
	var maxDigitos = NUM_DIGITOS_DATA;
	var numero = unformatNumber(pData);
	if(pData != ''){
		numero = numero.lpad(maxDigitos, '0');
		reData  = /(\d{2})(\d{2})(\d{4})$/;
		numero = numero.replace(reData, "$3$2$1");
	}
	return numero;
} //formatData


/**
 * Formata a string fornecida como CEP, adicionando 
 * se necessário caracteres separadores, conforme solicitado.
 * @param String pCep
 * 	String fornecida para ser formatada.
 * @return String de CEP devidamente formatada.
 */
function formatCep(pCep){
	var maxDigitos = NUM_DIGITOS_CEP;
	var numero = unformatNumber(pCep);
	numero = numero.substr(0,NUM_DIGITOS_CEP);
	if(pCep != ''){
		numero = numero.lpad(maxDigitos, '0');
		reCep  = /(\d{5})(\d{3})$/;
		numero = numero.replace(reCep, "$1-$2");
	}
	return numero;
} //formatCep

/**
 * Formata a string fornecida como TELEFONE, adicionando 
 * se necessário caracteres separadores, conforme solicitado.
 * @param String pTelefone
 * 	String fornecida para ser formatada.
 * @return String de TELEFONE devidamente formatada.
 */
function formatTelefone(pTelefone){
	var maxDigitos = NUM_DIGITOS_TELEFONE;
	var numero = unformatNumber(pTelefone);
	numero = numero.substr(0,NUM_DIGITOS_TELEFONE);
	if(pTelefone != ''){
		numero = numero.lpad(maxDigitos, '0');
		reTelefone  = /(\d{2})(\d{4})(\d{4})$/;
		numero = numero.replace(reTelefone, "($1)$2-$3");
	}
	return numero;
} //formatCep

function UsuarioValid( form ){
	msg = '';
	if( ( form.email.value =='' ) )
		msg += '- digite um endereço de email\n';

	if( ( form.elements['usuario.email'].value !='' )&&( !doEmail(form.elements['usuario.email'].value, 1) ) )
		msg += '- o endereço de email NÃO é válido\n';

	if( form.elements['usuario.nome'].value =='' )
		msg += '- Informe o nome do usuário\n';

	if( form.elements['usuario.cpfString'].value =='' ){
		msg += '- Informe o CPF do usuário\n';
	}
	else{
		if( (isCpf(form.elements['usuario.cpfString'].value) == false)||(form.elements['usuario.cpfString'].value.length < 14) ){
			msg += '- O CPF informado é inválido ou incompleto\n';
		}
	}
	if( form.elements['usuario.tituloEleitoralString'].value =='' ){
		msg += '- Informe o Título eleitoral do usuário\n';
	}
	else{
		if( (isTitulo(form.elements['usuario.tituloEleitoralString'].value) == false)||(form.elements['usuario.tituloEleitoralString'].value.length < 13) )
			msg += '- O Título eleitoral informado é inválido ou incompleto \n';
	}
	if( form.abrangencia.selectedIndex == -1 )
		msg += '- Selecione a abrangência de representação do usuário\n';

	if(typeof form.ufs!="undefined"){
		if( ((form.abrangencia.value == 82)||(form.abrangencia.value == 83)) && (form.ufs.selectedIndex < 1) )
			msg += '- Para abrangência Regional/Estadual, selecione um estado\n';
	}

	if(typeof form.munic!="undefined"){
		if( (form.abrangencia.value == 83) && (form.munic.selectedIndex < 1) )
			msg += '- Para abrangência Municipal, selecione um município\n';
		if( form.tp_usuario.value == 2 && (form.munic.selectedIndex < 1) )
			msg += '- Selecione o município\n';
	}

	if(typeof form.partido!="undefined"){
		if( ( form.partido.selectedIndex < 1) )
			msg += '- Selecione um partido de representação do usuário\n';
	}

	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg );
		return false;
	}else{
		return true;
	}
}

function MembroDeleteValid( form ){
	msg = '';

	if( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value == '' ){
		msg += '- Informe a Data de fim do exercício\n';
	}else{
		if( ( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' )&&( !doDate(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value, 5) ) )
			msg += '- Data de fim do exercício NÃO é válida\n';
	}

	if( form.elements['ocorrenciaMembroSelect.deliberacaoString'].value == '' ){
		msg += '- Informe a Data de deliberação\n';
	}else{
		if( ( form.elements['ocorrenciaMembroSelect.deliberacaoString'].value !='' )&&( !doDate(form.elements['ocorrenciaMembroSelect.deliberacaoString'].value, 5) ) )
			msg += '- Data de deliberação NÃO é válida\n';
	}

	if( ( form.elements['ocorrenciaMembroSelect.iniExercicioString'].value !='' )&&( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' ) ){
		if(comparaData(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value,form.elements['ocorrenciaMembroSelect.iniExercicioString'].value,'<')==true){
			msg += '- Data de fim do exercício NÃO deve ser anterior a Data de inicio\n';
		}
	}
	
	if( ( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' )&&
			( ( form.elements['fimVigenciaString'].value !='' )&&(form.elements['vigenciaIndeterminada'].value !='true') ) ){
		if(comparaData(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value,form.elements['fimVigenciaString'].value,'>')==true){
			msg += '- Data de fim do exercício NÃO deve ser posterior a Data de fim de vigência do Órgão Partidário\n';
		}
	}


	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg );
		return false;
	}else{
		if( ( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' )){
			var currentTime = new Date();
			var mes = currentTime.getMonth() + 1;
			var dia = currentTime.getDate();
			var ano = currentTime.getFullYear();
			if(mes.toString().length == 1) mes = "0"+mes;
			var hoje = dia+"/"+mes+"/"+ano;
			if(comparaData(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value,hoje,'>')==true){
				if( confirm('A data de inativação do membro é posterior a data de hoje. Neste caso o membro permanecerá ativo até esta data. \n Confirma a operação?') ){
					return true;				
				}else{
					return false;				
				}
			}			
		}
		return true;
	}
}

function OrgaoInativarValid( form ){
	msg = '';
	if( form.elements['orgaoPartidario.deliberacaoInativacaoString'].value == '' ){
		msg += '- Informe a Data de deliberação da inativação\n';
	}else{
		if( ( form.elements['orgaoPartidario.deliberacaoInativacaoString'].value !='' )&&( !doDate(form.elements['orgaoPartidario.deliberacaoInativacaoString'].value, 5) ) )
			msg += '- Data de deliberação NÃO é válida\n';
	}

	if( form.elements['orgaoPartidario.inativacaoVigenciaString'].value == '' ){
		msg += '- Informe a Data de inativação\n';
	}else{
		if( ( form.elements['orgaoPartidario.inativacaoVigenciaString'].value !='' )&&( !doDate(form.elements['orgaoPartidario.inativacaoVigenciaString'].value, 5) ) )
			msg += '- Data de inativação NÃO é válida\n';
	}

	if( form.elements['selectInativacao'].selectedIndex < 0 ){
		msg += '- Informe o Motivo da inativação\n';
	}	
		
	if( ( form.elements['orgaoPartidario.inativacaoVigenciaString'].value !='' )&&
			( ( form.elements['orgaoPartidario.fimVigenciaString'].value !='' )&&(form.elements['orgaoPartidario.vigenciaIndeterminada'].value !='true') ) ){
		if(comparaData(form.elements['orgaoPartidario.inativacaoVigenciaString'].value,form.elements['orgaoPartidario.fimVigenciaString'].value,'>')==true){
			msg += '- Data de inativação NÃO deve ser posterior a Data de fim de vigência do Órgão Partidário\n';
		}
	}


	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg );
		return false;
	}else{
		if( ( form.elements['orgaoPartidario.inativacaoVigenciaString'].value !='' )){
			var currentTime = new Date();
			var mes = currentTime.getMonth() + 1;
			var dia = currentTime.getDate();
			var ano = currentTime.getFullYear();
			if(mes.toString().length == 1) mes = "0"+mes;
			var hoje = dia+"/"+mes+"/"+ano;
			if(comparaData(form.elements['orgaoPartidario.inativacaoVigenciaString'].value,hoje,'>')==true){
				if( confirm('A data de inativação do órgão é posterior a data de hoje. Neste caso o órgão permanecerá ativo até esta data. \n Confirma a operação?') ){
					return true;				
				}else{
					return false;				
				}
			}			
		}
		return true;
	}
}

function MembroValid( form ){

	msg = '';

	if( ( form.selectCargo != null ) )
		if( ( form.selectCargo.selectedIndex == -1 ) )
			msg += '- Selecione o cargo do membro\n';

	if( form.elements['ocorrenciaMembroSelect.membro.membro'].value =='' )
		msg += '- Informe o nome do membro\n';

	if( form.elements['ocorrenciaMembroSelect.membro.tituloEleitoralString'].value =='' ){
		msg += '- Informe o Título eleitoral do membro\n';
	}
	else{
		if( (isTitulo(form.elements['ocorrenciaMembroSelect.membro.tituloEleitoralString'].value) == false)||(form.elements['ocorrenciaMembroSelect.membro.tituloEleitoralString'].value.length < 13) )
			msg += '- O Título eleitoral informado é inválido ou incompleto\n';
	}

	if( form.elements['ocorrenciaMembroSelect.membro.cpfString'].value =='' ){
		msg += '- Informe o CPF do membro\n';
	}
	else{
		if( (isCpf(form.elements['ocorrenciaMembroSelect.membro.cpfString'].value) == false)||(form.elements['ocorrenciaMembroSelect.membro.cpfString'].value.length < 14) ){
			msg += '- O CPF informado é inválido ou incompleto\n';
		}
	}
	
	if( (form.elements['ocorrenciaMembroSelect.membro.ue.sgUe'].value == '')||(form.elements['ocorrenciaMembroSelect.membro.ue.ueSup'].value =='') )
//	if( (( form.ufs.selectedIndex != -1 ) && ( form.munic.selectedIndex < 1 ))||(( form.ufs.selectedIndex == -1 ) && ( form.munic.selectedIndex > 0 )) )
		msg += '- Selecione o estado e o município\n';

	if( ( form.elements['ocorrenciaMembroSelect.membro.emailMembro'].value !='' )&&( !doEmail(form.elements['ocorrenciaMembroSelect.membro.emailMembro'].value, 1) ) )
		msg += '- o endereço de email NÃO é válido\n';

	if( form.elements['stComissaoExecutiva'].value =='1' ){

		if( (form.elements['ocorrenciaMembroSelect.membro.ue.sgUe'].value == '')||(form.elements['ocorrenciaMembroSelect.membro.ue.ueSup'].value =='') )
//		if( (form.ufs.selectedIndex == -1) || ( form.munic.selectedIndex < 1 )) 
			msg += '- Informe o estado e o município\n';

		if( form.elements['ocorrenciaMembroSelect.membro.edMembro'].value =='' )
			msg += '- Informe o Endereço\n';

		if( form.elements['ocorrenciaMembroSelect.membro.bairro'].value =='' )
			msg += '- Informe o Bairro\n';

		if( form.elements['ocorrenciaMembroSelect.membro.cepString'].value =='' )
			msg += '- Informe o CEP\n';

		if( form.elements['ocorrenciaMembroSelect.membro.telefoneResidencialString'].value =='' )
			msg += '- Informe o Telefone residencial\n';
	}
	
	if( ( form.elements['ocorrenciaMembroSelect.deliberacaoString'].value !='' )&&( !doDate(form.elements['ocorrenciaMembroSelect.deliberacaoString'].value, 5) ) ){
			msg += '- Data de deliberação NÃO é válida\n';
	}

	if( form.elements['ocorrenciaMembroSelect.iniExercicioString'].value =='' ){
		msg += '- Informe a Data de início do exercício\n';
	}else{
		if( !doDate(form.elements['ocorrenciaMembroSelect.iniExercicioString'].value, 5) ){
			msg += '- Data de início de início do exercício NÃO é válida\n';
		}
	}

	if( ( form.elements['ocorrenciaMembroSelect.iniExercicioString'].value !='' )&&
			( form.elements['iniVigenciaString'].value !='' ) ){
		if(comparaData(form.elements['ocorrenciaMembroSelect.iniExercicioString'].value,form.elements['iniVigenciaString'].value,'<')==true){
			msg += '- Data de inicio do exercício NÃO deve ser anterior a Data de inicio de vigência do Órgão Partidário\n';
		}
	}

	if(!form.elements['ocorrenciaMembroSelect.exercicioIndeterminado'].checked){

		if( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value =='' ){
			msg += '- Informe a Data de fim do exercício\n';
		}	

		if( ( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' )&&( !doDate(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value, 5) ) )
			msg += '- Data de fim do exercício NÃO é válida\n';

		if( ( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' )&&
				( ( form.elements['fimVigenciaString'].value !='' )&&(form.elements['vigenciaIndeterminada'].value !='true') ) ){
			if(comparaData(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value,form.elements['fimVigenciaString'].value,'>')==true){
				msg += '- Data de fim do exercício NÃO deve ser posterior a Data de fim de vigência do Órgão Partidário\n';
			}
		}

		if( ( form.elements['ocorrenciaMembroSelect.iniExercicioString'].value !='' )&&( form.elements['ocorrenciaMembroSelect.fimExercicioString'].value !='' ) ){
			if(comparaData(form.elements['ocorrenciaMembroSelect.fimExercicioString'].value,form.elements['ocorrenciaMembroSelect.iniExercicioString'].value,'<')==true){
				msg += '- Data de fim do exercício NÃO deve ser anterior a Data de inicio do exercício\n';
			}
		}		
	}else{
		if( form.elements['vigenciaIndeterminada'].value !='true' ){
			msg += '- Data de fim do exercício NÃO deve ser posterior a Data de fim de vigência do Órgão Partidário\n';
		}
	}

	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg );
		return false;
	}else{
		return true;
	}
}

function VigenciaValid( form ){
	msg = '';

	if( form.elements['orgaoPartidario.deliberacaoString'].value =='' ){
		msg += '- Informe a Data da deliberação\n';
	}else{
		if( !doDate(form.elements['orgaoPartidario.deliberacaoString'].value, 5) ){
			msg += '- Data da deliberação NÃO é válida\n';
		}
	}
	
	if( form.elements['orgaoPartidario.iniVigenciaString'] != null )
		if( form.elements['orgaoPartidario.iniVigenciaString'].value =='' ){
			msg += '- Informe a Data de início da vigência\n';
		}else{
			if( !doDate(form.elements['orgaoPartidario.iniVigenciaString'].value, 5) ){
				msg += '- Data de início da vigência NÃO é válida\n';
			}
		}
	
	if( (form.elements['orgaoPartidario.fimVigenciaString'].value =='')&&(!form.elements['orgaoPartidario.vigenciaIndeterminada'].checked) ){
		msg += '- Informe a Data de fim da vigência\n';
	}
/*
	if(( form.elements['orgaoPartidario.iniVigenciaString'].value !='' )&&( form.elements['orgaoPartidario.deliberacaoString'].value !='' )){
		if(comparaData(form.elements['orgaoPartidario.iniVigenciaString'].value,form.elements['orgaoPartidario.deliberacaoString'].value,'<')==true){
			msg += '- Data de início da vigência NÃO deve ser anterior a Data de deliberação (entre em contato com a Justiça Elelitoral)\n';
		}
	}
*/	
	if( ( form.elements['orgaoPartidario.fimVigenciaString'].value !='' )&&( !doDate(form.elements['orgaoPartidario.fimVigenciaString'].value, 5) ) )
		msg += '- Data de fim da vigência NÃO é válida\n';

	if( form.elements['orgaoPartidario.iniVigenciaString'] != null )
		if( ( form.elements['orgaoPartidario.iniVigenciaString'].value !='' )&&( form.elements['orgaoPartidario.fimVigenciaString'].value !='' ) ){
			if(comparaData(form.elements['orgaoPartidario.fimVigenciaString'].value,form.elements['orgaoPartidario.iniVigenciaString'].value,'<')==true){
				msg += '- Data de fim da vigência NÃO deve ser anterior a Data de inicio\n';
			}
		}

	if((form.elements['tpAtividade'].value!=1)){
		if(  form.elements['fimVigenciaSgipString'].value == form.elements['orgaoPartidario.fimVigenciaString'].value  ){
				msg += '- Data de fim da vigência informada é a mesma anotada na Justiça Eleitoral\n';
			}
    }
	
	
	return msg;
}


function OrgaoVigenciaValid( form ){
	msg = '';

	msg += VigenciaValid(form); 
	
	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg );
		return false;
	}else{
		return true;
	}
	
}

function OrgaoValid( form ){
	msg = '';

	if(form.selectNomeOrgao != null)
		if( ( form.selectNomeOrgao.selectedIndex == -1 ) )
			msg += '- Selecione o nome do orgão partidário ou digite um novo\n';

//	if( ( form.elements['orgaoPartidario.constituicaoString'].value !='' )&&( !doDate(form.elements['orgaoPartidario.constituicaoString'].value, 5) ) )
//	msg += '- Data de constituição NÃO é válida\n';

	if( ( form.elements['orgaoPartidario.cnpjString'].value !='' )&&( !isCnpj(form.elements['orgaoPartidario.cnpjString'].value)||(form.elements['orgaoPartidario.cnpjString'].value.length < 18 ) ) )
		msg += '- CNPJ informado é inválido ou incompleto\n';

//	if(form.ufs != null)
//		if( (form.ufs.selectedIndex == -1) || ( form.munic.selectedIndex < 1 )) 
	if( (form.elements['orgaoPartidario.ue.sgUe'].value == '')||(form.elements['orgaoPartidario.ue.ueSup'].value =='') )
			msg += '- Informe o estado e o município\n';

	if( form.elements['orgaoPartidario.edOrgaoPartidario'].value =='' )
		msg += '- Informe o Endereço\n';

	if( form.elements['orgaoPartidario.bairro'].value =='' )
		msg += '- Informe o Bairro\n';

	if( form.elements['orgaoPartidario.cepString'].value =='' )
		msg += '- Informe o CEP\n';

	if( ( form.elements['orgaoPartidario.emailOrgaoPartidario'].value !='' )&&( !doEmail(form.elements['orgaoPartidario.emailOrgaoPartidario'].value, 1) ) )
		msg += '- o endereço de email NÃO é válido\n';

	if( form.elements['orgaoPartidario.deliberacaoString'].value =='' ){
		msg += '- Informe a Data da deliberação\n';
	}else{
		if( !doDate(form.elements['orgaoPartidario.deliberacaoString'].value, 5) ){
			msg += '- Data da deliberação NÃO é válida\n';
		}
	}
		
	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg )
		return false;
	}else{
		return true;
	}
}

function DelegadoValid( form ){
	msg = '';
	if( form.elements['delegado.nome'].value =='' )
		msg += '- Informe o nome do delegado\n';

	if( form.elements['delegado.tituloEleitoralString'].value =='' ){
		msg += '- Informe o Título eleitoral do delegado\n';
	}
	else{
		if( (isTitulo(form.elements['delegado.tituloEleitoralString'].value) == false)||(form.elements['delegado.tituloEleitoralString'].value.length < 13) )
			msg += '- O Título eleitoral informado é inválido\n';
	}

	if( (form.elements['delegado.ue.sgUe'].value == '')||(form.elements['delegado.ue.ueSup'].value =='') )
//	if( (form.ufs.selectedIndex == -1) || ( form.munic.selectedIndex < 1 )) 
		msg += '- Informe o estado e o município\n';

	if( form.elements['delegado.endereco'].value =='' )
		msg += '- Informe o endereço do delegado\n';

	if( form.elements['delegado.bairro'].value =='' )
		msg += '- Informe o Bairro\n';

	if( form.elements['delegado.cepString'].value =='' )
		msg += '- Informe o CEP\n';

	if( ( form.elements['delegado.email'].value !='' )&&( !doEmail(form.elements['delegado.email'].value, 1) ) )
		msg += '- o endereço de email NÃO é válido\n';

	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg );
		return false;
	}else{
		return true;
	}
}

function AtividadeDelegadoValid( form ){
	msg = '';
	if( form.elements['dataProtocoloString'].value =='' ){
		msg += '- Informe a Data do Protocolo\n';
	}else{
		return AtividadeValid(form);
	}

	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg )
		return false;
	}else{
		return true;
	}
}

function AtividadeValid( form ){
	msg = '';
	if( form.elements['dataDespachoString'].value =='' )
		msg += '- Informe a Data do Despacho\n';
	if( form.elements['nrProt'].value ==''||form.elements['nrProt'].value =='0' )
		msg += '- Informe o número do protocolo\n';
	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg )
		return false;
	}else{
		return true;
	}
}

function ReciboValid( form ){
	msg = '';
	if( form.elements['atividadeKey.barCode'].value =='' ){
		if( (form.elements['atividadeKey.chave1'].value == '')||(form.elements['atividadeKey.chave2'].value == '')||(form.elements['atividadeKey.chave3'].value == '') )
			msg += '- Informe o Código do relatório\n';
	
		if( form.elements['atividadeKey.dataGeracaoString'].value =='' )
			msg += '- Informe a Data da geração do relatório\n';
	}else{
		if( form.elements['atividadeKey.barCode'].length < 26)
				msg += '- Código de barras inválido\n';
	}

	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg )
		return false;
	}else{
		return true;
	}
}


function AtividadeOrgaoValid( form ){
	msg = '';
	if( !CheckboxAtividadeValid( form ) ){
		msg += '- Selecione um ou mais orgãos partidários\n';
	}else{
		var stCount = 0;
		
		for( stCount = 0; stCount < form.length; stCount++ ){
			element = form.elements[ stCount ];
			if( element.type == 'hidden'&& element.name == 'stOrgaoPartidario' ){
				if( (element.value != 161)&&(
					(element.value == 23 )||
					(element.value == 72 )) 
						){
					var resposta = confirm("A anotação trata de órgão em situação extraordinária (Sub-Judice ou Restabelecido). \n Deseja proceder a anotação de qualquer maneira?");
					if (resposta){
						return AtividadeValid(form);
					}
					else{
						return false;
					}
				}
			}
		}
		return AtividadeValid(form);
	}

	if( msg != '' ){
		alert( 'Verifique os erros abaixos e tente enviar novamente! \n' + msg )
		return false;
	}else{
		return true;
	}
}

function CheckboxAtividadeValid( form ){
	var ckCount = 0;
	for( ckCount = 0; ckCount < form.length; ckCount++ ){
		element = form.elements[ ckCount ]
		                         if( element.type == 'checkbox' ){
		                        	 if( element.checked )
		                        		 return true;
		                         }
	}
	return false;
}

// Função que monta a data no formato correto para compará-la
function montaData( p_data ) {
	var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/;

	if ( v_exp.test( p_data ) ) {
		var v_data = v_exp.exec( p_data );
		var v_dia = v_data[ 1 ];
		var v_mes = v_data[ 2 ];
		var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ];

		diasMeses[2] = (  ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 ))  ) ? 29 : 28;

		if ( v_dia <= diasMeses[ v_mes ] )
			return [ v_dia, v_mes, v_ano ];
	}

	return null;
}   

// Função que faz a comparação mesmo
function comparaData( p_dtPrim, p_dtSeg, p_oper ){
//   var v_prim  = montaData( p_dtPrim );
//	var v_seg   = montaData( p_dtSeg );
	var v_prim  = unformatData( p_dtPrim );
	var v_seg   = unformatData( p_dtSeg );

	
	p_oper = ( p_oper ) ? p_oper : '<';

	if ( !v_prim || !v_seg ) return false;
	var v_result = eval(v_prim + p_oper + v_seg);
	return v_result;
}

function proximo(form, atual, proximo) {
	form.elements[atual].value = form.elements[atual].value.toUpperCase();
	if (form.elements[atual].value.length == 4) {
		form.elements[proximo].focus();
		form.elements[proximo].select();
	}
}

function avoidEnter(e){
	    var intKey = (window.Event) ? e.which : e.keyCode;
	    if (intKey == 13) { //enter key
	        return false;
	    }
	    return true;
}

