
$(document).ready( function() {

    // execute common code?
    if ($("body.common")) { Common.init(); }

    // are we on homepage
    if ($("body.homepage").length == 1) { HomePage.init(); }

    // login page
    if ($("body.login").length == 1) { Login.init(); }

    // registration
    if ($("body.registration").length == 1) { Registration.init(); }

});

var Common = {

    init: function() {
        this.attachLoginFormHandlers();
        this.attachExternalLinks();
    },

    attachLoginFormHandlers: function() {
        $("#username_input").click(function() {
            $(this).val("");
            $("#password_input").val("");
        });

        $("#username_input").keypress(function(e) {
            if (e.which == 13) {
                $("#login_form").submit();
            }
        });

        $("#password_input").keypress(function(e) {
            if (e.which == 13) {
                $("#login_form").submit();
            }
        });
    },

    attachExternalLinks: function() {
        $("a").each(function() {
            if ($(this).attr("rel") == "external") {
                $(this).attr("target", "_blank");
            }
        });
    }
}

var HomePage = {

    init: function() {
        // slider
        this.setSlideLinks();
        this.swapBullets();
        setTimeout("HomePage.swapSlides();", 5000);

        // mailing list
        this.attachMailingHandler();

        //$("#notify_container").dialog({
        //    autoOpen: false,
        //    modal: true,
        //    height: 300,
        //    width: 420,
        //});

        //$("#notify_container").dialog("open");
    },

    attachMailingHandler: function() {
        $("#signup_button").click(function() {
            if ($("#email_input").val() != '') {
                UI.showLoader("mailing_list_status");
                $("#mailing_list_status").load("/components/mailing_list.cmp", {
                    action: 'processSignup',
                    address: $("#email_input").val()
                });
                setTimeout('$("#mailing_list_status").fadeOut();', 5000);
            }
        });

        $("#email_input").keypress(function(e) {
            if (e.which == 13) {
                $("#signup_button").click();
            }
        });
    },

    setSlideLinks: function() {
        $("#slide_1").click(function() { window.location="http://blcklst.com/lists/" });
        $("#slide_2").click(function() { window.location="http://twitter.com/theblcklst" });
        $("#slide_3").click(function() { window.location="http://blcklst.com/press/" });
        $("#slide_4").click(function() { window.location="http://blog.blcklst.com/" });
    },

    swapSlides: function() {
        var next_slide;
        var index = parseInt($(".content .aspot .slides .selected").attr("id").replace("slide_", ""));
        if (index >= 4) { next_slide = 1; }
        else { next_slide = index + 1; }

        $("#slide_"+index).hide();
        $(".slides li").removeClass("selected");

        $("#slide_"+next_slide).fadeIn({duration: 800});
        $("#slide_"+next_slide).addClass("selected");

        $(".bullets li").removeClass("selected");
        $("#bullet_"+next_slide).addClass("selected");

        setTimeout("HomePage.swapSlides()", 5000);
    },

    swapBullets: function() {
        $(".content .aspot ul.bullets li").click(function() {
            var button_index = $(this).attr("id").replace("bullet_", "");
            $(".content .aspot .slides .selected").hide().removeClass("selected");
            $("#slide_"+button_index).fadeIn();
            $("#slide_"+button_index).addClass("selected");
            $(".content .aspot ul.bullets li.selected").removeClass("selected");
            $(this).addClass("selected");
        });
    }
};


