// -----------------------------------------------------------------------------------
// 
// This page coded by Scott Upton
// http://www.uptonic.com | http://www.couloir.org
//
// This work is licensed under a Creative Commons License
// Attribution-ShareAlike 2.0
// http://creativecommons.org/licenses/by-sa/2.0/
//
// Associated APIs copyright their respective owners
//
// -----------------------------------------------------------------------------------
// --- version date: 11/28/05 --------------------------------------------------------


// get current photo id from URL
var thisURL = document.location.href;
var splitURL = thisURL.split("#");
var photoId = splitURL[1] - 1;

// if no photoId supplied then set default
var photoId = (!photoId)? 0 : photoId;

// CSS border size x 2
var borderSize = 10;

// Photo directory for this gallery
var photoDir = "images/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("lordmayor01.jpg", "375", "500", "Opening Procession, Lord Mayor of the City of Newcastle upon Tyne, Councillor Michael Cookson"),
	new Array("alanbainbridgekeithhallfs.jpg", "500", "375", "Members of Senior Stewards Committee, Mr. Keith Hall and Mr. Alan Bainbridge"),
	new Array("citymacebearer01fs.jpg", "375", "500", "Hoppings Opening Ceremony, The Mace Bearer with Lord Mayor Councillor Michael Cookson in background"),
	new Array("sirlenfenwickopeningspeech01fs.jpg", "500", "375", "Sir Leonard Fenwick speaking at the Hoppings Opening Ceremony"),
	new Array("sirlenfenwick01fs.jpg", "375", "500", "Sir Leonard Fenwick speaking at the Hoppings Opening Ceremony"),
	new Array("kneelingbeforesirlen01fs.jpg", "375", "500", "TV crews from Tyne Tees were much in evidence..."),
	new Array("mayorsunderland01fs.jpg", "500", "375", ""),
	new Array("lordmayordecendingstairs01fs.jpg", "343", "500", "Lord Mayor of Newcastle and Mace Bearer"),
	new Array("davidwilson01fs.jpg", "375", "500", ""),
	new Array("chrisatkinsonianmiller01fs.jpg", "375", "500", "Senior Stewards Committee, Chris Atkinson and Ian Miller"),
	new Array("dodgems01fs.jpg", "500", "375", "The Mayor of Sunderland, Councillor Dennis Richardson on the 'dodgems'... "),
	new Array("dodgems02fs.jpg", "375", "500", "The Mayor of the City of Newcastle upon Tyne, Councillor Michael Cookson"),
	new Array("hoppingsilse01fs.jpg", "500", "375", "The Hoppings, Opening Day 2009"),
	new Array("keithhall01fs.jpg", "500", "375", "Keith Hall racing... "),
	new Array("ladywithtigger01fs.jpg", "375", "500", ""),
	new Array("keithhall02fs.jpg", "500", "375", "Keith Hall racing... "),
	new Array("lordmayordodgems01fs.jpg", "375", "500", "Lord Mayor of Newcastle on Dodgems... "),
	new Array("lordmayormerrigoround01fs.jpg", "375", "500", "Lord Mayor of Newcastle on Merry-Go-Round..."),
	new Array("lordmayormerrigoround02fs.jpg", "375", "500", "Lord Mayor of Newcastle on Merry-Go-Round... "),
	new Array("mrandmrsianmiller01fs.jpg", "375", "500", "Senior Stewards Committee, Mr and Mrs Ian Millar"),
	new Array("sirlenfenwickdavidfaulkner01fs.jpg", "375", "500", "Sir Leonard Fenwick and Council Deputy Leader David Faulkner"),
	new Array("ssc01fs.jpg", "375", "500", "Members of the Senior Stewards Committee universally agree 'you're not getting me up in that thing...'"),
	new Array("ssc02fs.jpg", "500", "375", "Members of the Senior Stewards Committee, Mr. Keith Hall, Sir Leonard Fenwick, Mr. Alan Bainbridge and Mr. Chris Atkinson")
	);

// Number of photos in this gallery
var photoNum = photoArray.length;

/*--------------------------------------------------------------------------*/

