// -----------------------------------------------------------------------------------
// 
// 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/01/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("PICT5024_ss.jpg", "640", "343", "Welcome to Woodlawn"),
	new Array("PICT5018_ss.jpg", "639", "324", "Landscaping work at the Woodlawn Senior Center"),
	new Array("PICT5038_ss.jpg", "460", "345", "HSBC Beneficial team in front of new raised herb garden"),
	new Array("1fb7re2.jpg", "480", "360", "Charlie installs sump pumps"),
	new Array("f5b3re2.jpg", "480", "360", "Happy Homeowners"),
	new Array("571cre2.jpg", "480", "360", "CSI (Construction Specifications Institute) team begins building a ramp"),
	new Array("f9care2.jpg", "480", "360", "CBIZ team"),
	new Array("f73ere2.jpg", "480", "360", "Clynmalira Baptist team paints a porch"),
	new Array("cc14re2.jpg", "480", "360", "Garrison Forest School team"),
	new Array("98e6re2.jpg", "480", "360", "Homeowner and House Captain"),
	new Array("9dbere2.jpg", "360", "480", "OMFN (Old Mutual Financial Network) Volunteer"),
	new Array("7baere2.jpg", "360", "480", "OMFN painting windows"),
	new Array("44e7re2.jpg", "360", "480", "Installing a light fixture"),
	new Array("c0b1re2.jpg", "480", "360", "OMFN House Captains"),
	new Array("32acre2.jpg", "480", "360", "OMFN Team"),
	new Array("e9efre2.jpg", "360", "480", "Painting is fun!"),
	new Array("c7d5re2.jpg", "480", "360", "Painting is fun #2"),
	new Array("d59fre2.jpg", "480", "360", "Happy Homeowner"),
	new Array("5398re2.jpg", "360", "480", "Repairing floor damage"),
	new Array("e336re2.jpg", "480", "360", "Planting a tree"),
	new Array("7a0dre2.jpg", "480", "360", "Installing screens"),
	new Array("14b4re2.jpg", "480", "360", "Electrical work"),
	new Array("dc3are2.jpg", "480", "360", "Securing a handrail"),
	new Array("c4e5re2.jpg", "480", "360", "Installing a new fence"),
	new Array("26fere2.jpg", "480", "360", "New flooring"),
	new Array("851dre2.jpg", "480", "360", "At City Headquarters"),
	new Array("542fre2.jpg", "480", "360", "Police trainees pitch in"),
	new Array("c839re2.jpg", "480", "360", "At the Community Garden"),
	new Array("f8c0re2.jpg", "480", "360", "Troubleshooting"),
	new Array("c3fdre2.jpg", "480", "360", "Enterprise Rent-a-Car Team"),
	new Array("cc69re2.jpg", "360", "480", "Notre Dame Club of Maryland Team"),
	new Array("1a10re2.jpg", "480", "360", "Associated Builders and Contractors Team"),
	new Array("7d91re2.jpg", "480", "360", "SWCOS Team"),
	new Array("eb44re2.jpg", "480", "360", "Booz Allen Hamilton Team"),
	new Array("f3fere2.jpg", "480", "360", "Enterprise Rent-a-Car team"),
	new Array("ec8cre2.jpg", "360", "480", "Calvert Hall/Christopher Place Team")
	);

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