var ddsmoothmenu =
{
    transition: { overtime: 300, outtime: 300 },
    showhidedelay: { showdelay: 100, hidedelay: 200 },
    buildmenu: function ($, setting) {
        var smoothmenu = ddsmoothmenu;
        var $mainmenu = $("#" + setting.mainmenuid + ">ul");
        $mainmenu.parent().get(0).className = setting.classname || "ddsmoothmenu";
        var $headers = $mainmenu.find("ul").parent();
        $headers.hover(
			function (e) {
				$(this).children('a:eq(0)').addClass('selected');
			},
			function (e) {
				$(this).children('a:eq(0)').removeClass('selected');
			}
		);
        $headers.each(function (i) {
            var $curobj = $(this).css({ zIndex: 100 - i });
            var $subul = $(this).find('ul:eq(0)').css({ display: 'block' });
            $subul.data('timers', {});
            this._dimensions = { w: this.offsetWidth, h: this.offsetHeight, subulw: $subul.outerWidth(), subulh: $subul.outerHeight() };
            this.istopheader = $curobj.parents("ul").length == 1 ? true : false;
            $subul.css({ top: 0 });

            $curobj.hover(
				function (e) {
					var $targetul = $subul;
					var header = $curobj.get(0);
					clearTimeout($targetul.data('timers').hidetimer);
					$targetul.data('timers').showtimer = setTimeout(function () {
						header._offsets = { left: $curobj.offset().left, top: $curobj.offset().top };
						var menuleft = header.istopheader && header._dimensions.w;
						menuleft = (header._offsets.left + menuleft + header._dimensions.subulw > $(window).width()) ? (header.istopheader && -header._dimensions.w) : menuleft;
						if ($targetul.queue().length <= 1) {
							$targetul.css({ left: menuleft + "px", width: header._dimensions.subulw + 'px' }).animate({ height: 'show', opacity: 'show' }, ddsmoothmenu.transition.overtime);
						}
						}, ddsmoothmenu.showhidedelay.showdelay);
				},
				function (e) {
					var $targetul = $subul;
					var header = $curobj.get(0);
					clearTimeout($targetul.data('timers').showtimer);
					$targetul.data('timers').hidetimer = setTimeout(function () {
						$targetul.animate({ height: 'hide', opacity: 'hide' }, ddsmoothmenu.transition.outtime)
					}, ddsmoothmenu.showhidedelay.hidedelay);
				}
			);
        });

        $mainmenu.find("ul").css({ display: 'none', visibility: 'visible' });
    },
    init: function (setting) {
        jQuery(document).ready(function ($) {
            ddsmoothmenu.buildmenu($, setting)
        })
    }
};