// Additional methods for Element added by SU, Couloir
Object.extend(Element, {
	getWidth: function(element) {
   	element = $(element);
   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   	element = $(element);
    	element.style.height = h +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

/*--------------------------------------------------------------------------*/

var Slideshow = Class.create();

Slideshow.prototype = {
	initialize: function(photoId) {
		this.photoId = photoId;
		this.photo = 'Photo';
		this.photoBox = 'Container';
		this.prevLink = 'PrevLink';
		this.nextLink = 'NextLink';
		this.captionBox = 'CaptionContainer';
		this.caption = 'Caption';
		this.counter = 'Counter';
		this.loader = 'Loading';
	},
	getCurrentSize: function() {
		// Get current height and width, subtracting CSS border size
		this.wCur = Element.getWidth(this.photoBox) - borderSize;
		this.hCur = Element.getHeight(this.photoBox) - borderSize;
	},
	getNewSize: function() {
		// Get current height and width
		this.wNew = photoArray[photoId][1];
		this.hNew = photoArray[photoId][2];
	},
	getScaleFactor: function() {
		this.getCurrentSize();
		this.getNewSize();
		// Scalars based on change from old to new
		this.xScale = (this.wNew / this.wCur) * 100;
		this.yScale = (this.hNew / this.hCur) * 100;
	},
	setNewPhotoParams: function() {
		// Set source of new image
		Element.setSrc(this.photo,photoDir + photoArray[photoId][0]);
		// Set anchor for bookmarking
		Element.setHref(this.prevLink, "#" + (photoId+1));
		Element.setHref(this.nextLink, "#" + (photoId+1));
	},
	setPhotoCaption: function() {
		// Add caption from gallery array
		Element.setInnerHTML(this.caption,photoArray[photoId][3]);
		Element.setInnerHTML(this.counter,((photoId+1)+'/'+photoNum));
	},
	resizePhotoBox: function() {
		this.getScaleFactor();
		new Effect.Scale(this.photoBox, this.yScale, {scaleX: false, duration: 0.3, queue: 'front'});
		new Effect.Scale(this.photoBox, this.xScale, {scaleY: false, delay: 0.5, duration: 0.3});
		// Dynamically resize caption box as well
		Element.setWidth(this.captionBox,this.wNew-(-borderSize));
	},
	showPhoto: function(){
		new Effect.Fade(this.loader, {delay: 0.5, duration: 0.3});
		// Workaround for problems calling object method "afterFinish"
		new Effect.Appear(this.photo, {duration: 0.5, queue: 'end', afterFinish: function(){Element.show('CaptionContainer');Element.show('PrevLink');Element.show('NextLink');}});
	},
	nextPhoto: function(){
		// Figure out which photo is next
		(photoId == (photoArray.length - 1)) ? photoId = 0 : photoId++;
		this.initSwap();
	},
	prevPhoto: function(){
		// Figure out which photo is previous
		(photoId == 0) ? photoId = photoArray.length - 1 : photoId--;
		this.initSwap();
	},
	initSwap: function() {
		// Begin by hiding main elements
		Element.show(this.loader);
		Element.hide(this.photo);
		Element.hide(this.captionBox);
		Element.hide(this.prevLink);
		Element.hide(this.nextLink);
		// Set new dimensions and source, then resize
		this.setNewPhotoParams();
		this.resizePhotoBox();
		this.setPhotoCaption();
	}
}

/*--------------------------------------------------------------------------*/

// Establish CSS-driven events via Behaviour script
var myrules = {
	'#Photo' : function(element){
		element.onload = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.showPhoto();
		}
	},
	'#PrevLink' : function(element){
		element.onmouseover = function(){
			soundManager.play('beep');
		}
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.prevPhoto();
			soundManager.play('select');
		}
	},
	'#NextLink' : function(element){
		element.onmouseover = function(){
			soundManager.play('beep');
		}
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.nextPhoto();
			soundManager.play('select');
		}
	},
	a : function(element){
		element.onfocus = function(){
			this.blur();
		}
	}
};

// Add window.onload event to initialize
Behaviour.addLoadEvent(init);
Behaviour.apply();
function init() {
	var myPhoto = new Slideshow(photoId);
	myPhoto.initSwap();
	soundManagerInit();
}