var sitenav = {
	dimensions : null,
	active_element : null,
	timer : null,
	init : function() {
		var wrapper = $( "sitenav" );
		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 );
			} 
			//position submenu.
			var submenu = origin.down( "div.submenu" );
			if ( submenu && !submenu.isPositioned ) { 
				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;
		});
		Event.observe( wrapper, "mouseout", function( e ) {
			var origin = sitenav.discoverOrigin(e);
			if( origin ) {
			    sitenav.timer = window.setTimeout( function(){
			        sitenav.clearSubmenu( origin );
			    }, 500 );
			}
		});
	},
	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( "li" );
		}
		return origin;
	}
};

Event.onReady( function() {
	sitenav.init();
});
