;(function($) {
	$.fn.slidingFlexibleMenu = function(settings) {		
		//Default Variables
		var defaults = {
			direction: "vertical",
			slideType: "right"
		};
		
		//Settings
		var settings = $.extend({}, defaults, settings);
		
		//Create Menu
		return this.each(function() {
			var container = $(this);
			container.addClass("sliding-flexible-menu");
			container.attr("slideType", settings.slideType);
			container.bind("mouseenter", this, onMouseEnter);
			container.bind("mouseleave", this, onMouseLeave);
			var length = container.find("div.module-label").length;
			container.find("div.module-label").each(function(i) {
				loadItem($(this), settings, i, length);
			});
		});
		
		//Load Item
		function loadItem(item, settings, i, length) {
			//Container
			var container = item.parent();
			//Item Dimensions
			var widths = parseInt(item.width());
			var heights = parseInt(item.height());
			//Holder
			item.wrap("<div class=\"holder\"></div>");
			var holder = item.parent();
			holder.css({
				width : widths+"px",
				height: heights+"px"
			});

			//Item Roll Over Clone
			var item_over = item.clone();		
			item_over.addClass("over");
			switch (settings.slideType) {
				case "bottom":
					item_over.css({
						top:heights+"px",
						left:"0px"
					});	
					break;	
				case "top":
					item_over.css({
						top:-heights+"px",
						left:"0px"
					});	
					break;
				case "left":
					item_over.css({
						top:"0px",
						left:-widths+"px"
					});	
					break;
				case "right":
					item_over.css({
						top:"0px",
						left:widths+"px"
					});	
					break;
			}
			holder.append(item_over);
			if (i==(length-1)) {
				container.css({visibility:"visible"});
			}
		}
		
		function onMouseEnter(e) {
			var item_array = $(this).find("div.module-label");
			var item = $(item_array[0]);
			var item_over = item.next();

			var slideType = $(this).attr("slideType");
			var widths = item.width();
			var heights = item.height();		
			switch (slideType) {
				case "bottom":
					item.animate({top:-heights}, 250);
					item_over.animate({top:"0"}, 250);
					break;	
				case "top":
					item.animate({top:heights}, 250);
					item_over.animate({top:"0"}, 250);
					break;
				case "left":
					item.animate({left:widths}, 250);
					item_over.animate({left:"0"}, 250);
					break;
				case "right":
					item.animate({left:-widths}, 250);
					item_over.animate({left:"0"}, 250);	
					break;
			}
		}
		
		function onMouseLeave(e) {
			var item_array = $(this).find("div.module-label");
			var item = $(item_array[0]);

			var item_over = item.next();
			var slideType = $(this).attr("slideType");
			var widths = item.width();
			var heights = item.height();
			switch (slideType) {
				case "bottom":
					item.stop().animate({top:"0"}, 250);
					item_over.stop().animate({top:heights}, 250);
					break;	
				case "top":
					item.animate({top:"0"}, 250);
					item_over.animate({top:-heights}, 250);
					break;
				case "left":
					item.animate({left:"0"}, 500);
					item_over.animate({left:-widths}, 500);
					break;
				case "right":
					item.animate({left:"0"}, 500);
					item_over.animate({left:widths}, 500);	
					break;
			}		
		}
	};		
})(jQuery);
