userjs = $(window).load(function(){

    function openModal(modalID, xOffset, yOffset){
        xOffset = xOffset || 0;
        yOffset = yOffset || 0;
     		var id = modalID;
	
		//Get the screen height and width
		var maskHeight = $(document).height();
		var maskWidth = $(window).width();
	
		//Set height and width to mask to fill up the whole screen

		$('#mask').css({
                           'width':maskWidth,
                           'height':maskHeight, 

         });

		//transition effect		
		$('#mask').fadeIn(1000);	
		$('#mask').fadeTo("slow",0.8);
	
	
		//Get the window height and width
		var winH = $(window).height();
		var winW = $(window).width();
              
		//Set the popup window to center
        $(id).attr('position',  "absolute");
        var hid = (winH/2) - ($(id).height()/2) + yOffset;


		$(id).css('top',  hid);
		$(id).css('left', winW/2-$(id).width()/2) + xOffset;
	
		//transition effect
		$(id).fadeIn(1000);    
        var f = $("#pass-retrival-form");
        $("input[name='email']", f).show();
        $("#bt-send-retrival", f).show();
        $("label", f).show();
    }

    function closeModal(modalID){
		$('#mask, .window').hide();
        $(modalID).fadeOut(1000);
    }
    
    function closeModalAndOpen(toCloseID, toOpenID){
        $('#mask, .window').hide();
        $(toCloseID).fadeOut(1000, function(){
            openModal(toOpenID);
        });
    }

    function onRegisterReceived(data){
        
        var d = data;
        var redirURL = d.data.redirect;
        clearErrors($("#register-form"));
            if (redirURL){
             window.location = redirURL;   
        }else if (d.errors){
            for (var prop in d.errors ){
                $("."+ prop +"-error", "#register-form").text(d.errors[prop].join(","));
            } ; 
        }
    }

    function sendRegisterInfo(e){
       if (e)e.preventDefault()
       var f = $("#register-form");
       $.ajax({
                  type:"POST",
                  dataType: "json",
                  url:$("form.#register-form").attr('action'),
                  success: onRegisterReceived,
                  data: {
                      "name":$("input[name='name']", f).val(),
                      "email": $("input[name='email']", f).val(),
                      "password1":$("input[name='password1']", f).val(),
                      "password2":$("input[name='password2']", f).val()
                  }
       });
    }

   function onLoginReceived(data){
        
        var d = data;
        var node = d.data.node;
        

            if (node){

             $("#userbar").html(node);
             attachLogoutHandler();
                closeModal("#login_panel");
        }else if (d.errors){
            for (var prop in d.errors ){
                $("."+ prop +"-error", "#login-form").text(d.errors[prop].join(","));
            } ; 
        }
    }

    function clearErrors(form){
        $("span", form).each(function(){
           if ($(this).attr('class').indexOf('-error') > -1){
               $(this).text("");
           }
        });
    }

    function sendLoginInfo(e){
       if (e)e.preventDefault()
       var f = $("#login-form");
       clearErrors(f);
       $.ajax({
                  type:"POST",
                  dataType: "json",
                  url:$("form.#login-form").attr('action'),
                  success: onLoginReceived,
                  data: {
                      "email": $("input[name='email']", f).val(),
                      "password":$("input[name='password']", f).val()
                  }
       });
    }
    
    function onRetrivalReceived(data){
        isSendingRetrival = false;
        var f = $("#pass-retrival-form");
        var errors = data.errors;
        clearErrors(f);
        if (!errors){
            $("h3", f ).text("A sua senha foi enviada para seu email!");
            $("input", f).hide();
            $("#bt-send-retrival", f).hide();
            $("label", f).hide();
        }else {
            for (var prop in errors ){
                $("."+ prop +"-error", f).text(errors[prop].join(","));
            } ; 
        }
    }
    var isSendingRetrival = false;
    function sendRetrivalInfo(e){
       if (e)e.preventDefault()
        if (isSendingRetrival){
            return;
        }
        isSendingRetrival = true;
       var f = $("#pass-retrival-form");
       $.ajax({
                  type:"POST",
                  dataType: "json",
                  url:f.attr('action'),
                  success: onRetrivalReceived,
                  data: {
                      "email": $("input[name='email']", f).val(),
                  }
       });
    }

     function sendResetInfo(e){
       if (e)e.preventDefault()
       var f = $("#pass-reset-form");
       $.ajax({
                  type:"POST",
                  dataType: "json",
                  url:f.attr('action'),
                  success: onResetReceived,
                  data: {
                      "code": $("input[name='code']", f).val(),
                      "password1":$("input[name='password1']", f).val(),
                      "password2":$("input[name='password2']", f).val()
                  }
       });
    }

   function onResetReceived(data){
        
        var d = data;
        var node = d.data.node;
        clearErrors($("#pass-reset-form"));

            if (node){

             $("#userbar").html(node);
             attachLogoutHandler();
                closeModal("#pass_reset_panel");
        }else if (d.errors){
            for (var prop in d.errors ){
                $("."+ prop +"-error", f).text(d.errors[prop].join(","));
            } ; 
        }
    }
                        
    function doLogout(){
        $.ajax({
                  type:"POST",
                  dataType: "json",
                  url: $('#bt-logout').attr('href'),
                  success: function(data){
                      $("#userbar").html(data.data.node);
                      attachLoginHandler();
                  },

       });
        
    }

    function sendResetInfo(e){
       if (e)e.preventDefault()
       var f = $("#pass-reset-form");
       $.ajax({
                  type:"POST",
                  dataType: "json",
                  url:f.attr('action'),
                  success: onResetReceived,
                  data: {
                      "code":$("input[name='code']", f).val(),
                      "password1":$("input[name='password1']", f).val(),
                      "password2":$("input[name='password2']", f).val()
                  }
       });
    }

   function onResetReceived(data){
        
        var d = data;
        var node = d.data.node;
        clearErrors($("#pass-reset-form"));

            if (node){

             $("#userbar").html(node);
             attachLogoutHandler();
             closeModal("#pass_reset_panel");
        }else if (d.errors){
            for (var prop in d.errors ){
                $("."+ prop +"-error", "#pass-reset-form").text(d.errors[prop].join(","));
            } ; 
        }
    }
    
    function attachLogoutHandler(){
        
        $("#bt-logout").click(function(e){
                                  e.preventDefault();
                                  doLogout();
                              });
    }

    function addEnterToForm(formSel, callback){
        $(formSel).keypress(function(e) {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
                callback();
                return false;
            }
            else
                return true;
        });
    }

    function attachLoginHandler(){
        

    $("#bt-register,.bt-register").click(function(e){
        e.preventDefault();
                                             
        closeModalAndOpen("#login_panel", "#registro_panel");
    });
    $("#bt-login").click(function(e){
        e.preventDefault();
        openModal("#login_panel");
    });
    
    $("#bt-login-entidade").click(function(e){
        e.preventDefault();
        openModal("#login_panel");
    });


    $("#bt-send-register").click(sendRegisterInfo);
    $("a.close", "#registro_panel").click(function(e){
        e.preventDefault();
        closeModal("#registro_panel");
    });

    $("#bt-show-reset-pass").click(function(e){
       openModal("#pass_reset_panel");
       e.preventDefault();                                       
    });
    $("a.close", "#pass_reset_panel").click(function(e){
        e.preventDefault();
        closeModal("#pass_reset_panel");
    });    

    $("#bt-send-login").click(sendLoginInfo);
        addEnterToForm("#login-form", sendLoginInfo)    ;
    $("a.close", "#login_panel").click(function(e){
        e.preventDefault();
        closeModal("#login_panel");
    
    });
    $("#bt-send-retrival").click(sendRetrivalInfo);
    $(".bt-show-pass-retrival").click(function(e){
        e.preventDefault();
        closeModalAndOpen("#login_panel", "#retrival_panel");
        
    });
    $("a.close", "#retrival_panel").click(function(e){
        e.preventDefault();
        closeModal("#retrival_panel");
    });    
    $("#bt-send-reset").click(sendResetInfo);
    }

    function isLoggedIn(){
        
        return $("#logged-in-profile").length > 0;
    }

    attachLogoutHandler();
    attachLoginHandler();
    window.showLoginPanel = function (){
        openModal("#login_panel");        
    };
    window.openModal = openModal;
    window.closeModal = closeModal;
    window.isLoggedIn = isLoggedIn;

    // is this a password reset ?
    var query = window.location.search.substring(1);
	var vars = query.split("&");
    var params = {};

	for (var i=0;i<vars.length;i++) {
	    var pair = vars[i].split("=");
	    params[pair[0]] =  pair[1];
	}
     function isPassReset(){
       return params.pass_code ||  false;

    }
    function showPassReset(code){
      
      var f = ("#pass-reset-form");
      if (code){
         $("input[name='code']", f).val(code);    
      }
      openModal("#pass_reset_panel");
    }
    
    function initPassReset(){
        var code  = isPassReset();
        if (code){
            showPassReset(code);
        }
    }
    initPassReset();
    window.closeModalAndOpen = closeModalAndOpen;
});



