// Sidescroller
// (C) PC Help 2006

// Requires: Prototype, Scriptaculous
// Last update: 13/10/2006

// Sidescroller setup

var panelSpace = 0;
var namContainer = "container";
var namContainerWrapper = "container-wrapper";
var namPanel = "panel";
var namButtons = "buttons";
var namButtonLeft = "buttonleft";
var namButtonRight = "buttonright";

// General scope variables setup

var Sidescroller = Class.create();
var mySidescroller;
var container;
var container_wrapper;
var container_width;
var container_height = -1;
var panels;
var page = 1;
var maxpage;
var btnleft=true;
var btnright=true;
var untouched=true;
var buttonleft;
var buttonright;

Sidescroller.prototype = {
	seturl: function() {
		if (typeof(page) != "undefined" && page != 1) {
			document.location.href="#page_" + page;
		}
	},
	checkurl: function() {
			var sidescroller_url = document.location.href;
			var sidescroller_spliturl = sidescroller_url.split("#page_");
			var sidescroller_page = sidescroller_spliturl[1];
			if (sidescroller_page == "last") sidescroller_page = maxpage;
			if (typeof(sidescroller_page) != "undefined" && sidescroller_page != 1) {
				curpage = page;
				page = sidescroller_page;
				this.movepage();
			};
	},
	initialize: function() {
		container = document.getElementById(namContainer);
		container_wrapper = document.getElementById(namContainerWrapper);
		container_width = container.offsetWidth;
		panels = document.getElementsByClassName(namPanel);
		for (var i=0;i<panels.length;i++){
			Element.setStyle(panels[i],{position:'absolute'});
		}
		maxpage = panels.length;
	
		Element.hide(namButtons);
		this.resizecontainer();
		buttonleft = $(namButtonLeft);
		buttonright = $(namButtonRight);
		buttonleft.onclick = function () {
			mySidescroller.moveleft(); return false;
		};
		buttonright.onclick = function () {
			mySidescroller.moveright(); return false;
		};
		Effect.Appear(namButtons);
		this.showbuttons();
/*		Event.observe(window,'resize', function(){
		  mySidescroller.resizecontainer();
		}); */
		window.setTimeout('mySidescroller.buttonpulsate();',15000);
		
		this.enableKeyboardNav();
		this.checkurl();
	},
	moveleft: function() {
		untouched=false;
		if (page > 1) {
			page--;
			new Effect.Move (container,{ y: 0, x: (-(page-1)*((container_width+panelSpace))), mode: 'absolute', queue: 'end'});
			this.showbuttons();
		};
	},
	moveright: function() {
		untouched=false;
		if (page < maxpage) {
		page++;
		new Effect.Move (container,{ y: 0, x: (-(page-1)*((container_width+panelSpace))), mode: 'absolute', queue: 'end'});
		this.showbuttons();
		};
	},
	movepage: function() {
		new Effect.Move (container,{ y: 0, x: (-(page-1)*((container_width+panelSpace))), mode: 'absolute', duration:((page-curpage) * 0.5), queue: 'end'});
		this.showbuttons();
	},
	movefirstlast: function() {
		if (page != maxpage) {
			this.movelast();
		} else {
			this.movefirst();
		}
		this.showbuttons();
	},
	movefirst: function() {
		untouched=false;
		var curpage = page;
		page = 1;
		new Effect.Move (container,{ y: 0, x: (-(page-1)*((container_width+panelSpace))), mode: 'absolute', duration:((curpage-1) * 0.5), afterFinish:mySidescroller.showbuttons, queue: 'end'});
	},
	movelast: function() {
		untouched=false;
		var curpage = page;
		page = maxpage;
		new Effect.Move (container,{ y: 0, x: (-(page-1)*((container_width+panelSpace))), mode: 'absolute', duration:((maxpage-curpage) * 0.5), afterFinish:mySidescroller.showbuttons, queue: 'end'});
		
	},
	showbuttons: function() {
		var obtnleft=btnleft;
		var obtnright=btnright;
		btnright=!(page == maxpage);
		btnleft=!(page == 1);
		if (btnleft != obtnleft) {
			if (btnleft == true) {
				Effect.Appear('buttonleft', {queue: {position:'end', scope: 'sidescroller'}});
			} else {
				Effect.Fade('buttonleft', {queue: {position:'end', scope: 'sidescroller'}});
			};
		};
		if (btnright != obtnright) {
			if (btnright == true) {
				Effect.Appear('buttonright', {queue: {position:'end', scope: 'sidescroller'}});
			} else {
				Effect.Fade('buttonright', {queue: {position:'end', scope: 'sidescroller'}});
			};
		};
		if (typeof(page) != "undefined" && page != 1) {
			document.location.href="#page_" + page;
		} else {
			if (!untouched) document.location.href="#page_1";
		};
	},
	resizecontainer: function() {
		container_width = container.offsetWidth;
		container_height = -1;
		for (var i=0;i<panels.length;i++){
			Element.setStyle(panels[i],{width:(container_width-panelSpace) + "px"});
			Element.setStyle(panels[i],{left:i*(container_width+panelSpace) + "px"});
			if (Element.getHeight(panels[i]) > container_height) container_height = Element.getHeight(panels[i]);
		}
		Element.setStyle(container,{height:container_height + "px"});
		new Effect.Move (container,{ y: 0, x: (-(page-1)*((container_width+panelSpace))), mode: 'absolute'});
	},
	enableKeyboardNav: function() {
		document.onkeydown = this.keyboardAction; 
	},
	keyboardAction: function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
		} else { // mozilla
			keycode = e.which;
		}

		key = String.fromCharCode(keycode).toLowerCase();
		
		if(keycode == 37){
			mySidescroller.moveleft();
		} else if(keycode == 39){
			mySidescroller.moveright();
		};
	},
	buttonpulsate: function() {
			if (untouched==true) {
				Effect.Pulsate('buttons');
				window.setTimeout('mySidescroller.buttonpulsate();',20000);
			}
	}
}
function initSidescroller() {
	mySidescroller = new Sidescroller();
}
Event.observe(window, 'load', initSidescroller, false);
