// main class that load event fires the init from 
var indexClass =  {
	init: function() {
		feature.init();
		subfeature.init(1);
		timer.init();
		screenshots.init();
		reviews.init();
		user_content.init();
	}
}

// class for controlling top feature scroller
var feature = {
	jsonStruct: null,
	init: function() {
		feature.setTabs();
	},
	getTabs: function() {
		if (document.getElementById('featured_box')) {
			return $A($('featured_box').getElementsByClassName('title'));
		} else {
			return false;
		}
	},
	getTabLinks: function() {
		var links = [];
		if (feature.getTabs()) {
			feature.getTabs().each(function(titleAt){
				links.push(titleAt.getElementsByTagName('a')[0]);
			});
			return links;
		} else return false;
	},
	getContent: function() {
		return $A($('featured_box').getElementsByClassName('content'));
	},
	setTabs: function() {
		if (feature.getTabLinks()) {
			/*
			feature.getTabLinks().each(function(linkAt){
				linkAt.onclick = function(){
					feature.changeTab(this);
					return false;
				}
			});
			*/
		}
	},
	changeTab: function(el) {
		var triggerName = $(el).parentNode.parentNode.id;
		var target = $(triggerName.replace('title','content'));
		timer.timerStop();
		feature.resetTabs($(triggerName));
		feature.setContent(target);
	},
	resetTabs: function(el) {
		feature.getTabs().each(function(tabAt) {
			tabAt.removeClassName('on');
		});
		$(el).addClassName('on');
	},
	setContent: function(el) {
		if ($A(el.getElementsByClassName('loading')).length != 0) {
			feature.getContentHTML(el);
		} else {
			feature.showContent(el)
		}
	},
	showContent: function(el) {
		feature.hideContent();
		subfeature.init(el.id.split("_")[2]);
		$(el).removeClassName('loading');
		if (!sniff.isIE6) {
			new Effect.Appear($(el),{duration: .5});
		} else {
			$(el).show();
		}
	},
	hideContent: function() {
		feature.getContent().each(function(contentAt) {
			contentAt.hide();
		});
	},
	getContentHTML: function(el) {
		if (!feature.jsonStruct) {
			//TODO: see if you need this later
			return;
			new Ajax.Request('/ajax/feature/home/', {
				method: 'post',
				onSuccess: function(t) {
					var h = $H(t.responseText.evalJSON());
					feature.jsonStruct = h._object;
					$(el).update(feature.jsonStruct.eval(el.id));
					feature.showContent(el);
				},
				onFailure: function(t){
					$('wrapper').update(t.responseText);
				}
			});
		} else {
			$(el).update(eval("feature.jsonStruct." + el.id));
			feature.showContent(el);
		}
	}
}

// class for running the automatic feature scroller
var timer = {
	linkList: null,
	timerToggle: true,
	timerObject: null,
	clicker: 1,
	shiftList: [4,8,12,16],
	currentNode: null,
	waitTime: 5000,
	init: function() {
		timer.timerToggle = true;
		if (subfeature.target) {
			timer.linkList = $A(subfeature.target.getElementsByTagName('a'));
			timer.timerStart();
		}
	},
	timerNext: function() {
		if(!timer.linkList[timer.clicker]) {
			timer.timerStop(); return;
		}
		if (timer.shiftList.indexOf(timer.clicker) != -1) {
			subfeature.move('forward',subfeature.feaID);
		}
		timer.linkList.each(function(linkAt) {
			//linkAt.removeClassName('on');
		});
		timer.linkList[timer.clicker].className = 'on';
		subfeature.setContent(timer.linkList[timer.clicker].parentNode);
		timer.clicker++;
		timer.timerStart()
	},
	timerStart: function() {
		if (!timer.timerToggle) {return;};
		timer.timerObject = window.setTimeout(function(){
			timer.timerNext();
		}, timer.waitTime);
	},
	timerStop: function() {
		timer.timerToggle = false;
		window.clearTimeout(timer.timerObject);
	}
}

