/* @meta-info
 * @id              mega-menu.js
 *
 * @description     Creates a bubble-styled tooltip on hover
 *
 * @author          Taylan Pince
 * @copyright       Copyright (c) 2009, Trapeze, All rights reserved.
 *
 * @requires        Trapeze jQuery Distribution
 * @requires        Trapeze Utilities
 * 
 * @do-not-compress
 *
 */

$.namespace("trapeze.MegaMenu");

trapeze.MegaMenu = $.Class.extend({
    selector : null,
    active : null,
    section : null,
    
    toggle_template : '<a href="javascript:void(0);" class="mega-menu-toggle"><img src="%(media_path)images/btn-mega-menu-toggle.png" alt="%(alt_text)" /></a>',
    border_template : '<div class="mega-menu-border>&nbsp;</div>"',

    over : function(evt) {
        $(evt.currentTarget).addClass("active");
    },
    
    out : function(evt) {
        if (this.active != evt.currentTarget && evt.currentTarget != this.section) {
            $(evt.currentTarget).removeClass("active");
        }
    },
    
    prep : function(index, obj) {
        if ($(obj).find("ul").size() > 0) {
            $(obj).addClass("dropdown").find("ul");
            $(trapeze.render_template(this.toggle_template, {
                "media_path": trapeze.media_path,
				"alt_text": $(obj).find("a:first").text()
            })).appendTo(obj).click(this.display.bind(this));
        }
    },
    
    display : function(evt) {
        var parent = $(evt.currentTarget).parent().get(0);

        if (this.active == null || this.active != parent) {
            if (this.active) {
                $(this.active).removeClass("dropdown-active").find("ul.mega-menu-columns").slideUp("fast");
                
                if (this.active != this.section) $(this.active).removeClass("active");
            }
            
            this.active = parent;

            $(this.active).addClass("dropdown-active").find("ul.mega-menu-columns").slideDown();
        } else if (this.active == parent) {
            $(this.active).removeClass("dropdown-active").find("ul.mega-menu-columns").slideUp("fast");
            
            this.active = null;
        }
    },
    
    hide : function(evt) {
        if (this.active && $(evt.target).parents(this.selector).size() == 0) {
            $(this.active).removeClass("dropdown-active").find("ul.mega-menu-columns").slideUp("fast");
            
            if (this.active != this.section) $(this.active).removeClass("active");

            this.active = null;
        }
    },

    init : function(selector) {
        this.selector = selector;
        this.section = $(this.selector).find("li.active").get(0);
        
        $(this.selector).addClass("mega-menu");
        $(this.selector + " > li").hover(this.over.bind(this), this.out.bind(this)).each(this.prep.bind(this));
        $("html").click(this.hide.bind(this));
    }
});

