// -----------------------------------------------------------------------------------
// 
// 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 = 2;

// Photo directory for this gallery
var photoDir = "images/metro/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Title, Media, Caption
	new Array("01.jpg", "550", "406", "Call Again", "Oil Pastel On Paper 25.75x31.5",""),
	new Array("02.jpg", "329", "450", "Guilty With Explanation", "Acrylic On Paper 33.5x25.75", "Inspired by longtime fascination with MOB movies and their classic characters"),
	new Array("03.jpg", "550", "413", "In This World, Everything Is A Shade Of Gray", "Acrylic On Canvas 16x20",""),
	new Array("04.jpg", "338", "450", "One Man Line Up", "Acrylic On Poster Board 30x22", "Even some of RI's finest would be picked out in this crowd of one."),
	new Array("05.jpg", "340", "450", "Revlon Explosion", "Acrylic On Canvas 26.25x20.25",""),
	new Array("06.jpg", "313", "450", "That Time Of The Night", "Oil Pastel On Paper 35x29.25", "As seen in the Lifetime movie premiere of “Normal Adolescent Behavior”"),
	new Array("07.jpg", "355", "450", "Last Laugh", "Oil Pastel On Paper 24x18", "Anyone in business knows the last one is the best."),
	new Array("08.jpg", "338", "450", "Made In The USA", "Acrylic On Paper 14.25x11", "A twist of irony represented by the first thing this artist remembers as being “Made in China”"),
	new Array("09.jpg", "358", "450", "Your Move, Game Over", "Acrylic On Canvas 20x16", "Reflection of the harsh realities of the day job"),
	new Array("10.jpg", "334", "450", "No Deal", "Acrylic On Paper 29.25x23.50", "A business deal gone bad"),
	new Array("11.jpg", "336", "450", "White Collar Crime", "Acrylic On Canvas  24x18",""),
	new Array("12.jpg", "550", "413", "Lipstick City", "Acrylic On Canvas 16x20", "Dramatizing a city with love in the air."),
	new Array("13.jpg", "338", "450", "Race to 5th Ave.", "Acrylic On Paper 23.5x18",""),
	new Array("14.jpg", "345", "450", "Nine Eleven", "Acrylic On Poster Board 28x22", "For lack of better words, what many of us around this world, were thinking as we watched that tragic day on September 11th"),
	new Array("15.jpg", "334", "450", "Grandma Rae", "Acrylic On Paper 24x18", "Painted this, then realized it looked just like my grandmother dressed up for a Bar Mitzvah"),
	new Array("16.jpg", "550", "413", "Virtual Storefront", "Acrylic On Canvas 18x24", "Then new world of doing business"),
	new Array("17.jpg", "333", "450", "No Name, No Business", "Oil Pastel On Paper",""),
	new Array("18.jpg", "327", "450", "Optical Counterpart", "Acrylic On Poster Board","")
	);

// 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.title = 'Title';
		this.media = 'Media';
		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.title,photoArray[photoId][3]);
		Element.setInnerHTML(this.media,photoArray[photoId][4]);
		Element.setInnerHTML(this.caption,photoArray[photoId][5]);
		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();
	},
	// added by Bernie Zajac for thumbnail listing.
	specificPhoto: function(pID) {
		photoId = pID;
		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');
		}
	},
	// added by bernie zajac for thumbnail listing.
	'.thumbnail' : function(element) {
		element.onclick = function() {
			var elementId = element.id;
			var newPhotoId = elementId.split("thumb");
			newPhotoId = newPhotoId[1] -1;
			// -1 added to knock extra pre- digit off counter (karl)
			var myPhoto = new Slideshow(newPhotoId);
			myPhoto.specificPhoto(newPhotoId);
		}		
	},
	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();
}
