YAHOO.namespace("selectedGamesScroller");
var DOM = YAHOO.util.Dom;
var EVT = YAHOO.util.Event;

YAHOO.selectedGamesScroller.featuredGame = function(selectedGamesDiv) {
	this.init(selectedGamesDiv);
};

YAHOO.selectedGamesScroller.featuredGame.prototype = {
	hideClass : 'hide',
	highlightClass : 'on',
	gamesDivSuffix : 'Games',
	categories : new Array(),
	curIndex : 0,
	prevIndex : 0,
	catCount : 0,
	
	autoPlay : null,
	scrollDelay : 5000,
	
	init: function(selectedGamesDiv) {
		var me = this;
		var scrollerElem = DOM.get(selectedGamesDiv);
		var navList = (scrollerElem.childNodes[0].nodeName == 'UL') ? scrollerElem.childNodes[0] : scrollerElem.childNodes[1];
		var liElem = DOM.getElementsBy(function(el) { return true; }, 'li', navList);
		for(var i = 0; i < liElem.length; i++) {
			var cats = new Array();
			cats[i] = liElem[i].firstChild.lastChild.nodeValue;
			cats[i] = cats[i].toLowerCase().replace(/\s/, '');
			gamesCheck = cats[i].substring(cats[i].length - 5);
			// parse out *just* the category name
			//this.categories[i] = (gamesCheck === 'games') ? cats[i].substring(0, cats[i].length - 5) : cats[i];
			this.categories[i] = liElem[i].id;
			var count = i + 1;
			var aElem = liElem[i].firstChild;
			var derp = cats[i];
			
			/*function callback(e) { EVT.preventDefault(e); this.catCount++; this.stopAutoScroll(); this.scrollTo(derp); }
			EVT.on(aElem, 'click', callback, this, true);*/
		}
		
		function callbackGameClick1(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(0), me; }
		EVT.on(DOM.get(this.categories[0]).firstChild, 'click', callbackGameClick1);
		function callbackGameClick2(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(1), me; }
		EVT.on(DOM.get(this.categories[1]).firstChild, 'click', callbackGameClick2);
		function callbackGameClick3(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(2), me; }
		EVT.on(DOM.get(this.categories[2]).firstChild, 'click', callbackGameClick3);
		function callbackGameClick4(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(3), me; }
		EVT.on(DOM.get(this.categories[3]).firstChild, 'click', callbackGameClick4);
		function callbackGameClick5(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(4), me; }
		EVT.on(DOM.get(this.categories[4]).firstChild, 'click', callbackGameClick5);
		function callbackGameClick6(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(5), me; }
		EVT.on(DOM.get(this.categories[5]).firstChild, 'click', callbackGameClick6);
		function callbackGameClick7(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(6), me; }
		EVT.on(DOM.get(this.categories[6]).firstChild, 'click', callbackGameClick7);
		function callbackGameClick8(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(7), me; }
		EVT.on(DOM.get(this.categories[7]).firstChild, 'click', callbackGameClick8);
		function callbackGameClick9(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(8), me; }
		EVT.on(DOM.get(this.categories[8]).firstChild, 'click', callbackGameClick9);
		function callbackGameClick10(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(9), me; }
		EVT.on(DOM.get(this.categories[9]).firstChild, 'click', callbackGameClick10);
		function callbackGameClick11(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(10), me; }
		EVT.on(DOM.get(this.categories[10]).firstChild, 'click', callbackGameClick11);
		function callbackGameClick12(e) { EVT.preventDefault(e); me.stopAutoScroll(); me.scrollTo(11), me; }
		EVT.on(DOM.get(this.categories[11]).firstChild, 'click', callbackGameClick12);
		
		this.startAutoScroll();
	},
	
	startAutoScroll: function() {
		if(this.autoPlay !== null)
			return;
		
		var me = this;
		this.autoPlay = setInterval(function() { me.scrollNext(); }, this.scrollDelay); //setInterval
	},
	
	stopAutoScroll: function() {
		if(this.autoPlay !== null) {
			clearTimeout(this.autoPlay);
			this.autoPlay = null;
		}
	},
	
	scrollNext: function() {
		var me = this;
		this.prevIndex = this.curIndex;
		this.curIndex++;
		this.curIndex = this.curIndex % this.categories.length;
		
		this.removeHighlight(this.categories[this.prevIndex], this.highlightClass);
		this.addHighlight(this.categories[this.curIndex], this.highlightClass);
		
		setTimeout(function() { me.changeGameList(me.curIndex); }, 350);
	},
	
	scrollTo: function(index) {
		var me = this;
		this.prevIndex = this.curIndex;
		this.curIndex = index;
		
		this.removeHighlight(this.categories[this.prevIndex], this.highlightClass);
		this.addHighlight(this.categories[this.curIndex], this.highlightClass);
		
		setTimeout(function() { me.changeGameList(me.curIndex); }, 350);
	},
	
	removeHighlight: function(index, nodeClass) {
		node = DOM.get(index).firstChild;
		DOM.removeClass(node, nodeClass);
	},
	
	addHighlight: function(index, nodeClass) {
		node = DOM.get(index).firstChild;
		DOM.addClass(node, nodeClass);
	},
	
	changeGameList: function(index) {
		listElem = DOM.get(this.categories[index] + this.gamesDivSuffix);
		DOM.removeClass(listElem, this.hideClass)
		
		prevElem = DOM.get(this.categories[this.prevIndex] + this.gamesDivSuffix);
		DOM.addClass(prevElem, this.hideClass);
	}
};
