var NAS = {};

NAS.settings = {
    MINIMUM_PASSWORD_LENGTH: 7
}

NAS.wizard = function() {

    return {

        tabs: function() {

            var holders = $('.tab-selector input[type=radio]:checked');
            $.each(holders, function(index, item){

                item = $(item);

                var tabs = $(item).parents('.tab-selector').parents('.tab-wrapper').children('.tab');

                $.each(tabs, function(index, elem){
                    elem = $(elem);
                    if (elem.attr('id').match(item.val())) {
                        elem.removeClass('hidden');
                    } else {
                        elem.addClass('hidden');
                    }
                });

                olive.signals.trigger('checkFieldsetHeight');
            });
        }

    }
}();

$(document).ready(function(){


    NAS.wizard.tabs();

    $('.tab-selector input[type=radio]').click(NAS.wizard.tabs);

    olive.signals.trigger('checkFieldsetHeight');

    /* Default value for search input */
   $('#header .search .textbox').defaultValue('Enter your search...', {
       allowBlankSubmit: false,
       defaultColor: '#999'
   });

    /*
     *facebox modal window
     */
    $('a.modal').facebox();

    $('#facebox .cancel').live("click",function(){
        $(document).trigger('close.facebox');
        return false;
    });


    /*
     * Status message close
     */
    $('.status-close').click(function() {
        var self = $(this);
        $.get(self.attr('href'), function() {
            self.parents('.status-messages').fadeOut();
        });
        return false;
    });


    /*
     * Reset state errors
     */
    $('#id_account-form-country').change(function() {
        $('#id_account-form-state').closest('.row').removeClass('error').find('.errorlist').remove();;
    });
    $('#id_billing-country').change(function() {
        $('#id_billing-state').closest('.row').removeClass('error').find('.errorlist').remove();;
    });




    /*
     * Check if any item goes over right side of browser
     */
    (function() {
        var browser_width = $("#header").width(),
            menu_items = $("#nav-menu").children("li"),
            subnav_width, self, offset_left;

        $.each(menu_items, function(index, value){
            self = $(value);
            offset_left = self.offset().left;

            if (!subnav_width) {
                subnav_width = self.children("ul").width();
            }
            if ((offset_left + subnav_width) > browser_width) {
                var offset = subnav_width - self.width();
                $(value).addClass("right").attr("rel", Math.ceil(offset));
            }
        });
    })();


    /*
     * Main navigation
     */
    $("#nav-menu > li").hover(function() {
            var self = $(this);
            var item = self.children("a");
            var hover = $('<div class="overlay"></div>').append(item.clone());
            $(this).append(hover).addClass("hover");

            if (self.hasClass("right")) {
                var subnav = $(this).children("ul.subnav");
                subnav.css("left", (-1 * self.attr("rel") + 10) + "px");
            }
        },
        function() {
            $(this).removeClass("hover");
            $(this).children(".overlay").remove();
            $(this).children(".subnav").css("left", "");
    });


    /*
     * Add a clear box after two linkbox containers which are side by side.
     */
    $('div.linkbox.left').each(function(){
        // This linkbox is followed by a right linkbox
        if($(this).next().hasClass('linkbox.right')){
            $(this).next().after('<div class="clear">&nbsp;</div>');
        }

        // This linkbox is preceded by a right linkbox
        if($(this).prev().hasClass('linkbox.right')){
            $(this).after('<div class="clear">&nbsp;</div>');
        }
    });

    $('div.row.error select').change(function() {
        $(this).closest('.row').removeClass('error').find('.errorlist').remove();
    });

    $('div.row.required input[type=text], div.row.required input[type=password], div.row.required textarea').blur(function(){

        function success(node) {
            node.removeClass('error').addClass('success')
                .children('ul.errorlist').remove();
            olive.signals.trigger('checkFieldsetHeight');
        }

        function error(node, message) {
            node.addClass('error').removeClass('success')
                .children('ul.errorlist').remove();
            node.append('<ul class="errorlist"><li>' + message + '</li></ul>');
            olive.signals.trigger('checkFieldsetHeight');
        }

        var self = $(this),
            row = self.parents('.row:first'),
            type = row.find('input[name="type"]');

        if (!self.val() && !(type.length && self.hasClass('validation-match'))) {
            error(row, 'This field is required');
            return;
        }

        if (type.val() == "None" || type.val() == "none") {
            type.parent().removeClass('error').children('ul.errorlist').remove();
            return;
        }

        if (row.hasClass('validation-match')) {
            var target = $(self.parent().attr("rel"));
            if (self.val() == target.val()) {
                if (self.val()) {
                    success(row);
                } else {
                    error(row, 'This field is required');
                    return;
                }
            } else {
                error(row, 'Your ' + row.find('input[name="match_label"]').val() + ' do not match.');
                return;
            }
        }

        if (type.val() == 'password') {
            var password_length = NAS.settings.MINIMUM_PASSWORD_LENGTH;
            if (self.val().length < password_length /*|| self.val().match('^[0-9]+$') || self.val().search('[0-9]') == -1*/) {
                error(row, 'Your new password must be at least ' + password_length + ' characters');
                return;
            }
        }

        if (type.val() == "email") {
            if (self.val().match(/.+@.+\...+/)) {
                success(row);
            } else {
                error(row, 'Invalid email address.');
            }
        } else if (self.val()) {
            success(row);
        }

        var reverse_target = $('div.row.required[rel="#' + self.attr("id") + '"]')
                                .children('input[type=text], input[type=password], textarea');
        if (reverse_target.length && reverse_target.val().length && self.val()) {
            reverse_target.trigger('blur');
        }

    });


    $('form').submit(function() {

        $('.account .status-messages').hide();

        $('div.row.required input[type=text], div.row.required input[type=password], div.row.required textarea').trigger('blur');
        var errors = false;
        var fieldsets = $(this).find('fieldset:not(.hidden)');

        $.each(fieldsets, function(iter, item) {
            item = $(item);
            if (item.find('fieldset').length) {
                var fieldset_errors = item.find('fieldset:not(.hidden)').find('.row.required.error, #promo-code-fieldset.error');
                if (fieldset_errors.length) {
                    errors = true;
                    return false;
                }
            } else {
                var fieldset_errors = item.find('.row.required.error, #promo-code-fieldset.error');
                if (fieldset_errors.length) {
                    errors = true;
                    return false;
                }
            }
        });

        if (errors) {
            $(this).find('.status-messages').show();
            $('#account-form-error').show();
            return false;
        }

        return true;
    });

    // update the change label
    // in case the browser was refreshed and the input field value changed
    // i.e. (cached locally)
    $.each($('form .change-field input'), function(i, val) {
        var node = $(val);
        node.parent().prev().children('.change-field-value').text(node.val());
    });
    $('form .change-field-link a').click(function() {
        var email = $(this).parent().next().removeClass('hidden').children('input');
        $(this).parent().addClass('hidden');

        email.bind('blur', function() {
            var self = $(this);
            if (!self.parents('.row:first').hasClass('.error')) {
                self.parent().addClass('hidden').prev().removeClass('hidden')
                    .children('.change-field-value').text(self.val());
            }
        });
        return false;
    });

});
