/*
	KISSmetrics' Product Planner Scripting
	Author: Michael Simmons, m.simmons@kissmetrics.com
	Date: 2008-09-28 13:36:42
*/

var FlowMenu = {

	opened : false,
	current : "",
	clickEvent : "",
	resizeEvent : "",
	
	init : function (options) {
		FlowMenu = $merge(FlowMenu, options);
		
		var ul = new Element("ul").set("html", FlowMenu.menu);
		
		var menu_div =  new Element("div", {
			id: FlowMenu.menu_id,
			styles: {position:"absolute", display:"none"}
		}).adopt(ul);
		
		$(document.body).adopt(menu_div);
		
		$$(FlowMenu.activator).addEvent("click", function(e) {
			e.preventDefault();
			
			if(FlowMenu.opened && FlowMenu.opened != this) {
				FlowMenu.close(FlowMenu.opened);
			}
			
			if(this.opened == true) {
				FlowMenu.close(this);
			} else {
				FlowMenu.open(this);
			}
			
		});
		
	},
	
	window_selector : function () {
		if(Browser.Engine.trident5) {
			return document;
		} else {
			return window;
		}
	},
	
	get_bounds : function () {
		var position = $$(FlowMenu.container)[0].getPosition();
		var size = $$(FlowMenu.container)[0].getSize();
		return position.x+size.x;
	},
	
	position : function (item) {
		
		var position = item.getPosition();
		var size = item.getSize();
		var bounds = FlowMenu.get_bounds();
		
		var top = position.y+size.y+"px";
		
		if(FlowMenu.menu_width+position.x+size.x >= bounds) {
			var left = position.x-FlowMenu.menu_width+"px";
		} else {
			var left = position.x+size.x+"px";
		}
		
		$(FlowMenu.menu_id).setStyles({
			top: top,
			left: left
		});
		
	},
	
	open : function (item) {
		
		item.opened = true;
		FlowMenu.opened = item;	
		FlowMenu.current = item.get("rel");
		
		if(FlowMenu.onOpen) {
			FlowMenu.onOpen(item);
		}
		
		item.addClass("opened");
		
		FlowMenu.position(item);
		
		$(FlowMenu.menu_id).setStyle("display", "block");
		
		FlowMenu.clickEvent = function (e) {
			if($(e.target).get("class").contains("menu") != true &&
			   $(e.target).get("id") != FlowMenu.menu_id) {
				if(FlowMenu.opened) {
					FlowMenu.close(FlowMenu.opened);
				}
			}
		};
		
		FlowMenu.resizeEvent = function () {
			FlowMenu.position(item);
		};
		
		FlowMenu.linkEvent = function (e) {
			if($(e.target).get("href").indexOf('destroy') >= 0)
			{
				if(!confirm("Are you sure you want to delete this?")) {
					e.stop();
					return;
				}
			}
			e.stop();
			window.location = $(e.target).get("href").replace("_id_", FlowMenu.current);
		}
		
		FlowMenu.window_selector().addEvent("click", FlowMenu.clickEvent);
		window.addEvent("resize", FlowMenu.resizeEvent);
		$$("#"+FlowMenu.menu_id+" a").addEvent("click", FlowMenu.linkEvent);
		
	},
		
	close : function (item) {
		
		item.opened = false;
		FlowMenu.opened = false;
		FlowMenu.current = "";
		
		if(FlowMenu.onClose) {
			FlowMenu.onClose(item);
		}
		
		item.removeClass("opened");
		
		$(FlowMenu.menu_id).setStyle("display", "none");
		
		FlowMenu.window_selector().removeEvent("click", FlowMenu.clickEvent);
		window.removeEvent("resize", FlowMenu.resizeEvent);
		
	}
	
};