/**!meta-info
 * @name           harlequin core
 *
 * @description    
 *
 * @requires       Trapeze jQuery 1.4.1-1.0.0
 * @requires       Trapeze Core Plugins 0.3.0
 *
 * @group-with     jquery/jquery.js
 * @group-with     jquery.easing.js
 * @group-with     trapeze/trapeze.js
 *
 */


$.namespace("trapeze.harlequin");

trapeze.harlequin = $.Class.extend({

    set_cufon_fonts : function() {
        Cufon.replace('h1', { 
                fontFamily: 'Rockwell'
        });
        Cufon.replace('.custom-font', { 
                fontFamily: 'Rockwell'
        });
    },
    
    show_lists : function() {
        var $parent_list = $(".parent-list");
        if ($parent_list.length > 0){
            $parent_list.find(".child-list").each(function() {
                if(!$(this).parent().hasClass("active-list")) {
                    $(this).hide().addClass("hidden");
                }
            });
            $parent_list.children("li").click(function(evt) {
            
                evt.preventDefault();
                var $listItem = $(this);
                
                if ($(evt.target).parents("ul").hasClass("child-list") || $listItem.hasClass("active-list")) {
                    if ($(evt.target).attr('href') !== undefined) {
                            window.location = $(evt.target).attr('href')
                        }
                    return false;
                }
                else if ($listItem.find("a").hasClass("active")) {
                $listItem.find("ul").slideToggle(200).parent().toggleClass("browse-list").children("a").toggleClass("active");
                }
                
                else {
                $(".browse-list", $parent_list).children("ul").slideUp(200).parent().removeClass("browse-list").children("a").removeClass("active");
                $listItem.find("ul").slideToggle(200).parent().toggleClass("browse-list").children("a").toggleClass("active");
                }
            });
        }
    },


    submit_form : function() {
         var form_to_submit = null
         $("form.auto-submit").each(function(){
             form_to_submit = $(this);
             $(this).find("input.submit").hide().end()
             $(this).find(".submit-on-change")
                 .change(function(){
                     $(form_to_submit).submit();
                 });
         });
    },
    
    submit_balance : function(){
        if( $("#SelectAll").length > 0) {
            $("#SelectAll").click(function(evt){
                evt.preventDefault();
                var $balance_form = $(this).parents("form");
                $balance_form.find("input[type='checkbox']").attr('checked', true).end()
                $balance_form.submit();
            });            
        }
    },

    check_group : function($obj) {
        if ($obj.parent('li').parent('ul').hasClass('newsletters-subgroups')) {
            if ($obj.filter(':checked').size() > 0) {
                if ($obj.parent('li').siblings('li').size() == $obj.parent('li').siblings('li').children('input:checked').size()) {
                    var $parent_select_all = $obj.parent('li').parent('ul').siblings('input.select-all')
                    $parent_select_all.attr('checked', true);
                    if (!$parent_select_all.hasClass('root-input')) {
                        this.check_group($parent_select_all);
                    }
                }
            } else {
                var $parent_select_all = $obj.parent('li').parent('ul').siblings('input.select-all')
                if ($parent_select_all.size() > 0 && $parent_select_all.attr('checked') == true) {
                    $parent_select_all.attr('checked', false);
                    if (!$parent_select_all.hasClass('root-input')) {
                        this.check_group($parent_select_all);
                    }
                }
            }
        }
    },

    select_newsletter : function(){
        $("#NewsletterOptions .select-all").click(function(){
            if ($(this).is(":checked")){
                $(this).nextAll(".newsletters-subgroups").find("input[type='checkbox']").attr('checked', true);
            } else {
                $(this).nextAll(".newsletters-subgroups").find("input[type='checkbox']").attr('checked', false);
            }
        });
        
        $("#NewsletterOptions li input:not(.root-input)").click($.proxy(function(evt){
            var $obj = $(evt.currentTarget);
            this.check_group($obj);
        }, this));
    },
    
    init : function() {
        var page = $('body').attr('class');
        //page = page.match(/(\w+-page)/); #TODO - remove these from starting template?
        //page = (page.indexOf(' ') > 0) ? page.slice(0,page.indexOf(' ')) : page;
        switch(page) {
            case 'miniseries-page':
                this.show_lists();
                break;
            case 'my-account-shipping-balance-form-page' :
                this.submit_balance();
                break;
            case 'my-account-newsletters-page' :
                this.select_newsletter();
                break;
            default:
                //Code to be executed on any page, but the pages listed above.
                $('a.target_blank').click(function() {
                    window.open(this.href);
                    return false;
                });
        }
         this.submit_form();
         this.set_cufon_fonts();
    }
});

$(function() {
    new trapeze.harlequin();
});
