/* Componenets behaviour */
var compBehaviour = function() {
    $(".c9-button").hover(
        function() {
            $(this).addClass("btn-over");
        },
        function() {
            $(this).removeClass("btn-over");
        }
    ).mouseup(function() {
        $(this).removeClass("btn-down");
    }).mousedown(function() {
        $(this).addClass("btn-down");
    });

    $(".c9-checkbox").click(function() {
       $(this).toggleClass('cbx-checked');
    }).keypress(function(event) {
        if (event.which == 32) {
            $(this).toggleClass('cbx-checked'); 
        }
    });

    /* Elements behaviour */

    $("#registerBtn").click(function(){
        $("#regForm").valid();
        var onlyFirst = true;
        $("div.error").each(function(index){
            if ($(this).is(':visible')) {
                if (onlyFirst) {
                    onlyFirst = false;
                    $(this).parent().parent().addClass("txt-error");
                    $("#lbl_" + $(this).parent().find("input").attr("id")).addClass("lbl-error");
                }
                else {
                    $(this).css("display", "none");
                }
            }
            else {
                $(this).parent().parent().removeClass("txt-error");
                $("#lbl_" + $(this).parent().find("input").attr("id")).removeClass("lbl-error");
            }
        });
    });
    
    $("#btnActivate").click(function(){
        $("#activateForm").valid();
        var onlyFirst = true;
        $("div.error").each(function(index){
            if ($(this).is(':visible')) {
                if (onlyFirst) {
                    onlyFirst = false;
                    $(this).parent().parent().addClass("txt-error");
                    $("#lbl_" + $(this).parent().find("input").attr("id")).addClass("lbl-error");
                }
                else {
                    //$(this).css("display", "none");
                }
            }
            else {
                $(this).parent().parent().removeClass("txt-error");
                $("#lbl_" + $(this).parent().find("input").attr("id")).removeClass("lbl-error");
            }
        });
    });
    
    $('.inpField').bind({
        keyup: function(){
            if($(this).parent().parent().hasClass('txt-error') && app.validateRegister.element($(this))) {
                $('.txt-error').removeClass('txt-error');
                $('.lbl-error').removeClass('lbl-error');
            }
        }
    });
};
$(document).ready(function() {
    compBehaviour();

    if(jQuery.validator) {
        jQuery.validator.addMethod("checkUsername", function(value, element) {
            return /^[0-9a-z]{1}[0-9a-z-_]{1,61}$/i.test(value);
        }, "");
    
        jQuery.validator.addMethod("checkPassword", function(value, element) {
            return /^[0-9a-z]{3,20}$/i.test(value);
        }, "");
        
        jQuery.validator.addMethod("checkEmail", function(value, element) {
            return /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-_]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i.test(value);
        }, "");
    
        jQuery.validator.addMethod("checkUsernameEmail", function(value, element) {
            return /^[0-9a-z-_]{2,20}$/i.test(value) || /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-_]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i.test(value);
        }, "");
    
        app.validateRegister = $("#regForm").validate({
            errorElement: "div",
            onkeyup: false,
            focusCleanup: true,
            rules : {
                inpUsername: {
                    required      : true,
                    checkUsername : true
                },
                inpEmail: {
                    required   : true,
                    checkEmail : true
                },
                inpEmail2: {
                    required   : true,
                    checkEmail : true,
                    equalTo    : "#inpEmail"
                }
            },
            messages: {
                inpUsername : {
                    required: '<div class="errorboxContent"><span>Username is required</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>',
                    checkUsername: '<div class="errorboxContent"><span>Invalid username. Please use only letters, numbers, underscores (_), dashes (-) and more than one characters</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>'
                },
                inpEmail    : {
                    required: '<div class="errorboxContent"><span>Please enter your email address</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>',
                    checkEmail: '<div class="errorboxContent"><span>You need a valid email address</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>'
                },
                inpEmail2    : {
                    required: '<div class="errorboxContent"><span>Please confirm your email address</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>',
                    checkEmail: '<div class="errorboxContent"><span>You need a valid email address</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>',
                    equalTo: '<div class="errorboxContent"><span>Email addresses does not match</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>'
                }
            }/*,
            errorPlacement: function(error, element) {
                    alert(error)
            }*/
        });
    
        app.validateSignin = $("#signinForm").validate({
            errorElement: "div",
            onkeyup: false,
            focusCleanup: true,
            rules : {
                inpUsernameEmail: {
                    required           : true,
                    checkUsernameEmail : true
                },
                inpPassword : {
    //                checkPassword : true,
                    required : true
                }
            },
            messages: {
                inpUsernameEmail : '<div class="errorboxContent"><span>Username or email is required</span></div>',
                inpPassword      : '<div class="errorboxContent"><span>Please type a password</span></div>'
            }
        });
    
        app.validateForget = $("#resetPasswordForm").validate({
            errorElement: "div",
            onkeyup: false,
            focusCleanup: true,
            rules : {
                inpResetPassword : {
    //                checkPassword : true,
                    required : true
                }
            },
            messages: {
                inpResetPassword : '<div class="errorboxContent"><span>Username or email is required</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>'
            }
        });
        
        app.validateActivate = $("#activateForm").validate({
            errorElement: "div",
            onkeyup: false,
            focusCleanup: true,
            rules : {
                inpPassword1: {
                    required  : true
                },
                inpPassword2: {
                    required: true,
                    equalTo : "#inpPassword1"
                }
            },
            messages: {
                inpPassword1 : '<div class="errorboxContent"><span>Password is required</span></div>',
                inpPassword2 : {
                    required: '<div class="errorboxContent"><span>Please confirm your password</span></div>',
                    equalTo: '<div class="errorboxContent"><span>Passwords do not match</span></div>'
                }
            }/*,
            errorPlacement: function(error, element) {
                    alert(error)
            }*/
        });
        
        app.validateResendConfirmation = $("#activationlinkForm").validate({
            errorElement: "div",
            onkeyup: false,
            focusCleanup: true,
            rules : {
                inpResendConfirmation : {
                    checkUsernameEmail : true,
                    required : true
                }
            },
            messages: {
                inpResendConfirmation : '<div class="errorboxContent"><span>Username or email is required</span></div><div class="errorbox_ctl"> </div><div class="errorbox_ctr"><a class="close" href="javascript:void(0)" onclick="app.util.closeErrorbox(this);"> </a></div><div class="errorbox_cbl"> </div><div class="errorbox_cbr"> </div><div class="errorbox_bt"><div class="errbox_arrow"> </div></div><div class="errorbox_bl"> </div><div class="errorbox_br"> </div><div class="errorbox_bb"> </div>'
            }
        });
        
        $('form').keypress(function(event) {
            if (event.which == 13) {
                $(this).find(".submit").click();
            }
        });
    }
}); 
