$(document).ready(function() {

    $(document).bind("manageRegistrationEvent", function() {
        $("#dialogDiv").load("php/Form.Registration.php", function() {

            var name = $("#regName");
            var email = $("#regEmail");
            var password = $("#regPass");
            var password2 = $("#regPass2");
            var conditions = $("#regCond");
            var allFields = $([]).add(name).add(email).add(password).add(password2);
            var passwords = $([]).add(password).add(password2);
            var emailStatusBox = $("#emailStatus");
            var passwordStatusBox = $("#passwordStatus");
            var passwordsEqualStatusBox = $("#passwordsEqualStatus");
            var nameStatusBox = $("#nameStatus");

            email.keyup(function(){
                if(verifyEmail(email)) {
                    setOKStatus(emailStatusBox);
                    email.removeClass("ui-state-error");
                } else {
                    setErrorStatus(emailStatusBox);
                }
            });

            passwords.keyup(function(){
                if(passwordEquals(password, password2)) {
                    setOKStatus(passwordsEqualStatusBox);
                    password.removeClass("ui-state-error");
                    password2.removeClass("ui-state-error");
                } else {
                    setErrorStatus(passwordsEqualStatusBox);
                }
            });

            password.keyup(function(){
                checkPasswordStrength(password, email, passwordStatusBox);
            });

            name.keyup(function(){
                if(verifyName(name)) {
                    setOKStatus(nameStatusBox);
                    name.removeClass("ui-state-error");
                } else {
                    setErrorStatus(nameStatusBox);
                }
            });

            conditions.change(function() {
                if(conditions.is(":checked")) {
                    conditions.removeClass("ui-state-error");
                }
            });
            
            var buttons = {};
            buttons[language.CLOSE] = function() {
                $("#dialogDiv").dialog("close");
            }
            buttons[language.SAVE] = function() {
                var valid = true;
                var errorMessage = "<ul>";
                allFields.removeClass("ui-state-error");

                if(!checkLength(email, 6, 80)) {
                    valid = false;
                    email.addClass("ui-state-error");
                    errorMessage = "<li style='text-align: left;'>" + language.WRONG_EMAIL_LENGTH + "</li>";
                }

                if(!checkRegexp(email, /^[^.-]+(\.[^.]+)*@([^.]+[.])+[a-z]{2,3}$/)) {
                    valid = false;
                    email.addClass("ui-state-error");
                    errorMessage += "<li>" + language.WRONG_EMAIL_ADDRESS + "</li>";
                }

                if(!checkLength(password, 4, 16)) {
                    valid = false;
                    password.addClass("ui-state-error");
                    errorMessage += "<li>" + language.WRONG_PASSWORD_LENGTH + "</li>";
                }

                if(!passwordEquals(password, password2)) {
                    valid = false;
                    password2.addClass("ui-state-error");
                    errorMessage += "<li>" + language.PASSWORDS_ARENT_EQUAL + "</li>";
                }

                if(!checkRegexp(password, /^([0-9a-zA-Z\-_\,\.\:\?\!\#\@])+$/)) {
                    valid = false;
                    password.addClass("ui-state-error");
                    errorMessage += "<li>" + language.WRONG_PASSWORD_CHARACTERS + "</li>";
                }

                if(!checkLength(name, 3, 16)) {
                    valid = false;
                    name.addClass("ui-state-error");
                    errorMessage += "<li>" + language.WRONG_NAME_LENGTH + "</li>";
                }

                if(!checkRegexp(name, /^(.+ .+)+$/)) {
                    valid = false;
                    name.addClass("ui-state-error");
                    errorMessage += "<li>" + language.NAME_MUST_CONTAIN_SPACE + "</li>";
                }

                if(!conditions.is(":checked")) {
                    valid = false;
                    conditions.addClass("ui-state-error");
                    errorMessage += "<li>" + language.YOU_MUST_AGREE_WITH_CONDITIONS + "</li>"
                }

                errorMessage += "</ul>";

                if (valid) {
                    $("#regForm").submit();
                } else {
                    jAlert(errorMessage, language.REGISTRATION_ALERTED_ERRORS);
                }
            }

            $(this).dialog({
                autoOpen: false,
                height: 600,
                width: 540,
                maxWidth: 660,
                minWidth: 540,
                minHeight: 350,
                maxHeight: 650,
                title: language.NEW_USER_REGISTRATION,
                modal: true,
                buttons: buttons,
                close: function() {
                    allFields.val("").removeClass("ui-state-error");
                    email.val("@");
                }
            });

            $(this).dialog("open");

            $(this).find("form").bind("submit", function() {
                var str = $(this).serialize();
                $.ajax({
                    type: "POST",
                    url: "php/Save.Registration.php",
                    data: str,
                    cache : false,
                    success: function(msg) {
                        $(this).ajaxComplete(function(event, request, settings) {
                            if(msg == "SUCCESSFUL") {
                                jAlert(language.SUCCESSFULLY_REGISTERED, language.REGISTRATION, function() {
                                    $("#dialogDiv").dialog("close");
                                });
                            } else if(msg == "MAIL") {
                                jAlert(language.SEND_MAIL_FAILED, language.REGISTRATION);
                            } else if(msg != null) {
                                if(msg == "1062") {
                                    jAlert(language.EMAIL_ALREADY_EXISTS, language.REGISTRATION_ALERTED_ERRORS);
                                } else {
                                    jAlert(language.ERROR_REGISTRATION + language.ADMIN_LINK, language.REGISTRATION_ALERTED_ERRORS);
                                }
                            }
                            msg = null;
                        });
                    }
                });
                return false;
            });
        });
    });

    $(document).bind("manageLostPasswordEvent", function() {

        $("#dialogDiv").load("php/Form.Lost.Password.php", function(){

            var buttons = {};
            buttons[language.CLOSE] = function() {
                $("#dialogDiv").dialog("close");
            }
            buttons[language.GENERATE_NEW_PASSWORD] = function() {
                $("#dialogDiv").find("form").submit();
            }

            $("#dialogDiv").dialog({
                autoOpen: false,
                height: 200,
                width: 450,
                maxWidth: 660,
                minWidth: 200,
                modal: true,
                buttons: buttons
            });

            $(this).dialog("open");
            
            $(this).find("form").bind("submit", function() {
                var str = $(this).serialize();
                $.ajax({
                    type: "POST",
                    url: "php/Send.Password.php",
                    data: str,
                    success: function(msg) {
                        $(this).ajaxComplete(function(event, request, settings) {
                            if(msg == "SUCCESSFUL") {
                                jAlert(language.PASSWORD_RESET_SUCCESSFUL_MESSAGE, language.PASSWORD_RESET, function() {
                                    $("#dialogDiv").dialog("close");
                                });
                            } else if(msg == "MAIL") {
                                jAlert(language.SEND_MAIL_FAILED, language.PASSWORD_RESET);
                            } else if(msg != null) {
                                jAlert(language.PASSWORD_RESET_ERROR, language.PASSWORD_RESET);
                            }
                            msg = null;
                        });
                    }
                });
                return false;
            });
        });
    });
    
});
