			var thisURL = document.location.href;
			var splitURL = thisURL.split("#");
			var photoId = splitURL[1] - 1;
			var photoId = (!photoId) ? 0 : photoId;
			var borderSize = 10;
			var photoDir = "photos/";
			var photoNum = photoArray.length; 
			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();
				}
			}
			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();
					}
				}
			};
			Behaviour.addLoadEvent(init);
			Behaviour.apply();
			function init() {
				var myPhoto = new Slideshow(photoId);
				myPhoto.initSwap();
				soundManagerInit();
			}	