
// Following code courtesy of http://javascript-array.com/scripts/jquery_simple_drop_down_menu/.  With a few mods of course.


var timeout = 250;
var dmTime = 500;
var closetimer = 0;
var ddmenuitem = 0;
var isOpen = false;
var isOpening = false;
var isClosing = false;
var closeP = -162;			// closed top position for dropdown menu


function jsddm_open() { 
	if(isMobile){
		jsddm_close_all();
	}
   var name; var container; var menu;
   name = $(this).attr('id');
   if(name.indexOf('_drop') == -1){
   		name = "#" + name;
   		menu = $(name + '_drop');
   		container = $(menu).parent();
   }
   else{
		name = "#" + name.replace('_drop', '');   
		container = $(this).parent();
		menu = this;
   }
   if(isMobile){
   	$(name).css('color', '#FC0');
   }
   else {
	   jsddm_canceltimer(name);
	}
   if (!menu_objects[name].isOpen) { 
   		$(container).removeClass('invisible');
   		$(menu).parent().css('height', menu_objects[name].height);
   		if (!menu_objects[name].isOpening && !menu_objects[name].isClosing) { 
			$(menu).animate({top: 0}, dmTime, 'linear', function(){doneOpen(name); });   
	   		menu_objects[name].isOpening = true;
		}
		else if (menu_objects[name].isClosing) {
			$(menu).stop();  	
			var perc = (0 - $(menu).position().top)/(0 - $(container).height());
			if(perc < 0) { perc = 1; };
			$(menu).animate({top: 0}, dmTime*perc, 'linear', function(){doneOpen(name); });
			menu_objects[name].isOpening = true;			
			menu_objects[name].isClosing = false;
		}
		menu_objects[name].isOpen = true;
		if(isMobile){
			$(name).unbind('click', jsddm_open);
			$(name).click(jsddm_close_all);
		}
		// used to swap image back to rollover
//		closeAllTimer = window.setTimeout(closeAllLoop, dmTime * 1.5);
   }
}


function jsddm_close_all() {
	for(var name in menu_objects){
		jsddm_close(name);
	}
}

function jsddm_close(name) {
	if (menu_objects[name].isOpen) {
		if (!menu_objects[name].isClosing && !menu_objects[name].isOpening) {
			$(name + '_drop').animate({top: -$(name + '_drop').parent().height()}, dmTime, 'linear', function() {doneClosed(name);});
			menu_objects[name].isClosing = true;
		}
		else if (menu_objects[name].isOpening) {
			$(name + '_drop').stop();
			var perc = ($(name + '_drop').position().top - $(name + '_drop').parent().height())/(0 - $(name + '_drop').parent().height());
			if(perc < 0) { perc = 1; };
			$(name + '_drop').animate({top: -$(name + '_drop').parent().height()}, dmTime*perc, 'linear', function() {doneClosed(name);});
			menu_objects[name].isClosing = true;
			menu_objects[name].isOpening = false;
		}
		menu_objects[name].isOpen = false;
	}
	if(isMobile){
		$(document).unbind('click', jsddm_close_all);
		$(name).unbind('click', jsddm_close_all);
		$(name).click(jsddm_open);
		if(typeof currentpage != "undefined"){
			var link_reference_key = location.hash.replace("#/", "");
			link_reference_key = link_reference_key.substring(0, link_reference_key.lastIndexOf('.'));
			if(link_reference_key.lastIndexOf('/') > -1){
				link_reference_key = link_reference_key.substring(0, link_reference_key.lastIndexOf('/'));
			}
			//console.log("!(" + link_reference_key + " in link_reference) || " + name + " != " + link_reference[link_reference_key].mainItemName);
			if(!(link_reference_key in link_reference) || name != link_reference[link_reference_key].mainItemName){
				//console.log("going grey");
				$(name).css('color', '#C8C8C8');
			}
		}
	}
}

