// -----------------------------------------------------------------------------------
// 
// 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("titlepage01.jpg", "600", "450", "Social Gathering, 23rd January 2010, The Guildhall, Newcastle upon Tyne"),
	new Array("alanbainbridge01.jpg", "600", "450", "Alan Bainbridge kicks off the proceedings..."),
	new Array("guildhalljanuary201004.jpg", "600", "450", "The crowd listens..."),
	new Array("malcolmbennet02.jpg", "600", "450", "Malcolm Bennett entertains..."),
	new Array("malcolmbennet01.jpg", "600", "450",  "Malcolm Bennett entertains..."),
	new Array("sscjanuary201001.jpg", "600", "450", "Members of the Senior Stewards Committee take questions..."),
	new Array("sscjanuary201002.jpg", "600", "450", "Members of the Senior Stewards Committee take questions..."),
	new Array("alanbainbridge03.jpg", "450", "600", "The principal topic is the introduction of Lady Freemen..."),
	new Array("guildhalljanuary201001.jpg", "600", "450", ""),
	new Array("keithhall02.jpg", "450", "600", "Keith Hall, Senior Stewards Committee"),
	new Array("comedian01.jpg", "600", "450", "More entertainment with Bob Bolam"),
	new Array("guildhalljanuary201003.jpg", "600", "450", ""),
	new Array("malcolmbennet03.jpg", "600", "450",  "Malcolm Bennett entertains..."),
	new Array("bobbolam02.jpg", "600", "450",  "Bob Bolam and Geordie humour..."),
	new Array("lunchisserved01.jpg", "600", "450", "An excellent buffet lunch"),
	new Array("alanalderson01.jpg", "600", "450", "Derek Lowdon and Ian Miller"),
	new Array("sherodwalker01.jpg", "600", "450", "Sherod Walker, Plumbers Company and Miss Helen Wright"),
	new Array("keithhall01.jpg", "600", "450", "Mr. Keith Hall, Senior Stewards Committee and Freemen of Trinity House "),
	new Array("jimjohnsonmichaelgray01.jpg", "600", "450", "Mr. Michael Gray and Mr. Jim Johnson, Senior Stewards Committee"),
	new Array("guildhalllady01.jpg", "450", "600", "Statuette from the newly refurbished Merchant Adventurer's Court"),
	new Array("sherodwalkerkeithhall01.jpg", "600", "450", "Sherod Walker, Plumbers Company and Keith Hall, Freemen of Trinity House"),
	new Array("alanbainbridge04.jpg", "450", "600", "Alan Bainbridge, Senior Stewards Committee and Miss Helen Wright "),
	new Array("alanbainbridge02.jpg", "600", "450", "Alan Bainbridge, Senior Stewards Committee with Mr and Mrs Chris Atkinson"),
	new Array("chrisatkinson01.jpg", "600", "450", "Mr and Mrs Chris Atkinson with David Hughes, Coopers Company"),
	new Array("mrandmrsianmiller01.jpg", "450", "600", "Mr and Mrs Ian Miller, Shipwrights Company"),
	new Array("merchantadventurerscourtceiling01.jpg", "600", "487", "Ceiling from the newly refurbished Merchant Adventurer's Court"),
	new Array("endtitles.jpg", "600", "487", "Pictures by Alan Bainbridge and David Hughes, Copyright &copy; Freemen of Newcastle 2010")
	);

// 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();
}