/*
 * Copyright (c) 2010 RAYNET s.r.o., All rights reserved.
 * RAYNET s.r.o. PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * www.raynet.cz
 */

SP.apply("SP.menu", {
	/**
	 * @class SP.menu.Dropdown
	 * zatim pouze jednourovnove!
	 * @namespace SP.menu
	 * @author Miroslav Raska
	 * @version 20100904
	 * @require jQuery
	 */
	Dropdown: function(id, opts){
		// init
	  var el = SP.isObject(id) ? id : jQuery("#"+id);
		opts = SP.applyIf(opts, {
			itemSelector: " > li",
			groupSelector: " > ul",
			closable: (SP.isBlank(opts.close) ? true : false),
			click: false
		});

		// show/hide menu
		var toggleMenu = opts.toggleMenu || function(item, menu, visible){
			// to hide all comboboxes and other menus
			$('body').mousedown();

			item[visible ? 'addClass' : 'removeClass']('x-menu-active');

			if (menu.length > 0) {
				item[visible ? 'addClass' : 'removeClass']('x-menu-expanded');
			}
		}
		
		// initialize close element
		if (!opts.closable && SP.isString(opts.close)) {
			el.find(opts.close).click(function(e){
				var item = SP.events.getParent(e, el.getSelector() + opts.itemSelector);
				toggleMenu(item, $(item.getSelector() + opts.groupSelector), false);
				return false;
			});
		}

		// add class to elements with children
		$(el.getSelector() + opts.itemSelector).each(function(){
			var item = $(this);
			if ($(item.getSelector() + opts.groupSelector).length > 0) {
				item.addClass('x-menu-with-items');
			}
		});

		// events
		var openFn = function(e){
			var item = $(this);
			var group = $(item.getSelector() + opts.groupSelector);
			// pokud odjedeme a znovu najedeme na rozbalene menu, nechame ho schovat
			// a nebudeme ho vracet - predejdeme problemum
			if (group.length == 0 || !SP.events.isTarget(e, group)) {
				toggleMenu(item, group, true);
				return true;
			}
			return false;
		};
		var closeFn = function(){
			if (opts.closable) {
				var item = $(this);
				toggleMenu(item, $(item.getSelector() + opts.groupSelector), false);
				return true;
			}
			return false;
		};

		if (opts.click) {
			$(el.getSelector() + opts.itemSelector).click(function(e){
				return !openFn.call(this, e);
			});
		} else {
			$(el.getSelector() + opts.itemSelector).hover(openFn, closeFn);
		}

		return el;
	},
	

	/**
	 * @class SP.menu.Fading
	 * @extends SP.menu.Dropdown
	 * @namespace SP.menu
	 * @author Miroslav Raska
	 * @version 20100903
	 * @require jQuery
	 */
	Fading: function(id, opts){
		opts = SP.applyIf(opts, {
			showDuration : 'fast',
			hideDuration : 'fast'
		});
		opts = SP.applyIf(opts, {
			toggleMenu: function(item, menu, visible){
				// if already hidden/visible
				if (item.hasClass('x-menu-active') == visible) return;
				
				// to hide all comboboxes and other menus
				$('body').mousedown();
				
				item[visible ? 'addClass' : 'removeClass']('x-menu-active');
	
				if (menu.length > 0) {
					item[visible ? 'addClass' : 'removeClass']('x-menu-expanded');
					if (visible) {
						menu.hide(); // skryjeme pred efektem
						menu.slideDown(opts.showDuration);
					} else {
						menu.show(); // zobrazime pred efektem
						menu.slideUp(opts.hideDuration)
					}
				}
			}
		});

		return this.Dropdown(id, opts);
	}
});
