/* Released: 2010-01-28 14:28:25 */


/* composer-push-start:standalone_header */
(function($){

    var ns = $.headerMenu = $.headerMenu || {};

    var TRIGGER_FOR_PREFIX = 'trigger-for-';

    var currentMenu = null;
    var currentItem = null;

    var itemActivateTimeout;
    var itemDeactivateTimeout;

    var getListItems = function(root) {
        return $(root).find('> li');
    };

    var getMenuByClassName = function(className) {
        if (className.indexOf(TRIGGER_FOR_PREFIX) == -1) return;

        var names = className.split(' ');
        var id;

        var i = names.length;
        while (i--) {
            var name = names[i];
            if (name.indexOf(TRIGGER_FOR_PREFIX) != -1) {
                id = name.substring(TRIGGER_FOR_PREFIX.length, name.length);
                break;
            }
        }

        if (!id) return;

        return $('#' + id)[0];
    };

    var activateItem = function(item) {
        var menu = getMenuByClassName(item.className);
        if (!menu) return;

        if (!$(item).hasClass('active'))$(item).addClass('active');
        $(menu).show();

        currentMenu = menu;
        currentItem = item;

        if (!$(menu).hasClass('__header-menu-handlers-attached')) {
            $(menu).addClass('__header-menu-handlers-attached');

            $(menu).bind('mouseenter', function(){
                if (itemDeactivateTimeout) {
                    window.clearTimeout(itemDeactivateTimeout);
                }
            }).bind('mouseleave', function(e){
				/* workaround for current version of chrome that fires a mouseleave event when user goes to the input textfields */
				if(e.target.nodeName == 'TD' && currentMenu == this){
						scheduleDeactivateItem(currentItem);
				}
            });
        }
    };

    var deactivateItem = function(item) {
        var menu = getMenuByClassName(item.className);
        if (!menu) return;

        $(item).removeClass('active');
        $(menu).hide();

        if (currentMenu == menu) currentMenu = null;
        if (currentItem == item) currentItem = null;
    };

    var scheduleActivateItem = function(item) {
        if (itemActivateTimeout) window.clearTimeout(itemActivateTimeout);

        itemActivateTimeout = window.setTimeout(function(){
            if (item) activateItem(item);
        }, 500);
    };

    var scheduleDeactivateItem = function(item) {

        itemDeactivateTimeout = window.setTimeout(function(){
            if (item) deactivateItem(item);
        }, 500);
    };

    var itemMouseenterHandler = function(item) {
        $(item).addClass('hover');
        if (itemDeactivateTimeout && currentItem == item) {
            window.clearTimeout(itemDeactivateTimeout);
        }
        scheduleActivateItem(item);
    };

    var itemMouseleaveHandler = function(item) {
        $(item).removeClass('hover').removeClass('down');
        if (itemActivateTimeout) {
            window.clearTimeout(itemActivateTimeout);
        }
        scheduleDeactivateItem(item);
    };

    var itemMousedownHandler = function(item) {
        if (!$(item).hasClass('login')) $(item).addClass('down');
    };

    var itemMouseupHandler = function(item) {
        $(item).removeClass('down');
    };

    $.extend(ns, {
     itemLoginEnterHandler : function(item) {
     itemMouseenterHandler(item);
        }    
    });

    $.fn.extend({
        headerMenu : function() {
            var items = getListItems(this[0]);

            $(items).each(function(){

                $(this).bind('mouseleave', function(){
                    return itemMouseleaveHandler(this);
                }).bind('mousedown', function(){
                    return itemMousedownHandler(this);
                }).bind('mouseup', function(){
                    return itemMouseupHandler(this);
				}).bind('click', function(){
                    return itemMouseenterHandler(this);
                });

            });

            return this;
        }
    });

})(jQuery);
/* composer-push-end:standalone_header */
