function carregando(txt) {
	return "<img src='img/load.gif'>&nbsp;"+txt;
}


/* ---------------------------------------------------------------------- *\
  Função    : msgErro (msg)
  Descrição : formata a msg de erro para ser exibida na Div
\* ---------------------------------------------------------------------- */
function msgErro(divRetorno,msg) {
	if (document.getElementById(divRetorno) == null) { alert(msg); }
	else { document.getElementById(divRetorno).innerHTML = "<span class='txtRB'><img src='/img/ico_erro.png'>&nbsp;"+msg+"</span>"; }
	return false;
} // fim função msgErro

/* ---------------------------------------------------------------------- *\
  Função    : trataErro (string)
  Descrição : procura pela palavra erro: (com 'dois pontos'), se achar
			  devolve a posição inicial
\* ---------------------------------------------------------------------- */
function trataErro (resultado) {
	var erro = resultado.indexOf("erro:");
	// não tem erro
	if (erro == -1 ) {return true;}
	else {return erro;}
}	

/* ---------------------------------------------------------------------- *\
  Função    : vemail (campo)
  Descrição : Verifica se e-mail é valido
  Notas     : by Rodrigo Felix (rodrigo@boletimonline.net)
\* ---------------------------------------------------------------------- */
function vemail (campo) {
	if (campo.value != "") {
		parte1 = campo.value.indexOf("@");
		parte2 = campo.value.indexOf(".");
		parte3 = campo.value.length;
			if (!(parte1 >= 2 && parte2 >= 4 && parte3 >= 6)) {	alert ("E-Mail inválido!");	campo.select();}
	}
}

/* ---------------------------------------------------------------------- *\
  Função    : valDesmarcaTudo (obj)
  Descrição : tira o estilo de todos os campos
  Notas     : by Rodrigo Felix (rodrigo@boletimonline.net)
\* ---------------------------------------------------------------------- */
function valDesmarcaTudo (obj) {
	classOff = '';
	for ( var j = 0; j < document.getElementsByName(obj).length; j++ ) {
		document.getElementsByName(nomeCampo)[j].className= classOff;
	}
}

