// -----------------------------------------------------------------------------------
// 
// 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/02/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("lobby1.jpg", "550", "409", "Our studio staff warmly welcome you."),
	new Array("lobby2.jpg", "394", "409", "Sign in for class with ease... towels, mats, water, ultima... we're here to help!"),
	new Array("lobby3.jpg", "550", "409", "Student lounge to wait for class in comfort."),	
	new Array("lobby4.jpg", "550", "409", "Hang out and get to know other students."),
	new Array("lobby5.jpg", "431", "409", "Soooo much natural light."),	
	new Array("retail.jpg", "550", "409", "Clothing, books, cd's, yoga accessories... lots of retail to service your hot yoga needs."),		
	new Array("hotroom1.jpg", "550", "409", "Open & spacious with high ceilings, clean & hygenic with natural cork floor."),
	new Array("hotroom2.jpg", "550", "409", "Lots of windows for natural light and a fresh air ventilation system keeps the air you breathe clean & fresh!"),
	new Array("hotroom3.jpg", "550", "409", "Radiant heats panels hanging from the ceiling heat the room.  No loud fans or hot air & debris blowing around you."),
	new Array("womens-change-1.jpg", "550", "409", "Women's Changeroom - Large, spacious rooms for changing..."),
	new Array("womens-change-2.jpg", "272", "409", "Women's Changeroom - Large vanity with mirror and hair dryers - perfect to get ready for work or a date!"),
	new Array("womens-change-3.jpg", "272", "409", "Women's Changeroom - Hang your jacket!"),
	new Array("womens-change-4.jpg", "550", "409", "Women's Changeroom - Lots of room to get ready for class..."),
	new Array("womens-change-5.jpg", "550", "409", "Women's Changeroom - All our tap water is filtered - so drink up and enjoy!"),	
	new Array("mens-change.jpg", "301", "409", "Men's Changeroom - Brand new showers with complimentary eco-friendly soap"),
	new Array("mens-change-1.jpg", "550", "409", "Men's Changeroom -Filtered tap water, mirror and dryer all for your convenience!"),	
	new Array("mens-change-2.jpg", "550", "409", "Men's Changeroom -Spacious changeroom, lots of room to get ready for class"),
	new Array("mens-change-3.jpg", "550", "409", "Men's Changeroom -Benches made from re-harvested wood..."),
	new Array("kandis-1.jpg", "550", "409", "Dr. Kandis Lock is our resident Naturopathic Doctor."),
	new Array("kandis-2.jpg", "550", "409", "Dr. Lock provides free 15 minute consultations - learn more about her services!"),
	new Array("massage1.jpg", "271", "409", "Gavin Featherstone, Registered Massage Therapist, www.findingflow.ca."),
	new Array("massage2.jpg", "271", "409", "A massage is the perfect way to begin to end your hot yoga class.")
	
	
	);

// 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();
}