/* specify global dependencies for dev info. Also prevents errors for these dependencies in JSLint */
/*global $, $.queryString */

/*** Global Variables (should be as FEW AS POSSIBLE!) ***/
var ELEMENT_NODE = 1;
/*** END Global Variables ***/


/************************* UTIL FUNCTIONS **************************/
/* Keep at top of page */
var CzUtil = {
	removeClass: function (el, sRemove) {
		return el ? $(el).removeClass(sRemove) : false;
	},
	addClass: function (el, sNewClass) {
		return el ? $(el).addClass(sNewClass) : false;
	},
	popup: function (mylink, windowname) {
		if (!window.focus) {return true;}
		var href = (typeof mylink === 'string') ? mylink : mylink.href;
		
		//safety check: make sure URL to open is either in our domain or relative
		if (href.indexOf('://') > -1) {
			if (!(href.indexOf('cozi.com') > -1)) {
				//url has protocol but not cozi.com. 
				//throw error!
				return false;
			}
		}

		window.open(href, windowname, 'toolbar=no,location=no,directories=no,status=no,menubar=no,width=475,height=384,scrollbars=no,resizable=no,left=50,top=50');
		return false;
	}
};



/************************* BEGIN HOVER PANEL **************************/
var HP = {
	SELECTED_CLASS: "on",
	RE_CLASS_REPLACE: /(\son|on\s|on)/, //so we don't have to re-create a RegExp, which is expensive
	
	/**
	 * initHp - An "unobtrusive" function for the Hover Panel
	 * Sets JS events on the Hover Panel buttons
	 * Figures out the defualt panel by query string or user define value (eg in page code) - See getHPDefault
	 */
	init: function () {
		var DEFAULT_PANEL = "hp-calendar",
			HP_CONTAINER_NAME = "tabs",
			startPanel = HP.getDefault();
		
		//set any user-defined start panel
		if (startPanel) {
			HP.removeClass(document.getElementById(DEFAULT_PANEL)); //clear default start panel from html
			CzUtil.addClass(startPanel, HP.SELECTED_CLASS);
		}
		// else just use what was in html code

		//set all necessary js events so panel changes "stick"
		var siblings = document.getElementById(HP_CONTAINER_NAME).childNodes;
		var i = siblings.length - 1;
		for (i; i >= 0; i--) {
			if (siblings[i].nodeType == ELEMENT_NODE) {
				siblings[i].onmouseover = function () {HP.handleChange(this);};
				siblings[i].onfocus = function () {HP.handleChange(this);};
				siblings[i].onclick = function () {this.blur();return false;}; /* this.blur() fixes bug where panels overlay each other in ff*/
			}
		}
	},
	/**
	 * getHPDefault
	 * see description of initHP
	 * finds default panel based on querystring and/or user defined value
	 * check for querystring param first, otherwise use tab specified in page xml
	 */
	getDefault: function () { //returns html element or null
		var PANEL_PREFIX = "hp-",
			QS_KEY = "panel",
			defaultPanel,
			usrDefaultEl = document.getElementById('hoverpanel-default');
		
		//check querystring for values (has no1 priority)
		var qsPanel = $.queryString[QS_KEY];
		
		if (qsPanel && (defaultPanel = document.getElementById(PANEL_PREFIX+qsPanel))) {
			return defaultPanel;
		}
		//no query string, check user defined default
		else if (usrDefaultEl && (defaultPanel = document.getElementById(PANEL_PREFIX+usrDefaultEl.innerHTML))) {
			return defaultPanel;
		}
		//else
		return null;
	},
	/**
	 * hanldeHPChange
	 * event handler for Hover Panel
	 * clears all other panels of selected class then assigns new one
	 */
	handleChange: function (el) {	
		//clear selected class
		var siblings = el.parentNode.childNodes,
			i = siblings.length - 1;
		
		for (i; i >= 0; i--) {
			if (siblings[i].nodeType == ELEMENT_NODE) {
				HP.removeClass(siblings[i]);
			}
		}
		
		//add selected class
		CzUtil.addClass(el, HP.SELECTED_CLASS);
	},
	/**
	 * removeClass
	 * same as removeClass but uses pre-defined regex to save time/mem 
	 */
	removeClass: function (el) {
		el.className = el.className.replace(HP.RE_CLASS_REPLACE,"");
	}
};
/************************* END HOVER PANEL **************************/


/************************* BEGIN SET DEFAULT UNOBTRUSIVE BEHAVIORS **************************/
$(document).ready(function() {
	/* initialize hover panel if exists */
	if (document.getElementById('hover-panel')) {
		HP.init();
	}
});
/************************* END SET DEFAULT UNOBTRUSIVE BEHAVIORS **************************/