// class for controlling extra features in scroller
var subfeature = {
	forwardClick: null,
	backClick: null,
	newLeft: null,
	feaID: null,
	target: null,
	clickCounter: 0,
	clickMax: null,
	moveBlock: 328,
	init: function(id) {
		subfeature.feaID = id;
		if ($('fea_content_' + id)) {
			subfeature.target = $('fea_content_' + id).getElementsByClassName('stories')[0];
			if (subfeature.target) {
				subfeature.clickMax = Math.round(subfeature.target.getElementsByTagName('li').length / 4) - 1;
				$A(subfeature.target.getElementsByTagName("a")).each(function(linkAt){
					/*
					linkAt.onmouseover = function(){
						subfeature.setContent(this.parentNode);
						subfeature.setCurrent(this);
						timer.timerStop();
					}
					*/
				});
				subfeature.clickCounter = 0;
				if (id === 1) {
					subfeature.loadContent();
				}
				subfeature.imagePreloader();
			}
		}
	},
	move: function(type,id) {
		if (subfeature.feaID != id) {
			subfeature.init(id);
		}
		timer.timerStop();
		subfeature.setValues(type);
	},
	setValues: function(type) {
		var currentLeft = subfeature.target.style.left;
		if (currentLeft == '') { currentLeft = '0px' };
		var newLeft = 0;
		switch (type) {
			case "forward":
				if (subfeature.clickCounter === subfeature.clickMax) {return;};
				subfeature.clickCounter++;
				subfeature.newLeft = (parseInt(currentLeft.split('px')[0]) - subfeature.moveBlock) + 'px';
			break;
			case "back":
				if (subfeature.clickCounter === 0) {return;};
				subfeature.clickCounter--;
				subfeature.newLeft = (parseInt(currentLeft.split('px')[0]) + subfeature.moveBlock) + 'px';
			break;
		}
		subfeature.motion();
	},
	getArrows: function() {
		var linkList = {
			"forward": $('fea_content_' + subfeature.feaID).getElementsByClassName('forward')[0].getElementsByTagName('a')[0],
			"back": $('fea_content_' + subfeature.feaID).getElementsByClassName('back')[0].getElementsByTagName('a')[0]
		}
		return linkList;
	},
	clicks: function(type) {
		var linkList = subfeature.getArrows();
		switch(type) {
			case "store":
				subfeature.forwardClick = linkList.forward.getAttribute("onclick");
				subfeature.backClick = linkList.back.getAttribute("onclick");
			break;
			case "remove":
				linkList.forward.setAttribute("onclick","return false;");
				linkList.back.setAttribute("onclick","return false;");
			break;
			case "reset":
				linkList.forward.setAttribute("onclick", subfeature.forwardClick);
				linkList.back.setAttribute("onclick", subfeature.backClick);
			break;
		}
	},
	motion: function() {
		subfeature.clicks('store');
		subfeature.target.morph('left: ' + subfeature.newLeft, {duration: 1});
		var clickTimer = window.setTimeout(function(){
			subfeature.clicks('reset');
		},200);
	},
	setCurrent: function(el) {
		$A(subfeature.target.getElementsByTagName('a')).each(function(linkAt) {
			//linkAt.removeClassName('on');
		});
		el.addClassName('on')
	},
	loadContent: function(el) {
		if (!feature.jsonStruct) {
			//TODO: see if you need this later
			return;
			new Ajax.Request('/ajax/feature/home/', {
				method: 'post',
				onSuccess: function(t) {
					var h = $H(t.responseText.evalJSON());
					feature.jsonStruct = h._object;
				},
				onFailure: function(t){
					$('wrapper').update(t.responseText);
				}
			});
		}
	},
	setContent: function(el) {
		var link = el.getElementsByTagName('a')[0];
		var img = link.getElementsByTagName('img')[0];
		var targets = subfeature.getNodes();
		targets.titleNode.update(link.title);
		targets.descNode.update(img.alt);
		targets.linkNode.href = el.getElementsByTagName('a')[0].href;
		targets.imgNode.src = img.src.replace("_thm","");
	},
	getNodes: function(el) {
		var htmlTarget = $('fea_content_' + subfeature.feaID);
		var linkNode =  htmlTarget.getElementsByClassName('main-image')[0];
		var imgNode = linkNode.getElementsByTagName('img')[0];
		var titleNode = htmlTarget.getElementsByClassName('desc')[0].getElementsByTagName('h3')[0];
		var descNode = htmlTarget.getElementsByClassName('desc')[0].getElementsByTagName('p')[0];
		var returnHash = {
			"linkNode": linkNode,
			"imgNode": imgNode,
			"titleNode": titleNode,
			"descNode": descNode
		};
		return returnHash;
	},
	imagePreloader: function() {
		var loopCount = 1;
		$A(subfeature.target.getElementsByTagName('img')).each(function(imgAt) {
			var newName = 'fea_' + loopCount;
			var newName = new Image();
			newName.alt = loopCount;
			newName.id = 'preload_' + subfeature.feaID + "_" + loopCount;
			newName.src = imgAt.src.replace("_thm","");
			loopCount++;
		});
	}
}

