var SearchAlert = {
    CHANGE_EMAIL: "change",
    ALREADY_REGISTERED: "is <strong>already registered<\/strong> in our database",
    ENTER_PASSWORD: "Please enter a password to use this account or",
    USE_ANOTHER: "use another e-mail address",
    URL_PATH_PREFIX: "",
    defaults: {
        target: '#search_alert_form_layer', // contains all elements
        layer_id: 'search_alert_form_layer', // use false for embedded form
        url: '/search_alerts/new/'
        }
};


SearchAlert.get_query_id = function() {
    return clipboard.search_id;
}
/**
 * SearchAlert logic connected to a form container.
 *
 * Identifies all buttons forms and error msg containers. Connects callbacks
 * to all actions and starts the SearchAlert flow.
 * For now all functions are declared inline to allow multiple searchalert forms
 * on a page (layer + embedded).
 * FIXME: convert to a jquery plugin once we have a translation api inplace.
 * @param {Object} options - object with Search Alert form options
 */
SearchAlert.init = function(options){
    var o = {};
    $.extend(o, SearchAlert.defaults, options||{}); // shortcut
    o.target = $(o.target);
    o.url = SearchAlert.URL_PATH_PREFIX+o.url;
    o.sal_form = $('form.submit_form', o.target);
    o.password_form = $('form.password_form', o.target);
    o.msg = {
        passworderr: $('.error_form_password', o.target),
        salerr: $('.error_form', o.target),
        frequencyerr: $('.frequency_error'),
        congrats: $('.congratulations'),
        already: $('.already_exists'),
        exists: $('.exists_msg_container')
    };
    o.email_field = $('input[name=user_email]', o.sal_form);
    o.pass_field = $('input[name=password]', o.password_form);

    $("#counter").val("");

    function clear_form() {
        $('input[type=radio]', o.sal_form).removeAttr("checked");
        $('input[type=radio][value=1]', o.sal_form).attr("checked", "checked");
        $("#counter").val("");

        o.email_field.removeClass('error');
        o.pass_field.removeClass('error');

        var containers = $([])
            .add(o.msg.passworderr)
            .add(o.msg.salerr)
            .html("")
            .add(o.msg.frequencyerr)
            .hide();

        o.msg.congrats.hide();
        o.msg.already.hide();
        o.password_form.hide();
        o.sal_form.show();
    }

    function hide() {
        if (o.layer_id) { popup.hidePopup(o.layer_id);}
        clear_form(); // to be on the safe side
        if(o.user_email!=$("#sa_user_email").val()){
            if(o.user_logged){
                window.location.reload();
            }
        }
        return false;
    }

    function check_auth() {
        return eval($("#sa_is_authenticated").val());
    }

    function use_another_email() {
        change_email();
        o.password_form.hide();
        o.sal_form.show();
        return false;
    }

    function get_user_email() {
        var user_email = '';
        if(check_auth()){
            user_email = $("#sa_user_email").val();
        }
        if(o.user_email){
            user_email = o.user_email;
        }
        return user_email;
    }

    function show_popup() {
        if (o.layer_id) { popup.showPopup(o.layer_id); $(".popupClose a", o.target).click(hide);}
    }

    function change_email() {
        o.email_field.val('').addClass('hovered');
        o.email_filler.hide();
        o.email_field.show().focus().removeClass('error');
        return false;
    }

    function user_authenticated(email_value) {
        o.email_filler_val.text(email_value);
        o.email_field.val(email_value).hide();
        o.email_filler.show();
    }

    function show_step1(){
        o.sal_form.show();
        show_popup();
    }
    function show_password_msg(msg){
        o.msg.passworderr.html('<p>'+msg+'<\/p>').show();
        o.pass_field.addClass('error');
    }
    function show_msg(msg){
        o.msg.salerr.html('<p>'+msg+'<\/p>').show();
        o.email_field.addClass('error');
    }
    function show_finish(){
        clear_form();
        o.msg.success_msg.show();
        o.sal_form.hide();
        $(".finishButtonContainer .submit_button", o.target).one("click", hide);
    }
    function show_password_form(){
        o.sal_form.hide();
        o.msg.exists.html('<p><strong>'+o.temp_email+'<\/strong> '+SearchAlert.ALREADY_REGISTERED+'.<br />'+SearchAlert.ENTER_PASSWORD+'  <a href="#" >'+SearchAlert.USE_ANOTHER+ '<\/a>.<\/p>');
        o.msg.exists.find('a').click(use_another_email);
        o.pass_field.val('');
        o.password_form.show();
        o.count = 0;
    }
    function submiter(event) {
        //o.form.find("input[type='submit']").attr("disabled","true");
        o.msg.salerr.hide();
        $(".sal-form-field", o.sal_form).remove();
        for (key in clipboard.search_mvd) {
            $('<input type="hidden" name="' + key + '" value="' + clipboard.search_mvd[key] + '" class="sal-form-field" />').appendTo(o.sal_form);
        }
        $.post(
            o.url,
            o.sal_form.serialize() + '&ajax=1&query_id='
                + SearchAlert.get_query_id() + '&' + o.password_form.serialize(),
            function(json){
            	if(json['created']){
                    o.msg.success_msg = o.msg.congrats;
                } else {
                    o.msg.success_msg = o.msg.already;
                }          	
                if(json['user_exists']){
                    if(json['email']){
                        o.temp_email=json['email'];
                    }
                    if(json['user_logged']){
                        o.user_logged = true;
                        o.user_email = json['user_email'];
                    }
                    if(!json['user_logged'] && json['mode']=='passwd'){
                        show_password_form();
                        if($("#counter").val()=="b"){
                            show_password_msg(json['passwd_msg']);
                        }
                        $("#counter").val("b");
                    }
                    if(json['error'] && !json['mode']){
                        o.password_form.hide();
                        user_authenticated(o.user_email);
                        o.sal_form.show();
                        if(!json['frequency_error']){
                            show_msg(json['error']);
                        }else{
                            o.msg.frequencyerr.show();
                        }
                    }
                    if(!json['error'] && !json['passwd_msg']){
                        show_finish();
                    }
                }
                if(!json['user_exists']){
                    if(!json['error']){
                        show_finish();
                    }else{
                        show_msg(json['error']);
                    }
                }
            },
            "json"
        );
        // end of problems
        event.preventDefault();
        return false;
    }


    var start = function() {
        $('.submit_button', o.target).unbind();
        o.password_form.unbind().submit(submiter);
        o.sal_form.unbind().submit(submiter);

        clear_form();
        
        if (!$('#sa_is_authenticated').length) {
            $(document).bind('toolbar_loaded', function() {
            if(check_auth()){
                user_authenticated(get_user_email());
            }
            });
        }
        if(check_auth()){
            user_authenticated(get_user_email());
        }else{
            if(o.user_email){
                user_authenticated(o.user_email);
            }else{
                o.email_field.unbind();
                o.email_field.click(function(){
                    o.email_field.val('').addClass('hovered');
                    o.email_field.unbind();
                })
            }
        }
        show_popup();
        return true;
    }

    o.email_filler = $('.filler', o.target);
    if (!o.email_filler.length) {
        o.email_filler = $('<span class="filler"></span>').insertAfter(o.email_field).hide();
        o.email_filler_val = $('<span class="logged"><\/span>').appendTo(o.email_filler);
        $(' <a href="#">'+SearchAlert.CHANGE_EMAIL+'<\/a>').click(change_email).appendTo(o.email_filler);
    } else {
        o.email_filler_val = $('.logged', o.email_filler);
    }
    start();
}



