// -----------------------------------------------------------------------------------
// 
// 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/gents/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Title, Media, Caption
	new Array("01.jpg", "337", "450", "Style Is", "Acrylic On Canvas 36x24", "If you have to list them - you don't have it babe."),
	new Array("02.jpg", "337", "450", "Tango In Hell", "Acrylic On Canvas 30x24", ""),
	new Array("03.jpg", "348", "450", "Whose Better Than Me - Me", "Acrylic On Mat Board 40x32", "For people who are high on themselves the only thing better than one of them is two."),
	new Array("04.jpg", "550", "413", "Who to Choose?", "Acrylic On Canvas 18x24",""),
	new Array("05.jpg", "321", "450", "Polo Poise", "Oil Pastel On Paper 19.75x16", "A gentleman from a different era that proved to be a major inspiration of work to follow"),
	new Array("06.jpg", "332", "450", "Showtime", "Oil Pastel On Paper",""),
	new Array("07.jpg", "550", "398", "Staff - You Have To Have It", "Acrylic On Canvas  24x36", "When monies is no object, you can't possibly have enough guys."),
	new Array("08.jpg", "295", "450", "Churchill Dots", "Watercolor Pencil / Wash 28.75x22.5", "One of the all-time classics, Sir Winston Churchill"),
	new Array("09.jpg", "299", "450", "Pocket Change", "Oil Pastel On Paper 34x20",""),
	new Array("10.jpg", "337", "450", "Benny Goodman 1,2,3", "Acrylic On Canvas 20x16", "Saluting an American treasure"),
	new Array("11.jpg", "338", "450", "Frank", "Acrylic 30x24 On Canvas ",""),
	new Array("12.jpg", "355", "450", "Pissed", "Oil Pastel On Paper",""),
	new Array("13.jpg", "346", "450", "Good Day...", "Acrylic On Poster Board 28x22",""),
	new Array("14.jpg", "304", "450", "Q&amp;A", "Oil Pastel On Paper 33x26",""),
	new Array("15.jpg", "339", "450", "Cigar Alley", "Oil Pastel On Paper 24x18",""),
	new Array("16.jpg", "292", "450", "One of Frank's Guys", "Acrylic On Canvas 36x24",""),
	new Array("17.jpg", "341", "450", "Big Time", "Oil pastel On Paper 24x18","")
	);

// 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();
}