// class for controlling main screenshot scroller
var screenshots =  {
	forwardClick: null,
	backClick: null,
	newLeft: null,
	target: null,
	targetLength: null,
	moveBlock: 275,
	clickCounter: 0,
	clickMax: null,
	init: function() {
		screenshots.target = $('screen_list');
		if (screenshots.target) {
			screenshots.clickMax = Math.round(screenshots.target.getElementsByTagName('li').length / 3) - 1;
		}
	},
	move: function(type) {
		screenshots.setValues(type);
	},
	setValues: function(type) {
		var listWidth = screenshots.target.getElementsByTagName("li")[0].getWidth() + 10;
		var currentLeft = screenshots.target.style.left;
		if (currentLeft == '') { currentLeft = '0px' };
		var newLeft = 0;
		switch (type) {
			case "forward":
				if (screenshots.clickCounter === screenshots.clickMax)  { return };
				screenshots.clickCounter++;
				screenshots.newLeft = (parseInt(currentLeft.split('px')[0]) - screenshots.moveBlock) + 'px';
			break;
			case "back":
				if (screenshots.clickCounter === 0)  { return };
				screenshots.clickCounter--;
				screenshots.newLeft = (parseInt(currentLeft.split('px')[0]) + screenshots.moveBlock) + 'px';
			break;
		}
		screenshots.motion();
	},
	getArrows: function() {
		var linkList = {
			"forward": $('index_screens').getElementsByClassName('forward')[0].getElementsByTagName('a')[0],
			"back": $('index_screens').getElementsByClassName('back')[0].getElementsByTagName('a')[0]
		}
		return linkList;
	},
	clicks: function(type) {
		var linkList = screenshots.getArrows();
		switch(type) {
			case "store":
				screenshots.forwardClick = linkList.forward.getAttribute("onclick");
				screenshots.backClick = linkList.back.getAttribute("onclick");
			break;
			case "remove":
				linkList.forward.setAttribute("onclick","return false;");
				linkList.back.setAttribute("onclick","return false;");
			break;
			case "reset":
				linkList.forward.setAttribute("onclick", screenshots.forwardClick);
				linkList.back.setAttribute("onclick", screenshots.backClick);
			break;
		}
	},
	motion: function() {
		screenshots.clicks('store');
		screenshots.clicks('remove');
		screenshots.target.morph('left: ' + screenshots.newLeft, {duration: 1});
		var clickTimer = window.setTimeout(function(){
			screenshots.clicks('reset');
		},200);
	}
}

// class for controlling the reviews tabs section
var reviews =  {
	jsonStruct: null,
	init: function() {
		reviews.setTabs();
	},
	getTabs: function() {
		return $A($('mid_content').getElementsByClassName('title'));
	},
	getTabLinks: function() {
		var links = [];
		reviews.getTabs().each(function(titleAt) {
			links.push(titleAt.getElementsByTagName('a')[0]);
		});
		return links;
	},
	getContent: function() {
		return $A($('mid_content').getElementsByClassName('content'));
	},
	setTabs: function() {
		reviews.getTabLinks().each(function(linkAt) {
			/*
			linkAt.onclick = function() {
				reviews.changeTab(this); return false;
			}
			*/
		});
	},
	changeTab: function(el) {
		var triggerName = $(el).parentNode.parentNode.id;
		var target = $(triggerName.replace('title','content'));
		reviews.resetTabs($(triggerName));
		reviews.setContent(target);
	},
	resetTabs: function(el) {
		reviews.getTabs().each(function(tabAt) {
			tabAt.removeClassName('on');
		});
		$(el).addClassName('on');
	},
	setContent: function(el) {
		if ($A(el.getElementsByClassName('loading')).length != 0) {
			reviews.getContentHTML(el);
		} else {
			reviews.showContent(el);
		}
	},
	showContent: function(el) {
		reviews.hideContent();
		$(el).removeClassName('loading');
		if (!sniff.isIE6) {
			new Effect.Appear($(el),{duration: .5});
		} else {
			$(el).show();
		}
	},
	hideContent: function() {
		reviews.getContent().each(function(contentAt) {
			contentAt.hide();
		});
	},
	getContentHTML: function(el) {
		if (!reviews.jsonStruct) {
			new Ajax.Request('/ajax/reviews/home/', {
				method: 'post',
				onSuccess: function(t) {
					var h = $H(t.responseText.evalJSON());
					reviews.jsonStruct = h._object;
					$(el).update(reviews.jsonStruct.eval(el.id));
					reviews.showContent(el);
				},
				onFailure: function(t){
					$('wrapper').update(t.responseText);
				}
			});
		} else {
			//TODO: check out bug fix for Safari
			$(el).update(reviews.jsonStruct.eval(el.id));
			reviews.showContent(el);
		}
	}
}

