/**
 * Register object
 * manage user registration 
 *
 * @author nipal
 */

var Register =
{
    // id used in dom
    idDom :
    {
        form : "RegisterForm",
        login : "RegisterLogin",
        password : "RegisterPassword",
        passwordCheck : "RegisterPasswordCheck",
        email : "RegisterEmail",
        captcha : "RegisterCaptcha",
        captchaImage : "RegisterCaptchaImage",
        submit : "RegisterSubmit"
    },
        
    idDomError : 
    {
        login : "RegisterLoginError",
        password : "RegisterPasswordError",
        passwordCheck : "RegisterPasswordCheckError",
        email : "RegisterEmailError",
        captcha : "RegisterCaptchaError",
        submit : "RegisterSubmitError"
    },
        
    // check if all inputs are correct, otherwise update with error messages
    // @param	boolean		false if check only
    // @return	void
    check : function(submit)
    {

        // serialize form to submit 
        var param = $(Register.idDom.form).serialize(true);
	        
        // check only by default
        param.submit = (submit) ? submit : false;
            
        System.ajax("/json/user/register/register",
        {
            method : "post",
                parameters : { json : Object.toJSON(param) },
                onSuccess : Register.respond
                    });
    },
        
    // submit form and attempt to create an user
    // @param	void
    // @return	void
    valid : function()
    {
        $(Register.idDom.submit).toggle();
        System.loading($(Register.idDomError.submit));
        Register.check(true);
    },
        
    // callback function to check ajax response
    // @param	object		ajax response filled by prototype.js
    // @return	void
    respond : function(r)
    {
        // create hashmap from all error fields and clear them
        $H(Register.idDomError).each(function(pair)
            {
                $(pair.value).innerHTML = "";
            });

        // evalute ajax response to json with fail-safe check
        response = r.responseText.evalJSON(true);
            
        // show errors
        if (response.error)
        {
            $H(response.error).each(function(pair)
            {
                System.status($(pair.key), 2);
                $(pair.key).insert(pair.value);
            });

            $("RegisterCaptchaReload").onclick();
        }
            
        // if all inputs are validated
        if (response.success && response.submit)
        {
		        
            $(Register.idDomError.submit).innerHTML = response.message;
            $A($$("input")).each(function(element)
            {
                element.disabled = "disabled";
                element.style.border = "none";
            });
            System.disable($("RegisterCaptchaReload"));
            new Effect.Fade($(Register.idDom.form), { to : 0.4 });
            // redirection
            $("RegisterRedirect").show();
            return;
        }
        else
        $(Register.idDom.submit).show(); // show submit button again since submit has failed
	        
        // reload captcha to avoid re-use session variable
        Captcha.reload($(Register.idDom.captchaImage), $(Register.idDom.captcha));
    },

    
    aftersearch : function()
    {        
        System.register(Register.rules);
    },

    mentor : function()
    {
        var id = this.href.split("/").pop();

        $("RegisterMentorName").update(this.innerHTML);
        $("RegisterMentorId").value = id;

        Search.close();

        return false;
    },


    rules :
    {
        ".BV_register_mentor" : function(element) { element.onclick = Register.mentor; },

        "#RegisterSubmit" : function(element)
        {
            element.onclick = function() { Register.valid(); }
        }
    }
};




var Activate = 
{
    submit : function()
    {
        $("ActivateSubmit").toggle();
        System.loading($("ActivateSubmitMessage"));
            
        // serialize form to submit
        var param = $("ActivateForm").serialize(true);

        System.ajax("/json/user/register/activate",
        {
            method : "post",
                parameters : { json : Object.toJSON(param) },
                onSuccess : Activate.respond
                });
        return false;
    },

    respond : function (r)
    {
        response = r.responseText.evalJSON(true);

        $("ActivateSubmitMessage").update(response.message);

        if (response.success)
        {
            new Effect.Fade($("ActivateForm"));
            $("ActivateRedirect").show();
        }
        else
        {
            $("ActivateSubmit").show();
        }
    },

    rules :
    {
        ".BV_register_activate" : function(element) { element.onclick = Activate.submit; }
    }
};


System.register(Register.rules);
System.register(Activate.rules);
