(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);

(function($){ 
     $.fn.extend({  
         accordion: function(options) {       
            $.fn.accordion.defaults = {
					links_selector: 'li.acc>a',
					li_selector: 'li.acc',
					contents_selector: 'ul.acc_sub, div.acc_sub',
					current_selector: 'li.current',
					link_highlight_class: 'highlight',
					li_highlight_class: 'active',
					open_selector: 'a.show_all_accordion',
					txt_open: 'show all',
					txt_close: 'close all',
					count_li: -1,
					close_other: false
			};
			
			// build main options before element iteration
			var opts = $.extend({}, $.fn.accordion.defaults, options);
			
			return this.each(function() {
				if($(this).data('accordiated'))
					return false;									
				$.each($(this).find(opts.contents_selector), function(){
					$(this).data('accordiated', true);
					$(this).hide();
				});
				$.each($(this).find(opts.links_selector), function(){
					$(this).click(function(e){
						if (opts.close_other) activate(e.target, 'slideToggle', 'parents', true);
						else activate(e.target, 'slideToggle', 'parents', false);
						return false;
					});
				});
				
				//open selected item------
				var active = false;
				
				if(location.hash)
					active = $(this).find('a[href=' + location.hash + ']')[0];
				else {
					if($(this).find(opts.current_selector).length > 0) {
						active = $(this).find(opts.current_selector+' a')[0];
						//2nd level?
						if ($(active).parent().find(opts.current_selector).length > 0) active = $(active).parent().find(opts.current_selector+' a')[0];
					}
				}		
				 
				if(active){
					activate(active, 'toggle','parents', true);
					$(active).parents().show();
				}
				
				//init show all button -----------------------------------------
				opts.count_li = $(this).find(opts.links_selector).length;
				
				$(this).find(opts.open_selector).click(function(e){
						showAll(e.target);
						return false;
				});
				
				
				function activate(el,effect,parents, close_other){
					var liTag = $(el)[(parents || 'parent')](opts.li_selector); 
					if (close_other) liTag.siblings().children('a').removeClass(opts.link_highlight_class);
					liTag.toggleClass(opts.li_highlight_class);
					if (close_other) liTag.siblings().removeClass(opts.li_highlight_class).children(opts.contents_selector).slideUp('fast');
					
					aTag = el;
					aTag = (el.tagName != "A") ? $(el).parent() : $(el); 
					aTag.siblings(opts.contents_selector)[(effect || 'slideToggle')]((!effect)?'fast':'fast');
					
					liTag.children('a').toggleClass(opts.link_highlight_class);
					
					updateShowAllBtn(el);
				}
				
				function showAll(el) {
					var elem = $(el);
					var open = elem.hasClass(opts.link_highlight_class); 
					
					if (open) {
						//close
						elem.html(opts.txt_open);
						elem.parent().siblings(opts.li_selector).removeClass(opts.li_highlight_class).children('a').removeClass(opts.link_highlight_class).siblings(opts.contents_selector).slideUp('fast');
					} else {
						//open
						elem.html(opts.txt_close);
						elem.parent().siblings(opts.li_selector).addClass(opts.li_highlight_class).children('a').addClass(opts.link_highlight_class).siblings(opts.contents_selector).slideDown('fast');
					}
					
					elem.toggleClass(opts.link_highlight_class);
				}
				
				function updateShowAllBtn(el) {
					var elem = $(el);
					var list_el = elem.parent().parent();
					var currentCount =  list_el.find(opts.li_selector+"."+opts.li_highlight_class).length;
					
					if (currentCount == 0) {
						list_el.find(opts.open_selector).removeClass(opts.link_highlight_class).html(opts.txt_open);
					}

					if (currentCount == opts.count_li) {
						list_el.find(opts.open_selector).addClass(opts.link_highlight_class).html(opts.txt_close);
					}					
				}
				
            });
        } 
    }); 
})(jQuery);




