// Pixelsilk Website Navigation Menu Plugin
// v 2.0

function findLeft(obj) {
	var curLeft = 0;
	if (obj.offsetParent) {
		curLeft = obj.offsetLeft;
		while (obj = obj.offsetParent) {
			curLeft += obj.offsetLeft;
		}
	}
	return curLeft;
}

/*
	Options that can be passed to the plugin:
		fadeInTime
		fadeOutTime
		menuWidth: (int) width of the submenu container element
		containerElement: (string) theme element to check width against
		menuElement: (string) submenu container element to look for
		rightArrow: (html) HTML to render the "submenu" arrow indicator
*/
jQuery.fn.navMenu = function(options) {

	var defaults = {
		fadeInTime: 200, // in milliseconds
		fadeOutTime: 300,	// in milliseconds
		menuWidth: 250,
		containerElement: "#theme",
		menuElement: "ul",
		rightArrow: " »"
	}

	var settings = $.extend({}, defaults, options);

	var obj = $(this);

	$(obj).find('li ul li:has(ul) > a').prepend('<span class="menu-sub-indicator">' + settings.rightArrow + '</span>');

	var pos;
	var menuWidth = settings.menuWidth;
	$(obj).find('li ' + settings.menuElement + ' li ' + settings.menuElement).each(function() {
		pos = findLeft($(this).parent().parent().parent().get(0));
		//alert(pos);
		if ($(settings.containerElement).width() - pos < (menuWidth * 2)) {
			$(this).css('left', '-' + menuWidth + 'px');
		}
	});

	$(obj).find('li ' + settings.menuElement).attr('fadeState', 'none');
	$(obj).find('li').hover(
		function() {
			if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'fadeOut') {
				$(this.getElementsByTagName(settings.menuElement)[0]).stop(true, true);
				$(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'none');
			}

			if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'none') {
				$(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'fadeIn');
				$(this.getElementsByTagName(settings.menuElement)[0]).fadeIn(settings.fadeInTime, function() {
					$(this).attr('fadeState', 'none');
				});
			}
		},
		function() {
			if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'fadeIn') {
				$(this.getElementsByTagName(settings.menuElement)[0]).stop(true, true);
				$(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'none');
			}

			if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'none') {
				$(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'fadeOut');
				$(this.getElementsByTagName(settings.menuElement)[0]).fadeOut(settings.fadeOutTime, function() {
					$(this).attr('fadeState', 'none');
				});
			}
		}
	);

	$(obj).find('li ul:empty').css('visibility', 'hidden');

}
