/*
 * @(#)jquery.CEA.menu.js
 *       
 * 系统名称：东航电子商务国内B2C系统
 * 版本号：1.0
 * 
 * Copyright (c)  TravelSky
 * All Rights Reserved.
 * 
 * 作者：bjiang
 * 创建日期：Nov 16, 2009
 * 
 * 功能描述：菜单控制
 * 公用方法描述：
 *      $('.menu').jMainMenu({
 *           actionType: "click",
 *           defaultSelectedMenu: "",
 *           defaultSelectedSubMenu: "",
 *           defaultAlign: "center" //"left,right,center,nomal"
 *      });
 *    
 * 修改人：
 * 修改日期：
 * 修改原因：
 * 
 * 
 */
;
(function($)
{
    $.fn.jMainMenu = function(options)
    {
        var settings = {
            actionType: "click",
            defaultSelectedMenu: "",
            defaultSelectedSubMenu: "",
            defaultAlign: "center" //"left,right,center,nomal"
        };
        var op = $.extend(settings, options);
        var $this = $(this);
        var $submune = $(this).siblings("#sub_menu");
        var oldobj = null;
        var fixmarginleft = 20;
        var menuclass = "main_menu";
        var isDefaultMenu = true;

        var highlightMenu = function(obj)
        {
            $(obj).addClass($(obj).attr("name"));
            var $previmg = $(obj).prev().css({
                "width": "2px"
            }).find("img");
            var $nextimg = $(obj).next().css({
                "width": "2px"
            }).find("img");
            $previmg.css({
                "visibility": "hidden"
            });
            $nextimg.css({
                "visibility": "hidden"
            });
        };
        var unhighlightMenu = function(obj)
        {
            $(obj).removeClass($(obj).attr("name"));
            var $previmg = $(obj).prev().css({
                "width": "2px"
            }).find("img");
            var $nextimg = $(obj).next().css({
                "width": "2px"
            }).find("img");
            $previmg.css({
                "visibility": "visible"
            });
            $nextimg.css({
                "visibility": "visible"
            });
        };
        var setSubMenuPostion = function(obj)
        {
            var $currentsubmenu = $submune.find("ul[name='" + $(obj).attr("name") + "']:first");
            var marginleft;
            switch (op.defaultAlign)
            {
            case "left":
                marginleft = 0;
                break;
            case "right":
                //没有算好
                marginleft = $submune.width() - $currentsubmenu.width() - fixmarginleft;
                break;
            case "center":
                marginleft = $(obj).position().left - ($currentsubmenu.width() / 2 - $(obj).width() / 2);
                marginleft = marginleft < 0 ? 0 : marginleft; //第一种情况，算下来距离左边的值是负的。那对顶对齐
                marginleft = marginleft > $(obj).position().left ? $(obj).position().left: marginleft;
                marginleft = marginleft + $currentsubmenu.width() + fixmarginleft > $submune.width() ? $submune.width() - $currentsubmenu.width() - fixmarginleft: marginleft; //距离左边的值加子菜单的长度大于子菜单的容器的长度。距右对齐。
                break;
            default:
                marginleft = $(obj).position().left; //$("#msg").html(marginleft);
                break;
            }
            $currentsubmenu.css({
                "margin-left": (marginleft + fixmarginleft) + "px"
            });
        };
        var showSubMenu = function(obj)
        {
            var $showsubmenu = $submune.find("ul[name='" + $(obj).attr("name") + "']:first").show();
            if ($(obj).attr("name") == op.defaultSelectedMenu)
            { //如果显示的主菜单是默认显示菜单，就把子菜单的默认项高亮起来。
                $showsubmenu.find("li[name='" + op.defaultSelectedSubMenu + "']:first").addClass("current");
            }
        };
        var hiddenSubMenu = function(obj)
        {
            $submune.find("ul[name='" + $(obj).attr("name") + "']:first").hide().find("li.current").removeClass("current");
        };
        var showHiddenSubMenu = function(obj)
        {
            $submune.find("ul:visible").hide().find("li.current").removeClass("current"); //隐藏子菜单并把高亮样式都去光
            $submune.find("ul[name='" + $(obj).attr("name") + "']:first").show();
        };
        var setSelectedSubMenuItem = function(obj, submenuitemname)
        {
            var $currentsubmenuitems = $submune.find("ul[name='" + $(obj).attr("name") + "']").find("li");
            $currentsubmenuitems.each(function()
            {
                if ($(this).hasClass("current"))
                {
                    $(this).removeClass("current")
                }
                if (submenuitemname)
                {
                    if ($(this).attr("name") == submenuitemname)
                    {
                        $(this).addClass("current")
                    }
                }
                else
                {
                    if ($(this).attr("name") == op.defaultSelectedSubMenu)
                    {
                        $(this).addClass("current")
                    }
                }
            });
        };
        var hiddenDefaultMenu = function()
        { //隐藏默认显示的主菜单
            unhighlightMenu($this.find("li[name='" + op.defaultSelectedMenu + "']"))
        };
        var hiddenDefaultSubMenu = function()
        { //隐藏默认显示的子菜单
            hiddenSubMenu($this.find("li[name='" + op.defaultSelectedMenu + "']"))
        };
        var showDefaultMenu = function()
        { //显示默认显示的主菜单
            highlightMenu($this.find("li[name='" + op.defaultSelectedMenu + "']"))
        };
        var showDefaultSubMenu = function()
        { //显示默认显示的子菜单
            showSubMenu($this.find("li[name='" + op.defaultSelectedMenu + "']"))
        };
        var setDefaultMenu = function()
        { //设置默认显示的主菜单
            //设置默认主菜单
            $this.find("li." + menuclass).each(function(i)
            {
                var $previmg = $(this).prev().find("img");
                var $nextimg = $(this).next().find("img");
                $(this).removeClass($(this).attr("name"));
                $previmg.css({
                    "visibility": "visible"
                });
                $nextimg.css({
                    "visibility": "visible"
                });
            });
            oldobj = $this.find("li[name='" + op.defaultSelectedMenu + "']:first");
            highlightMenu(oldobj);
        };
        var setDefaultSubMenu = function()
        { //设置默认显示的子菜单
            //设置默认子菜单
            $submune.find("ul").each(function()
            {
                $(this).attr("name") == op.defaultSelectedMenu ? $(this).show() : $(this).hide();
                $(this).find("li.current").removeClass("current");
                if ($(this).attr("name") == op.defaultSelectedMenu)
                { //如果是默认显示的主菜单，就把下面默认显示的子菜单高亮
                    $(this).find("li[name='" + op.defaultSelectedSubMenu + "']").addClass("_current");
                }
            });
        };
        var initSubMenu = function()
        {
            $submune.find("ul").each(function()
            {
                var $currentmenu = $this.find("li[name='" + $(this).attr("name") + "']");
                //绑定子菜单项鼠标事件
                $(this).find("li").each(function()
                {
                    //alert($(this).text().length)
                    if ($.browser.msie)
                    {
                        $(this).css({
                            "width": $(this).text().length * 13 + 27 + 25 - 2 - 16 + "px"
                        });
                    }
                    else
                    {
                        $(this).css({
                            "width": $(this).text().length * 13 + 27 + 25 - 2 - 16 + "px"
                        });
                    }

                    $(this).hover(function()
                    {
                        setSelectedSubMenuItem($currentmenu, $(this).attr("name"));
                    },
                    function()
                    {
                        $(this).removeClass("current");
                    });
                });
                setSubMenuPostion($currentmenu); //设置初始显示的子菜单的位置
            });

        };

        var init = function()
        {
            initSubMenu();
            setDefaultMenu();
            setDefaultSubMenu();
            $('#menu').mousemove(function(event)
            { //设置鼠标离开后显示默认菜单; 用event来做，检测鼠标移开后的对象是不是MENU，不是就显示默认菜单，是的话就不做这个动作
                var $target = $(event.target);
                if ($target.parents("#" + $this.parent().attr("id")).length == 0)
                {
                    if (isDefaultMenu == false)
                    {
                        setDefaultMenu();
                        setDefaultSubMenu();
                        isDefaultMenu = true;
                    }
                }
            });
        };
        init();

        return $(this).find("." + menuclass).each(function()
        {
            $(this).bind(op.actionType,
            function()
            {
                if (oldobj == null)
                {
                    oldobj = this;
                }
                else
                {
                    unhighlightMenu(oldobj);
                    hiddenSubMenu(oldobj);
                    oldobj = this;
                }
                highlightMenu(this);
                showSubMenu(this);
                isDefaultMenu = false;
            });
        });
    }
})(jQuery);
