/*
 * Name: showElement
 * Author: Michael Stowe
 * Version 1.2
 * ---------------------
 * Displays an element when either it or its parent are being hovered on, using the "showelement" 
 * attribute on the parent, and the correpsonding ID on the element to be displayed.
 * ---------------------
 * Example: 
 * <a href="javascript:void(0);" showelement="example" effect="show" delay="0">Show Div</a>
 * <div style="display: none;" id="example">This is an example div</div>
 * ---------------------
 * Changelog: 
 * Added support for Fade, Slide, or Show jQuery effects, as defined by the "effect" attribute
 * Added ability to set delay using the delay attribute (500 = .5 seconds = default)
 * ---------------------
 * (c) 2010, http://www.mikestowe.com
 */

element_selected_id = 'void';
element_menuTimer = 'void';

function show_element(id,effect) {
	var formatted_id = '#'+id;
	if(element_menuTimer != 'void') { clearInterval(element_menuTimer); }
	if(element_selected_id != id && element_selected_id != 'void') { hide_element_now(element_selected_id, effect); }
	show_element_now(formatted_id,effect);
	element_selected_id = id;
}

function show_element_now(formatted_id,effect) {
	if(effect == 'show') { $(formatted_id).show(); }
	else if(effect == 'slide') { $(formatted_id).slideDown(); }
	else { $(formatted_id).fadeIn(); }
}

function hide_element(id,effect,delay) {
	element_formatted_id = '#'+id;
	if(effect == 'show') { element_menuTimer = setInterval('$(element_formatted_id).css(\'display\',\'none\')',delay); }
	else if(effect == 'slide') { element_menuTimer = setInterval('$(element_formatted_id).slideDown(\'fast\')',delay); }
	else { element_menuTimer = setInterval('$(element_formatted_id).fadeOut(\'fast\')',delay); }
	
}

function hide_element_now(id,effect) {
	var formatted_id = '#'+id;
	if(effect == 'show') { $(formatted_id).hide('fast'); }
	else if(effect == 'slide') { $(formatted_id).slideUp('fast'); }
	else { $(formatted_id).fadeOut('fast'); }
}

function load_showelement() {
	$.each($('[showelement]'),function(item) {
		var attr = $(this).attr('showelement');
		var id = $(this).attr('id');
		var effect = $(this).attr('effect');
		if(effect == 'undefined') { var effect = 'fade'; }
		var delay = $(this).attr('delay');
		if(parseInt(delay)!= delay-0) { var delay = 500; }
		var format = '#'+attr;

		// Update Parent Elements
		$(this).hover (
			function() {
				show_element(attr,effect);
			},
			function() {
				hide_element(attr,effect,delay);
		});

		// Do the same for the child element
		$(format).hover (
				function() {
					show_element(attr,effect);
				},
				function() {
					hide_element(attr,effect,delay);
		});
	});
}

window.onload = load_showelement;
