// user ID and data for later use
var uid = new Number();
var userData = new Object();

var loginWinHandler = function() {
    $("#contentWrapper").slideToggle("fast");
    $("#loginWindow").slideToggle("fast");
    if ($(this).attr('rel') == 'signed') {
        initProfile();
    }
};

var showUpdateForm = function() {
    var regContainerHTML = $("#registerContainer > fieldset").html();
    var newFieldset = regContainerHTML.replace(/for="reg/g,'for="mod').replace(/id="reg/g,'id="mod');
    $("#dataContainer > fieldset").html(newFieldset);
    var expectedFields = new Array("username", "address", "phone", "company", "surname", "forename", "email");
    // fill in
    for (var i in expectedFields) {
        if (userData[expectedFields[i]] != '') {
            var fieldID = "#mod"+expectedFields[i].charAt(0).toUpperCase()+expectedFields[i].substring(1)+"Fld";
            $(fieldID).val(userData[expectedFields[i]]);
        }
    }
    if (userData['subscription'] == "Yes") {
        // check in newsletter setting separately
        $("#modNewsletterCheckbox").attr("checked","checked");
    } else {
        $("#modNewsletterCheckbox").removeAttr("checked");
    }
    
    $("#dataContainer > fieldset").after("<p><button id='modifyProfile'>"+client_area_translations.client_area_change_profile+"</button></p>");
    $("#enableUpdateBtn").hide();
    // remove * from password fields
    $("label[for='modPasswdFld']").text($("label[for='modPasswdFld']").text().replace(/\*/g,''));
    $("label[for='modCPasswdFld']").text($("label[for='modCPasswdFld']").text().replace(/\*/g,''));
    
    // hook up enter key on form
    $("#dataContainer input").keyup(function (event) {
        if (event.keyCode == 13) {
            $("#modifyProfile").trigger('click');
        }
    });
    
    $("#modifyProfile").click(function() {
        // clean all previous errors
        $("p.error").remove();

        // required set fields
        var requiredFields = new Array("username", "address", "phone", "company", "surname", "forename");
        var dataObj = new Object();

        // validate input
        for (var i in requiredFields) {
            var fieldID = "#mod" + requiredFields[i].charAt(0).toUpperCase()+ requiredFields[i].substring(1)+ "Fld";
            if ($(fieldID).val() != "") {
                dataObj[requiredFields[i]] = $(fieldID).val();
            } else {
                $(fieldID).after("<p class='error'>"+client_area_translations.err_missing_field+"</p>");
            }
        }

        if ($("#modUsernameFld").val() != '' && $("#modUsernameFld").val().search(/^[\w_]{3,24}$/gi) == -1) {
            // username format error
            $("#modUsernameFld").after("<p class='error'>"+client_area_translations.err_invalid_format+"</p>");
        }

        if ($("#modEmailFld").val() != "" && !validateEmail($("#modEmailFld").val())) {
            // invalid email address
            $("#modEmailFld").after("<p class='error'>"+client_area_translations.err_incorrect_email+"</p>");
        } else if ($("#modEmailFld").val() != "") {
            dataObj['email'] = $("#modEmailFld").val();
        }

        if ($("#modPasswdFld").val() != "" && $("#modPasswdFld").val() != $("#modCPasswdFld").val()) {
            // passwords don't match
            $("#modPasswdFld, #modCPasswdFld").after("<p class='error'>"+client_area_translations.err_passwords_match+"</p>");
        } else if ($("#modPasswdFld").val() != "") {
            dataObj['passwd'] = $("#modPasswdFld").val();
        }

        if ($("#modPhoneFld").val() != "" && !validatePhoneNo($("#modPhoneFld").val())) {
            // phone format error
            $("#modPhoneFld").after("<p class='error'>"+client_area_translations.err_invalid_format+"</p>");
        }

        if ($("p.error").text() != "") {
            return false;
        }

        if ($("#modNewsletterCheckbox:checked").length > 0) {
            // add newsletter subscription
            dataObj['subscription'] = "Yes";
        }
        
        dataObj['lang'] = lang;

        // hide everything and display a loader
        $("#dataContainer > *").hide();
        $("#dataContainer > h2").show().after("<div id='loader'></div>");

        $.post(siteIndex+"plugins/client_area/profile_edit.php", dataObj,
                function(data, textStatus) {
                    $("#loader").remove();
                    // clean password fields for security reasons
                    $("#modPasswdFld, #modCPasswdFld").val('');
                    if (textStatus == 'success') {
                        if (data.Success) {
                            $("#dataContainer").remove();
                            // back to the profile view page
                            getUserData();
                        } else if (data.Error == "err_session_expired" || data.Error == "Not logged in!") {                            
                            $("#dataContainer").remove();
                            $("#loginContainer").show();
                            // display session expired error if applicable
                            if (data.Error == "err_session_expired") {
                                $("#loginContainer > h2").after("<p class='error'>"+client_area_translations.err_session_expired+"</p>");                                
                            }
                        } else {
                            $("#dataContainer > *").show();
                            $("#dataContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                        }
                    } else {
                        $("#dataContainer > *").show();
                        $("#dataContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                    }
                }
            ,'json');
    });
};

var buildProfile = function(data) {

    // sync user data to global
    userData = data;

    $("#loginContainer").hide();
    $("#loginWindow").append("<div class='container' id='dataContainer'></div>");

    // get the labels and add text-plain values if applicable
    var tArr = $("#registerContainer > fieldset > label");
    var fieldset = new String();
    for (var i=0; i<tArr.length; i++) {
        var labelContent = $(tArr[i]).text().replace(/\*/g,'');
        var forAttrib = $(tArr[i]).attr('for');
        var dataReference = forAttrib.charAt(3).toLowerCase() + forAttrib.substring(4,forAttrib.indexOf('Fld'));
        // set text-plain label with data for the fieldset
        if (data[dataReference]) fieldset += "<label>"+labelContent+":</label> <span>"+data[dataReference]+"</span><br />";
    }

    var header = client_area_translations.client_area_welcome.replace(/\{name\}/gi, data.forename);
    $("#dataContainer").append("<h2>"+header+"</h2><p id='linkBar'><button id='enableUpdateBtn'>"+client_area_translations.client_area_change_profile+"</button> <button id='logoutBtn'>"+client_area_translations.client_area_logout+"</button></p><fieldset>"+fieldset+"</fieldset>");

    $("#enableUpdateBtn").click(showUpdateForm);

    $("#logoutBtn").click(function() {
        $("#dataContainer > *").hide();
        $("#dataContainer > h2").text(client_area_translations.client_area_logout).show().after("<div id='loader'></div>");
        $.post(siteIndex+"plugins/client_area/logout.php", {},
                function(data, textStatus) {
                    $("#loader").remove();
                    // clean password field for security reasons
                    $("#passwdFld").empty();
                    // erase user ID on client side
                    delete uid;
                    if (textStatus == 'success') {
                        if (data.Success) {
                            $("#dataContainer").remove();
                            $("#loginContainer, #loginContainer > *").show();
                            // set login link under the language menu back to the initial value
                            $("#loginWinBtn").attr('rel','unsigned').text(client_area_translations.client_area_login).click(loginWinHandler);
                            if ($("#POAFieldset").length > 0) $("#POAFieldset").hide();
                            if ($("#loginFromForm").length > 0) $("#loginFromForm").show();
                        } else {
                            $("#dataContainer > *").show();
                            $("#dataContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                        }
                    } else {
                        $("#dataContainer > *").show();
                        $("#dataContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                    }
                }
            ,'json');
    });
    
    // fix label padding
    $("#dataContainer > fieldset > label").css("padding-top",0);
    
    // show profile
    $("#dataContainer").show();

    // detect data forms in the background and fill it in
    var backgroundForm = ($("#requestQuoteFieldset, #POAFieldset").length > 0);
    if (backgroundForm) {
        if ($("#POAFieldset").length > 0) $("#POAFieldset").show();
        if ($("#nameFld").length > 0) $("#nameFld").val(data.forename+" "+data.surname);
        if ($("#companyFld").length > 0) $("#companyFld").val(data.company);
        if ($("#phoneFld").length > 0) $("#phoneFld").val(data.phone);
        if ($("#addressFld").length > 0) $("#addressFld").val(data.address);
        if ($("#emailFld").length > 0) $("#emailFld").val(data.email);
        // add user ID
        uid = data.id;
        // hide login link from above the background form
        if ($("#loginFromForm").length > 0) $("#loginFromForm").hide();
    }
};

var getUserData = function() {
    $.post(siteIndex+"plugins/client_area/profile_load.php", {},
        function(data, textStatus) {
            $("#loader").remove();
            if (textStatus == 'success') {
                if (data.Success) {
                    // set login link under the language menu to the profile owner's name
                    $("#loginWinBtn").text(data.title+" "+data.forename+" "+data.surname);
                    buildProfile(data);
                } else {
                    // erase user ID on client side
                    delete uid;
                    // switch back to initial login window button
                    $("#loginWinBtn").attr('rel','unsigned').text(client_area_translations.client_area_login).click(loginWinHandler);
                    // just take a user back to the login form
                    $("#loginContainer > *").show();
                    // display session expired error if applicable
                    if (data.Error == "err_session_expired") {
                        $("#loginContainer > h2").after("<p class='error'>"+client_area_translations.err_session_expired+"</p>");
                    }
                }
            } else {
                $("#loginContainer > *").show();
                $("#loginContainer > h2").after("<p class='error'>"+data.Error+"</p>");
            }
        },'json');
        
};

var initProfile = function() {
    // remove all hanging loaders first
    $("#loader").remove();
    // display loader and get profile data
    $("#loginContainer > *").hide();
    $("#loginContainer > h2").show().after("<div id='loader'></div>");
    if ($("#dataContainer").contents().length == 0) getUserData();
};


$(document).ready(function() {


    // hook up login window sliding
    $("#loginWinBtn").click(loginWinHandler);
    
    if ($("#loginFromForm").length > 0) {
        $("#loginFromForm").click(loginWinHandler);
    }

    // detect login window request
    if (document.location.href.indexOf("#login") != -1 || document.location.href.indexOf("#loginWindow") != -1) {
        loginWinHandler();
    }

    $("#winCloseBtnContainer > a").click(function() {
        $("#contentWrapper").slideToggle("fast");
        $("#loginWindow").slideToggle("fast");
    });

    if ($("#enableUpdateBtn").length > 0) {
        $("#enableUpdateBtn").click(function() {
            // enable password fields
            $("#dataPasswdFld, label[for='dataPasswdFld'], #dataCPasswdFld, label[for='dataCPasswdFld']").show();
            // activate profile form
            $("#dataContainer > fieldset:input").removeAttr("disabled").removeClass("borderless");
            $("#updateBtn").show();
        });
    }

    $("#reminderLink").click(function() {
        $("#loginContainer, #registerContainer").hide();
        $("#reminderContainer").show();
    });
    
    $("#registerLink").click(function() {
        $("#loginContainer, #reminderContainer").hide();
        $("#registerContainer").show();
    });
    
    $("#registerLoginLink, #reminderLoginLink").click(function() {
        $("#reminderContainer, #registerContainer").hide();
        $("#loginContainer").show();
    });

    // hook up enter button on login
    $("#loginContainer input").keyup(function (event) {
        if (event.keyCode == 13) {
            $("#loginBtn").trigger('click');
        }
    });
    
    // hook up enter button on password reminder
    $("#reminderContainer input").keyup(function (event) {
        if (event.keyCode == 13) {
            $("#reminderBtn").trigger('click');
        }
    });
    
    // hook up enter button on registration form
    $("#registerContainer input").keyup(function (event) {
        if (event.keyCode == 13) {
            $("#registerBtn").trigger('click');
        }
    });

    $("#reminderBtn").click(function() {
        // clean all previous errors
        $("p.error").remove();

        // required set fields
        var requiredFields = new Array("name", "email");
        var dataObj = new Object();

        // validate input
        for (var i in requiredFields) {
            var fieldID = "#rem" + requiredFields[i].charAt(0).toUpperCase() + requiredFields[i].substring(1) + "Fld";
            if ($(fieldID).val() != "") {
                dataObj[requiredFields[i]] = $(fieldID).val();
            } else {
                $(fieldID).after("<p class='error'>"+client_area_translations.err_missing_field+"</p>");
            }
        } 
        
        // email format validation
        if ($("#remEmailFld").val() != "" && !validateEmail($("#remEmailFld").val())) {
            $("#remEmailFld").after("<p class='error'>"+client_area_translations.err_incorrect_email+"</p>");
        }
        
        if ($("p.error").text() != "") {
            return false;
        }
        
        dataObj['lang'] = lang;
        
        // hide everything and display a loader
        $("#reminderContainer > *").hide();
        $("#reminderContainer > h2").show().after("<div id='loader'></div>");

        $.post(siteIndex+"plugins/client_area/password_reminder.php", dataObj,
                function(data, textStatus) {
                    $("#loader").remove();
                    // clean password field for security reasons
                    $("#passwdFld").val('');
                    if (textStatus == 'success') {
                        if (data.Success) {
                            $("#reminderContainer > p").remove();
                            $("#reminderContainer > fieldset").replaceWith("<p>"+data.Success+"</p>");
                            $("#reminderContainer > *").show();
                        } else {
                            $("#reminderContainer > *").show();
                            $("#reminderContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                        }
                    } else {
                        $("#reminderContainer > *").show();
                        $("#reminderContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                    }
                }
            ,'json');
    });

    // Contact form processing
    $("#loginBtn").click(function() {

        // clean all previous errors
        $("p.error").remove();

        // required set fields
        var requiredFields = new Array("user", "passwd");
        var dataObj = new Object();

        // validate input
        for (var i in requiredFields) {
            var fieldID = "#" + requiredFields[i] + "Fld";
            if ($(fieldID).val() != "") {
                dataObj[requiredFields[i]] = $(fieldID).val();
            } else {
                $(fieldID).after("<p class='error'>"+client_area_translations.err_missing_field+"</p>");
            }
        }

        // validate username format
        if ($("#userFld").val() != '' && $("#userFld").val().search(/^[\w_]{3,24}$/gi) == -1) {
            $("#userFld").after("<p class='error'>"+client_area_translations.err_invalid_format+"</p>");
        }

        if ($("p.error").text() != "") {
            return false;
        }
        
        dataObj['lang'] = lang;

        // hide everything and display a loader
        $("#loginContainer > *").hide();
        $("#loginContainer > h2").show().after("<div id='loader'></div>");

        $.post(siteIndex+"plugins/client_area/login.php", dataObj,
                function(data, textStatus) {
                    // clean password field for security reasons
                    $("#passwdFld").val('');
                    if (textStatus == 'success') {
                        if (data.Success) {
                            //console.debug("Logged in!");
                            getUserData();
                        } else {
                            $("#loader").remove();
                            $("#loginContainer > *").show();
                            $("#loginContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                        }
                    } else {
                        $("#loader").remove();
                        $("#loginContainer > *").show();
                        $("#loginContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                    }
                }
            ,'json');
    });
    
    // register form processing
    $("#registerBtn").click(function() {

        // clean all previous errors
        $("p.error").remove();

        // required set fields
        var requiredFields = new Array("username", "passwd", "address", "phone", "company", "surname", "forename");
        var dataObj = new Object();

        // validate input
        for (var i in requiredFields) {
            var fieldID = "#reg" + requiredFields[i].charAt(0).toUpperCase()+ requiredFields[i].substring(1)+ "Fld";
            if ($(fieldID).val() != "") {
                dataObj[requiredFields[i]] = $(fieldID).val();
            } else {
                $(fieldID).after("<p class='error'>"+client_area_translations.err_missing_field+"</p>");
            }
        }

        if ($("#regUsernameFld").val() != '' && $("#regUsernameFld").val().search(/^[\w_]{3,24}$/gi) == -1) {
            // username format error
            $("#regUsernameFld").after("<p class='error'>"+client_area_translations.err_invalid_format+"</p>");
        }

        if ($("#regEmailFld").val() != "" && !validateEmail($("#regEmailFld").val())) {
            // invalid email address
            $("#regEmailFld").after("<p class='error'>"+client_area_translations.err_incorrect_email+"</p>");
        } else if ($("#regEmailFld").val() != "") {
            dataObj['email'] = $("#regEmailFld").val();
        }

        if ($("#regPasswdFld").val() != "" && $("#regPasswdFld").val() != $("#regCPasswdFld").val()) {
            // passwords don't match
            $("#regPasswdFld, #regCPasswdFld").after("<p class='error'>"+client_area_translations.err_passwords_match+"</p>");
        }

        if ($("#regPhoneFld").val() != "" && !validatePhoneNo($("#regPhoneFld").val())) {
            // phone format error
            $("#regPhoneFld").after("<p class='error'>"+client_area_translations.err_invalid_format+"</p>");
        }

        if ($("p.error").text() != "") {
            return false;
        }

        if ($("#regNewsletterCheckbox:checked").length > 0) {
            // add newsletter subscription
            dataObj['subscription'] = "Yes";
        }
        
        dataObj['lang'] = lang;

        // hide everything and display a loader
        $("#registerContainer > *").hide();
        $("#registerContainer > h2").show().after("<div id='loader'></div>");

        $.post(siteIndex+"plugins/client_area/register.php", dataObj,
                function(data, textStatus) {
                    $("#loader").remove();
                    // clean password fields for security reasons
                    $("#regPasswdFld, #regCPasswdFld").val('');
                    if (textStatus == 'success') {
                        if (data.Success) {
                            pageTracker._trackPageview("/registration-success");
                            $("#registerContainer > p, #registerContainer > h2").remove();
                            $("#registerContainer > fieldset").replaceWith("<p>"+data.Success+"</p>");
                            $("#registerContainer > *").show();
                        } else {
                            $("#registerContainer > *").show();
                            $("#registerContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                        }
                    } else {
                        $("#registerContainer > *").show();
                        $("#registerContainer > h2").after("<p class='error'>"+data.Error+"</p>");
                    }
                }
            ,'json');
    });
    
    //alert("DOM ready!");
    
});