/* Scripts espeficicos para o form de inscrição */

//alert('Inicio do Arquivo: inscricoes.js');



//Define a classe que sera utilizada para indicar o campo que esta preenchido incorretamento
var campoClassNameErro 	= "campo_erro";
//Define a classe que sera utilizada para indicar o campo que esta preenchido corretamento
var campoClassNameOk 	= "campo_ok";
//Define variavel para marcar que geracao de pdf foi abortada e impedir a exibicao da etapa 3
var pdfGenerationAborted = false;

// LIMITES de preenchimento para campos
var limiteTitulo 	= 100;
var limiteAbstract 	= 1500;
var limiteCaption 	= 200;




Event.observe(window, 'load', inicial);

function inicial(){

	//alert('Função: inicial');

	// Focus no campo inicial
	$('form_preRegister').focusFirstElement();

	//Busca Email preRegister
	Event.observe($('pr_mail'), 'keyup', function(event){ if(event.keyCode==Event.KEY_RETURN){ findPreRegister(); } });
	Event.observe($('pr_btn_find'), 'click', function(event){ findPreRegister(); }, false);

	//Instrucoes
	showInstrucoes($('form_abstract'));


/*
	// Limitador: title
	Event.observe($('campo_title'), 'keyup', function(event){ limitaCampo($('campo_title'), limiteTitulo, 'title_left'); }, false);
	Event.observe($('campo_title'), 'blur', function(event){ limitaCampo($('campo_title'), limiteTitulo, 'title_left'); }, false);
	// Limitador: abstract
	Event.observe($('campo_abstract'), 'keyup', function(event){ limitaCampo($('campo_abstract'), limiteAbstract, 'abstract_left'); }, false);
	Event.observe($('campo_abstract'), 'blur', function(event){ limitaCampo($('campo_abstract'), limiteAbstract, 'abstract_left'); }, false);
	// Limitador: img Caption
	Event.observe($('campo_imgCaption'), 'keyup', function(event){ limitaCampo($('campo_imgCaption'), limiteCaption, 'imgCaption_left'); }, false);
	Event.observe($('campo_imgCaption'), 'blur', function(event){ limitaCampo($('campo_imgCaption'), limiteCaption, 'imgCaption_left'); }, false);
*/

	//Add Affiliations
	Event.observe($('campo_aff_name'), 'keyup', function(event){ if(event.keyCode==13){ addAffiliation(); } });
	Event.observe($('btn_aff'), 'click', function(event){ addAffiliation(); }, false);

	//Add Author
	Event.observe($('campo_author_name'), 'keyup', function(event){ if(event.keyCode==13){ addAuthor(); } });
	Event.observe($('btn_author'), 'click', function(event){ addAuthor(); }, false);



	// Tabela: authors
	showTable($('table_authors'));

	// Tabela: Affiliation
	showTable($('table_aff'));


	// Submit: parte 1
	Event.observe($('botao_save'), 'click', function(event){ hideUploadMsg(); hideStatus(); readySubmit(); }, false);


	// show abstract PDF options
	Event.observe($('PDF_link'), 'click', function(event){ $$('.pdfOption').each(Element.show); }, false);
	Event.observe($('btnFinish'), 'click', function(event){ finish(); }, false);
	Event.observe($('btnEdit'), 'click', function(event){ edit(); }, false);
	Event.observe($('lnkCancelAndEdit'), 'click', function(event){ edit(1); }, false);





	//alert('/Função: inicial');

}//inicial


		function edit(aborted){
			if(aborted) {
				pdfGenerationAborted = true;
			}
			// exibe form c/ msg
			showEtapa(2,1);
		}

		function finish(){

			//AJAX
			var url = siteUrl+'rpc/abstract_finish.php';
			var pars = '?hash='+$('campo_hash').value;
			var myAjax = new Ajax.Request( url, {
				method: 'post',
				parameters: pars,
				onLoading: function() {

					// load
					Element.show($('abs_PDFsendl'));

				},//onLoading
				onComplete: function(originalRequest) {

					// Msgs
					Element.hide($('abs_PDFsendl'));
					Element.show($('abs_PDFsend'));

					//Resposta da requisicao
					var resp = originalRequest.responseText;

					//alert(resp);
					//alert(typeof(resp));

					switch(resp){
						// OK
						case '1':
							//alert('SUCESSO.');
							showEtapa(4);
						break;
						//ERROS
						case '0':
							alert('ERRO ao atualizar o Status.');
						break;
						case '-1':
							alert('ERRO Hash da IMG não encontrada.');
						break;
						case '-2':
							alert('ERRO ao enviar o e-mail com a Abstract.');
						break;
						case '-3':
							alert('ERRO ao compactar (zip) os arquvios da Abstract.');
						break;
					}

				},//onComplete
				onFailure: function() {

				}//onFailure
			});

		}// finish()

	function checkAutAffs(obs){
		var aaErro = false;
		$$('#tbody_authors input.AutAff').each(function(campo){
			if(campo.value.length==0){
				aaErro = true;
			}
		});
		// toogle msg
		if(aaErro==true){
			showMsg($('campo_a_ERRO'));
			if(obs==1){
				$$('#tbody_authors input.AutAff').each(function(campo){
					Event.observe(campo, 'keyup', function(event){ checkAutAffs(); } , false);
				});
			}
			retorna = false;
		}else{
			hideMsg($('campo_a_ERRO'));
			retorna = true;
		}

		// retorna
		return retorna;
	}

	// Salva os dados do form e envia a IMG
	function readySubmit(){

		// Trava botao
		$('botao_save').disable = true;

		var erro = false;

		// Valida: title
		if($('campo_title').hasClassName(campoClassNameOk)==false){
			//show erro
			$('campo_title').addClassName(campoClassNameErro);
			showMsg($('campo_title_ERRO'));
			//erro
			erro = true;
		}
		/*
		if(validaCampo($('campo_title'))==false){
			//show erro
			$('campo_title').removeClassName(campoClassNameOk);
			$('campo_title').addClassName(campoClassNameErro);
			showMsg($('campo_title_ERRO'));
			erro = true;
		}
		*/


		// Valida: abstract
		if($('campo_abstract').hasClassName(campoClassNameOk)==false){
			//show erro
			$('campo_abstract').addClassName(campoClassNameErro);
			showMsg($('campo_abstract_ERRO'));
			//erro
			erro = true;
		}
		/*
		if(validaCampo($('campo_abstract'))==false){
			//show erro
			$('campo_abstract').removeClassName(campoClassNameOk);
			$('campo_abstract').addClassName(campoClassNameErro);
			showMsg($('campo_abstract_ERRO'));
			erro = true;
		}
		*/

		// Valida: affiliation
		if($$('#tbody_aff tr').length==0){
			showMsg($('campo_aff_name_ERRO'));
			erro = true;
		}else{
			hideMsg($('campo_aff_name_ERRO'));
		}


		// Valida: author
		if($$('#tbody_authors tr').length==0){
			showMsg($('campo_author_name_ERRO'));
			erro = true;
		}else{
			hideMsg($('campo_author_name_ERRO'));

			//affs
			if(checkAutAffs(1)==false){
				erro = true;
			};

			//apresentador
			var apErro = true;
			$$('#tbody_authors input.AutAp').each(function(campo){
				if(campo.checked==true){
					apErro = false;
				}
			});
			// toogle msg
			if(apErro==true){
				showMsg($('campo_p_ERRO'));
				erro = true;
				$$('#tbody_authors input.AutAp').each(function(campo){
					Event.observe(campo, 'click', function(event){ hideMsg($('campo_p_ERRO')); } , false);
				});
			}else{
				hideMsg($('campo_p_ERRO'));
			}


		}


		// Valida: oral ou poster
		if($('campo_tipo_oral').checked==false && $('campo_tipo_poster').checked==false){
			showMsg($('campo_tipo_ERRO'));
			erro = true;
			Event.observe($('campo_tipo_oral_label'), 'click', function(event){ hideMsg($('campo_tipo_ERRO')); } , false);
			Event.observe($('campo_tipo_poster_label'), 'click', function(event){ hideMsg($('campo_tipo_ERRO')); } , false);
		}else{
			hideMsg($('campo_tipo_ERRO'));
		}


		// Valida: figure (opcional)
			// caption
			if($('campo_imgCaption').hasClassName(campoClassNameErro)==true){
				//show erro
				$('campo_imgCaption').addClassName(campoClassNameErro);
				showMsg($('campo_imgCaption_ERRO'));
				//erro
				erro = true;
			}


			/*
			if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || ($('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0) || (limitaCampo($('campo_imgCaption'), limiteCaption, 'imgCaption_left')==false)){
				//show erro
				$('campo_imgCaption').removeClassName(campoClassNameOk);
				$('campo_imgCaption').addClassName(campoClassNameErro);
				showMsg($('campo_imgCaption_ERRO'));
				erro = true;
			}
			*/



		if(erro==false){
			//envia dados
			//alert("OK");
			submitAbs();
		}else{

			// novo array
			var erros = new Array();

			// seleciona campos com erro AND caixas de erro visiveis
			var seletor = $$("textarea."+campoClassNameErro+", .msgErro");
			seletor.each(function(erro){
				if(erro.visible()==true){
					// add no inicio
					erros.unshift(erro);
				}
			});

			// inverte
			erros.reverse();

			// Scroll
			erros[0].scrollTo();
			// focus
			if(erros[0].nodeName=="TEXTAREA"){
				erros[0].activate();
			}
		}

		// Destrava botao
		$('botao_save').disable = false;

	}


	function submitStatus(cod){

		//debug("status: "+cod);

		if(cod.length==1){
			//esconde load
			($('abs_result'+cod+'l')) ? Element.hide($('abs_result'+cod+'l')) : alert("Status '"+cod+"l' inexistente");
		}

		// show msg
		if($('abs_result'+cod)){
			Element.show($('abs_result'+cod));
			// scroll
			$('abs_result'+cod).scrollTo();
		}else{
			alert("Status '"+cod+"' inexistente")
		}

	}

	function hideStatus(etapa){
		if(etapa){
			Element.hide($('abs_result'+etapa));
		}else{
			$$('.submitStatus').each(Element.hide);
		}

	}





	function submitAbs(){

	/* ENVIA DADOS */

		//Dados
		var form	= $('form_abstract');

		//AJAX
		var url = siteUrl+'rpc/abstract.php';
		var pars = form.serialize()+"&form[imgCaption]="+$F('campo_imgCaption');
		
		// Escapa dados dos parametros
		//pars = escape(pars);
		
		var myAjax = new Ajax.Request( url, {
			method: 'post',
			parameters: pars,
			onLoading: function() {

				// Status
				submitStatus("1l");

			},//onLoading
			onComplete: function(originalRequest) {

				//Resposta da requisicao
				var resp = originalRequest.responseText;

				//alert(typeof(resp));

				// ERROS
				if(resp<0){

					hideStatus("1l");

					switch(resp){
						case '-1':
							alert("ERRO: campo(s) não preenchido(s)!");
						break;
						case '-2':
							alert("ERRO: e-mail não cadastrado no pre-register!");
						break;
						case '-3':
							alert("ERRO: ao atualizar dados, hash não encontrada!");
						break;
						case '-4':
							alert("ERRO: ao salvar a Abstract!");
						break;
						case '-5':
							alert("ERRO: ao salvar um Autor!");
						break;
						case '-6':
							alert("ERRO: ao salvar uma Afiliacao!");
						break;

					}
				}
				// OK
				else if(resp.length==32){
					// Hash
					$('campo_hash').value 		= resp;
					$('campo_hash_img').value 	= resp;

					// Status
					submitStatus("1");

					// Img
					if($('campo_imgFile').value.length>0){
						// upload
						figureUpload();
					}else{
						// TEX e PDF
						geraPDF(resp);
					}


				}
				else{
					hideStatus("1l");
					alert("BUG\nresp: "+resp);
				}

			},//onComplete
			onFailure: function() {

			}//onFailure
		});


	}// submitAbs()




	function showEtapa(etapa, msgs){

		// Esconde tudo
		$$('.etapa, .pr_frmMsg, .msgErro, .submitStatus, .pdfOption').each(Element.hide);

		switch(etapa){
			// pre
			case 1:
				Element.show($('preRegister_text'));
				//if(msgs==1){}
			break;

			// form
			case 2:
				Element.show($('abs_form'));
				if(msgs==1){
					($$('div#abs_old_links div').length>0)? Element.show($('abs_old')) : null;
					Element.show($('pr_ok'));
				}
			break;

			// PDF ok
			case 3:
				Element.hide($('abs_old'));
				Element.show($('abs_PDFok'));
				//if(msgs==1){}
			break;

			// Submit ok
			case 4:
				Element.show($('abs_finished'));
				//if(msgs==1){}
			break;
		}

	}



	function limitaCampo(campo, limite, classRetorna){

		var resto = limite - $F(campo).length;
		var retornaBool = true;

		// limita
		if(resto<1){
			if(resto == 0){
				// retorna
				resto = ', <span class="campoClassNameErro"><strong>'+Math.abs(resto)+'</strong> character left.</span>';
				// retornaBool
				retornaBool = true;
			}else{
				// retorna
				resto = '<strong class="campoClassNameErro">'+Math.abs(resto)+'</strong> character(s) exceeded!</strong>';
				// class
				campo.removeClassName(campoClassNameOk);
				campo.addClassName(campoClassNameErro);
				// retornaBool
				retornaBool = false;
			}

		}else{
			/*
			// class
			if(campo.hasClassname(campoClassNameErro)==true){
				campo.removeClassName(campoClassNameOk);
				campo.addClassName(campoClassNameErro);
			}
			*/
			// retorna
			resto = ', <strong class="campoClassNameOk">'+Math.abs(resto)+'</strong> character(s) left!</strong>';
			// retornaBool
			retornaBool = true;
		}

		// retorna atualizando strings
		$$("span."+classRetorna).each(function(span){
			span.innerHTML = resto;
		});

		// retorna
		return retornaBool;
	}






	function moveUp(i){

		var atual = i;
		var acima = Number(atual) - 1;

		// pega inputs linha atual
		var linhaAtual 			= document.getElementsByName('form[author][name]['+atual+']')[0].up(1);
		var linhaAtualInputs 	= linhaAtual.select('input');
		var linhaAtualAutor 	= linhaAtual.select('.authorName');

		// pega linha de baixo
		var linhaAcima = document.getElementsByName('form[author][name]['+acima+']');
		// pega inputs da linha de acima se existir
		if(linhaAcima.length>0){
			linhaAcima 				= linhaAcima[0].up(1);
			var linhaAcimaInputs 	= linhaAcima.select('input');
			var linhaAcimaAutor 	= linhaAcima.select('.authorName');
		}else{
			linhaAcima = false;
		}

		// so faz a troca, caso exista a linha de baixo
		if(linhaAcima != false){

			// Campos da linha ATUAL
			nomeAtual	= linhaAtualInputs[0].value;
			aAtual		= linhaAtualInputs[1].value;
			pAtual		= linhaAtualInputs[2].value;
			pAtualCheck	= linhaAtualInputs[2].checked;

			// Campos da linha acima
			nomeAcima	= linhaAcimaInputs[0].value;
			aAcima		= linhaAcimaInputs[1].value;
			pAcima		= linhaAcimaInputs[2].value;
			pAcimaCheck= linhaAcimaInputs[2].checked;

			// Troca Dados
			linhaAtualAutor[0].innerHTML  	= nomeAcima;
			linhaAtualInputs[0].value	 	= nomeAcima;
			linhaAtualInputs[1].value  		= aAcima;
			linhaAtualInputs[2].value  		= pAcima;
			linhaAtualInputs[2].checked  	= pAcimaCheck;

			linhaAcimaAutor[0].innerHTML  	= nomeAtual;
			linhaAcimaInputs[0].value 		= nomeAtual;
			linhaAcimaInputs[1].value 		= aAtual;
			linhaAcimaInputs[2].value 		= pAtual;
			linhaAcimaInputs[2].checked 	= pAtualCheck;

			// debug
			//alert("nomeAtual: "+nomeAtual+"\n"+"aAtual: "+aAtual+"\n"+"pAtual: "+pAtual+" ("+pAtualCheck+")");
			//alert("nomeAcima: "+nomeAcima+"\n"+"aAcima: "+aAcima+"\n"+"pAcima: "+pAcima+" ("+pAcimaCheck+")");

			// habilita/desabilita seta

		}

	}

	function moveDown(i){

		var atual = i;
		var abaixo = Number(atual) + 1;

		// pega inputs linha atual
		var linhaAtual 			= document.getElementsByName('form[author][name]['+atual+']')[0].up(1);
		var linhaAtualInputs 	= linhaAtual.select('input');
		var linhaAtualAutor 	= linhaAtual.select('.authorName');

		// pega linha de baixo
		var linhaAbaixo = document.getElementsByName('form[author][name]['+abaixo+']');
		// pega inputs da linha de abaixo se existir
		if(linhaAbaixo.length>0){
			linhaAbaixo = linhaAbaixo[0].up(1);
			var linhaAbaixoInputs 	= linhaAbaixo.select('input');
			var linhaAbaixoAutor 	= linhaAbaixo.select('.authorName');
		}else{
			linhaAbaixo = false;
		}

		// so faz a troca, caso exista a linha de baixo
		if(linhaAbaixo != false){

			// Campos da linha ATUAL
			nomeAtual	= linhaAtualInputs[0].value;
			aAtual		= linhaAtualInputs[1].value;
			pAtual		= linhaAtualInputs[2].value;
			pAtualCheck	= linhaAtualInputs[2].checked;

			// Campos da linha ABAIXO
			nomeAbaixo	= linhaAbaixoInputs[0].value;
			aAbaixo		= linhaAbaixoInputs[1].value;
			pAbaixo		= linhaAbaixoInputs[2].value;
			pAbaixoCheck= linhaAbaixoInputs[2].checked;

			// Troca Dados
			linhaAtualAutor[0].innerHTML  	= nomeAbaixo;
			linhaAtualInputs[0].value	 	= nomeAbaixo;
			linhaAtualInputs[1].value  		= aAbaixo;
			linhaAtualInputs[2].value  		= pAbaixo;
			linhaAtualInputs[2].checked  	= pAbaixoCheck;

			linhaAbaixoAutor[0].innerHTML  	= nomeAtual;
			linhaAbaixoInputs[0].value 		= nomeAtual;
			linhaAbaixoInputs[1].value 		= aAtual;
			linhaAbaixoInputs[2].value 		= pAtual;
			linhaAbaixoInputs[2].checked 	= pAtualCheck;

			// debug
			//alert("nomeAtual: "+nomeAtual+"\n"+"aAtual: "+aAtual+"\n"+"pAtual: "+pAtual+" ("+pAtualCheck+")");
			//alert("nomeAbaixo: "+nomeAbaixo+"\n"+"aAbaixo: "+aAbaixo+"\n"+"pAbaixo: "+pAbaixo+" ("+pAbaixoCheck+")");

			// habilita/desabilita seta

		}

	}


	function updateSetas(){

		/**
		UP
		**/
		// indice
		var c = 0;
		var setasDown	= $$('#tbody_authors tr a.moveUp');

		$$('#tbody_authors tr a.moveUp').each(function(seta){
			//count
			++c;

			var onClick = seta.readAttribute('onClick');
			var disable = seta.hasClassName('disable');

			//debug
			//debug("["+c+"]\nonClick: "+onClick+"\nDisable: "+disable);

			if(c==1){
				// remove onClick
				(onClick!=null) ? seta.writeAttribute("onClick", null) :null;
				// desabilita
				(disable==false) ? seta.addClassName('disable') : null;
			}else{
				// add onClick
				(onClick==null) ? seta.writeAttribute("onClick", "moveUp('"+c+"');") :null;
				// habilita
				(disable==true) ? seta.removeClassName('disable') : null;
			}
		});



		/**
		DOWN
		**/
		// indice
		var d = 0;
		var setasDown	= $$('#tbody_authors tr a.moveDown');

		$$('#tbody_authors tr a.moveDown').each(function(seta){
			//count
			++d;

			var onClick = seta.readAttribute('onClick');
			var disable = seta.hasClassName('disable');

			//debug
			//debug("["+c+"]\nonClick: "+onClick+"\nDisable: "+disable);

			if(setasDown.length==d){
				// remove onClick
				(onClick!=null) ? seta.writeAttribute("onClick", null) :null;
				// desabilita
				(disable==false) ? seta.addClassName('disable') : null;
			}else{
				// add onClick
				(onClick==null) ? seta.writeAttribute("onClick", "moveDown('"+d+"');") :null;
				// habilita
				(disable==true) ? seta.removeClassName('disable') : null;
			}
		});

	}


	function checkAffs(campo){

		var retorna ='';

		campo.value.split(",").each(function(n){

			var ok;

			// remove espaços
			n = n.strip();

			// numero?
			if(isFinite(n) && n.length>0){
			    // nao ZERO
			    n = n.replace('0','');

			    // nao pode ser maior que o numero de AFFs
			    if($$('#table_aff #tbody_aff tr').length>=n){
			        // concatena com virgula
			        retorna += ((retorna.length>0)?",":"") + n;
			    }
			}
		});

		// atualiza valor no campo
		campo.value = retorna.replace(/,,/g,',');
	}

	function addAuthor(){

		// Valor do campo
		var newAuthor = $F('campo_author_name');

		// Inputs hiddem
		var dup = false
		$$('#tbody_authors tr input').each(function(campo){
			if(campo.value == newAuthor){
				dup = true;
			}
		});

		//verifica se tem valor
		if(newAuthor.length<=0){
			// Erro
			alert("This field is mandatory.");
		}
		//Verifica Duplicidade
		else if(dup == true){
			// Erro
			alert("This author name is already registered.");
		}else{

			var newId = $$('#tbody_authors tr').length + 1;
			var i = 10;

			var aff = ($$('#table_aff tbody tr').length<=1)? "1" : "";

			// HTML
			//var html = '<tr><td width="50"><a class="moveUp" href="#up" onClick="moveUp(\''+newId+'\');"><span>up</span></a><a class="moveDown" href="#down" onClick="moveDown(\''+newId+'\');"><span>down</span></a></td><td class="authorI" width="10">'+newId+'.</td><td width="270"><input type="hidden" name="form[author][name]['+newId+']" value="'+newAuthor+'" /><span class="authorName">'+newAuthor+'</span></td><td width="65" style="text-align:center;" class="aff_indice"><input type="text" name="form[author][a]['+newId+']" value="'+aff+'" class="AutAff" tabindex="'+(++i)+'" onblur="checkAffs(Event.element(event));" /></td><td width="30" style="text-align:center;"><input type="radio" name="form[author][p]" value="'+newId+'" tabindex="'+(++i)+'" class="AutAp" /></td><td><a class="x" href="#del" onClick="removeAuthor(Event.element(event));"><span>del</span></a></td></tr>'+"\n";
			var html = '<tr><td width="50"><a class="moveUp" href="#up" onClick="moveUp(\''+newId+'\');"><span>up</span></a><a class="moveDown" href="#down" onClick="moveDown(\''+newId+'\');"><span>down</span></a></td><td class="authorI" width="10">'+newId+'.</td><td width="270"><textarea name="form[author][name]['+newId+']" style="display:none;">'+newAuthor+'</textarea><span class="authorName">'+newAuthor+'</span></td><td width="65" style="text-align:center;" class="aff_indice"><input type="text" name="form[author][a]['+newId+']" value="'+aff+'" class="AutAff" tabindex="'+(++i)+'" onblur="checkAffs(Event.element(event));" /></td><td width="30" style="text-align:center;"><input type="radio" name="form[author][p]" value="'+newId+'" tabindex="'+(++i)+'" class="AutAp" /></td><td><a class="x" href="#del" onClick="removeAuthor(Event.element(event));"><span>del</span></a></td></tr>'+"\n";

			// Insere
			$('tbody_authors').insert(html); //Bottom

			//zebra
			zebraTable('table_authors');

			// atualiza setas
			updateSetas()

			// limpa campo
			$('campo_author_name').value = '';

			// exibe/esconde tabela
			showTable($('table_authors'));

		}

		// focus no campos
		$('campo_author_name').activate();


		// msgErro
		if($$('#tbody_authors tr').length>0){
			hideMsg($('campo_author_name_ERRO'));
		}

	}


	function removeAuthor(trObj){

		// remove
		trObj.up(1).remove();

		// Atualiza
		updateAuthors();

		// exibe/esconde tabela
		showTable($('table_authors'));

	}

	function updateAuthors(){

		// vars
		var i, newId  = 0;

		// recalcula Ids
		$$('#tbody_authors tr').each(function(linha){

			// seleciona inputs
			var inputs = linha.select('input');

			// Gera o novo ID
			++newId;

			// atualiza setas
			linha.select('.moveUp')[0].writeAttribute('onClick', 'moveUp(\''+newId+'\');');
			linha.select('.moveDown')[0].writeAttribute('onClick', 'moveDown(\''+newId+'\');');

			// atualiza indice
			linha.select('.authorI')[0].innerHTML = newId+".";
			// atualiza name
			inputs[0].writeAttribute('name', 'form[author][name]['+newId+']');
			// atualiza A
			inputs[1].writeAttribute('name', 'form[author][a]['+newId+']');
			// atualiza P
			inputs[2].value = newId;


			// Remove Zebra anterior
			linha.removeClassName('zebra_0');
			linha.removeClassName('zebra_1');

		}//function
		)//each

		// atualiza Zebra
		zebraTable('table_authors');

		// atualiza setas
		updateSetas()

	}


	function showTable(tableObj){

		var id = tableObj.id;
		var linhas = $$('#'+id+' tbody tr').length;

		//alert("showTable: "+linhas);

		// toggle tabela
		(linhas>0)? Element.show(tableObj) : Element.hide(tableObj);

		// Afiliacoes - indices
		//($$('#table_aff tbody tr').length>1)? $$('.aff_indice').each(Element.show) : $$('.aff_indice').each(Element.hide) ;

	}


	function addAffiliation(){

		// Valor do campo
		var newAff = $F('campo_aff_name');

		//verifica se tem valor
		if(newAff.length>0){

			var newId = $$('#tbody_aff tr').length + 1;

			// HTML
			//var html = '<tr><td width="6%" class="aff_indice">'+newId+'.</td><td width="88%"><input type="hidden" name="form[aff]['+newId+']" value="'+newAff+'" />'+newAff+'</td><td width="6%"><a class="x" href="#del" onClick="removeAffiliation(Event.element(event));"><span>del</span></a></td></tr>'+"\n";
			var html = '<tr><td width="6%" class="aff_indice">'+newId+'.</td><td width="88%"><textarea name="form[aff]['+newId+']" style="display:none;">'+newAff+'</textarea>'+newAff+'</td><td width="6%"><a class="x" href="#del" onClick="removeAffiliation(Event.element(event));"><span>del</span></a></td></tr>'+"\n";

			// Insere
			$('tbody_aff').insert(html); //Bottom

			//zebra
			zebraTable('table_aff');

			// limpa campo
			$('campo_aff_name').value = '';
		}else{
			// Erro
			alert("This field is mandatory");
		}

		// exibe/esconde tabela
		showTable($('table_aff'));

		// focus no campos
		$('campo_aff_name').activate();

		// msgErro
		if($$('#tbody_aff tr').length>0){
			hideMsg($('campo_aff_name_ERRO'));
		}

	}

	function removeAffiliation(trObj){
		// remove
		trObj.up(1).remove();

		// count
		var i, newId  = 0;

		// recalcula Ids
		var seletor = $$('#tbody_aff tr');
		seletor.each(function(linha){
				// Atualiza ID
				++newId;
				linha.firstDescendant().innerHTML = newId;
				linha.select('input')[0].writeAttribute('name', 'form[aff]['+newId+']')
				// Remove Zebra anterior
				linha.removeClassName('zebra_0');
				linha.removeClassName('zebra_1');
			}//function
		)//each

		// preenche os aff (vazio) dos autores
		if(seletor.length==1){
			$$('#tbody_authors tr input.AutAff').each(function(campo){
				campo.value = (campo.value.length==0)? 1 : campo.value;
			});
//			alert("aaaaa");
			checkAutAffs(1);
//			alert("bbbbb");
		}

		// atualiza Zebra
		zebraTable('table_aff');

		// exibe/esconde tabela
		showTable($('table_aff'));
	}




	/* Busca pelo email do preRegister */
	function findPreRegister(){

		//Dados
		var form = $('form_preRegister');

		//AJAX
		var url = siteUrl+'rpc/abstract_pre.php';
		var pars = form.serialize();
		var myAjax = new Ajax.Request( url, {
			method: 'post',
			parameters: pars,
			onLoading: function() {

				//Esconde TODAS msgs
				$$('.pr_frmMsg').each(Element.hide);

				//Load - exibe
				Element.show($('pr_load'));

			},//onLoading
			onComplete: function(originalRequest) {

				//Load - esconde
				/*while($('pr_load').visible()==true){
					Element.hide($('pr_load'));
				}*/
				Element.hide($('pr_load'));

				//Resposta da requisicao
				var resp = originalRequest.responseText;

				// transforma JSON em Objeto
				resp = resp.evalJSON(true);

				//debug(typeof(resp.pr));

				// Acoes
				switch(resp.pr){
					// email em branco
					case -1:
						//Exibe Msg
						Element.show($('pr_erro_mailEmpty'));
						// focus no campos
						$('pr_mail').activate();
					break

					// email nao encontrado
					case 0:
						//Exibe Msg
						Element.show($('pr_erro'));
						// focus no campos
						$('pr_mail').activate();
					break

					// email encontrado
					case 1:
						// exibe ABS anteriores
						if(resp.abs.length>0){
							var html="";
							var i=0;
							//loop
							resp.abs.each(function(abs){
								html += "<div style='width: 546px; padding-bottom: 30px;'><a href='"+abs.url+"' taget='_blank'><img src='"+imgUrl+"filetype_big_pdf.gif' alt='PDF File' align='left' />"+ abs.date +"<br />"+ abs.title +"</a></div>";
							});

							// Exibe
							$('abs_old_links').innerHTML = html;
							Element.show($('abs_old'));
						}


						if(resp.abs.length>=2){
							Element.hide($('preRegister_text'));
							Element.show($('abs_old_stop'));
						}else{
							//String do Email
							$('pr_mail_str').innerHTML = "<u>" + $F('pr_mail') + "</u>";
							//Copia Email
							$('campo_email').value = $F('pr_mail');
							// Exibe msg Ok e form
							showEtapa(2,1);
							// focus no form
							$('form_abstract').focusFirstElement();
						}

					break
				}


			},//onComplete
			onFailure: function() {

			}//onFailure
		});

	}// function





	/* Exibe o objeto que contem as instrucoes para preencher o campo */
	function showInstrucoes(){

		//Esconde Todas
		$A($$('.msgField')).each(Element.hide);

		// Campo: title
		valida('campo_title', limiteTitulo, 'title_left');

		// Campo: abstract
		valida('campo_abstract', limiteAbstract, 'abstract_left');

		// Campo: abstract
		Event.observe($('campo_imgFile'), 'click', function(){ showMsg($('campo_imgFile_INFO')); }, false);
		Event.observe($('campo_imgFile'), 'focus', function(){ showMsg($('campo_imgFile_INFO')); }, false);
		Event.observe($('campo_imgFile'), 'blur', function(){ hideMsg($('campo_imgFile_INFO')); }, false);

		// Campo: caption
		validaCaption(limiteCaption, 'imgCaption_left');

	}//function



	function valida(idCampo, limite, classRetorna){
		// Campo: abstract
		var campo	 	= $(idCampo);
		var msgInfo 	= $(idCampo+'_INFO');
		var msgOk 		= $(idCampo+'_OK');
		var msgErro 	= $(idCampo+'_ERRO');

			//Exibe msg Info
			Event.observe(campo, 'click', function(){ [msgOk, msgErro].each(hideMsg); showMsg(msgInfo); }, false);
			Event.observe(campo, 'focus', function(){ [msgOk, msgErro].each(hideMsg); showMsg(msgInfo); }, false);

			if(limite && classRetorna){

				//Esconder msg Info e valida
				Event.observe(campo, 'blur', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(validaCampo(campo)==true && limitaCampo(campo, limite, classRetorna)==true){
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}else{
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}
				}, false);
				Event.observe(campo, 'keyup', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(validaCampo(campo)==true && limitaCampo(campo, limite, classRetorna)==true){
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}else{
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}
				}, false);

			}// if
			else{

				//Esconder msg Info e valida
				Event.observe(campo, 'blur', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(validaCampo(campo)==true){
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}else{
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}
				}, false);
				Event.observe(campo, 'keyup', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(validaCampo(campo)==true){
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}else{
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}
				}, false);

			}// else

	}// function



	function validaCaption(limite, classRetorna){
		// Campo: abstract
		var campo	 	= $('campo_imgCaption');
		var msgInfo 	= $('campo_imgCaption_INFO');
		var msgOk 		= $('campo_imgCaption_OK');
		var msgErro 	= $('campo_imgCaption_ERRO');
		// by lpanebr:
		var campoFigura = $('campo_figura');

			//Exibe msg Info
			Event.observe(campo, 'click', function(){ [msgOk, msgErro].each(hideMsg); showMsg(msgInfo); }, false);
			Event.observe(campo, 'focus', function(){ [msgOk, msgErro].each(hideMsg); showMsg(msgInfo); }, false);


			if(limite){

				//Esconder msg Info e valida
				Event.observe(campo, 'blur', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || ($('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0) || (limitaCampo(campo, limite, classRetorna)==false)){
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}else{
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}
				}, false);
				Event.observe(campo, 'keyup', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || ($('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0) || (limitaCampo(campo, limite, classRetorna)==false)){
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}else{
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}
				}, false);
				//
				// lpanebr:
				// adicionado para dar erro tbm se apagar o conteudo campo_imgFile
				// e para setar o hidden campo_figura como '' ou 1 se tem ou nao fig
				//
				Event.observe($('campo_imgFile'), 'change', function(){
				    campoFigura.value = ($('campo_imgFile').value.length==0)?'':'1';
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || ($('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0) || (limitaCampo(campo, limite, classRetorna)==false)){
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}else{
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}
				}, false);

			}// if
			else{

				//Esconder msg Info e valida
				Event.observe(campo, 'blur', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || $('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0){
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}else{
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}
				}, false);
				Event.observe(campo, 'keyup', function(){
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || $('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0){
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}else{
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}
				}, false);
				//
				// lpanebr:
				// adicionado para dar erro tbm se apagar o conteudo campo_imgFile
				// e para setar o hidden campo_figura como '' ou 1 se tem ou nao fig
				//
				Event.observe($('campo_imgFile'), 'change', function(){
				    campoFigura.value = ($('campo_imgFile').value.length==0)?'':'1';
					[msgInfo, msgOk, msgErro].each(hideMsg);
					if(($('campo_imgFile').value.length>0 && $('campo_imgCaption').value.length==0) || $('campo_imgFile').value.length==0 && $('campo_imgCaption').value.length>0){
						campo.removeClassName(campoClassNameOk);
						campo.addClassName(campoClassNameErro);
						showMsg(msgErro);
					}else{
						campo.removeClassName(campoClassNameErro);
						campo.addClassName(campoClassNameOk);
						showMsg(msgOk);
					}
				}, false);

			}
	}




	/* Exibe msg de info/ok/erro do campo */
	function showMsg(msg){
		//new Effect.Opacity(msg, {duration:1, from:0.0, to:1.0});
		Element.show(msg);
	}

	/* Exibe msg de info/ok/erro do campo */
	function hideMsg(msg){
		//new Effect.Opacity(msg, {duration:1, from:1.0, to:0.0});
		Element.hide(msg);
	}


	/* Se conter a classe de campo OK remove-a e adiciona a classe de campo ERRO, se ja nao conter*/
	function erroClass(campo){
		//remove classe OK
		campo.removeClassName(campoClassNameOk);

		//add classe Erro, se ja nao tiver
		var add = true;
		campo.classNames().each(function(classe){
			if(classe==campoClassNameErro){
				add = false;
			}
		});
		if(add==true){
			campo.addClassName(campoClassNameErro);
		}

	}

	/* Se conter a classe de campo ERRO remove-a e adiciona a classe de campo OK, se ja nao conter*/
	function okClass(campo){
		//remove classe Erro
		campo.removeClassName(campoClassNameErro);

		//add classe Erro, se ja nao tiver
		var add = true;
		campo.classNames().each(function(classe){
			if(classe==campoClassNameOk){
				add = false;
			}
		});
		if(add==true){
			campo.addClassName(campoClassNameOk);
		}

	}



	/* Remove os espacos em branco para realizar algumas validacoes */
	function removeEspaco(str){
		var retorna = str;
		var re = /\s/g;
		if(str.search(re) != -1){
			retorna = str.replace(re, '');
		}
		return retorna;
	}


	/* Valida Campo se esta preenchido */
	function validaCampo(campo){
		var value = removeEspaco(campo.value);
		//if (value==null || value=="" || value.length==0){
//		alert(campo.limit);
		if (value.length==0){
			return false;
		}else{
			return true;
		}
	}




	function geraPDF(hash){

		//AJAX
		var url = uploadUrl+'rpc_abstract_pdf.php';
		var pars = '?hash='+hash;
		var myAjax = new Ajax.Request( url, {
			method: 'post',
			parameters: pars,
			onLoading: function() {

				// Status
				submitStatus("3l");

			},//onLoading
			onComplete: function(originalRequest) {

				//Resposta da requisicao
				var resp = originalRequest.responseText;

				//alert(resp+"\n"+typeof(resp));

				// transforma JSON em Objeto
				resp = resp.evalJSON(true);

				//alert(resp.erro+"\n"+typeof(resp.erro));

				// ERROS
				switch(resp.erro){
					// ERROS
					case "-1":
						alert('ERRO: hash not found.');
					break;
					case "-2":
						alert('ERRO: creating TEX file.');
					break;
					case "-3":
						alert('ERRO: writing to TEX file.');
					break;
					case "-4":
						alert('ERRO: closing TEX file.');
					break;
					case "-5":
						alert('ERRO: generating PDF file.');
					break;
					case "-6":
						alert('ERRO: geberationg LOG file.');
					break;

					// OK
					default:
						//
						// by lpanebr
						// para não mostrar a etapa3 se o cara abortou na geracao do pdf...
						// util pra quando trava nesse ponto
						//
						if(!pdfGenerationAborted) {
							// Status
							submitStatus("3");

							// Link do PDF
							$('PDF_link').writeAttribute('href', resp.pdf);
							// Link do LOG
							$('PDF_linkLog').writeAttribute('href', resp.log);

							// Arquivo PDF
							$('PDF_arquivo').innerHTML = resp.pdfName;

							// OK, exibe proximo passo!!
							showEtapa(3);
						}
						// resetar a variavel pdfGenerationAborted
						else {
							pdfGenerationAborted = false;
						}
					break;
				}


			},//onComplete
			onFailure: function() {

			}//onFailure
		});

	}// geraPDF()


	function figureUpdate(imgFile, hash){

		//alert('figureUpdate('+imgFile+', '+hash+')');

		//AJAX
		var url = siteUrl+'rpc/abstract_img.php';
		var pars = '?imgFile='+imgFile+'&hashImg='+hash;
		var myAjax = new Ajax.Request( url, {
			method: 'post',
			parameters: pars,
			onLoading: function() {

			},//onLoading
			onComplete: function(originalRequest) {

				//Resposta da requisicao
				var resp = originalRequest.responseText;

				//alert(resp);
				//alert(typeof(resp));

				switch(resp){
					case '1':
						// status
						submitStatus("2");
						// TEX e PDF
						geraPDF(hash);
					break;
					case '0':
						alert('ERROR while updating file name on register.');
					break;
					case '-1':
						alert('ERRO IMG Hash not found.');
					break;
				}

			},//onComplete
			onFailure: function() {

			}//onFailure
		});

	}// figureUpdate()