/* ---------------------------------------------------------------------- *\
  VERSÃO 2.0
  ALTERADO para substituir & por "[#]" ,sem as aspas, depois aonde recebe fazer
  o processo inverso
  =====================
  Função    : montaRetorno(lista,divRetorno)
  Descrição : Monta retorno em STRING para ser enviado pelo AJAX (GET ou POST)
	            Monta campos text (em formato ARRAY ou não)
				campos check (só os que estiverem preenchidos)
				campos radio (só o selecionado)
  Retorno	: &campo1=valor1 (& NO COMEÇO DOS CAMPOS, MESMO NO PRIMEIRO)
  Notas     : by Rodrigo Felix (rodrigo@boletimonline.net)
\* ---------------------------------------------------------------------- */
function montaRetorno(lista,divRetorno) {
	var campos,total;
	var resFinal = "";
	campos = lista.split(",");
	// LOOP NOS CAMPOS (i)
	for (i=0;i<campos.length;i++) {
		// detecta se tem '[' (é array ou normal)
		tp = campos[i].indexOf("[");
 	 	// tipo de campo normal
		if (tp==-1) {
			// campo nao existe (retorna por alert ou na div)
			if (document.getElementById(campos[i]) == null) {
				if (document.getElementById(divRetorno) == null) { alert('campo "'+campos[i]+'" não existe!\nOperação cancelada!'); }
				else { document.getElementById(divRetorno).innerHTML = 'campo "'+campos[i]+'" não existe, Operação cancelada!';}
				return false;
			} // fim campo nao existe
			// campo existe, trata
			cp = document.getElementById(campos[i]); // Campo
			// se tipoCampo for radio, msg de erro falando que ter q ser [] no campo!
			if (cp.type=='radio') {
				if (document.getElementById(divRetorno) == null) { alert('campo "'+campos[i]+'" precisa ser declarado com [] após o nome!'); }
				else { document.getElementById(divRetorno).innerHTML = 'campo "'+campos[i]+'" precisa ser declarado com [] após o nome!';}
				return false;
			}
			// CHECKBOX - só pega se estiver checado, senao vazio
			if (cp.type == 'checkbox') {
				// Marcado
				if (cp.checked) {
					cp.value = cp.value.replace(/[&]+/g,'[#]');
					//cp.value = cp.value.replace(/[+]+/g,'[+]');
					resFinal+='&'+campos[i]+'='+cp.value; // substitui & por "[#]"
				}
				// não marcado
				else { resFinal+='&'+campos[i]+'='; }
			} // fim check
			// TEXT - PEGAR VALOR NORMAL
			// Vazio, gera valor branco pra não dar erro
			else {
				if (cp.value == '' || cp.value == 'Escolha') { valorCampo=''; } // fim vazio
				// Preenchido
				else { 
					cp.value = cp.value.replace(/[&]+/g,'[#]');
					//cp.value = cp.value.replace(/[+]+/g,'[+]');
					valorCampo=cp.value; 
				} // substitui & por "[#]"
				resFinal+='&'+campos[i]+'='+valorCampo;
			} // fim text
		} // fim é normal
		// TIPO ARRAY
		// 1º - se entrou aqui é pq já tem os []
		// Retorno: &campoXX_i = valor
		else {
			// campo nao existe (retorna por alert ou na div)
			if (document.getElementById(campos[i]) == null) {
				if (document.getElementById(divRetorno) == null) { alert('campo "'+campos[i]+'" não existe!\nOperação cancelada!'); }
				else { document.getElementById(divRetorno).innerHTML = 'campo "'+campos[i]+'" não existe, Operação cancelada!';}
				return false;
			} // fim campo nao existe
			
			cp = document.getElementById(campos[i]); // Campo
			nomeCampo=cp.name; // Nome do campo (com [])
			tipoCampo=cp.type; // Tipo
			posIni = campos[i].indexOf("[");
			nomeLimpo = campos[i].substr(0,posIni); // nome sem os []
			// RADIO
			// tem que retornar só 1 valor
			// Retorno: &campoXX = valor
			if (tipoCampo == 'radio') {
				// LOOP INTERNO
				var marcados = 0;
				for ( var j = 0; j < document.getElementsByName(nomeCampo).length; j++ ) {
					// Marcado
					if ( document.getElementsByName(nomeCampo)[j].checked ) {
						marcados++;
						document.getElementsByName(nomeCampo)[j].value = document.getElementsByName(nomeCampo)[j].value.replace(/[&]+/g,'[#]');
						//document.getElementsByName(nomeCampo)[j].value = document.getElementsByName(nomeCampo)[j].value.replace(/[+]+/g,'[+]');
						resFinal+='&'+nomeLimpo+'='+document.getElementsByName(nomeCampo)[j].value; // substitui & por "[#]"
					} // não marcado
				} // fim loop rádio
				if (marcados == 0) { resFinal+='&'+nomeLimpo+'='; }
			} // fim radio
			
			// CHECK
			// Retorno: &campoXX_i = valor;
			else if (tipoCampo == 'checkbox') {
				// LOOP INTERNO
				var checkMarcados = 0;
				for ( var j = 0; j < document.getElementsByName(nomeCampo).length; j++ ) {
					// Marcado
					if ( document.getElementsByName(nomeCampo)[j].checked ) {
						document.getElementsByName(nomeCampo)[j].value = document.getElementsByName(nomeCampo)[j].value.replace(/[&]+/g,'[#]');
						//document.getElementsByName(nomeCampo)[j].value = document.getElementsByName(nomeCampo)[j].value.replace(/[+]+/g,'[+]');

						resFinal+='&'+nomeLimpo+'_'+checkMarcados+'='+document.getElementsByName(nomeCampo)[j].value; // substitui & por "[#]"
						checkMarcados++;
					} // não marcado
				} // fim loop check
			} // fim check
			
			// TEXT
			// Retorno: &campoXX_i = valor;
			// Monta tipo só os que estão preenchidos, colocando em ordem
			else if (tipoCampo == 'text') {
				// LOOP INTERNO
				var checkMarcados = 0;
				for ( var j = 0; j < document.getElementsByName(nomeCampo).length; j++ ) {
					// Preenchido
					if ( document.getElementsByName(nomeCampo)[j].value != '' && document.getElementsByName(nomeCampo)[j].value != 'Escolha') {
						document.getElementsByName(nomeCampo)[j].value = document.getElementsByName(nomeCampo)[j].value.replace(/[&]+/g,'[#]');
						//document.getElementsByName(nomeCampo)[j].value = document.getElementsByName(nomeCampo)[j].value.replace(/[+]+/g,'[+]');
						resFinal+='&'+nomeLimpo+'_'+checkMarcados+'='+document.getElementsByName(nomeCampo)[j].value; // substitui & por "[#]"
						checkMarcados++;
					} // preenchido
				} // fim loop text
			} // fim text
			
		} // fim é array
	} // fim for	
	return resFinal;
} // fim função retorno