var Registration = {

    init: function() {
        // pretty up buttons
        this.attachRegistrationSteps();
        $("button, input[type='submit'], input[type='button']").button();

        //$("#promocode_input").keyup(function() {
        //    if (($(this).val().length == 11) && ($(this).val() == 'BLCKLST2011')) { // if you found this, congrats. free month for you :)
        //        $("#promo_info").show();
        //    }
        //    else {
        //        $("#promo_info").hide();
        //    }
        //});

        //if ($("#post_registration").length == 1) {
        this.loadProgress("onboarding_progress");
        //}

        if ($("#top_scripts_container").length == 1) {
            this.getTopScripts("top_scripts_container", "Year");
            var _this = this;
            $("#show_more_button").click(function() {
                _this.getTopScripts("top_scripts_container", "Year");
            });
        }

        if ($("#top_unproduced_container").length == 1) {
            this.getTopScripts("top_unproduced_container", 'Month', 'MadeIntoMovie:no');
        }

        if ($("#registration_survey").length == 1) {
            $(".question_sliders").slider({
                min: 0, 
                max: 100,
            });
            $(".question_sliders").bind('slide', function(event, ui) {
                var slider_id = $(this).attr("id");
                $("#" + slider_id + "_answer").val(parseInt(ui.value));
            });
        }
    },

    getTopScripts: function(div, period, filter) {
        UI.showLoader(div);
        var rated_call = function() {
            Registration.loadProgress();
            if ($("#top_unproduced_container").length == 1) {
                Registration.setStep(6);
            }
        };

        $.ajax({
            url: "/members/components/top_lists.cmp",
            data: ({ action: 'getTopList', period: period, no_escape: 1, exclude_rated: 0, filter: filter }),
            type: "POST",
            dataType: "json",
            success: function(data) {
                if (data.success) { 
                    $("#" + div).html(data.output);
                    MemberUI.constructSliders(div, rated_call);
                }
                else {
                    $("#" + div).html("An error has occured.");
                }
            },
            error: function(data) {
                MemberUI.checkSession(data.status);
            }
        });   
    },

    attachRegistrationSteps: function() {
        var _this = this;
        $("#current_step").val("1");

        $("#continue_button_1").click(function() {
            if (
                $("#first_name_input").val() == '' ||
                $("#last_name_input").val()  == '' ||
                $("#email_input").val()      == '')
            {
                UI.showMessage("signup_status", "Fill in all required information", 1);
                return false;
            }

            $("#step_1").removeClass("visible");
            $("#step_1").hide();
            $("#step_2").fadeIn();
            $("#step_2").addClass("visible");
            $("#progress_bar").progressbar({value: 5});
        });

        $("#go_back_button").click(function() {
            $("#step_2").hide();
            $("#step_2").removeClass("visible");
            $("#step_1").fadeIn();
            $("#step_1").addClass("visible");
            $("#progress_bar").progressbar({value: 0});
        });

        $("#continue_button_2").click(function() {
            _this.registerAccount();
        });

        $("#reg_password_input").password_strength({minLength: 8});
    },

    registerAccount: function() {
        UI.showLoader("status_bar");
        $("#continue_button").attr("disabled", "disabled");
        $.ajax({
            url: "/components/registration.cmp",
            data: ({ 
                action: "registerAccount",
                first_name: $("#first_name_input").val(),
                last_name: $("#last_name_input").val(),
                email: $("#email_input").val(),
                title: $("#title_input").val(),
                company: $("#company_input").val(),
                username: $("#reg_username_input").val(),
                password: $("#reg_password_input").val(),
                password_confirm: $("#reg_confirm_password_input").val(),
                token: $("#reg_token").val()
            }),
            type: "POST",
            dataType: "json",
            success: function(data) {
                UI.hideLoader("status_bar");
                if (data.success) {
                    UI.showMessage("signup_status", "Account successfully created. Please log in.", 0); 
                    $("#step_1").html("");
                    $("#step_2").html(data.output);
                    $("input[type='submit']").button();
                }
                else {
                    UI.showMessage("signup_status", data.error.join('<br/>'), 1);
                    $("#continue_button").attr("disabled", "");
                }
            },
            error: function(data) {
                UI.hideLoader("status_bar");
                $("#continue_button").attr("disabled", "");
            }
        });
    },

    loadProgress: function(div) {
        if (div == null) { div = "onboarding_progress"; }
        UI.showLoader(div);
        $.ajax({
            url: "/components/onboarding.cmp",
            data: ({ action: "getProgress" }),
            type: "POST",
            dataType: "json",
            success: function(data) {
                if (data.success) {
                    $("#" + div).html(data.output);
                    $("#progress_bar").progressbar({value: data.progress});
                }
            }
        });
    },

    setStep: function(step_number) {
        $.ajax({
            url: "/components/registration.cmp",
            data: ({ action: "setStep", step_number: step_number }),
            type: "POST",
            dataType: "json",
            success: function(data){}
        });
    }

}


var Login = {

    init: function() {
        this.attachResetLink();
    },

    attachResetLink: function() {
        $("#reset_password_link").click(function() {
            $("#reset_password_container").slideDown();
            return false;
        });
    }

}


var UI = {

    showLoader: function(div) {
        $("#"+div).html('<img src="/images/ajax_loader.gif"/>');
    },

    hideLoader: function(div) {
        $("#"+div).html('');
    },

    showMessage: function(div, text, type) {
        $("#" + div).html('<p class="' + (type == 0 ? 'success' : 'error' ) + '">'+ text +'</p>')
        setTimeout('$(".success, .error").fadeOut();', 5000);
    },
}

