// -----------------------------------------------------------------------------------
// 
// 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("squelchfieldstudio.jpg", "533", "400", "Sometimes you can surprise yourself at how fast some manipulations can offer some great results. I put this shot of the studio through a Photoshop filter, and it was as though I`d commissioned a really fluid artist to paint it. I was blown away by the effect"),
	new Array("studioview2.jpg", "533", "400", "I m really happy with the studio now. All the upgrading to incorporate digital mixing , a new computer with video capture, and an ability to explore multimedia stuff has involved a huge amount of research, but now I can really reap the benefits"),
	new Array("studioview8.jpg", "533", "400", "The acoustic area of the studio faces the garden. The acoustic part of things in a very important part of the musical creation process. You can never underestimate the soulful qualities and dynamic effect of live performance"),
	new Array("drums7.jpg", "533", "400", "The drum crew"),
	new Array("drums8.jpg", "533", "400", "Darabuk, dholak, Djun-djun and tar drum"),
	new Array("drums9.jpg", "533", "400", "The temple drum is the red one on the bottom right"),
	new Array("drums10.jpg", "533", "400", "Percussion toys help the grooves along. These have been collected on my travels to Puerto Rico, Brazil, India, Sri-Lanka, New York, California and the Womad Festivals. The curious blue drum at the top is a spring drum - designed by Trilok Gurtu"),
	new Array("drums11.jpg", "533", "400", "Percussion toys 2. The snakey looking things centre left are vanilla pods - great shamanic rustly sound - very atmospheric"),
	new Array("sandeep1.jpg", "533", "400", "Where he belongs - this time playing tablas. You name it, he`ll bang it! Sandeep and I met when I was working on Tigers of the Raj. He`s a phenomenal player, and great spirit. He also knows a wicked ginger biscuit when he sees it! "),
	new Array("sandeep2.jpg", "533", "400", "Sandeep playing with Vijay Puri - a great manjira player, and friends"),
	new Array("equip1.jpg", "533", "400", "The Tascam TM-D8000 is a brilliant digital mixer which is very pleasingly intuitive to operate - unlike some digital mixers I`v encountered"),
	new Array("equip9.jpg", "533", "400", "F/X stuff. A key part in the process of layering and perspective"),
	new Array("equip12.jpg", "533", "400", "The famous Soundscape Red`s - truly a joy - fabulous 24-bit sound, and fantastically reliable."),
	new Array("studioview4.jpg", "533", "400", "The telephone area, including the Novation Supernova, the JP 8080 and the famous Roland SP-700"),
	new Array("studioview6.jpg", "533", "400", "Close up of the groovebox family. They`re like really patient band members, and just join in when you ask!"),
	new Array("studioview7.jpg", "533", "400", "Soundscape(AKA the Reds) can also display AVI files in sync with the music - which is great for scoring work"),
	new Array("equip4.jpg", "533", "400", "Manipulating digital video originated from DVCAM"),
	new Array("didges.jpg", "533", "400", "Three didgeridoos owned by Mike Booth, played also by him and Rory Baxter on Feet in the Soil 2"),
	new Array("rory.jpg", "533", "400", "Rory Baxter - player of didge on Feet in the Soil 1 and 2, and also designer of original Feet in the Soil dancing figures as featured on Feet 1 and 2 cover art"),
	new Array("drums1.jpg", "533", "400", "Hands on Ashiko - one of my favourite drums"),
	new Array("equip15.jpg", "533", "400", "Can`t beat a nice old clock. It`s completely silent and I love the style"),
	new Array("ja2.jpg", "533", "400", "My mate Jon Crosse took this shot. He`s always been a mean wielder of the video camera"),
	new Array("garden1.jpg", "533", "400", "I love to take breaks here - and the frogs in the pond are really at home here too"),
	new Array("garden2.jpg", "533", "400", "Celia does a brilliant job in the garden, as this example shows. This glorious flower smelt as good as it looked"),
	new Array("garden4.jpg", "533", "400", "For some reason we have been frequently visited by spiders this year. Last year it was a fox and two extremely playful squirrels. That`s pretty wild for the centre of London!"),
	new Array("garden6.jpg", "533", "400", "These spiders spin these incredibly delicate and quite beautiful webs. I found myself drawn to capture these intricate constructions"),
	new Array("ja4.jpg", "533", "400", "There were some good sunny moments in the garden this year - in between the all too frequent downpours "),
	new Array("paris1.jpg", "533", "400", "A very arty exhibit at the Pompadou centre.  We went for a stay in Paris. We battled past the excessive mobile phones on the Eurostar, to enjoy some of the best onion soup in the world at Mollard. We dug the ambience at the Buddha Bar, and were given a great welcome there by the DJs - Hovannes and Ravind. In between meals, we took in some arty stuff...."),
	new Array("paris2.jpg", "533", "400", "Another shot in the same gallery"),
	new Array("paris3.jpg", "533", "400", "An interesting picture we passed in a side-street gallery"),
	new Array("paris4.jpg", "533", "400", "Well as they say in Paris this is one one of those shops with 'beaucoup de chic!'"),
	new Array("paris5.jpg", "533", "400", "This was outside the main station nearest to our hotel"),
	new Array("carnival1.jpg", "533", "400", "Carnival 2000 (Trinidad). We went to Trinidad to see Celia`s family and take in the carnival 2000. There was a really bubbly collective energy there, and the people are both hugely fun-loving and very warm. I was really glad to have caught this compulsive and irresitible affirmation and celebration of life - done in quite unique and infectious style. I processed the photos via a filter in Photoshop"),
	new Array("carnival2.jpg", "533", "400", "Carnival 2000 (Trinidad)"),
	new Array("carnival3.jpg", "533", "400", "Carnival 2000 (Trinidad)"),
	new Array("equip6.jpg", "533", "400", "The phantom listener. It`s always good to know you can get a second opinion!")
	);

// 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();
}
