// -----------------------------------------------------------------------------------
// 
// 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;
var foto1 = 0;
var foto2 = 0;
var foto3 = 0;
var foto4 = 0;
var foto5 = 0;
var foto6 = 0;


// CSS border size x 2
var borderSize = 10;

// Photo directory for this gallery
var photoDir = "photos/";

// Define each photo's name, height, width, and caption
var photoArray = new Array();


/*--------------------------------------------------------------------------*/

// 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( aPhoto, aPhotoBox, aPrevLink, aNextLink, aCaptionBox, aCaption, aCounter, aLoader, aIdGallery,arrayPhoto) {
		this.photo = aPhoto;             // 'Photo';
		this.photoBox = aPhotoBox;       // 'Container';
		this.prevLink = aPrevLink;       // 'PrevLink';
		this.nextLink = aNextLink;       // 'NextLink';
		this.captionBox = aCaptionBox;   // 'CaptionContainer';
		this.caption = aCaption;         // 'Caption';
		this.counter = aCounter;         // 'Counter';
		this.loader = aLoader;           // 'Loading';
		this.idGallery = aIdGallery;
        this.photoArray = arrayPhoto;
	},
	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 = this.photoArray[this.idPhotoToShow][1];
		this.hNew = this.photoArray[this.idPhotoToShow][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 + this.photoArray[this.idPhotoToShow][0]);
		// Set anchor for bookmarking
		Element.setHref(this.prevLink, "#" + (this.idPhotoToShow-1));
		Element.setHref(this.nextLink, "#" + (this.idPhotoToShow+1));
	},
	setPhotoCaption: function() {
		// Add caption from gallery array
		Element.setInnerHTML(this.caption,this.photoArray[this.idPhotoToShow][3]);
		Element.setInnerHTML(this.counter,((this.idPhotoToShow+1)+'/'+ this.photoArray.length));
	},
	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"
		var localIdGallery = this.idGallery;
		
		new Effect.Appear(this.photo, {
		                    duration: 0.5, 
		                    queue: 'end', 
		                    afterFinish: function(){
		                                    Element.show('CaptionContainer' + localIdGallery);
		                                    Element.show('PrevLink' + localIdGallery);
		                                    Element.show('NextLink' + localIdGallery);}});
	},
	nextPhoto: function(){
		// Figure out which photo is next
		(this.idPhotoToShow == (this.photoArray.length - 1)) ? this.idPhotoToShow = 0 : this.idPhotoToShow++;
		eval("foto" + this.idGallery + " = this.idPhotoToShow");
		this.initSwap();
	},
	prevPhoto: function(){
		// Figure out which photo is previous
		(this.idPhotoToShow == 0) ? this.idPhotoToShow = this.photoArray.length - 1 : this.idPhotoToShow--;
		eval("foto" + this.idGallery + " = this.idPhotoToShow");
		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();
	}
}

/*--------------------------------------------------------------------------*/

function setRules(aPhotoArray, photoId, aPhoto, aPhotoBox, aPrevLink, aNextLink, aCaptionBox, aCaption, aCounter, aLoader, aIdGallery){
     // Establish CSS-driven events via Behaviour script
    var idGallery =  aIdGallery;
    
    var myrules= new Object();
    

    myrules['#Photo'+ aIdGallery] = function(element){
            element.onload = function(){
                var myPhoto = new Slideshow(aPhoto,aPhotoBox,aPrevLink, aNextLink, aCaptionBox, aCaption, aCounter, aLoader, aIdGallery,aPhotoArray);
                myPhoto.idPhotoToShow = eval("foto" + aIdGallery);               
                myPhoto.showPhoto();
            }
    }       
    myrules['#PrevLink'+ aIdGallery] = function(element){
            element.onmouseover = function(){
                //soundManager.play('beep');
            }
            element.onclick = function(){
                var myPhoto = new Slideshow(aPhoto,aPhotoBox,aPrevLink, aNextLink, aCaptionBox, aCaption, aCounter, aLoader, aIdGallery,aPhotoArray);
                myPhoto.idPhotoToShow = eval("foto" + aIdGallery);
                myPhoto.prevPhoto();
                //soundManager.play('select');
            }
    }
    myrules['#NextLink'+ aIdGallery] = function(element){
            element.onmouseover = function(){
                //soundManager.play('beep');
            }
            element.onclick = function(){
                var myPhoto = new Slideshow(aPhoto,aPhotoBox,aPrevLink, aNextLink, aCaptionBox, aCaption, aCounter, aLoader, aIdGallery,aPhotoArray);
                myPhoto.idPhotoToShow = eval("foto" + aIdGallery);
                myPhoto.nextPhoto();
                //soundManager.play('select');
            }
    }
    myrules["a"] = function(element){
            element.onfocus = function(){
                this.blur();
            }
        }
 		

    Behaviour.register(myrules);

    Behaviour.addLoadEvent(init);
    Behaviour.apply();
    function init() {
        var myPhoto = new Slideshow(aPhoto,aPhotoBox,aPrevLink, aNextLink, aCaptionBox, aCaption, aCounter, aLoader, aIdGallery,aPhotoArray);
        myPhoto.idPhotoToShow = eval("foto" + aIdGallery);
        myPhoto.initSwap();
        soundManagerInit();
    }					


}
