// JavaScript Document
//console.log("%s: %o", "hello world", this);

if (!window.jQuery) {
	throw("jQuery must be referenced before using formValidation");
} else {
	(function($){
		/**
		 * jQuery delayed event execution.
		 */
		$.fn.delay = function(options) {
			var timer;
			var delayImpl = function(eventObj) {				
				timer = 0;
				if (timer != null) {
					clearTimeout(timer);
				}
				var newFn = function() {
					options.fn(eventObj);
				};
				timer = setTimeout(newFn, options.delay);
			}
			/* THIS IS MY EDIT */
			var undelayImpl = function(){
				clearTimeout(timer);
			}
		   /* END OF MY EDIT */
		   
			return this.each(function() {
				var obj = $(this);
				/* THIS IS MY EDIT */
				obj.bind("mouseout",function(eventObj){
					//console.log("%s: %o",timer + " cancelled", this);
					undelayImpl();							 
				});
				/* END OF MY EDIT */
				obj.bind(options.event, function(eventObj) {
					 delayImpl(eventObj);				 
				});
				
			});
		};
	})(jQuery);
}

/* http://ihatecode.blogspot.com/2008/04/jquery-time-delay-event-binding-plugin.html */
/* USAGE FOR DELAY FUNCTION */
/*
 $(document).ready(function() {
  $('#typeinme').delay({
   delay: 500,
   event: 'keyup',
   fn: function(){
    alert(this.value);
   })
  });
 }
*/

if (!window.jQuery) {
	throw("jQuery must be referenced before using formValidation");
} else {
	
	(function() { 
		jQuery.fn.expmenu = function(options) {	
			var menuContainer = this;
			
						
			var settings = {
				start_expanded			: false,
				sublist_class			: "",
				current_element			: "",
				enable_console			: false,
				selected_item_class		: "",
				submenu_rel_value		: "submenu",
				open_delay_time			: 1000,
				expand_mouseover		: false,
				leave_current_page_exp	: false,
				follow_link				: false,
				link_to_follow			: 0,
				auto_minimize			: false,
				auto_minimize_delay		: 3000
			};
			
			var current_page = settings['current_element'];
			
			if(options) {
				jQuery.extend(settings, options);
			}
			
			//find all the li elements whit the appropriate rel
			$(this).find("*").filter("li[rel='"+settings["submenu_rel_value"]+"']").each(function(){	
				var element_name = $(this).attr("id");				
				
				
				if(settings["sublist_class"] !=  ""){
					$(this).find("*").filter("ul").each(function(){
						$(this).addClass(settings["sublist_class"]);	
						if(settings["enable_console"]){
							console.log("%s: %o","added subclass "+settings['sublist_class'], this);
						}
					});					
				}//end if
				
				if(!is_current($(this))){					
					$("#"+element_name+"_sub").hide();
				} else {					
					$("#"+element_name+"_sub").show();
				}
				$(this).find("*").filter("a[rel='menu_expander']").each(function(){
					$(this).delay({
						delay: settings['open_delay_time'],
						event: 'mouseover',
						fn: function(){							
							show_selected(element_name);						
						}
					});	
					//check if close the menu after a while
					if(settings['auto_minimize'] == true){
						if(settings['current_element'] != element_name){
							$(this).parent().delay({
								delay: settings['auto_minimize_delay'],
								event: 'mouseout',
								fn: function(){								
									hide_menu(element_name);									
								}
							});	
						}
					}//end if
				});				
			});
			
			function show_selected(idName){				
				$(menuContainer).find("*").filter("li[rel='"+settings["submenu_rel_value"]+"']").each(function(){	
					if(idName == $(this).attr("id")){						
						//open the submenu
						//alert("show "+idName);
						$("#"+idName+" a").addClass("sel");
						$("#"+idName+"_sub").fadeIn("slow");
					} else {						
					//	alert("hide "+$(this).attr("id"));
						if(settings['leave_current_page_exp'] == false || (settings['leave_current_page_exp'] == true && $(this).attr("id") != settings['current_element'] &&  settings['current_element'] != "")){ 
							$("#"+$(this).attr("id")+" a").removeClass("sel");
							$("#"+$(this).attr("id")+"_sub").hide();	
						}
					}//end if							 
				});
			}
			
			function hide_menu(idName){		
				$("#"+idName+"_sub").hide();
				$("#"+settings['current_element']+"_sub").fadeIn("slow");			
			};		
		
			function is_current(obj){				
				if(obj.attr("id") == settings["current_element"]){
					return true;
				} else {
					return false;	
				}
			};
	
		}
	})(jQuery); 
}
