// -----------------------------------------------------------------------------------
// 
// 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/mn/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("whisper.jpg", "872", "500", "Like a Whisper in a Dream"),
	new Array("sf.jpg", "667", "500", "Giant Sunflower"),
	new Array("wallflower.jpg", "356", "500", "Wallflower"),
	new Array("theedge.jpg", "858", "500", "Life on the Edge"),
	new Array("sowhat.jpg", "450", "500", "So What?"),
	new Array("mysterious.jpg", "333", "500", "God Works In Mysterious Ways"),
	new Array("17s.jpg", "752", "500", "17 seconds"),
	new Array("rushhour.jpg", "752", "500", "Rush Hour"),
	new Array("sing.jpg", "698", "500", "Sing"),
	new Array("puff.jpg", "772", "500", "Puff"),
	new Array("stars.jpg", "693", "500", "We Are All In The Gutter..."),
	new Array("breathe.jpg", "826", "500", "Breathe"),
	new Array("darkness.jpg", "934", "500", "Into The Darkness"),
	new Array("emptiness.jpg", "791", "500", "A Whisper In The Emptiness"),
	new Array("songtosummer.jpg", "707", "500", "Song To Summer"),
	new Array("lime.jpg", "703", "500", "Lime"),
	new Array("mooder.jpg", "679", "500", "Mooder"),
	new Array("netfull.jpg", "700", "500", "Netfull"),
	new Array("promises.jpg", "680", "500", "Promises"),
	new Array("waiting.jpg", "754", "500", "Waiting"),
	new Array("saveme.jpg", "838", "500", "Save Me"),
	new Array("unchainblues.jpg", "752", "500", "Unchain These Blues"),
	new Array("wrongshadow.jpg", "752", "500", "The Wrong Shadow"),
	new Array("thought.jpg", "616", "500", "Thought"),
	new Array("truth.jpg", "874", "500", "Truth"),
	new Array("yellow.jpg", "694", "500", "Yellow"),
	new Array("drumlins.jpg", "766", "500", "Drumlins And A Big Blue"),
	new Array("broken.jpg", "578", "500", "Morning Has Broken"),
	new Array("work.jpg", "749", "500", "The Sky Is Not The Limit"),
	new Array("sheep.jpg", "911", "500", "Going Nowhere Slowly"),
	new Array("pink.jpg", "626", "500", "Pink Soldiers"),
	new Array("snow.jpg", "752", "500", "You Never Said Goodbye"),
	new Array("setmefree.jpg", "374", "500", "Set Me Free"),
	new Array("sailaway.jpg", "335", "500", "Sail Away"),
	new Array("red.jpg", "500", "500", "Red"),
	new Array("point.jpg", "800", "500", "What's the Point?"),
	new Array("pink2.jpg", "314", "500", "Pink Pink Pink"),
	new Array("maybe.jpg", "567", "500", "Maybe"),
	new Array("sheepheaven.jpg", "405", "500", "Sheep from Heaven"),
	new Array("machine.jpg", "393", "500", "The Machine That Makes The Sky"),
	new Array("chaos.jpg", "752", "500", "Chaos Symphony"),
	new Array("ivy.jpg", "333", "500", "From Death's Dark Door"),
	new Array("moat.jpg", "745", "500", "The Sky Prison"),
	new Array("sheepsong.jpg", "333", "500", "The Sheep Song"),
	new Array("ballyhay.jpg", "383", "500", "Ballyhay"),
	new Array("bigsky.jpg", "757", "500", "Don't Let Reality Cloud Your Dreams"),
	new Array("hill.jpg", "881", "500", "Over The Hill"),
	new Array("rescueme.jpg", "752", "500", "Rescue Me"),
	new Array("escapingcolours.jpg", "693", "500", "Escaping Colours"),
	new Array("cow.jpg", "646", "500", "Where'd Everybody Go?"),
	new Array("barbed.jpg", "489", "500", "Barbed Wiggle"),
	new Array("debt.jpg", "800", "475", "Deeper in Debt"),
	new Array("absentfriends.jpg", "676", "500", "Absent Friends"),
	new Array("zen.jpg", "560", "500", "Before the Storm"),
	new Array("blackkiss.jpg", "333", "500", "Black Kiss"),
	new Array("tear.jpg", "500", "500", "A Tear"),
	new Array("god.jpg", "752", "500", "A Telephone to God")

	);

// 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();
}