/*
  Sliding Navigation v1.0_20110225
	function name: sliding_navigation
	parameters:
		padding_out: 20
		slide_in_time: 150
		multiplier: 1
		sub_show_time: 250
		hide_after_time: 1000
*/
(function($) {$.fn.extend({
	sliding_navigation: function(i_options) {
		// default parameters values
		var defaults = {
			padding_out: 20,
			slide_in_time: 150,
			multiplier: 1,
			sub_show_time: 250,
			hide_after_time: 1000
		}
		var options = $.extend(defaults, i_options);
		// remeber this
		var $root = $(this);
		// timer on hover-out
		var timerHiding;
		// all "a" elements, trigger will be added
		var $link_elements = $root.find("a");
		var $list_elements = $root.find("li");
		if($link_elements.length == 0){
			return true;
		};
		// top "li" elements, fly-in effect
		var $top_list_elements = $root.children("li");
		// slide-out current
		$("li[menuid=" + $("body").attr("id") + "]", $root).parents("li").andSelf().addClass("current");		
		// add arrow to calle of submenu
		$top_list_elements.find("ul").prev("a").prepend("<span class='submenu_calle'></span >");
		// cache original margin and padding		
		var cache_margin_left = parseInt($top_list_elements.eq(0).css("margin-left"));
		var cache_padding_left = parseInt($top_list_elements.eq(0).children("a").css("padding-left"));
		// push out elements
		var push_out_width = $top_list_elements.eq(0).outerWidth(true) + $top_list_elements.eq(0).offset().left;	
		$top_list_elements.css("margin-left","-" + push_out_width + "px");		
		
		// initial slide-in effect
		var timerSlideIn = 0;
		$top_list_elements.each(function(i) {
			timerSlideIn = (timerSlideIn * options.multiplier + options.slide_in_time);
			$(this).animate({ marginLeft: cache_margin_left + options.padding_out + "px" }, timerSlideIn,'linear',
			function() { $(this).animate({ marginLeft: cache_margin_left + "px" }, timerSlideIn,'linear') });
		});
		
		// hover-in trigger /show/
    function hoverIn() {
			// highlight
			$(this).addClass("hover");
			// hide all siblings submenus
			$(this).siblings("li").find("ul").stop(true, true).hide();
			$(this).siblings("li").find("li").andSelf().removeClass("hover");
			$(this).siblings("li", $top_list_elements).children("a").animate({ paddingLeft: cache_padding_left }, options.slide_in_time).dequeue();		
			// stop hiding after hover-out from menu
			clearTimeout(timerHiding);
			if($.hiding){
				$(this).parents("ul", $root).stop(true, true).show();
			}
			// submenu display if exists
      var submenu = $(this).children("a").next("ul");
      if($(submenu)){ 
				$(submenu).css("left", $(this).parent().width());
				$(submenu).show(options.sub_show_time);
			}
    }
		// slide in- out-effect on hover 
		$top_list_elements.hover(
			function() { $(this).children("a").animate({ paddingLeft: cache_padding_left + options.padding_out }, options.slide_in_time).dequeue();	}
		);		
		$list_elements.hover(hoverIn);
		// animated restore on menu out
    $root.hover(
		  function(){ },
      function(){
			  timerHiding = setTimeout(
					function(){ 
						$.hiding = true; 
						$('ul:visible', $root).fadeOut(options.showTime, function() { hiding = false; });
						$("li", $root).removeClass("hover").children("a").animate({ paddingLeft: cache_padding_left }, options.slide_in_time).dequeue();
					}, options.hide_after_time
				);
			}
		);
		// quick retore on click outside of the menu
		$(document).click(function(){
			$("ul:visible", $root).hide();
			$("li", $root).removeClass("hover").children("a").css("padding-left", cache_padding_left);	
		});
	}
})})(jQuery);
