

	$.fn.accordion = function( options )
	{
		var $accordion = $(this);
		
		$accordion.data( 'pageFound', false );
		
		var opts = $.extend( $.fn.accordion.defaults, options );
		
		var $items = $( '>ul>li', $accordion );
		
		$items.each( function(){ $.fn.accordion.initMenu( $(this), $accordion ) } );
		
		return $accordion;
	};
	
	$.fn.accordion.defaults = {};
	
	
	$.fn.accordion.show = function( $menu )
	{
		var $submenu = $menu.data('submenu');
		
		if( $submenu )
		{
			$submenu.show();
			$menu
				.data( 'hidden', false );
			$menu
				.removeClass( 'accordion-menu-collapsed' );
			$menu
				.addClass( 'accordion-menu-expanded' );
		}
		
		$menu.show();
	};

	
	$.fn.accordion.expand = function( $menu )
	{
		var $submenu = $menu.data('submenu');
		
		if( $submenu )
		{
			$submenu.slideDown();
			$menu
				.data( 'hidden', false );
			$menu
				.removeClass( 'accordion-menu-collapsed' );
			$menu
				.addClass( 'accordion-menu-expanded' );
				
			var $link = $( '>span>a', $menu );
			$link
				.removeClass( 'accordion-menu-collapsed-link' )
				.addClass( 'accordion-menu-expanded-link' );
		}
	};
	
	
	$.fn.accordion.collapse = function( $menu )
	{
		var $submenu = $menu.data('submenu');
		
		if( $submenu )
		{
			$submenu.slideUp();
			$menu
				.data( 'hidden', true )
				.addClass( 'accordion-menu-collapsed' )
				.removeClass( 'accordion-menu-expanded' );
				
			var $link = $( '>span>a', $menu );
			$link
				.addClass( 'accordion-menu-collapsed-link' )
				.removeClass( 'accordion-menu-expanded-link' );
				
			var $submenuitems = $( '>ul>li', $menu );
			
			if( $submenuitems.length > 0 )
			{
				$submenuitems.each( function(){
					$.fn.accordion.collapse( $(this) );	
				});
			}
		}
	};
	
	$.fn.accordion.collapseSiblings = function( $menu )
	{
		$siblings = $menu.data('siblings');
		if( $siblings )
		{
			$siblings.each( function(){
				
				if( $(this).data('submenu') )
				{
					$.fn.accordion.collapse( $(this) );
				}
			});
		}
	};
	
	$.fn.accordion.initMenu = function( $menu, $accordion )
	{
		var $submenuitems = $( '>ul>li', $menu );
			
		var $link = $( '>span>a', $menu );
			
		if( $submenuitems.length > 0 )
		{
			$menu
				.addClass( 'accordion-menu-hassubmenu' );
			$menu
				.addClass( 'accordion-menu-collapsed' );
			
			$link.addClass( 'accordion-menu-collapsed-link' );
			
			var $siblings = $menu.siblings();
			
			var $submenu = $( '>ul', $menu );
			
			$menu.data( 'submenu', $submenu );
			
			$menu.data( 'siblings', $siblings );
			
			$menu.data( 'hidden', true );
			
			$menu.data( 'link', $link );
			
			$link.data( 'menu', $menu );
			
			$link.click( function(){
				
				$menu = $(this).data('menu');
				
				if( $menu.data('hidden') )
				{
					$.fn.accordion.expand( $menu );
					$.fn.accordion.collapseSiblings( $menu );
				}
				else
				{
					$.fn.accordion.collapse( $menu );
				}
				
				return false;
			});
			
			$submenuitems.each( function(){
			
				$submenuitem = $(this);
				$.fn.accordion.initMenu( $submenuitem, $accordion );
			
			} );
		}
			
		if( $accordion.data( 'pageFound' ) == false && $link.hasClass( 'current_page' ) )
		{
			$accordion.data( 'pageFound', true );
			
			$.fn.accordion.show( $menu );
		}
	};
	
	$.fn.accordion.setup = function()
	{
		$('.accordion-menu').accordion();
	};
	
	$(document).ready( $.fn.accordion.setup );