if($.fn.IntMenuList == undefined){
	$.fn.IntMenuList = function(options)
	{
		var IntMenu = function(master_ul)
		{
			if(master_ul == undefined || !master_ul.is('ul'))
			{
				alert('Wybierz element ul!');
				this.menu_allowed = false;
			}
			else
			{
				this.master_ul = master_ul;
				this.menu_allowed = true;
			}
		};
	
		IntMenu.prototype.menu_allowed = false;
		IntMenu.prototype.master_ul = null;
		IntMenu.options = {};
		IntMenu.autohide_handle = null;
		IntMenu.stage = 1;
		IntMenu.is_sliding = false;
	
		IntMenu.prototype.trigger = function(options)
		{
			IntMenu.options = options;
			this.master_ul.addClass('intmenu-master');
			IntMenu.options.master_ul = this.master_ul;
			IntMenu.initStages(this.master_ul);
		};
	
		IntMenu.initStages = function(ul_element, menu_stage)
		{
			var stage = menu_stage || 1;
			
			if(stage > 1 && IntMenu.options.submenu_class != undefined)
			{
				ul_element.addClass(IntMenu.options.submenu_class);
			}
			
			if(!ul_element.hasClass('intmenu-stage'))
			{
				ul_element.addClass('intmenu-stage');
				ul_element.attr('rel', stage);
			}
			
			ul_element.find('>li').each(function()
			{
				var ul_element_inside = $(this).find('ul:first');
				
				if(ul_element_inside.is('ul'))
				{
					var first_node = null;
					$(this).contents().filter(function()
					{ 
						if(first_node == null && this.nodeType == 1)
						{
							first_node = $(this);
						}
					});
					
					first_node.wrap('<span class="intmenu-activator"></span>');
					
					if(IntMenu.options.link_class != undefined)
					{
						first_node.parents('span:first').addClass(IntMenu.options.link_class);
					}
					
					if(IntMenu.options.cursor != undefined)
					{
						$(this).find('span').css({cursor: IntMenu.options.cursor});
					}
					
					/// POKAZ AKTYWNE
					if(IntMenu.options.show_active == true){
						if(!ul_element_inside.find('.active').length)
							ul_element_inside.hide();
						else
							ul_element_inside.parents('li:first').find('.intmenu-activator:first').addClass('has-active');
					}
					else
						ul_element_inside.hide();
					if(typeof IntMenu.options.action == 'string')
					{
						first_node.parents('span:first').
						bind(IntMenu.options.action, 
								{submenu: ul_element_inside, type: 'toggle'}, 
								IntMenu.showSubmenu);
					}
					else if(typeof IntMenu.options.action == 'object')
					{
						if(IntMenu.options.action.show != undefined)
						{
							first_node.parents('span:first').
							bind(IntMenu.options.action.show, 
									{submenu: ul_element_inside, type: 'show'}, 
									IntMenu.showSubmenu);
						}
						else
						{
							alert('Zmien opcję action na stringa albo dopisz do niej zmienną "show"');
							return false;
						}
						
						if(IntMenu.options.action.hide != undefined)
						{
							first_node.parents('span:first').
							bind(IntMenu.options.action.hide, 
									{submenu: ul_element_inside, type: 'hide'}, 
									IntMenu.showSubmenu);
						}
					}
					
					IntMenu.initStages(ul_element_inside, stage+1);
				}
			});
			
	
			var li_float = ul_element.find('li:first').css('float');
	
			if(li_float == 'right' || li_float == 'left')
			{
				ul_element.addClass('intmenu-horizontal');	
			}
			else
			{
				ul_element.addClass('intmenu-vertical');
			}
			
		};
	
		IntMenu.toggle = function(submenu, force_hide, force_show)
		{
			IntMenu.clearAutohide();
			
			if(force_hide == undefined)
				force_hide = false;
			
			if(force_show == undefined)
			{
				force_show = false;
			}
	
			
			var li = submenu.parents('li:first');
			var ul = submenu.parents('ul:first');
			var position = li.position();
			var li_width = li.outerWidth();
			li_width += parseInt(ul.css('paddingRight'));	
			var li_height = li.outerHeight();
			
			if(IntMenu.isHorizontal(submenu))
			{
				submenu.css({
					top: (position.top + li_height) + 'px',
					left: position.left + 'px'
				});
				
				//sprawdzamy czy nie wystaje za ekran
				var pos_left = parseInt(submenu.css('left'));
				if(pos_left + submenu.outerWidth(true) > $(window).width())
				{
					var margin_padding = parseInt(submenu.css('marginLeft'));
					margin_padding += parseInt(submenu.css('marginRight'));
					margin_padding += parseInt(submenu.css('paddingLeft'));
					margin_padding += parseInt(submenu.css('paddingRight'));
	
					submenu.css({
						left: (position.left - submenu.outerWidth() + li_width) + 'px'
					});
				}
			}
			else if(IntMenu.isVertical(submenu))
			{
				position.top -= parseInt(ul.css('paddingBottom'));
				position.top -= parseInt(ul.css('borderTopWidth'));
				submenu.css({
					top: position.top + 'px',
					left: (position.left + li_width) + 'px'
				});
			}
			
			if(force_show)
			{
				IntMenu.show(submenu);
				return true;
			}
			
			if(force_hide)
			{
				IntMenu.hide(submenu);
				return true;
			}
			
			if(submenu.is(':hidden'))
			{
				IntMenu.show(submenu);
			}
			else
			{
				IntMenu.hide(submenu);
			}
		};
	
		IntMenu.isHorizontal = function(submenu)
		{
			return submenu.parents('ul.intmenu-stage:first').hasClass('intmenu-horizontal');
		};
	
		IntMenu.isVertical = function(submenu)
		{
			return submenu.parents('ul.intmenu-stage:first').hasClass('intmenu-vertical');
		};
	
		IntMenu.show = function(submenu)
		{
//			if(submenu.hasClass('intmenu-showed'))
//				return false;
			
			var speed = IntMenu.options.speed || 'slow';
			
			submenu.removeClass('intmenu-hided');
			submenu.addClass('intmenu-showed');
			
			if(IntMenu.isVertical(submenu))
			{
				submenu.animate({width:'show'}, speed);
			}
			else if(IntMenu.isHorizontal(submenu))
			{
				submenu.slideDown(speed);
			}
		};
	
		IntMenu.hide = function(submenu)
		{
//			if(submenu.hasClass('intmenu-hided'))
//				return false;
			
			submenu.find('ul').hide(0);
			
			var speed = IntMenu.options.hide_speed || 0;
			
			submenu.removeClass('intmenu-showed');
			submenu.addClass('intmenu-hided');
			
			
			if(IntMenu.isHorizontal(submenu) || IntMenu.options.type == 'slidedown')
			{
				submenu.slideUp(speed);
			}
		  else if(IntMenu.isVertical(submenu))
			{
				submenu.animate({width:'hide'}, speed);
			}
			
			
		};
		
		
		IntMenu.slideUp = function(submenu){
			if(IntMenu.is_sliding)
				return false;
			
			submenu.find('ul').hide(0);
			
			var speed = IntMenu.options.hide_speed || 0;
			
			submenu.removeClass('intmenu-showed');
			submenu.addClass('intmenu-hided');
			
			IntMenu.is_sliding = true;
			submenu.slideUp(speed, IntMenu.resetSliding);		
			
		};
		
		IntMenu.slideDown = function(submenu){
			if(IntMenu.is_sliding)
				return false;
			
			var speed = IntMenu.options.speed || 'slow';
			
			submenu.removeClass('intmenu-hided');
			submenu.addClass('intmenu-showed');
			
			IntMenu.is_sliding = true;
			submenu.slideDown(speed, IntMenu.resetSliding);
			
		};
		
		IntMenu.resetSliding = function(){
				IntMenu.is_sliding = false;
		}
	
		IntMenu.autohide = function(submenu, time)
		{
			$([submenu.context, submenu.parents('ul:first').context]).bind('mouseleave', 
									 {submenu: submenu, time: time}, 
									 function(event, submenu, time)
									 {
										 IntMenu.clearAutohide();
										 var hide_all = (!$(event.relatedTarget).parents('.intmenu-master:first').is('ul'));
										 if(submenu == undefined)
											 submenu = event.data.submenu;
										
										 if(time == undefined)
											 time = event.data.time;
	
										 IntMenu.autohide_handle = setTimeout(function()
										 {
											 if(hide_all)
											 {
												 IntMenu.hide($('.intmenu-showed'));
											 }
											 
											 IntMenu.toggle(submenu, true);
										 }, time);
									 });
			
	
			$([submenu.context, submenu.parents('ul:first').context]).bind('mouseenter', IntMenu.clearAutohide);
	
		};
	
		IntMenu.clearAutohide = function()
		{
			if(IntMenu.autohide_handle != null)
			{
				clearTimeout(IntMenu.autohide_handle);
			}
		};
	
		IntMenu.showSubmenu = function(event)
		{
			event.stopPropagation();
			var submenu = event.data.submenu;
			var autohide = IntMenu.options.autohide;
			var type = event.data.type;
	
			var parent_ul = $(this).parents('ul.intmenu-stage:first');
			var stage = parseInt(parent_ul.attr('rel'));
	
			IntMenu.hide(IntMenu.options.master_ul.find('[rel='+(stage+1)+']').not(submenu));
			
			if(IntMenu.options.element_nowrap != undefined)
			{
				submenu.find('li ' + IntMenu.options.element_nowrap).css({
					whiteSpace: 'nowrap'
				});
			}
			else
			{
				submenu.find('li').css({
					//whiteSpace: 'nowrap'
				});
			}
			
			if(IntMenu.options.type == 'slidedown'){
				if(type == 'show'){
					IntMenu.slideDown(submenu);
				}
				else if( type == 'hide'){
					IntMenu.slideUp(submenu);
				}
				
				return true;
			}
	
	
			if(submenu.css('position') != 'absolute')
			{
				submenu.css('position', 'absolute');
			}
	
			if(type == 'toggle')
			{
				IntMenu.toggle(submenu);
			}
			else if(type == 'show')
			{
				IntMenu.toggle(submenu, false, true);
			}
			else if(type == 'hide')
			{
				IntMenu.toggle(submenu, true, false);
			}
			
			if(autohide != false)
			{
				IntMenu.autohide(submenu, autohide);
				//submenu.trigger('mouseleave', [submenu, autohide]);
				//IntMenu.clearAutohide();
			}
	
		};	
		// IntMenu class ends
		
		var menu = new IntMenu(this);
	
		if(menu.menu_allowed)
		{
			menu.trigger(options);
		}
	};
	
	var IntMenuBuilder = function(){
	};
	
}

