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

//alert('Inicio do Arquivo: registration.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";




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 e Validacao (observers)
	showInstrucoes();

	// Submit
	Event.observe($('botao_submit'), 'click', function(event){ hideStatus(); readySubmit(); }, false);

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

}//inicial


	function showForm(){

		$('registration_pre').hide();

		$('registration_form').show();

		if($('pr_no').visible()==true){
			$('pr_no').hide();
			if($('campo_nome').value.length==0){
				$('campo_nome').activate();
			}
		}
	}


	function outroEmail(){
		$('pr_mail').value = '';
		$('pr_mail').activate();
		$('pr_no').hide();
	}




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

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

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


		// valida email
		if(validaEndEmail($('pr_mail'))==false){
			$('pr_erro').show();
		}else{

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

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

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

					//Load - esconde
					Element.hide($('pr_load'));

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

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

					/**
					* Acoes
					*/
					var showForm = false;

					// email em branco
					if(resp.erro==1){

						//Exibe Msg
						$('pr_erro').show();
						// focus no campos
						$('pr_mail').activate();
					}

					// email nao encontrado
					else if(resp.id=="0"){
						//Exibe Msg
						$('pr_no').show();

						//popula form
						$('campo_email').value = $F('pr_mail');
					}

					// email encontrado, vai pre Registration
					else if(resp.id>"0" && resp.reg=="0"){
						populaAndShowForm(resp);
					}

					// já registrado
					else if(resp.id>"0" && resp.reg=="1"){

						//alert(resp.situacao+"\n"+typeof(resp.situacao));
						//resp.situacao = "null";

						switch(resp.situacao){

							// Ok
							case "1":
								var situacao = "payment successfully processed. <strong>Welcome to PASPS-V!</strong>";
							break;

							// falha
							case "0":
								var situacao = "<strong>Payment failed.</strong> You will soon be contacted!"
							break;

							//processando
							case "-1":
								var situacao = "<strong>Pending</strong>, waiting for payment confirmation."
							break;

							// nao concluido
							case "null":
								var situacao = "registration not finished. <a href='#resume' onclick='populaAndShowForm("+'{"name": "'+escape(resp.name)+'", "email": "'+escape(resp.email)+'", "inst": "'+escape(resp.inst)+'", "rua": "'+escape(resp.rua)+'", "comp": "'+escape(resp.comp)+'", "cidade": "'+escape(resp.cidade)+'", "uf": "'+escape(resp.uf)+'", "cep": "'+escape(resp.cep)+'", "pais": "'+escape(resp.pais)+'", "sex": "'+resp.sex+'", "estu": "'+resp.estu+'"}'+");'>Resume your registration now</a>."
							break;

							// padrão
							default:
								var situacao = "<span style='color:red'>ERROR, it was not possible to retrieve your pre-registration data. <strong>Please notify the <a href='../contact.php'>webmaster</a>.</strong></span>";
							break;

						}

						//Exibe Msg
						$('reg_already').show();
						$('reg_already_nome').innerHTML 	= resp.name;
						$('reg_already_situacao').innerHTML = situacao;

					}

					// bug
					else{
						alert('Erro inesperado!!!');
					}

				},//onComplete
				onFailure: function() {

				}//onFailure
			});

		}// ELSE: valida email

	}// function


	function populaAndShowForm(resp) {

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

		// popula form
		$('campo_nome').value = unescape(resp.name);
		$('campo_email').value = unescape(resp.email);
		$('campo_inst').value = unescape(resp.inst);

		$('campo_endereco').value 	= unescape(resp.rua);
		$('campo_comp').value 	= unescape(resp.comp);
		$('campo_cidade').value = unescape(resp.cidade);
		$('campo_uf').value 	= unescape(resp.uf);
		$('campo_cep').value 	= unescape(resp.cep);
		$('campo_pais').value 	= unescape(resp.pais);



		(resp.sex=="male" || resp.sex=="M")? $('campo_sexoM').checked=true : ((resp.sex=="female" || resp.sex=="F")? $('campo_sexoF').checked=true : null);
		(resp.estu=="1")? $('campo_estudante1').checked=true : ((resp.estu=="0")? $('campo_estudante0').checked=true : null);

		// show msg
		$('pr_mail_str').innerHTML = unescape(resp.email);
		$('pr_ok').show();
		$('registration_pre').hide();
		$('registration_form').show();

	}












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

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

		var erro = false;

		// Valida: nome
		if(validaCampo($('campo_nome'))==false){
			//show erro
			$('campo_nome').addClassName(campoClassNameErro);
			showMsg($('campo_nome_ERRO'));
			//erro
			erro = true;
		}

		// Valida: email
		if(validaEndEmail($('campo_email'))==false){
			//show erro
			$('campo_email').addClassName(campoClassNameErro);
			showMsg($('campo_email_ERRO'));
			//erro
			erro = true;
		}

		// Valida: inst
		if(validaCampo($('campo_inst'))==false){
			//show erro
			$('campo_inst').addClassName(campoClassNameErro);
			showMsg($('campo_inst_ERRO'));
			//erro
			erro = true;
		}

		// Valida: endereco
		if(validaCampo($('campo_endereco'))==false){
			//show erro
			$('campo_endereco').addClassName(campoClassNameErro);
			showMsg($('campo_endereco_ERRO'));
			//erro
			erro = true;
		}

		/*// Valida: complemento
		if(validaCampo($('campo_comp'))==false){
			//show erro
			$('campo_comp').addClassName(campoClassNameErro);
			showMsg($('campo_comp_ERRO'));
			//erro
			erro = true;
		}*/

		// Valida: cidade
		if(validaCampo($('campo_cidade'))==false){
			//show erro
			$('campo_cidade').addClassName(campoClassNameErro);
			showMsg($('campo_cidade_ERRO'));
			//erro
			erro = true;
		}

		// Valida: estado
		if(validaCampo($('campo_uf'))==false){
			//show erro
			$('campo_uf').addClassName(campoClassNameErro);
			showMsg($('campo_uf_ERRO'));
			//erro
			erro = true;
		}

		// Valida: cep
		if(validaCampo($('campo_cep'))==false){
			//show erro
			$('campo_cep').addClassName(campoClassNameErro);
			showMsg($('campo_cep_ERRO'));
			//erro
			erro = true;
		}

		// Valida: pais
		if(validaCampo($('campo_pais'))==false){
			//show erro
			$('campo_pais').addClassName(campoClassNameErro);
			showMsg($('campo_pais_ERRO'));
			//erro
			erro = true;
		}

		// Valida: sexo
		if($('campo_sexoM').checked==false && $('campo_sexoF').checked==false){
			//show erro
			$('campo_sexoM').addClassName(campoClassNameErro);
			$('campo_sexoF').addClassName(campoClassNameErro);
			showMsg($('campo_sexo_ERRO'));
			//erro
			erro = true;
		}

		// Valida: estudante
		if($('campo_estudante1').checked==false && $('campo_estudante0').checked==false){
			//show erro
			$('campo_estudante1').addClassName(campoClassNameErro);
			$('campo_estudante0').addClassName(campoClassNameErro);
			showMsg($('campo_estudante_ERRO'));
			//erro
			erro = true;
		}

		// Valida: questao
		if(validaCampo($('campo_questao'))==false){
			//show erro
			$('campo_questao').addClassName(campoClassNameErro);
			showMsg($('campo_questao_ERRO'));
			//erro
			erro = true;
		}



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

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

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

			// inverte
			erros.reverse();

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

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

	}








	function submitForm(){

	/* ENVIA DADOS */

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

		//AJAX
		var url = conUrl+'rpc/registration.php';
		var pars = form.serialize();
		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;

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

				//alert(typeof(resp));

				// ERROS
				if(resp.valido==0){

					$$('#'+form.id+' input').each(function(campo){
						var campoId = (campo.id).replace(/campo_/, "").replace(/0/, "").replace(/1/, "");

						if(eval('resp.erros.'+campoId)==1){
							if(campoId=="sexo"){
								$('campo_sexoM').removeClassName(campoClassNameOk);
								$('campo_sexoF').removeClassName(campoClassNameOk);
								$('campo_sexoM').addClassName(campoClassNameErro);
								$('campo_sexoF').addClassName(campoClassNameErro);
								hideMsg($('campo_sexo_OK'));
								showMsg($('campo_sexo_ERRO'));
							}
							else if(campoId=="estudante"){
								$('campo_estudante1').removeClassName(campoClassNameOk);
								$('campo_estudante0').removeClassName(campoClassNameOk);
								$('campo_estudante1').addClassName(campoClassNameErro);
								$('campo_estudante0').addClassName(campoClassNameErro);
								hideMsg($('campo_estudante_OK'));
								showMsg($('campo_estudante_ERRO'));
							}else{
								campo.removeClassName(campoClassNameOk);
								campo.addClassName(campoClassNameErro);
								hideMsg($(campo.id+'_OK'));
								showMsg($(campo.id+'_ERRO'));
							}
						}

					});
					//email duplicado
					if(resp.erros.emailDup==1){
						$('campo_email').removeClassName(campoClassNameOk);
						$('campo_email').addClassName(campoClassNameErro);
						hideMsg($('campo_email_OK'));
						hideMsg($('campo_email_ERRO'));
						showMsg($('campo_email_ERRODUP'));
					}

					hideStatus("1l");

				}
				// OK
				else if(resp.valido==1){
					
					// ID
					$('orderid').value = resp.orderid;
					
					// Insere HTML no Form
					if(resp.html){
						if(resp.html.length>0){
							setInnerHTML($('dadosBr'), resp.html)
							//$('orderid').insert(resp.html);
							//$('orderid').insert(unescape(resp.html));
						}
					}

					// Status
					submitStatus("1");

					submitStatus("2l");

					// submit
					form.submit();

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

			},//onComplete
			onFailure: function() {

			}//onFailure
		});


	}// submitForm()


	function submitStatus(cod){

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

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

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

	}

	function hideStatus(){
		$$('.submitStatus').each(Element.hide);
	}








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

		//Esconde Todas
		$$('.msgField').each(Element.hide);
		// exibe as infos
		//$$('.info').each(Element.show);

		// Campo: Nome
		valida('campo_nome');
		// Campo: Email
		validaEmail('campo_email');
		// Campo: Inst
		valida('campo_inst');
		// Campo: endereco
		valida('campo_endereco');
		// Campo: complemento
		//valida('campo_comp');
		// Campo: cidade
		valida('campo_cidade');
		// Campo: UF
		valida('campo_uf');
		// Campo: CEP
		valida('campo_cep');
		// Campo: Pais
		valida('campo_pais');
		// Campo: Sexo
		validaRadios('campo_sexo');
		// Campo: Estudante
		validaRadios('campo_estudante');
		// Campo: Questao
		valida('campo_questao');

	}//function



	function valida(idCampo){

		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);

			//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);

	}// function

	function validaEmail(idCampo){

		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);

			//Esconder msg Info e valida
			Event.observe(campo, 'blur', function(){
				[msgInfo, msgOk, msgErro].each(hideMsg);
				if(validaEndEmail(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(validaEndEmail(campo)==true){
					campo.removeClassName(campoClassNameErro);
					campo.addClassName(campoClassNameOk);
					showMsg(msgOk);
				}else{
					campo.removeClassName(campoClassNameOk);
					campo.addClassName(campoClassNameErro);
					showMsg(msgErro);
				}
			}, false);

	}// function

	function validaRadios(idCampo){

		var campo	 	= $(idCampo);
		var msgInfo 	= $(idCampo+'_INFO');
		var msgOk 		= $(idCampo+'_OK');
		var msgErro 	= $(idCampo+'_ERRO');

		var seletor = $$('#'+idCampo+' input');

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

			//Esconder msg Info e valida
			Event.observe(campo, 'click', function(){
				[msgInfo, msgOk, msgErro].each(hideMsg);
				if(seletor.findAll(function(campo) { return campo.checked==true; }).length==1){
					seletor.invoke('removeClassName', campoClassNameErro)
					seletor.invoke('addClassName', campoClassNameOk)
					showMsg(msgOk);
				}else{
					seletor.invoke('removeClassName', campoClassNameOk)
					seletor.invoke('addClassName', campoClassNameErro)
					showMsg(msgErro);
				}
			}, false);
			Event.observe(campo, 'mouseout', function(){
				[msgInfo, msgOk, msgErro].each(hideMsg);
				if(seletor.findAll(function(campo) { return campo.checked==true; }).length==1){
					seletor.invoke('removeClassName', campoClassNameErro)
					seletor.invoke('addClassName', campoClassNameOk)
					showMsg(msgOk);
				}else{
					seletor.invoke('removeClassName', campoClassNameOk)
					seletor.invoke('addClassName', campoClassNameErro)
					showMsg(msgErro);
				}
			}, false);

	}// function



	/* 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;
		}
	}

	/* Valida endereco de Email */
	function validaEndEmail(campo){
		if(validaCampo(campo)==false){
			debug("campo: "+campo.id+"\n (VAZIO)");
			return false;
		}else{
			debug("campo: "+campo.id+"\n (VALIDANDO)");
			var value = campo.value;
			var re = /^[\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}\])$/;
			// regex acima não valida mkoba@sr.t.u-tokyo.ac.jp
			// troquei pela combinacao abaixo: http://www.webreference.com/js/column5/form.html
			var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
			var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid
			if (!reg1.test(value) && reg2.test(value)) {
				return true;
			} else {
				return false;
			}
		}
	}