// -----------------------------------------------------------------------------------
// 
// 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", "Strada per l'Oliveto dei Prischi"),
	new Array("strada_oliveto_02.jpg", "500", "375", "Strada per 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", "368", "Oliveto dei Prischi, l'area relax nell'uliveto"),
	new Array("rose.jpg", "500", "375", "Oliveto dei Prischi, rose e rugiada"),
	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 'dorme' con 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", "Un pettirosso ospite per l'inverno all'Oliveto dei Prischi"),
	new Array("fichi_india.jpg", "500", "375", "Oliveto dei Prischi, fichi d'india"),
	new Array("uova_falchi.jpg", "500", "375", "Ogni anno un rapace depone le sue uova nel tufo all'Oliveto dei Prischi..."),
	new Array("falchetti.jpg", "500", "375", "... ma quando i piccoli nascono non bisogna avvicinarsi troppo!"),
	new Array("quercia.jpg", "375", "500", "Oliveto dei Prischi, una grande quercia"),
	new Array("fontanaccia.jpg", "500", "375", "Oliveto dei Prischi, la 'Fontanaccia'"),
	new Array("fontanaccia_02.jpg", "375", "500", "Oliveto dei Prischi, la 'Fontanaccia'"),
	new Array("papaveri.jpg", "500", "375", "Nei dintorni, un prato di papaveri"),
	new Array("ulivi.jpg", "500", "375", "Nei dintorni, la luce tra gli ulivi"),
	new Array("puledro.jpg", "500", "375", "Nei dintorni, un puledro con la mamma"),
	new Array("pecora_nera.jpg", "500", "375", "Nei dintorni, il gregge di pecore"),
	new Array("cavalli_maremmani_01.jpg", "500", "375", "Canino XXV Mostra nazionale del cavallo maremmano"),
	new Array("cavalli_maremmani_02.jpg", "500", "375", "Canino XXV Mostra nazionale del cavallo maremmano"),
	new Array("cavalli_maremmani.jpg", "375", "500", "Canino XXV Mostra nazionale del cavallo maremmano"),
	new Array("montalto_mare.jpg", "500", "375", "Montalto di Castro, il mare"),
	new Array("montalto_spiaggia.jpg", "500", "375", "Montalto di Castro, la spiaggia di sabbia 'nera'"),
	new Array("vulci_castello.jpg", "500", "375", "Castello di Vulci, e il ponte sul fiume Fiora"),
	new Array("vulci_castello_02.jpg", "500", "375", "Castello di Vulci"),
	new Array("castello_vulci_fossato.jpg", "375", "500", "Castello di Vulci, il fossato"),
	new Array("vulci_cortile.jpg", "375", "500", "Castello di Vulci, il cortile interno"),
	new Array("vulci_rondine.jpg", "500", "375", "Una rondine al Castello di Vulci"),
	new Array("vulci_ponte_sul_fiora.jpg", "375", "500", "Vulci, il ponte sul fiume Fiora"),
	new Array("vulci_ponte.jpg", "375", "500", "Vulci, il fiume Fiora dall'alto del ponte"),
	new Array("vulci_paesaggio.jpg", "500", "375", "Paesaggio a 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();
}