// -----------------------------------------------------------------------------------
// 
// 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("strada_oliveto.jpg", "375", "500", "The road to L'Oliveto dei Prischi"),
	new Array("strada_oliveto_02.jpg", "500", "375", "The road to L'Oliveto dei Prischi"),
	new Array("oliveto_panorama.jpg", "500", "375", "L'Oliveto dei Prischi"),
	new Array("oliveto_tufo.jpg", "500", "375", "L'Oliveto dei Prischi"),
	new Array("oliveto_dei_prischi.jpg", "500", "375", "L'Oliveto dei Prischi"),
	new Array("bed_breakfast_oliveto.jpg", "500", "375", "L'Oliveto dei Prischi"),
	new Array("sala_colazioni.jpg", "500", "375", "L'Oliveto dei Prischi"),
	new Array("sala_colazioni_02.jpg", "500", "375", "L'Oliveto dei Prischi"),
	new Array("area_relax.jpg", "500", "375", "Oliveto dei Prischi, relaxing area amongst the olive trees"),
	new Array("ponte.jpg", "500", "375", "Oliveto dei Prischi, wooden bridge"),
	new Array("rose.jpg", "500", "375", "Oliveto dei Prischi, roses and dew"),
	new Array("rossellina.jpg", "500", "375", "Oliveto dei Prischi, Rossellina"),
	new Array("andrea.jpg", "500", "375", "Oliveto dei Prischi, Andrea"),
	new Array("tobia_01.jpg", "500", "375", "Oliveto dei Prischi, Tobia"),
	new Array("andrea_rossellina.jpg", "500", "375", "Oliveto dei Prischi, Rossellina 'takes a nap' with Andrea"),
	new Array("andrea_profilo.jpg", "500", "375", "Oliveto dei Prischi, Andrea"),
	new Array("rossellina_muretto.jpg", "500", "375", "Oliveto dei Prischi, Rossellina"),
	new Array("cirpi.jpg", "500", "375", "A robin stays during the wintertime as a guest"),
	new Array("fichi_india.jpg", "500", "375", "Oliveto dei Prischi, prickly pears"),
	new Array("uova_falchi.jpg", "500", "375", "Every year a predatory bird lays its eggs in the tuff at Oliveto..."),
	new Array("falchetti.jpg", "500", "375", "... but when the kids are born you better not get near them!..."),
	new Array("quercia.jpg", "375", "500", "Oliveto dei Prischi, big oak tree"),
	new Array("fontanaccia.jpg", "500", "375", "'Fontanaccia', the old rustic fountain"),
	new Array("fontanaccia_02.jpg", "375", "500", "Fontanaccia', the old rustic fountain"),
	new Array("papaveri.jpg", "500", "375", "On the outskirts, a poppy field"),
	new Array("ulivi.jpg", "500", "375", "Light between the olive trees"),
	new Array("puledro.jpg", "500", "375", "A young horse with his mum"),
	new Array("pecora_nera.jpg", "500", "375", "A flock of sheep"),
	new Array("cavalli_maremmani_01.jpg", "500", "375", "25th Maremmano horse show"),
	new Array("cavalli_maremmani_02.jpg", "500", "375", "25th Maremmano horse show"),
	new Array("cavalli_maremmani.jpg", "375", "500", "25th Maremmano horse show"),
	new Array("montalto_mare.jpg", "500", "375", "The sea at Montalto di Castro"),
	new Array("montalto_spiaggia.jpg", "500", "375", "The 'black sand' beach at Montalto di Castro"),
	new Array("vulci_castello.jpg", "500", "375", "The Vulci castle and the bridge on the river Fiora"),
	new Array("vulci_castello_02.jpg", "500", "375", "The Vulci castle"),
	new Array("castello_vulci_fossato.jpg", "375", "500", "The moat at Vulci castle"),
	new Array("vulci_cortile.jpg", "375", "500", "The courtyard at Vulci castle"),
	new Array("vulci_rondine.jpg", "500", "375", "A swallow at Vulci castle"),
	new Array("vulci_ponte_sul_fiora.jpg", "375", "500", "The bridge on the river Fiora at Vulci "),
	new Array("vulci_ponte.jpg", "375", "500", "River Fiora, a view from the bridge"),
	new Array("vulci_paesaggio.jpg", "500", "375", "Landascape in Vulci")
	);

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