// Bridges to Communication

var gTimeoutTime = 400;
var triggers = [];
var timeouts = {};

var setupOnce = false;
function setup(){
	if (setupOnce) return;
	setupOnce = true;
	$('.trigger').bind('click',      handleTriggerClicked);
	$('.trigger').bind('mouseout',   handleTriggerOut);
	$('.trigger').bind('mouseover',  handleTriggerOver);
	$('.dropdown').bind('click',     handleDropdownClicked);
	$('.dropdown').bind('mouseout',  handleDropdownOut);
	$('.dropdown').bind('mouseover', handleDropdownOver);
}
function stop(e){
	e.stopPropagation();
	e.preventDefault();
}
function getMenu(el){
	return $('#'+el.id.replace('_trigger','_menu'));
}
function handleTriggerClicked(e){
	stop(e);
	show(getMenu(e.target));
}
function handleTriggerOut(e){
	var id = e.target.id;
	var execString = 'hide($("#'+id.replace('_trigger','_menu')+'"));';
	window.timeouts[id.replace('_trigger','_timeout')] = window.setTimeout(execString, gTimeoutTime);
}
function handleTriggerOver(e){
	var id = e.target.id;
	var menu = $('#'+id.replace('_trigger','_menu'));
	//show(menu);
	clearTimeout(window.timeouts[id.replace('_trigger','_timeout')]);
}

function handleDropdownClicked(e){
	hide(getMenu(e.target));
}
function handleDropdownOut(e){
	var el = e.target;
	while(el.tagName.toLowerCase() != 'ul'){
		el = el.parentNode;
	}
	var id = el.id;
	var execString = 'hide($("#'+id+'"));';
	window.timeouts[id.replace('_menu','_timeout')] = window.setTimeout(execString, gTimeoutTime);
}
function handleDropdownOver(e){
	var el = e.target;
	while(el.tagName.toLowerCase() != 'ul'){
		el = el.parentNode;
	}
	show(el);
	clearTimeout(window.timeouts[el.id.replace('_menu','_timeout')]);
}

function show(el){
	$(el).removeClass('hidden');
}
function hide(el){
	$(el).addClass('hidden');
}

$.event.add(window, "DOMContentLoaded", setup);
$.event.add(window, "load", setup);