/* ---------------------------------------------------------------------- *\
  Função    : validaCampos(lista,divRetorno)
  Descrição : valida campos que são obrigatórios preencher
	            Monta check text em Array precisam de um nº entre []
				que representa o mínimo a preencher
				ex: strTitulo[2] , no array de strTitulo tem q ter 2 preenchidos
  Notas     : by Rodrigo Felix (rodrigo@boletimonline.net)
\* ---------------------------------------------------------------------- */
function validaCampos(lista,divRetorno) {
	var campos,total;
	var resFinal = "";
	var xTempo = 0;
	campos = lista.split(",");
	// LOOP NOS CAMPOS (i)
	for (i=0;i<campos.length;i++) {
		// detecta se tem '[' (é array ou normal)
		tp = campos[i].indexOf("[");
 	 	// tipo de campo normal
		if (tp==-1) {
			// campo nao existe (retorna por alert ou na div)
			if (document.getElementById(campos[i]) == null) { 
				msgErro(divRetorno,'campo "'+campos[i]+'" não existe, Operação cancelada!');
				return false;
			} // fim campo nao existe
			// campo existe, trata
			cp = document.getElementById(campos[i]); // Campo
			// se tipoCampo for radio, msg de erro falando que ter q ser [] no campo!
			if (cp.type=='radio') {	msgErro(divRetorno,'campo "'+campos[i]+'" precisa ser declarado com [] após o nome!');	}
			// CHECK
			if (cp.type=='checkbox') {
				if (cp.checked) { cp.className='textBox';} // marcado
				else { cp.className='preencha'; xTempo++; } // fim vazio	
			} // fim check
			// TEXT
			else {
				// está em branco
				if (cp.value == '' || cp.value == 'Escolha') { cp.className='preencha'; xTempo++; } // fim vazio
				// Preenchido
				else { cp.className='textBox'; }
			} // fim text
		} // fim é normal
		// TIPO ARRAY
		// 1º - se entrou aqui é pq já tem os []
		// Retorno: &campoXX_i = valor
		else {
			posIni = campos[i].indexOf("[");
			nomeLimpo = campos[i].substr(0,posIni); // nome sem os []
			// campo nao existe (retorna por alert ou na div)
			if (document.getElementById(nomeLimpo+'[]') == null) {
				msgErro(divRetorno,'campo "'+nomeLimpo+'[]" não existe, Operação cancelada!');
				return false;
			} // fim campo nao existe
			
			cp = document.getElementById(nomeLimpo+'[]'); // Campo
			nomeCampo=cp.name; // Nome do campo (com [])
			tipoCampo=cp.type; // Tipo
			
			// RADIO (tem q ter 1 preenchido)
			if (tipoCampo == 'radio') {
				// LOOP INTERNO
				var marcados = 0;
				for ( var j = 0; j < document.getElementsByName(nomeCampo).length; j++ ) {
					// Marcado
					if ( document.getElementsByName(nomeCampo)[j].checked ) { marcados++; }
					// não marcado
					else { document.getElementsByName(nomeCampo)[j].className='preencha';}
				} // fim loop rádio
				// SE TEM MAIS DE 1 MARCADO TIRA O ESTILO
				if (marcados > 0) { valDesmarcaTudo (nomeCampo); }
				else {xTempo++; }
				// FIM VERIFICA QTD MIN.
			} // fim radio
			
			// CHECK
			else if (tipoCampo == 'checkbox') {
				// PEGAR o numero de campos mínimos, que está entre [] (check somente)
				posFim = campos[i].indexOf("]");
				casas = Number(posFim) - Number(posIni);
				miolo = campos[i].substr(posIni+1,casas-1);
				// não tem valor no Miolo, assume 0 
				if (!Number(miolo)) { var minPreenchido = 0; }
				else { var minPreenchido = miolo; }
				// LOOP INTERNO
				var checkMarcados = 0;
				for ( var j = 0; j < document.getElementsByName(nomeCampo).length; j++ ) {
					// Marcado
					if ( document.getElementsByName(nomeCampo)[j].checked ) { checkMarcados++; } // marcado
					// não marcado
					else {	document.getElementsByName(nomeCampo)[j].className='preencha';}
				} // fim loop check
				// VERIFCA QTD. MÍNIMA
				if (checkMarcados < minPreenchido) {
					msgErro(divRetorno,'campo "'+nomeLimpo+'[]" selecione no mínimo '+minPreenchido);
					xTempo++;
				} // fim qtd min.
				else { valDesmarcaTudo (nomeCampo); }
				// FIM VERIFICA QTD MIN.
			} // fim check
			
			// TEXT (if (tipoCampo == 'text') )
			else {
				// PEGAR o numero de campos mínimos, que está entre []
				posFim = campos[i].indexOf("]");
				casas = Number(posFim) - Number(posIni);
				miolo = campos[i].substr(posIni+1,casas-1);
				// não tem valor no Miolo, assume 0 
				if (!Number(miolo)) { var minPreenchido = 0; }
				else { var minPreenchido = miolo; }
				// LOOP INTERNO
				var checkMarcados = 0;
				for ( var j = 0; j < document.getElementsByName(nomeCampo).length; j++ ) {
					// Preenchido
					if ( document.getElementsByName(nomeCampo)[j].value !='' ) { checkMarcados++; }
					// não Preenchido
					else {	document.getElementsByName(nomeCampo)[j].className='preencha';}
				} // fim loop
				// VERIFCA QTD. MÍNIMA
				if (checkMarcados < minPreenchido) {
					msgErro(divRetorno,'campo "'+nomeLimpo+'[]" preencha no mínimo '+minPreenchido);
					xTempo++;
				} // fim qtd min.
				else { valDesmarcaTudo (nomeCampo); }
				// FIM VERIFICA QTD MIN.
			} // fim TEXT
		} // fim é array
	} // fim for
	
	if (xTempo==0) {document.getElementById(divRetorno).innerHTML=""; return true;}
	else {msgErro (divRetorno,'Preencha os campos em destaque'); return false;}
} // fim função valida

