// JavaScript Document

var Banner = {
	ALL : 'all',
	COLUMN : 'column',
	
	itemWidth : 0,
	itemHeight : 0,
	cols : null,
	rowDetails : [],
	banner : null,
	buttons : null,
	slider : null,
	bannerHSections : null,
	randomStart : 0,
	rTimer : 0,
	hDelay : 2000,
	animationSpeed : 400,
	hCurrent : 0,
	vCurrent : 0,
	
	init : function() {
		Banner.banner = $("#banner");
		Banner.slider = $("#slideSection");
		Banner.cols = $(".bannerHSection");
		
		Banner.itemWidth = Banner.cols.eq(0).width();
		Banner.itemHeight = Banner.cols.eq(0).find(".bannerVSection").eq(0).height();
		
		Banner.cols.each(function() {
			var items = $(this).find(".bannerVSection");
			Banner.rowDetails.push({ items:items, count:items.length, current:0 });	
		});
		
		Banner.randomStart = Math.floor(Math.random()*Banner.cols.length);
		Banner.vCurrent = Math.floor(Math.random()*Banner.rowDetails[Banner.randomStart].count);
		Banner.hCurrent = Banner.randomStart;
		
		Banner.slider.css({ left:-Banner.itemWidth*Banner.hCurrent, top:-Banner.itemHeight*Banner.vCurrent });
		
		Banner.buttons = $("#bannerButtons li");
		Banner.buttons.eq(Banner.randomStart).addClass("active");
		Banner.buttons.mouseover(Banner.buttonClick);
		
		Banner.slider.mouseover(Banner.bannerOver);
		Banner.slider.mouseout(Banner.bannerOut);
	
		Banner.rTimer = setTimeout(Banner.rChange, Banner.hDelay);
	},
	
	buttonClick : function() {
		clearTimeout(Banner.rTimer);
		Banner.hCurrent = Banner.buttons.index(this);
		Banner.changeHSection(Banner.hCurrent);
		Banner.rTimer  = setTimeout(Banner.setChange, Banner.hDelay);
	},
	
	changeHSection : function(index) {
		Banner.updateInterface();
		Banner.slider.clearQueue().animate({ left:-index*Banner.itemWidth }, Banner.animationSpeed);	
	},
	
	changeVSection : function(index) {
		Banner.updateInterface();
		Banner.slider.clearQueue().animate({ top:-index*Banner.itemHeight }, Banner.animationSpeed);	
	},
	
	changeSection : function(hIndex, vIndex) {
		Banner.updateInterface();
		Banner.slider.clearQueue().animate({ left:-hIndex*Banner.itemWidth, top:-vIndex*Banner.itemHeight }, Banner.animationSpeed);
	},
	
	updateInterface : function() {
		Banner.buttons.removeClass("active");
		Banner.buttons.eq(Banner.hCurrent).addClass("active");
	},
	
	rChange : function() {
		clearTimeout(Banner.rTimer);
		Banner.hCurrent = Banner.hCurrent+1 < Banner.cols.length ? Banner.hCurrent + 1 : 0;
		if(Banner.hCurrent == 0) Banner.vCurrent = Banner.vCurrent+1 < Banner.rowDetails[Banner.hCurrent].count ? Banner.vCurrent + 1 : 0;
		Banner.changeSection(Banner.hCurrent, Banner.vCurrent);
		Banner.rTimer = setTimeout(Banner.rChange, Banner.hDelay);
	},
	
	setChange : function() {
		clearTimeout(Banner.rTimer);
		Banner.vCurrent = Banner.vCurrent+1 < Banner.rowDetails[Banner.hCurrent].count ? Banner.vCurrent + 1 : 0;
		Banner.changeVSection(Banner.vCurrent);
		Banner.rTimer  = setTimeout(Banner.setChange, Banner.hDelay);
	},
	
	bannerOver : function(e) {
		if(((e.pageX - $(this).offset().left) < Banner.banner.width() || (e.pageX - $(this).offset().left) > 0) || ((e.pageY - $(this).offset().top) < Banner.banner.height() || (e.pageY - $(this).offset().top) > 0)) {
			Banner.pause();
		}
	},
	
	bannerOut : function(e) {
		if(((e.pageX - $(this).offset().left) > Banner.banner.width() || (e.pageX - $(this).offset().left) < 0) || ((e.pageY - $(this).offset().top) > Banner.banner.height() || (e.pageY - $(this).offset().top) < 0)) {
			Banner.play();
		}
	},
	
	pause : function() {
		clearTimeout(Banner.rTimer);
	},
	
	play : function() {
		clearTimeout(Banner.rTimer);
		Banner.rTimer = setTimeout(Banner.rChange, Banner.hDelay);
	}

}
