// -----------------------------------------------------------------------------------
// 
// 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 --------------------------------------------------------


// 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.register = function() {
  var myPhoto = new Slideshow(photoId);
  myPhoto.initSwap();
	myPhoto.showPhoto();  

  ['PrevLink', 'PrevLink2'].each(function(link) { 
    Event.observe(link, 'click', function(){
  		var myPhoto = new Slideshow(photoId);
  		myPhoto.prevPhoto();
    	myPhoto.showPhoto();    
    });
  });  
  
  ['NextLink', 'NextLink2'].each(function(link) { 
    Event.observe(link, 'click', function(){
  		var myPhoto = new Slideshow(photoId);
  		myPhoto.nextPhoto();
    	myPhoto.showPhoto();    
	  });
  });
  
  $$('a').each(function(link) { 
    Event.observe(link, 'focus', function() { this.blur(); }.bind(link));
  });
  
  
};
var photoDir="/img/";
Slideshow.prototype = {
	initialize: function(photoId) {
		this.photoId = photoId;
		this.photo = 'Photo';
		this.photoBox = 'slideshow';
		this.prevLink = 'PrevLink';
		this.prevLink2 = 'PrevLink2';
		this.nextLink = 'NextLink';
		this.nextLink2 = 'NextLink2';
		this.caption = 'Caption';
		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 = photos[photoId][1];
		this.hNew = photos[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 + photos[photoId][0]);
		// Set anchor for bookmarking
		Element.setHref(this.prevLink, "#" + (photoId+1));
		Element.setHref(this.nextLink, "#" + (photoId+1));
		Element.setHref(this.prevLink2, "#" + (photoId+1));
		Element.setHref(this.nextLink2, "#" + (photoId+1));
	},
	setPhotoCaption: function() {
		// Add caption from gallery array
		Element.setInnerHTML(this.caption,photos[photoId][3]);
	},
	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.caption,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('PrevLink');Element.show('NextLink'); Element.show('Caption');*/}});
	},
	nextPhoto: function(){
		// Figure out which photo is next
		(photoId == (photos.length - 1)) ? photoId = 0 : photoId++;
		this.initSwap();
	},
	prevPhoto: function(){
		// Figure out which photo is previous
		(photoId == 0) ? photoId = photos.length - 1 : photoId--;
		this.initSwap();
	},
	initSwap: function() {
		// Begin by hiding main elements
		Element.show(this.loader);
		Element.hide(this.photo);
		//Element.hide(this.caption);
		//Element.hide(this.prevLink);
		//Element.hide(this.nextLink);
		// Set new dimensions and source, then resize
		this.setNewPhotoParams();
		this.resizePhotoBox();
		this.setPhotoCaption();
	}
}