/* UPLOAD IMG*/

	function figureUpload(){
		// Status do Botao
		submitStatus("2l");
		//upload
		uploadFile($('form_img'), $('imgLoad'));
		// Status do Botao
		//submitStatus("2");
	}

	function uploadFile(formId, loadId) {

		// oculta erros
		$('imgErro1', 'imgErro2', 'imgErro3', 'imgErro4').each(Element.hide);

		// show Load
		//(loadId.visible()==false) ? Element.show(loadId) : null;

		// Submit Form
		$(formId).submit();

	}

	function hideUploadMsg(msgId){
		if(msgId){
			Element.hide($('imgErro'+msgId))
		}else{
			$$('.msgFigureErro').each(Element.hide);
		}
	}

	function finishUpload(imgFile,loadId) {
		//alert('finishUpload('+imgFile+', '+loadId+');');

		// oculta load
		Element.hide($(loadId));

		// atualiza registro
		figureUpdate(imgFile, $('campo_hash').value);
	}

	function uploadError(idErro, loadId) {

		//alert('uploadError('+idErro+', '+loadId+')');

		// oculta load
		hideStatus("2l")

		// show erro
		Element.show($('imgErro'+idErro));

		// scroll
		$('imgErro'+idErro).scrollTo();

	}

	function hideUpload(originalRequest) {
		var res = originalRequest.responseText;

		aux 	= res.split(":");
		id		= aux[0];
		oldId	= aux[1];
		html	= aux[2];

		idForm = 'fileForm_'+oldId;
		idFile = 'File_'+oldId;
		$(idForm).remove();
		$(idFile).innerHTML = html;
	}
