// 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("wheels001.jpg", "413", "550", "The standard 5.5j LS wheels on the car when I bought it"),
 new Array("wheels002.jpg", "413", "550", "This one is the spare and quite tidy..."),
 new Array("wheels003.jpg", "733", "550", "...unlike the ones actually on the car."),
 new Array("wheels004.jpg", "413", "550", "With the purchase of the car I got 5 &quot;Laser&quot; 4 Spokes. I'd not seen them, but bargained them into the price. They were quite corroded"),
 new Array("wheels005.jpg", "733", "550", "Some work needed here"),
 new Array("wheels006.jpg", "413", "550", ""),
 new Array("wheels007.jpg", "413", "550", "Using a wire brush on my drill blasted away all the crud, shite and brake dust and started layering up with primer."),
 new Array("wheels008.jpg", "733", "550", "These pictures make them look semi-reasonable, they are not! The surface is quite pitted, more sanding and spraying"),
 new Array("wheels009.jpg", "733", "550", "High build primer"),
 new Array("wheels010.jpg", "688", "550", "At this stage I was quite happy with the surface of the wheels and was looking to choose a siver paint to colour them."),
 new Array("wheels011.jpg", "688", "550", "Very smooth now. Nearly bought the paint then..."),
 new Array("wheels014.jpg", "413", "550", "...these babies arrived."),
 new Array("wheels015.jpg", "733", "550", "5 Spoke 15&quot; Revolutions"),
 new Array("wheels016.jpg", "413", "550", "With road leagal slicks!!"),
 new Array("wheels016.jpg", "413", "550", "and the best bit? I got them for free, well more payment for a website I built - F1-67.com"),
 new Array("wheels017.jpg", "423", "550", ""),
 new Array("wheels018.jpg", "413", "550", "A quick clean"),
 new Array("wheels019.jpg", "733", "550", ""),
 new Array("wheels020.jpg", "733", "550", ""),
 new Array("wheels021.jpg", "733", "550", "And this is how the car will look once completed (photochop), If I keep the colour glacier blue???"),
 new Array("wheels022.jpg", "413", "550", "These are 6.5&quot; rims with 195/55/15 tyres on and a -2&quot; drop on the rear. The actual rear wheels will be 7&quot; wide, I may have some rubbage..."),
 new Array("wheels023.jpg", "413", "550", "They will come out a further 1/2 inch, at this point decided to raise the rear as it was far too low compared to the front, see underside for full story."),
 new Array("wheels025.jpg", "733", "550", "Now sitting on a -1&quot; drop, much better, this is also leaving room for both the front and rear new springs to settle in."),
 new Array("wheels026.jpg", "825", "550", "Today started with sorting these, 195/55 tyres off..."),
 new Array("wheels027.jpg", "367", "550", "...and the huge tyres from the rear..."),
 new Array("wheels028.jpg", "825", "550", "...to this, the 7&quot; rim with the 195/55 tryes on"),
 new Array("wheels029.jpg", "367", "550", "so i just had to check to see if they would fit, quite wide!!"),
 new Array("wheels030.jpg", "825", "550", "They fit, and with no rubbing, this picture is prior to the rear arch being replaced."),
 new Array("wheels031.jpg", "367", "550", "one word &quot;DISH&quot;"),
 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();
}