/* ---------------------------------------------------------------------- *\
  Função    : requestOk()
  Descrição : Mostra mensagem de Ok e depois de um tempo leva para a página
  Notas     : by Rodrigo Felix (rodrigo@boletimonline.net)
\* ---------------------------------------------------------------------- */
function requestOk(){
	var me = this;
	this.tempo	= 2000; //em milisegundos
	this.ondeAbrir = "origem";
	this.urlDestino = "principal.php";
	this.divDestino = "";
	this._timer 		= "";
	this._timerDelete	= "";
	this.msg			= "Operação concluída!";
	this.objExiste		= false;

	// Iniciar
	this.init = function(){
		// abre na origem (nesta mesma tela)
		if (me.ondeAbrir == "origem") { me.itsOrigem();	}
		// abre no destino
		if (me.ondeAbrir == "destino") { me.itsDestino();	}
	} // fim init
	
	// Mostrar Mensagem
	this.mostraMsg = function () {
		msgSucesso(me.divDestino,me.msg);
		//document.getElementById(me.divDestino).innerHTML = me.msg;
	}

	// Redirect e clearTimer
	this.redireciona = function () {
		eval(me.urlDestino);
		clearTimeout(me._timer);
	}	

	// Verifica se a div Existe
	this.divExiste = function () {
		if (me.divDestino !='') { 
			if (document.getElementById(me.divDestino) == null) { return false; }
			else { return true; }
		}
	}
	
	// Fazer Verificação inicial
	this.verificacao = function () {
		me.objExiste = me.divExiste();
		if (me.objExiste == false) { me.alertDestino(); }
		else { 
			// mostrarMensagem
			me.mostraMsg();
			// abre tempo para redirect
			me._timerDelete = setTimeout( function(){ me.redireciona(); }, me.tempo);
			//clearTimeout(me._timerDelete);
		}
	} // fim verificação
	

	// Operações na Origem
	this.itsOrigem = function () {
		me.verificacao();
	}
	
	// Operações no Destino
	this.itsDestino = function () {
		eval(me.urlDestino);
		alert (me.msg);
	}


	// Dá um alert e leva para o destino, depois para processo
	this.alertDestino = function () {
		alert (me.msg);
		eval(me.urlDestino);
		return false;
	}
} // Fim função requestOk