function jsddm_timer(e, ths, name, target) {
	if(!isMobile){
		if(arguments.length < 2){
			// first performs a check to see if the mouse is hovering over the menu or button
			ths = this;
		   name = $(this).attr('id');
		   if(name.indexOf('_drop') == -1){
				name = "#" + name;
				target = $(name + '_drop');
		   }
		   else{
				name = "#" + name.replace('_drop', '');   
				target = $(name);
		   }	
		}
		if (!isHovering(e, ths) && !isHovering(e, target)) {
			menu_objects[name].closetimer = window.setTimeout(function(){jsddm_close(name);}, timeout);
		}
		else if(menu_objects[name].isOpen && !backUpLoop){
	//		menu_objects[name].closetimer = window.setTimeout(function(){jsddm_timer(e, ths, name, target);}, timeout * 1.5);
			backUpLoop = true;
			$(document).mousemove(closeAllLoop);
		}
	}
}

var backUpLoop = false;

function closeAllLoop(e){
	var quitLoop = true;
	for(name in menu_objects){
		if(menu_objects[name].isOpen){
			quitLoop = false;
			var dropName = name + "_drop";
			if(!isHovering(e, $(name)) && !isHovering(e, $(dropName))){
				jsddm_close(name);
			}
		}
	}
	if(quitLoop && !isMobile){
		backUpLoop = false;
		$(document).unbind('mousemove', closeAllLoop);
	}
}


function jsddm_canceltimer(name) { 
	if(menu_objects[name].closetimer && !isMobile) {  
		window.clearTimeout(menu_objects[name].closetimer);
      	menu_objects[name].closetimer = null; 
	}
}

function doneOpen(name) {
	menu_objects[name].isOpen = true;
	menu_objects[name].isOpening = false;
	menu_objects[name].isClosing = false;
	if(isMobile){
		$(document).click(jsddm_close_all);
	}
}

function doneClosed(name) {
	menu_objects[name].isOpen = false;
	menu_objects[name].isOpening = false;
	menu_objects[name].isClosing = false;
	$(name + '_drop').parent().addClass('invisible');
  	$(name + '_drop').parent().css('height', '1px');
}

// checks to see if mouse is hovering over selected item.  Returns true
function isHovering(e, d) {
	if (e.pageX >= $(d).offset().left && e.pageX <= $(d).offset().left + $(d).width() && e.pageY >= $(d).offset().top && e.pageY <= $(d).offset().top + $(d).height()) {
		return true;
	}
	else {
		return false;
	}
	
}

// INITIALIZATIONS

$(document).ready(initMenus);

var menu_objects;
function initMenus(){
	 menu_objects = new Array()
	//checks each top nav for dropdown and hides
	$.each($("#navLinks_top").children('li'), function(){
		if(!$(this).hasClass('tm_space')){
			var drop_key = "#" + $(this).attr('id') + '_drop';
			var sub_menu_height = $(drop_key).height() + 
									parseInt($(drop_key).css('padding-top')) + 
									parseInt($(drop_key).css('padding-bottom'));
			$(drop_key).parent().css('height', '1px');
			var parentHeight = sub_menu_height + "px"
			$(drop_key).parent().addClass('invisible');
			$(drop_key).css('top', '-' + sub_menu_height + 'px');
			if(isMobile){
				$(this).click(jsddm_open);
				$(drop_key).children('a').click(jsddm_close_all);
			}
			else{
				$(this).bind('mouseover', jsddm_open);
				$(this).bind('mouseout',  jsddm_timer);
	//			$(drop_key).bind('mouseover', jsddm_open);
				$(drop_key).bind('mouseout',  jsddm_timer);
			}
			menu_objects["#" + $(this).attr('id')] = {
				timer : 0,
				closetimer : 0,
				isOpen : false, 
				isOpening : false, 
				isClosing : false,
				name : $(this).attr('id'),
				dropName: drop_key,
				height: parentHeight
			};
		}
	});
}

if(!isMobile){
	document.onclick = jsddm_close_all;
}

