//deixa a function showLogin visível globalmente
var lShowLogin;
var gShowLogin = function(notifyUser){
	if(notifyUser){
		alert("Por favor efetue login para acessar esta funcionalidade.");
	}
	lShowLogin();
}

//poderia ter uma forma global de verificar se o usuario esta logado.
var isLoggedIn = function (){
	if(J('#boxUserLog #userGreeting').length != 0){
		return true;
	}
	return false;
}

J(function(){
	var header=J('#header'),v=100;

	// Exibir formulário Login
	var showLogin=function(){
		J('#frmSignUp').stop(true,true).fadeOut(v, function(){ J('#frmLogin').stop(true,true).fadeToggle(v); });
	}
	
	lShowLogin=showLogin;
	
	J('.btLogin,.btSignIn', header).click(function(){showLogin(); return false; });

	// Exibir formulário cadastre-se
	var showSignUp=function(e){
		J('#frmLogin').stop(true,true).fadeOut(v, function(){ J('#frmSignUp').stop(true,true).fadeToggle(v); });
	}
	J('.btSignUp', header).click(function(e){showSignUp(e); return false; });

	// Botão fechar de login/cadastre-se
	var closeLoginSignUp=function(lnk){
		lnk.parents('form:first').stop(true,true).fadeToggle(v);
	}
	J('.btClose', header).click(function(){closeLoginSignUp(J(this)); return false; });
	
	// Sign Out
	var signOut=function(lnk){

		J.get(lnk.attr('href'),function(data){

			I.deleteCookie();

			J('#boxUserLog').remove();
			J('#frmFind').before(data);

			J('.btSignUp', header).unbind('click');
			J('.btSignUp', header).bind('click',function(e){showSignUp(e); return false;});

			J('.btSignOut', header).unbind('click');
			J('.btSignOut').bind('click', function(){ signOut(J(this)); return false;} );

			J('.btLogin,.btSignIn', header).unbind('click');
			J('.btLogin,.btSignIn', header).bind('click',function(){showLogin(); return false;});

			J('.btClose', header).unbind('click');
			J('.btClose', header).bind('click',function(e){closeLoginSignUp(J(this)); return false;});
			
			J('#frmSignUp', header).unbind('submit');
			J('#frmSignUp', header).bind('submit', function(e) {signUp(J(this)); return false;});

			J('#frmLogin', header).unbind('submit');
			J('#frmLogin', header).bind('submit', function(e) {signIn(J(this)); return false;});
		});

		return false;
	}
	J('.btSignOut').click(function(){ signOut(J(this)); return false;});

	// Sign In
	var signIn = function(frm){
		J.ajax({
			type: 'POST',
			url: frm.attr('action'),
			data: frm.serialize(),
			success:function(e, x, o){
				var result=eval('('+ e +')');
				switch (result.status) {
					case 'validation':
						alert('erro validacao'+ e);
						/**var errors=result.errors;
						var msgs=['<li>Foram encontrados os seguintes erros no formulário:</li>'];
						for (var err in errors){
						    var fieldName=err,msg=errors[err],
						    field=J('[name='+ fieldName +']', frm);
						    field=field.attr('title');
						    field=(!field||field==undefined)?fieldName:field;
						    msgs.push('<li><strong>'+ field +'</strong> : '+ msg +'</li>');
						}
						// Exibe as mensagens de erro
						validation.html(msgs.join('')).show();
						I.reloadScroll();*/
						break;
					case 'success'  :
						J.cookie('JSESSIONID',result.JSESSIONID,{ path: '/', expires: 10 });
						J('.btLogin,#header .btSignUp:first,#frmLogin,#frmSignUp').remove();
						J('#frmFind').before(result.meta);
						J('.btSignOut').unbind('click');
						J('.btSignOut').bind('click', function(){signOut(J(this)); return false;});
						break;
					case 'error'    : alert(result.message); break;
					case 'exception': alert('Ocorreu um erro inesperado. Por favor tente novamente mais tarde.'); break;
				}
			},
			error:function(e, x, o){
				alert('Ocorreu um erro inesperado. Por favor tente novamente mais tarde.');
			}
		});
		return false;
	}
	J('#frmLogin').submit(function(){ signIn(J(this)); return false;});

	// Sign Up
	var signUp = function(frm){
		J.ajax({
			type: 'POST',
			url: frm.attr('action'),
			data: frm.serialize(),
			success:function(e, x, o){
				var result=eval('('+ e +')');
				switch (result.status) {
					case 'validation':
						alert('erro validacao'+ e);
						/**var errors=result.errors;
						var msgs=['<li>Foram encontrados os seguintes erros no formulário:</li>'];
						for (var err in errors){
						    var fieldName=err,msg=errors[err],
						    field=J('[name='+ fieldName +']', frm);
						    field=field.attr('title');
						    field=(!field||field==undefined)?fieldName:field;
						    msgs.push('<li><strong>'+ field +'</strong> : '+ msg +'</li>');
						}
						// Exibe as mensagens de erro
						validation.html(msgs.join('')).show();
						I.reloadScroll();*/
						break;
					case 'success'  : 
						var frmSignUp=J('#frmSignUp'), frmSignIn=J('#frmLogin'),email='[name="user.email"]',pass='[name="user.password"]';

						alert(J('[name="user.name"]',frmSignUp).val() + ', seu cadastro foi efetuado com sucesso!');
						
						// Copia email para o formulário de login e limpa o pass
						J(email,frmSignIn).val(J(email,frmSignUp).val());
						J(pass+',[name="user.passwordConfirmation"]',frmSignUp).val(''); J(pass,frmSignIn).val('');
						frmSignUp.stop(true,true).fadeOut(v, function(){ frmSignIn.stop(true,true).fadeToggle(v); });
						break;
					case 'error'    : alert(result.message); break;
					case 'exception': alert('Ocorreu um erro inesperado. Por favor tente novamente mais tarde.'); break;
				}
			},
			error:function(e, x, o){
				alert('Ocorreu um erro inesperado. Por favor tente novamente mais tarde.');
			}
		});
		return false;
	}
	J('#frmSignUp').submit(function(){ signUp(J(this)); return false;});

});