var user_content =  {
	jsonStruct: null,
	init: function() {
		this.setTabs();
		this.setStars();
	},
	getTabs: function() {
		if (document.getElementById('user_content')) {
			return $A($('user_content').getElementsByClassName('title'));
		} else {
			return false;
		}
	},
	getTabLinks: function() {
		var links = [];
		if (user_content.getTabs()) {
			user_content.getTabs().each(function(titleAt){
				links.push(titleAt.getElementsByTagName('a')[0]);
			});
			return links;
		} else return false;
	},
	getContent: function() {
		return $A($('user_content').getElementsByClassName('content'));
	},
	setTabs: function() {
		if (user_content.getTabs()) {
			user_content.getTabLinks().each(function(linkAt){
				/*
				linkAt.onclick = function(){
					user_content.changeTab(this);
					return false;
				}
				*/
			});
		}
	},
	changeTab: function(el) {
		var triggerName = $(el).parentNode.parentNode.id;
		var target = $(triggerName.replace('title','content'));
		user_content.resetTabs($(triggerName));
		user_content.setContent(target);
	},
	resetTabs: function(el) {
		user_content.getTabs().each(function(tabAt) {
			tabAt.removeClassName('on');
		});
		$(el).addClassName('on');
	},
	setContent: function(el) {
		if ($A(el.getElementsByClassName('loading')).length != 0) {
			user_content.getContentHTML(el);
		} else {
			user_content.showContent(el);
		}
	},
	showContent: function(el) {
		user_content.hideContent();
		$(el).removeClassName('loading');
		if (!sniff.isIE6) {
			new Effect.Appear($(el),{duration: .5});
		} else {
			$(el).show();
		}
	},
	hideContent: function() {
		user_content.getContent().each(function(contentAt) {
			contentAt.hide();
		});
	},
	getContentHTML: function(el) {
		if (!user_content.jsonStruct) {
			new Ajax.Request('/ajax/user_content/home/', {
				method: 'post',
				onSuccess: function(t) {
					var h = $H(t.responseText.evalJSON());
					user_content.jsonStruct = h._object;
					//TODO: check out bug fix for Safari
					$(el).update(user_content.jsonStruct.eval(el.id));
					user_content.showContent(el);
				},
				onFailure: function(t){
					$('wrapper').update(t.responseText);
				}
			});
		} else {
			//TODO: check out bug fix for Safari
			$(el).update(user_content.jsonStruct.eval(el.id));
			user_content.showContent(el);
		}
	},
	setStars: function() {
		if (document.getElementById('user_content')) {
			$A($('user_content').getElementsByClassName('rating')).each(function(nodeAt){
				new Starbox(nodeAt, nodeAt.getAttribute("value"), {
					color: '#FFCC00',
					hoverColor: '#990000',
					locked: false
				});
			});
		}
	}
}

/* Quick Gallery Code */
var gallery = {
	reveal: function(i) {
		var myNxt = $(i).next();
		var myPrv = $(i).previous();
		var mySibs = $(i).siblings();
		if(myPrv) var myIndex = mySibs.indexOf(myPrv)+2;
		else var myIndex = 1;		
		var myContent = '<div id="gallery_close" onclick="gallery.close();">CLOSE</div>';
		myContent += '<div id="gallery_counter">image ' + myIndex + ' of ' + (mySibs.length + 1) + '</div>';
		if(myPrv) myContent += '<div id="gallery_prev" onclick="gallery.reveal(\'' + myPrv.id + '\')">&nbsp;</div>';
		else myContent += '<div id="gallery_prevEmpty">&nbsp;</div>';
		if(myNxt) myContent += '<div id="gallery_next" onclick="gallery.reveal(\'' + myNxt.id + '\')">&nbsp;</div>';
		else myContent += '<div id="gallery_nextEmpty">&nbsp;</div>';
		myContent += '<img src="' + $(i).href + '" id="gallery_focus" />';
		$('gallery_slide').update(myContent);
		$('gallery_thumbs').hide();
		$('gallery_slide').show();
		$('gallery').scrollTo();
	},
	close: function() {
		$('gallery_slide').hide();
		$('gallery_thumbs').show();
	}
}

Event.observe(window, 'load', indexClass.init);