var allUIMenus = [];

$.fn.menu = function(options){
	var caller = this;
	var options = options;
	var m = new Menu(caller, options);	
	allUIMenus.push(m);
	
	$(this)
	.click(function(){
		if (m.menuOpen == false) { m.showMenu(); }
		else { m.kill(); };
		return false;
	});	
};

function Menu(caller, options){
	var menu = this;
	var caller = $(caller);
	var container = $(options.content);
	
	this.menuOpen = false;
	this.menuExists = false;
	
	var options = jQuery.extend({
		content: null,
        menuSelection: null,
		showSpeed: 200
	}, options);
	
	var killAllMenus = function(){
		$.each(allUIMenus, function(i){
			if (allUIMenus[i].menuOpen) { allUIMenus[i].kill(); };	
		});
	};
	
	this.kill = function(){
		container.hide();	
		menu.menuOpen = false;
		$(document).unbind('click', killAllMenus);
	};

	this.showMenu = function(){
        
		killAllMenus();
		if (!menu.menuExists) { menu.create() };
        
        var xy;
        if (caller.next().size()) {
            xy = caller.next().offset();
        } else {
            xy = caller.offset();
        }
            
        container.css({
            left: xy.left,
            top: xy.top
        });
		container.show().click(function(){ menu.kill(); return false; });
		container.hide().slideDown(options.showSpeed);
		menu.menuOpen = true;
		$(document).click(killAllMenus);
	};
	
	this.create = function(){	
			container.find('a').click(function(){
				menu.chooseItem(this);
				return false;
			});

		menu.menuExists = true;
        
	};
	
	this.chooseItem = function(item){
		menu.kill();
        //options.menuSelection.text($(item).text());
        if (caller.prev().size())
            caller.prev().val($(item).text());
        else
            caller.val($(item).text());
		//location.href = $(item).attr('href');
	};
};


