YAHOO.namespace("yuiblog");
YAHOO.yuiblog.DevDay = function(){
	var testForPanel = function(el) {
		if(el.id.indexOf("pn-") == 0) {return true;}
	};
	var highlight = function() {
		YAHOO.util.Dom.addClass(this, "highlight");
	};
	var restore = function() {
		YAHOO.util.Dom.removeClass(this, "highlight");
	};
	var escapeCurrentPanel = function() {
		if (YAHOO.yuiblog.DevDay.lastPanelShown) {YAHOO.yuiblog.DevDay.lastPanelShown.hide();}
		YAHOO.yuiblog.DevDay.removeLastHighlight();
	};
	return {
		aPanels: {},
		lastPanelShown: null,
		removeLastHighlight: function() {
			if (this.lastPanelShown) {
				var speaker = this.lastPanelShown.element.firstChild.id.split("-")[1];
				YAHOO.util.Dom.removeClass(speaker,"highlight");
			}
		},
		onShow: function(type, args, oPanel) {
			YAHOO.util.Dom.removeClass(this.element, "highlight");
			this.cfg.setProperty("xy",[
				YAHOO.util.Dom.getRegion("schedule").right,
				YAHOO.util.Dom.getRegion(this.element.firstChild.id.split("-")[1]).top]);
			if(YAHOO.yuiblog.DevDay.lastPanelShown) {
				YAHOO.yuiblog.DevDay.lastPanelShown.hide();
				YAHOO.yuiblog.DevDay.removeLastHighlight();
			}
			YAHOO.yuiblog.DevDay.lastPanelShown = this;
		},
		dismissCurrentPanel: function(e) {
			//only dismiss if click is outside of the currently showing Panel
			//and not in a panel-trigger td
			if(this.lastPanelShown) {
				var clickTarget = YAHOO.util.Event.getTarget(e);
				var panelDiv = this.lastPanelShown.element;
				if ((!YAHOO.util.Dom.isAncestor(panelDiv, clickTarget)) &&
					(!YAHOO.util.Dom.hasClass(clickTarget,"haspromo")) &&
					(!YAHOO.util.Dom.hasClass(clickTarget.parentNode,"haspromo")))
					{
						this.lastPanelShown.hide();
						this.removeLastHighlight();
					 }
			}
		},
		keyListener: new YAHOO.util.KeyListener(document, {keys: [27]}, {fn:escapeCurrentPanel}),
		init: function() {
			this.keyListener.enable();
			var panelEls = YAHOO.util.Dom.getElementsBy(testForPanel, "div",  "details");
			YAHOO.util.Dom.addClass(panelEls, "promobox");
			for (var i=0, j=panelEls.length; i<j; i++) {
				var speaker = panelEls[i].id.split("-")[1];
				this.aPanels[speaker] = new YAHOO.widget.Panel(panelEls[i], {
					visible:false,
					width:"25em",
					draggable:false,
					constraintoviewport:true
				});
				this.aPanels[speaker].render(document.body);
				this.aPanels[speaker].beforeShowEvent.subscribe(this.onShow, this.aPanels[speaker], true);
				YAHOO.util.Dom.addClass(speaker,"haspromo");
				YAHOO.util.Event.on(speaker, "click", this.aPanels[speaker].show, this.aPanels[speaker], true);
				YAHOO.util.Event.on(speaker, "mouseover", highlight);
				YAHOO.util.Event.on(speaker, "mouseout", restore);
			}
			
			//now that the panels are built, unhide their wrapper for Safari
			YAHOO.util.Dom.setStyle("details","visibility","visible");
		}
	}
}()
YAHOO.util.Event.on(window, "load", YAHOO.yuiblog.DevDay.init, YAHOO.yuiblog.DevDay, true);
YAHOO.util.Event.on(document, "click", YAHOO.yuiblog.DevDay.dismissCurrentPanel, YAHOO.yuiblog.DevDay, true);

