// 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(
 new Array("interior001.jpg", "733", "550", "Standard Carla interior - this will make way for the new Recaro Shark Grey Cloth interior"),
 new Array("interior002.jpg", "733", "550", ""),
 new Array("interior003.jpg", "733", "550", "83,000 miles"),
 new Array("interior004.jpg", "413", "550", ""),
 new Array("interior005.jpg", "733", "550", "Speaker cables for reference"),
 new Array("interior006.jpg", "733", "550", ""),
 new Array("interior007.jpg", "733", "550", ""),
 new Array("interior008.jpg", "733", "550", ""),
 new Array("interior009.jpg", "733", "550", "Initially removed the seats and cleaned the runners."),
 new Array("interior010.jpg", "733", "550", "Carpet"),
 new Array("interior011.jpg", "733", "550", ""),
 new Array("interior012.jpg", "733", "550", "All out except dash"),
 new Array("interior013.jpg", "413", "550", ""),
 new Array("interior014.jpg", "413", "550", "Boot floor - common problem"),
 new Array("interior015.jpg", "733", "550", "Ground down for treating and painting"),
 new Array("interior016.jpg", "733", "550", "Apart from a small amount of welding on the both footwells the floor is solid"),
 new Array("interior017.jpg", "733", "550", "That won't stop me sealing everything up"),
 new Array("interior018.jpg", "733", "550", ""),
 new Array("interior019.jpg", "733", "550", ""),
 new Array("interior020.jpg", "733", "550", ""),
 new Array("interior021.jpg", "440", "550", "The new recaro interior"),
 new Array("interior022.jpg", "688", "550", ""),
 new Array("interior023.jpg", "688", "550", "This dash facia has been cut to fit a modern radio in, I have an uncut one to replace it and will fit a standard radio in the dash, the plan then will be to mount a modern stereo elswhere in the car."),
 new Array("interior024.jpg", "688", "550", "Switch wiring for reference"),
 new Array("interior025.jpg", "688", "550", ""),
 new Array("interior026.jpg", "688", "550", "Clocks need a good clean"),
 new Array("interior027.jpg", "440", "550", "Where did this come from??"),
 new Array("interior028.jpg", "733", "550", "Centre console frame now bought"),
 new Array("interior029.jpg", "733", "550", "Carpet underlay"),
 new Array("interior030.jpg", "733", "550", "fixing centre console in place"),
 new Array("interior031.jpg", "733", "550", "tarting up the rest of the interior"),
 new Array("interior032.jpg", "413", "550", "Next job was to clean the headlining & sunroof winder"),
 new Array("interior033.jpg", "413", "550", "....with a little help from vanish"),
 new Array("interior034.jpg", "825", "550", "Next job for the interior is to clean these us, passengers side has faired better than the drivers."),
 new Array("end.jpg", "550", "550", "end of images")
	);

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