
// NO $ IN EACH!!!! (no come diceva andrea)
var BookmarksMenu = Class.create();
BookmarksMenu.prototype =
{
	initialize: function( element )
	{
		this.selectedTargetId = null;
		this.setupListeners();
	},
	
	setupListeners: function( element )
	{
		document.observe( 'BookmarksMenu:change', this.onChange.bindAsEventListener() );
	},
	
	onChange: function( event )
	{
		var selectedTargetId = this.selectedTargetId;
		var limit = selectedTargetId != null ? 2 : 1;
		if( selectedTargetId != null ) {
			new Effect.BlindUp( $( selectedTargetId ),
				{
					afterFinish: function( obj ) {
						var anchors = $$( 'a[href="#' + selectedTargetId + '"]' );
						anchors.each( function( item ) { item.removeClassName( 'selected' ) } );
					}.bind( this ),
					duration: 1,
					queue: { position: 'end', scope: 'BookmarksMenu', limit: limit }
				}
			);
		}
		if( selectedTargetId != event.memo.targetId ) {
			new Effect.BlindDown( $( event.memo.targetId ),
				{
					afterFinish: function( obj ) {
						var anchors = $$( 'a[href="#' + event.memo.targetId + '"]' );
						anchors.each( function( item ) { item.addClassName( 'selected' ) } );
						this.selectedTargetId = event.memo.targetId;
					}.bind( this ),
					duration: 1,
					queue: { position: 'end', scope: 'BookmarksMenu', limit: limit }
				}
			);
		} else this.selectedTargetId = null;
	}
}

function openHRef(href) {
	if(href.startsWith('#')) {
		var targetId = href.substr(1);
		if(targetId != undefined)
			document.fire( 'BookmarksMenu:change', { targetId: targetId } );
	} else {
		location.href = href;
	}
}

document.observe( 'dom:loaded', function() { var t = $( 'toolbox' ); if( t != undefined ) var toolbox = new BookmarksMenu( toolbox ) } );