(function($){ 
     $.fn.extend({  
         mainMenu: function(options) {       
            $.fn.mainMenu.defaults = {
					submenu_box_selector: '.submenu_box',
					sublayers_selector: '.sublayers',
					sublayers_inner_selector: '.sublayers_inner',
					contents_selector: '.item',
					submenu_selector: 'ul.level2',
					submenu_items_selector: 'ul.level2 li',
					li_first_hover_class: 'hover',
					li_second_hover_class: 'active',
					submenu_box_small_class: 'small',
					submenu_box_to_left_class: 'to_left',
					base_fontsize: 12,
					box_width: 500,
					max_width: 995
			};
			
			// build main options before element iteration
			var opts = $.extend({}, $.fn.mainMenu.defaults, options);
			
			return this.each(function() {
				
				$this = $(this);
				
				/*
				*	hide all subnavi
				*/				
				$sublayer_boxes = $this.find(opts.submenu_box_selector); 
				$sublayer_boxes.find(opts.sublayers_selector).hide().find(opts.contents_selector).hide();
				$sublayer_boxes.hide();
				
				/*
				*	hover class / 1st level
				*	show subnavi box
				*/				
				$.each($this.children(), function(){
					$li_tag = $(this);
					
					$li_tag.hover(
					  function () {
						/* over */
						$(this).addClass(opts.li_first_hover_class);
						
						$submenu_box = $(this).find(opts.submenu_box_selector);						
						$submenu_box.show().addClass(opts.submenu_box_small_class);
						opts.submenu_height = $(this).find(opts.submenu_selector).height() * 1;
						
						var offset = $(this).offset();
						
						if (offset.left+opts.box_width > opts.max_width) {
							$submenu_box.addClass(opts.submenu_box_to_left_class);
						}
						
					  }, 
					  function () {
						/* out */
						$(this).removeClass(opts.li_first_hover_class);
						$(this).find(opts.submenu_box_selector+' '+opts.sublayers_selector).hide().find(opts.contents_selector).hide();
						$(this).find(opts.submenu_box_selector).hide();
						
						$(this).find(opts.submenu_items_selector).removeClass(opts.li_second_hover_class);
					  }
					);

					
				});
				
				/*
				*	hover class / 2nd level
				*	show info boxes
				*/				
				$.each($this.children().find(opts.submenu_items_selector), function(){
					$li_tag = $(this);
					
					$li_tag.hover(
					  function () {
						/* over */
						/* close others / reset */
						$(this).siblings().removeClass(opts.li_second_hover_class).parents(opts.submenu_box_selector).removeClass(opts.submenu_box_small_class).find(opts.sublayers_selector).hide().find(opts.contents_selector).hide();
						$items_container = $(this).parents(opts.submenu_box_selector).find(opts.sublayers_inner_selector);
						$items_container.css('height','auto');
						
						/* show self */
						page_id = extractId($(this).attr('class'),"page");
						if (page_id != "") {
							$(this).addClass(opts.li_second_hover_class);
							$info_box = $(this).parents(opts.submenu_box_selector).find('#info_'+page_id);
							if ($info_box.length == 1) {
								$(this).parents(opts.submenu_box_selector).find(opts.sublayers_selector).show();
								$info_box.show();
								if ($items_container.height() < opts.submenu_height ) $items_container.css('height', (opts.submenu_height/opts.base_fontsize)+'em');
							} else {
								$(this).parents(opts.submenu_box_selector).addClass(opts.submenu_box_small_class);
							}	
						} else {
							$(this).parents(opts.submenu_box_selector).addClass(opts.submenu_box_small_class);
						}
					  }, 
					  function () {
						/* out */
					  }
					);

					
				});
				
				function extractId(txt,token){
					var parts = txt.split(" ");
					var val = "";
					for (var i=0; i<parts.length; i++) {
						var part = parts[i];
						var start = part.indexOf(token+"_");
						if (start != -1) {
							val = part.substring(start+(token.length+1), part.length);
						}

					}
					return val;
				}
				
            });
        } 
    }); 
})(jQuery);

