// -----------------------------------------------------------------------------------
// 
// 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 = "photos/01/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("01.jpg", "775", "245", "Aanmeren in mist Maasvlakte, Jaarverslag Port of Rotterdam"),
	new Array("02.jpg", "775", "245", "Aanmeren olietanker Europoort, Jaarverslag Port of Rotterdam"),
	new Array("03.jpg", "775", "245", "Autooverslag Rozenburg, Jaarverslag Port of Rotterdam"),
	new Array("04.jpg", "775", "245", "Botlek en sneeuw, Jaarverslag Port of Rotterdam"),
	new Array("05.jpg", "775", "245", "Containerschip passeert Maeslandtkering, Jaarverslag Port of Rotterdam"),
	new Array("06.jpg", "775", "245", "Containerschip nadert stadscentrum, Jaarverslag Port of Rotterdam"),
	new Array("07.jpg", "775", "245", "Containerschip vertrekt bij nacht Maasvlakte, Jaarverslag Port of Rotterdam"),
	new Array("08.jpg", "775", "245", "Containerschip vertrekt bij nacht Maasmond, Jaarverslag Port of Rotterdam"),
	new Array("09.jpg", "775", "245", "Fruitoverslag, Jaarverslag Port of Rotterdam"),
	new Array("10.jpg", "775", "245", "Graanoverslag Europoort, Jaarverslag Port of Rotterdam"),
	new Array("11.jpg", "775", "245", "Aanmeren olietanker met loods en kapitein, Jaarverslag Port of Rotterdam"),
	new Array("12.jpg", "775", "245", "Controleur gevaarlijke stoffen Europoort, Jaarverslag Port of Rotterdam"),
	new Array("13.jpg", "775", "245", "Controleur gevaarlijke stoffen Europoort, Jaarverslag Port of Rotterdam"),
	new Array("14.jpg", "775", "245", "Aanmeren olietanker Europoort, Jaarverslag Port of Rotterdam"),
	new Array("15.jpg", "775", "245", "Stadshaven Eemhaven, Expositie Maritiem Museum"),
	new Array("16.jpg", "775", "245", "Stadshaven Entrepothaven, Maritiem Museum"),
	new Array("17.jpg", "775", "245", "Stadshaven Rijn-Maashaven, Expositie Maritiem Museum"),
	new Array("18.jpg", "775", "245", "Stadshaven Zalmhaven, Expositie Maritiem Museum"),
	new Array("19.jpg", "775", "245", "Eerste kraan Euromaxterminal Maasvlakte, Port of Rotterdam"),
	new Array("20.jpg", "775", "245", "Vertrekkende autoboot Maasmond, Port of Rotterdam"),
	new Array("21.jpg", "775", "245", "Storm op Noordzee, Port of Rotterdam"),
	new Array("22.jpg", "775", "245", "Verontreinigde grond in Slufter, Port of Rotterdam"),
	new Array("23.jpg", "775", "245", "Schapen en Botlek, Jaarverslag Port of Rotterdam"),
	new Array("24.jpg", "775", "245", "Sjovels op Maasvlakte, Jaarverslag Port of Rotterdam"),
	new Array("25.jpg", "775", "245", "Slepen van een bulkcarrier Botlek, Jaarverslag Port of Rotterdam"),
	new Array("26.jpg", "775", "245", "Landschap met duwbakken en schroefwater, Jaarverslag Port of Rotterdam"),
	new Array("27.jpg", "775", "245", "Massagoedoverslagbedrijf EMO Maasvlakte, Jaarverslag Port of Rotterdam"),
	new Array("28.jpg", "775", "245", "Olieraffinaderij Shell Pernis, Jaarverslag Port of Rotterdam")
	);
// 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();
}
