//** Smooth Navigational Menu- By Dynamic Drive DHTML code library: http://www.dynamicdrive.com
//** Script Download/ instructions page: http://www.dynamicdrive.com/dynamicindex1/ddlevelsmenu/
//** Menu created: Nov 12, 2008

//** Dec 12th, 08" (v1.01): Fixed Shadow issue when multiple LIs within the same UL (level) contain sub menus: http://www.dynamicdrive.com/forums/showthread.php?t=39177&highlight=smooth

//** Feb 11th, 09" (v1.02): The currently active main menu item (LI A) now gets a CSS class of ".selected", including sub menu items.

//** May 1st, 09" (v1.3):
//** 1) Now supports vertical (side bar) menu mode- set "orientation" to 'v'
//** 2) In IE6, shadows are now always disabled

//** July 27th, 09" (v1.31): Fixed bug so shadows can be disabled if desired.


var ddsmoothmenu = {

transition: { overtime: 150, outtime: 300 }, // duration of slide in/out animation, in milliseconds
shadow: { enable: true, offsetx: 2, offsety: 2 },

///////Stop configuring beyond here///////////////////////////

// detect WebKit browsers (Safari, Chrome etc)
detectwebkit: navigator.userAgent.toLowerCase().indexOf("applewebkit") != -1,
detectie6: document.all && !window.XMLHttpRequest,

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" });

		this._dimensions = { w: this.offsetWidth, h: this.offsetHeight, subulw: subul.outerWidth(), subulh: subul.outerHeight() };
		this.istopheader = curobj.parents("ul").length == 1; // is top level header?

		subul.css({ top: this.istopheader && setting.orientation != 'v' ? this._dimensions.h + "px" : 0 });

		if(smoothmenu.shadow.enable) {
			this._shadowoffset = { x: (this.istopheader ? subul.offset().left + smoothmenu.shadow.offsetx : this._dimensions.w), y: (this.istopheader ? subul.offset().top + smoothmenu.shadow.offsety : curobj.position().top) };
			if(this.istopheader) parentshadow = $(document.body);
			else {
				var $parentLi = curobj.parents("li:eq(0)");
				parentshadow = $parentLi.get(0).shadow;
			}

			this.shadow = $('<div class="ddshadow' + (this.istopheader ? ' toplevelshadow' : '') + '"></div>')
				.prependTo(parentshadow)
				.css({ left: this._shadowoffset.x + 'px', top: this._shadowoffset.y + 'px' });
		}

		curobj.hover(
			function(e) {
				var targetul = $(this).children("ul:eq(0)");
				this._offsets = { left: $(this).offset().left, top: $(this).offset().top };
				var menuleft = this.istopheader && setting.orientation != 'v'? 0 : this._dimensions.w;
				menuleft = (this._offsets.left + menuleft + this._dimensions.subulw > $(window).width()) ? (this.istopheader && setting.orientation != 'v' ? -this._dimensions.subulw + this._dimensions.w : -this._dimensions.w) : menuleft;
				if(targetul.queue().length <= 1) {
					// if 1 or less queued animations
					targetul
						.css({ left: menuleft + "px", width: this._dimensions.subulw + 'px' })
						.animate({ height: 'show', opacity: 'show'}, ddsmoothmenu.transition.overtime);

					if(smoothmenu.shadow.enable) {
						var shadowleft = this.istopheader ? targetul.offset().left + ddsmoothmenu.shadow.offsetx : menuleft;
						var shadowtop = this.istopheader ? targetul.offset().top + smoothmenu.shadow.offsety : this._shadowoffset.y;
						if(!this.istopheader && ddsmoothmenu.detectwebkit) {
							// in WebKit browsers, restore shadow's opacity to full
							this.shadow.css({ opacity: 1 })
						}

						this.shadow
							.css({ overflow: '', width: this._dimensions.subulw + 'px', left: shadowleft + 'px', top: shadowtop + 'px' })
							.animate({ height: this._dimensions.subulh + 'px' }, ddsmoothmenu.transition.overtime);
					}
				}
			},
			function(e) {
				var targetul = $(this).children("ul:eq(0)");
				targetul.animate({ height: 'hide', opacity: 'hide' }, ddsmoothmenu.transition.outtime);
				if(smoothmenu.shadow.enable) {
					if(ddsmoothmenu.detectwebkit) {
						// in WebKit browsers, set first child shadow's opacity to 0, as "overflow:hidden" doesn't work in them
						this.shadow.children('div:eq(0)').css({ opacity: 0 });
					}

					this.shadow
						.css({ overflow: 'hidden' })
						.animate({ height: 0 }, ddsmoothmenu.transition.outtime);
				}
			}
		);
	})

	mainmenu.find("ul").css({ display: 'none', visibility: 'visible' });
},

init: function(setting) {
	if(typeof setting.customtheme == "object" && setting.customtheme.length == 2) {
		// override default menu colors (default/hover) with custom set?
		var mainmenuid = '#' + setting.mainmenuid;
		var mainselector = setting.orientation == "v" ? mainmenuid : mainmenuid + ', ' + mainmenuid;
		document.write('<style type="text/css">\n' +
			mainselector + ' ul li a {background:' + setting.customtheme[0] + ';}\n' +
			mainmenuid + ' ul li a:hover {background:' + setting.customtheme[1] + ';}\n' +
			'</style>');
	}

	// in IE6, always disable shadow
	this.shadow.enable = (document.all && !window.XMLHttpRequest) ? false : this.shadow.enable;
	jQuery(document).ready(function($) {
		ddsmoothmenu.buildmenu($, setting)
	});
}

}
