/**
 * @author karlstanley
 */
YAHOO.namespace('syzygy');

/**
 * 
 * @param {Object} parentId - id of enclosing div
 * @param {Object} pointsArray - an array of lists of divs, indexed by the id
 *                 of the li element controlling each list of divs
 */
YAHOO.syzygy.mapControlPanel = function(parentId, pointsArray){
	var links = null;
	var parentEl = null;
	
	var init = function(){
		// sanity check input
		if ("undefined" == typeof(pointsArray) || null == pointsArray){
			throw("MapControlPanel: points array is NULL");
		}

		parentEl = document.getElementById(parentId);
		links = YAHOO.util.Dom.getElementsByClassName('toggle', 'li', parentId);
		
		for (var i=0; i < links.length; i++){
			YAHOO.util.Event.addListener(links[i], "click", togglePoints);
		}
		
		readFromCookie();
	}
	
	// makes a collection of points visible or hidden based
	// on which link was clicked
	var togglePoints = function(e, obj){
		var target = YAHOO.syzygy.util.getTarget(e);
		var key = target.id;
		
		// toggle class "selected" for this element
		if (YAHOO.util.Dom.hasClass(target, 'selected')){
			YAHOO.util.Dom.removeClass(target, 'selected');
			removeFromCookie(key);
		} else {
			YAHOO.util.Dom.addClass(target, 'selected');
			addToCookie(key);
		}
		
		var pointsList = pointsArray[key];
		if ("undefined" != typeof(pointsList) && null != pointsList){
			for (var i=0; i < pointsList.length; i++){
				YAHOO.syzygy.util.toggleClass(pointsList[i], "hidden");
			}
		}
	}
	
	var addToCookie = function(cookieVal){
		if ('ctrl_' != cookieVal.substr(0, 5)){
			return;
		}
		
		var cookie = YAHOO.syzygy.util.cookie.read('mapCtrl');
		
		if (null == cookie){
			cookie = '';
		}
		
		var newCookie = cookie + '-' + cookieVal;
		
		YAHOO.syzygy.util.cookie.create('mapCtrl', newCookie, 0);
	}
	
	var removeFromCookie = function(cookieVal){
		if ('ctrl_' != cookieVal.substr(0, 5)){
			return;
		}
				
		var cookie = YAHOO.syzygy.util.cookie.read('mapCtrl');
		
		if (null == cookie){
			return;
		}
		
		var newCookie = cookie.replace('-' + cookieVal, '');
		
		YAHOO.syzygy.util.cookie.create('mapCtrl', newCookie, 0);		
	}
	
	// read cookie of possible and set active craft trails accordingly
	var readFromCookie = function(){
		var cookie = YAHOO.syzygy.util.cookie.read('mapCtrl');
		
		if (null == cookie){
			return;
		}
		
		var trails = cookie.split('-');
		
		var links = YAHOO.util.Dom.getElementsByClassName('toggle', 'li', parentId);
		
		for (var i=0; i < links.length; i++){
			for (var j=0; j < trails.length; j++){
				if (links[i].id == trails[j]){
					YAHOO.util.Dom.addClass(links[i], 'selected');
					
					var pointsList = pointsArray[trails[j]];
					if ("undefined" != typeof(pointsList) && null != pointsList){
						for (var k=0; k < pointsList.length; k++){
							YAHOO.syzygy.util.toggleClass(pointsList[k], "hidden");
						}
					}					
				}
			}
		}

	}
	
	init();
}