// -----------------------------------------------------------------------------------
// 
// 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/dames/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Title, Media, Caption
	new Array("01.jpg", "338", "450", "Pink Girls", "Mixed Media On Paper 13.5x11", "A testimonial to a favorite color - Pink..."),
	new Array("02.jpg", "550", "431", "Beautiful To Be Us", "Acrylic On Paper",""),
	new Array("03.jpg", "347", "450", "Blow", "Acrylic On Poster Board 28x22",""),
	new Array("04.jpg", "343", "450", "Shopped Out", "Oil Pastel On Paper",""),
	new Array("05.jpg", "340", "450", "Dance Like No One Is Watching", "Oil Pastel On Paper 23.5x18", "When you feel good about it and just don't care."),
	new Array("06.jpg", "293", "450", "I Want To Be A Star", "Oil Pastel On Paper",""),
	new Array("07.jpg", "332", "450", "In Your Dreams", "Acrylic On Canvas 24x18",""),
	new Array("08.jpg", "337", "450", "It's All In The Way You Lay It Out", "Acrylic On Canvas 24x18", "The worlds best designers aspire to have it turn out as planned."),
	new Array("09.jpg", "318", "450", "Jumping Rainbows", "Acrylic On Poster Board 30x22", "Inspired by the simple pleasure the artists daughter gets from simply jumping rope."),
	new Array("10.jpg", "311", "450", "Marilyn", "Mixed Media On Paper 31.5x25.5", "Saluting one of the great icons of our time."),
	new Array("11.jpg", "338", "450", "Money To Burn", "Mixed Media On Paper 14x11",""),
	new Array("12.jpg", "300", "450", "Floating In Palm Beach", "Acrylic On Canvas 16x12",""),
	new Array("13.jpg", "300", "450", "The Take Off", "Acrylic On Canvas 30x24",""),
	new Array("14.jpg", "338", "450", "This Is Crazy", "Acrylic On Canvas 30x24",""),
	new Array("15.jpg", "550", "412", "This Sucks", "Acrylic On Poster Board 22x30",""),
	new Array("16.jpg", "348", "450", "Untitled", "Acrylic On Canvas 20x16",""),
	new Array("17.jpg", "328", "450", "Weekend In The Country", "Oil Pastel On Paper",""),
	new Array("18.jpg", "292", "450", "Welcome To My World", "Acrylic On Paper 27.5x21", "Where there are never any problems."),
	new Array("19.jpg", "338", "450", "X Girlfriend", "Acrylic On Canvas 24x18", "If it were only that easy..."),
	new Array("20.jpg", "308", "450", "Gone", "Oil Pastel On Paper 24x18",""),
	new Array("21.jpg", "340", "450", "Rain On Me", "Acrylic On Mat Board 42x30",""),
	new Array("22.jpg", "337", "450", "Fabulust", "Mixed Media On Paper 23.5x18",""),
	new Array("23.jpg", "337", "450", "In The Mood", "Oil Pastel On Paper 17x13.5","")
	);

// 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();
}