﻿// Bernhard Schmidt
// event functions and hover menus

eventObj = new Object();

eventObj = {
	EventListeners: [], // the array that holds all the registered events
	
	addEventListener: function(instance, eventName, listener) {
		var listenerFn = listener;
		if (!instance) {
			return;
		}
		if (instance.addEventListener) {
			instance.addEventListener(eventName, listenerFn, false);
		}
		else if (instance.attachEvent) {
			listenerFn = function() {
				listener(window.event);
			}
			instance.attachEvent("on" + eventName, listenerFn);
		}
		else {
			throw new Error("Event registration not supported");
		}
		var event = {
			instance: instance,
			name: eventName,
			listener: listenerFn
		};
		this.EventListeners.push(event);
		return event;
	},
	
	/* remove event from array and unattach it */
	removeEventListener: function(event) {
		var instance = event.instance;
		if (instance.removeEventListener) {
			instance.removeEventListener(event.name, event.listener, false);
		}
		else if (instance.detachEvent) {
			instance.detachEvent("on" + event.name, event.listener);
		}
		for (var i=0; i<this.EventListeners.length; i++) {
			if (this.EventListeners[i] == event) {
				this.EventListeners.splice(i, 1);
				break;
			}
		}
	},
	
	/* remove all registered events */
	unregisterEvents: function() {
		for (var i=0; i< this.EventListeners.length; i++) {
			this.removeEventListener(this.EventListeners[i]);
		}
	},
	
	/* disables event bubbeling */
	disableDefault: function(event) {
		var e = event || window.event;
		if (e.preventDefault) e.preventDefault();
		if (e.returnValue) e.returnValue = false;
		return;
	}
}


/* show submenu */
hoverMenu = new Object();

hoverMenu = {
	test: "this is a test",
	registered_menues: new Array(),
	
	/* positioning and display subMenu */
	showMenu: function(menu_id) {
		div_id = this.getSubMenuId(menu_id);
		main_dimension = $("#" + menu_id).offset();		
		main_height = $("#" + menu_id).outerHeight();
		
		/* moves the submenu right under the link */
		//position_top = main_height + main_dimension.top;
		//position_left = main_dimension.left;
		
		mainmenu_classname = ".widget_categories"; // unique class
		mainmenu_position = $(mainmenu_classname).offset();
		mainmenu_height = $(mainmenu_classname).outerHeight();

		position_top = mainmenu_position.top + mainmenu_height;
		position_left = mainmenu_position.left;

		/* hide previous menues */

		if ($(div_id).css('display') != "block") {			
			
			for (i=0; i < this.registered_menues.length; i++) {
				// needs to be hideMenu();
				$(this.registered_menues[i]).css({'display': 'none'});
			}

			if (!$("#main-submenu-" + menu_id).length > 0) { // show menu only if there is no duplicate of it
			
				if ($(".mainsubmenu-container").length > 0) { // get main submenu menu ID
					var main_menu_id = $(".mainsubmenu-container").attr("id");
					$("#" + main_menu_id).css({'display': 'none'}); // hide main submenu
					
				}
			
				$(div_id).css({	//'display': 'block',
								'top': position_top,
								'left': position_left});	
				$(div_id).show(50);
				$(div_id + "-subcontainer").slideDown(50);
				
				if (jQuery.inArray(div_id, this.registered_menues) == -1) {
					this.registered_menues.push(div_id);
				}
			}
			else {
				if ($("#main-submenu-" + menu_id).css("display") != "block") {
					$("#main-submenu-" + menu_id).show(50);
					this.registered_menues.push("#main-submenu-" + menu_id);
				}				
			}
		}
	},
	
	 /* hide submenu*/
	hideMenu: function(menu_id, named) {
		div_id = (named != true) ? this.getSubMenuId(menu_id): menu_id;
		$(div_id).css({'display': 'none'});
		//$(div_id).unbind();
	},
	
	/* hide all menues */
	hideMenues: function(trigger_menu) {
		jQuery.each(this.registered_menues, function(i, n) {
			if ("#subcategory-container-" + trigger_menu != n ) { // keep alive in case of own submenu
				hoverMenu.hideMenu(n, true);
			}
		});
	},
	
	/* get submenu id */
	getSubMenuId: function(id) {
		return "#subcategory-container-" + id;
	},
	
	toogleArchiveMenu: function(id) {
		$("#" + id).toggleClass("show-archives");
	}
	
}

// Adding Google Analytics
googleAnalytics = new Object();

googleAnalytics = {
	addGoogleAnalytics: function() {
		var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
		document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

		try {
			var pageTracker = _gat._getTracker("UA-8333801-1");
			pageTracker._trackPageview();
		} catch(err) {}
	}
}

