/**************************************************************************
* Menu / Rollover Handler
*
* Sets up links, drop down menus, and rollover image links.
* Scott Wespi (scott@darkstardesign.com)
*
* Requires Prototype / Scriptaculous
**************************************************************************/
var dsd_menu = {
	_auto_close_time: 100,
	_close_timeout: false,
	_current_menu: 0,
	_ddm_top_offset: 3,
	_ddm_left_offset: 0,
	
	init: function() {	
		// rollovers
		$$('a.rollover').each(function(s){
			var a = new Image();
			var b = s.down().src;
			a.src = ( b.substring(0,b.lastIndexOf('.')) + '-over' + b.substring(b.lastIndexOf('.'),b.length) );
			s.oldImg = a;
			s.onmouseover = dsd_menu.swap;
			s.onmouseout = dsd_menu.swap;
		});
		
		// drop downs
		$$('.drop-down').each(function(menu) {
			menu.select('.sub-toc').each(function(s) {
				if (s.previous()) {
					// if the sub-toc doesn't have a previous element, the drop down won't work
					s.onmouseover = dsd_menu.cancel_close;
					s.onmouseout = dsd_menu.start_close;
			
					s.previous().onmouseover = dsd_menu.open;
					s.previous().onmouseout = dsd_menu.start_close;
				}
			});
		});	
		
		// offsite and file
		$$('a[rel=offsite]').each(dsd_menu.new_window);
		$$('a[rel=off-site]').each(dsd_menu.new_window);
		$$('a[rel=file]').each(dsd_menu.new_window);
	},
	
	swap: function() {
		// if a drop down is open, close it
		if (this.oldImg) {
			a = this.down().src;
			this.down().src = this.oldImg.src;
			this.oldImg.src = a;
		}
	},
	
	open: function() {
		dsd_menu.cancel_close();	
		dsd_menu.close();
		if (!$(this).next('.sub-toc').hasClassName('out')) {
			if ($(this).hasClassName('rollover')) {
				dsd_menu.swap.call($(this));
			}
		}
		
		var prev_pos = $(this).positionedOffset();
		var prev_dim = $(this).getDimensions();
		
		dsd_menu._current_menu = $(this).next('.sub-toc');
		$(this).next('.sub-toc').setStyle(
			'left:' + (prev_pos.left + dsd_menu._ddm_left_offset) + 'px;' +
			'top:' + (prev_pos.top + dsd_menu._ddm_top_offset + prev_dim.height) + 'px;'
		);
		$(this).next('.sub-toc').show(); // could use effect here
		$(this).next('.sub-toc').addClassName('out');
		$(this).addClassName('out');
	},
	
	close: function() {
		if (dsd_menu._current_menu) {
			if (dsd_menu._current_menu.previous().hasClassName('rollover')) {
				if (dsd_menu._current_menu.hasClassName('out')) {
					dsd_menu.swap.call(dsd_menu._current_menu.previous());
				}
			}
			dsd_menu.close_menu(); // could use effect here
		}
	},
	
	close_menu: function() {
		if (dsd_menu._current_menu) {
			dsd_menu._current_menu.removeClassName('out');
			dsd_menu._current_menu.previous().removeClassName('out');
			dsd_menu._current_menu.hide(); // could use effect here
			dsd_menu._current_menu = false;
		}
	},
	
	start_close: function() {
		dsd_menu._close_timeout = window.setTimeout(dsd_menu.close, dsd_menu._auto_close_time);
	},
	
	cancel_close: function() {
		if(dsd_menu._close_timeout) {
			window.clearTimeout(dsd_menu._close_timeout);
			dsd_menu._close_timeout = false;
		}
	},
	
	new_window: function(s) {
		s.target = '_blank';
	}
};
