addLoadEvent(initScroller);

// User Set Up
var pageWidth = "960px";
var pageHeight = "110px";
var want_pagination = true;
var want_next_button = true;
var want_previous_button = true;

// Global Variables
var numPages = 0;
var currentPage = "page1";
var existance_nextButton = false;
var existance_previousButton = false;
var existance_pagination = false;

function initScroller() {

	// Perform Harry carey if no pages found
	if(!setupScroller()) return false;
	
	// Initiate slider effect
	var scroll = new Fx.Scroll('scroller', {
		wait: false,
		duration: 500,
		transition: Fx.Transitions.Quad.easeInOut
	});

	// Set pagination onclick behaviour
	if(existance_pagination) {
		var nav_items = $ES('a','scroller-nav');
		for(var i=0; i<nav_items.length; i++) {
			nav_items[i].addEvent('click', function(event) {
				var pageID = "page" + this.id.charAt(this.id.length - 1);
				event = new Event(event).stop();
				setNavCurrentState(pageID);
				currentPage = pageID;
				scroll.toElement(pageID);
			});
		}
	}
		
	// Set previous-button onclick behaviour
	if(existance_previousButton) {
		$('scroller-nav-previous').addEvent('click', function(event) {
			currentPage = getPreviousPage();
			setNavCurrentState(currentPage);
			event = new Event(event).stop();
			scroll.toElement(currentPage);
		});
	}
	
	// Set next-button onclick behaviour
	if(existance_nextButton) {
		$('scroller-nav-next').addEvent('click', function(event) {
			currentPage = getNextPage();
			setNavCurrentState(currentPage);
			event = new Event(event).stop();
			scroll.toElement(currentPage);
		});
	}
	scroll.toElement(currentPage);
}

/* Sets the selected state for the given page index */
function setNavCurrentState(page) {
	if(!existance_pagination) return false;
	
	var links = $ES('a.highlight','scroller-nav');
	for(var i=0; i<links.length; i++)
		links[i].className = "";
	$("nav-"+page).className = "highlight";
}

/* Returns the next page */
function getNextPage() {
	var number = parseInt(currentPage.split('page')[1]);
	return (number < numPages)? "page" + ++number : "page1";
}

/* Returns the previous page */
function getPreviousPage() {
	var number = parseInt(currentPage.split('page')[1]);		
	return (number == 1)? "page" + numPages : "page" + --number;
}

/* Adds IDs to the pages and page nav links */
function setupScroller() {
	var pages = $ES('div.page','scroller');
	numPages = pages.length;
	if(numPages == 0) return false;
	
	// Created scroller navigation
	createControls();
	
	// Set page IDs and dimensions
	for(var j=0; j<pages.length; j++){
		var left = j * parseInt(pageWidth.split(/px/)[0]);
		pages[j].id = "page" + (j+1);
		pages[j].setStyles({'width':pageWidth,'height':pageHeight,'left':left,'top':'0px'});
	}		
	
	// Set Scroller dimensions
	$('scroller-wrap').setStyles({'width':pageWidth});
	$('scroller').setStyles({'width':pageWidth, 'height':pageHeight});
	
	// Set current page	
	if(existance_pagination)
		setNavCurrentState(currentPage);
	
	return true;
}

/* Create scroller navigation */
function createControls() {
	if(numPages < 2) return false;
	
	// Checks for existence of custom navigation	
	existance_nextButton = ($('scroller-nav-next'))? true : false;
	existance_previousButton = ($('scroller-nav-previous'))? true : false;
	existance_pagination = ($('scroller-nav'))? true : false;
	
	// Creates Next link if not already created by user
	if(!existance_nextButton && want_next_button) {
		nextLink = document.createElement('a');
		nextLink.id = "scroller-nav-next";
		nextLink.href = "#";
		nextLink.appendChild(document.createTextNode(''));
		$('scroller-wrap').appendChild(nextLink);
		existance_nextButton = true;
	}

	// Create Previous link	if not already created by user
	if(!existance_previousButton && want_previous_button) {
		previousLink = document.createElement('a');
		previousLink.id = "scroller-nav-previous";
		previousLink.href = "#";
		previousLink.appendChild(document.createTextNode(''));
		$('scroller-wrap').appendChild(previousLink);
		existance_previousButton = true;
	}
		
	// Create Pagination if not already created by user
	if(!existance_pagination && want_pagination) {
		pagination = document.createElement('ul');
		pagination.id = "scroller-nav";
		
		for(var i=1; i<=numPages; i++) {
			list_item = document.createElement('li');
			link = document.createElement('a');
			link.id = "nav-page" + i;
			link.href = "#page" + i;
			link.appendChild(document.createTextNode(i));
			list_item.appendChild(link);
			pagination.appendChild(list_item);
		}
		$('scroller-wrap').appendChild(pagination);	
		existance_pagination = true;			
	} else if(existance_pagination) {
		// pagination already created, so apply appropriate id's
		pagination_links = $ES('a','scroller-nav');
		for(var i=0; i<numPages; i++)
			pagination_links[i].id = "nav-page" + (i+1);
	}
}


/* Helper Functions
---------------------------------------------------------- */

/* Calls the given function when the page loads (thanks: Jeremy Keith) */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if(typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}