var sitenav = {
	dimensions : null,
	active_element : null,
	timer : null,
	init : function() {
		sitenav.wrapper = $( "sitenav" );
		var wrapper = sitenav.wrapper;
		if ( !wrapper ) { return false; }
		
		sitenav.dimensions = wrapper.down("ul").getDimensions();
		Event.observe( wrapper, "mouseover", function( e ) {
			var origin = sitenav.discoverOrigin( e );
			if( !origin ) { return false; };
			//clear submenu and timers.
			if ( sitenav.active_element && ( sitenav.active_element  == origin) ) {
				if ( sitenav.timer ) {
					window.clearTimeout( sitenav.timer );
					sitenav.timer = null;
					return;
				}
			} else if ( sitenav.active_element ) {
				sitenav.clearSubmenu( sitenav.active_element );
				window.clearTimeout( sitenav.timer );
			} 
			sitenav.positionSubmenu( origin );
		});
		Event.observe( wrapper, "mouseout", function( e ) {
			var origin = sitenav.discoverOrigin( e );
			if( origin ) {
			    sitenav.timer = window.setTimeout( function(){
			        sitenav.clearSubmenu( origin );
					sitenav.activateSubmenu();
			    }, 500 );
			}
		});
		
		// Activate submenues
		sitenav.activateSubmenu();

	},
	positionSubmenu : function ( origin ) {
		var submenu = origin.down( "ul.submenu" );
		var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
		if ( submenu && !submenu.isPositioned ) { 
			if(IE6)submenu.style.width = '100%';
			
			if ( sitenav.dimensions.width - origin.offsetLeft < submenu.getDimensions().width ) {
				//position submenu right.
				submenu.setStyle({
					right: "0",
					left: "auto"
				});
			} else {
				//position below origin.
				submenu.setStyle({
				  left: origin.offsetLeft + "px"
				});
			}
			submenu.isPositioned = true;
		}
		origin.addClassName( "open" );
		sitenav.active_element = origin;
	
	},
	activateSubmenu : function() {
		var menuItem = $("sitenav").down( "li.selected" );
		if ( menuItem ) {
			sitenav.positionSubmenu( menuItem );
		}
	},
	clearSubmenu : function( submenu ) {
		submenu.removeClassName( "open" );
		sitenav.active_element = null;
	},
	discoverOrigin : function( e ) {
		var origin = Event.element( e );
		if ( origin.tagName.toLowerCase() != "li" ){
			origin = origin.up( ".trigger");
		}
		return origin;
	}
};

document.observe("dom:loaded", function() {
	sitenav.init();
});



