if ( trudev )
{

	trudev.Navigation = {
		items: [],
		subLayer: {},
		fadeTimeout: null,
		fadeDelay: 0.5,
		lastOpenedLayer: null
	};
	
	
	
	trudev.Navigation.init = function()
	{
		this.items = $( 'mainNav' ).select( 'li a' );
		var index = this.items.length;
		
		while ( index-- )
		{
			var cur = this.items[ index ];
			cur.observe( 'mouseover', trudev.Navigation.onMouseOver );
			cur.observe( 'mouseout', trudev.Navigation.onMouseOut );
			cur.observe( 'focus', trudev.Navigation.onMouseOver );
		}
	};
	
	
	
	trudev.Navigation.fetchId = function( rawId )
	{
		return rawId.split( '_' )[ 1 ];
	};
	
	
	
	trudev.Navigation.onMouseOver = function( ev )
	{
		var nav = trudev.Navigation,
			el = Event.element( ev || window.event ),
			id = nav.fetchId( el.id );

		if ( typeof( nav.subLayer[ id ] ) === 'undefined' )
		{
			var html = nav_data ? nav_data[ id ] || '' : '',
				has_subs = html ? true : false;

			if ( has_subs )
				el.up().insert( html );

			nav.subLayer[ id ] = has_subs ? $( 'subLayer_' + id ) : false;
			
			if ( nav.subLayer[ id ] )
			{
				nav.subLayer[ id ].observe( 'mouseover', nav.preventHiding );
				nav.subLayer[ id ].observe( 'mouseout', function(){ nav.hideSubLayer( id ) } );
			}
		}

		nav.preventHiding();

		// close opened layer
		if ( nav.lastOpenedLayer && nav.lastOpenedLayer != id )
			nav.hideSubLayer( nav.lastOpenedLayer, true );

		if ( nav.subLayer[ id ] )
		{
			nav.subLayer[ id ].style.cssText = "top:" + ( el.getHeight() ) + "px";
			el.className += ' mainOpened';
			nav.lastOpenedLayer = id;
		}
	};
	
	
	
	trudev.Navigation.onMouseOut = function( ev )
	{
		var nav = trudev.Navigation,
			el = Event.element( ev || window.event ),
			id = nav.fetchId( el.id );
			
		if ( typeof( nav.subLayer[ id ] ) !== 'undefined' && nav.subLayer[ id ] )
			nav.hideSubLayer( id );
	};
	
	
	
	trudev.Navigation.preventHiding = function()
	{
		clearTimeout( trudev.Navigation.fadeTimeout );
	};
	
	
	
	trudev.Navigation.hideSubLayer = function( id, noTimeout )
	{
		var nav = trudev.Navigation,
			hide_func = function(){ nav.subLayer[ id ].hide(); nav.removeOpenClass( id ) };

		noTimeout ?  hide_func() : ( nav.fadeTimeout = setTimeout( hide_func, nav.fadeDelay  * 1000 ) );
	};
	
	
	
	trudev.Navigation.removeOpenClass = function( id )
	{
		$( 'item_' + id ).className = $( 'item_' + id ).className.replace( /mainOpened/g, '' );
	}

	
	
	if ( trudev.Application )
		trudev.Application.addComponent( trudev.Navigation );
}
