/**
 * Describes the behaviour of menu-modules
 * @author Tom Cool @ FrenzyMedia B.V. - http://frenzymedia.eu
 * @class Menu object
 * @constructor
 * @param {jQuery} $ The jQuery object - to prevent conflicts with similar libraries
 */
var menu = (function ($) {

	/**
	 * Additional css-selectors are stored seperately like class-constants
     * @namespace Private properties
     */
	var selectors = {
		menu : '.menu',
		harmonica : '.harmonica',
		listTarget : '.harmonica_list',
		current : '.current',
		open : 'open'
	},

	/**
     * @namespace Private methods
     */
	privs = {

		setCurrentMenuItem : function () {
			var current = $(selectors.current, selectors.menu);
			current.next(selectors.listTarget).show();
			current.parents('li').show();
		},

		setHarmonica : function () {

			$(selectors.harmonica).bind(
				'click',
				function (event) {

					var target, parent, obj = this;
						
					switch (obj.tagName.toLowerCase()) {
						case 'li':
							target = $(obj).next(selectors.listTarget);
							parent = $(obj).closest('ul');
							break;

						case 'div':
							//set target, parent
							//break;
							
						default:
							throw new Error('No target specified for ' + obj.tagName.toLowerCase() + '-tag!');
							break;
					}

					event.preventDefault();

					if (!$(obj).is('.' + selectors.open)) {
						parent.find('.' + selectors.open).removeClass(selectors.open).next(selectors.listTarget).slideUp(300);
						$(obj).addClass(selectors.open);
					}

					target.slideToggle(300);
				}
			);
		}
	};

	/**
	 * @namespace Public methods
     * @scope menu
     */
	return {

		/**
		 * function to be launched at body.onload
		 */
		initiate : function () {
			privs.setHarmonica();
			privs.setCurrentMenuItem();
		}
	};

})(jQuery);

jQuery( function () { menu.initiate(); });
