// -----------------------------------------------------------------------------------
// 
// 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;

var Onerotate_delay = 6000; // delay in milliseconds (5000 = 5 secs)
var AutoSlideActive = false;
var timeoutId = null;

// if no photoId supplied then set default
var photoId = (!photoId) ? 0 : photoId;

// 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(// Source, Width, Height, Caption
new Array("S01.jpg", "480", "359", "Impression"), new Array("S02.jpg", "480", "359", "Impression"), new Array("S03.jpg", "480", "359", "Impression"), new Array("S04.jpg", "480", "359", "Impression"), new Array("S05.jpg", "480", "359", "Impression"), new Array("S06.jpg", "480", "359", "Impression"), new Array("S07.jpg", "480", "359", "Impression"), new Array("S08.jpg", "480", "359", "Impression"), new Array("S09.jpg", "480", "359", "Impression"), new Array("S10.jpg", "480", "359", "Impression"), new Array("S11.jpg", "480", "359", "Impression"), new Array("S12.jpg", "480", "359", "Impression"), new Array("S13.jpg", "480", "359", "Impression"), new Array("S14.jpg", "480", "359", "Impression"), new Array("S15.jpg", "480", "359", "Impression"), new Array("S16.jpg", "480", "359", "Impression"), new Array("S17.jpg", "480", "359", "Impression"), new Array("S18.jpg", "480", "359", "Impression"), new Array("S19.jpg", "480", "359", "Impression"), new Array("S20.jpg", "480", "359", "Impression"));

// 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.autoSlide = 'AutoSlide';
        this.captionBox = 'CaptionContainer';
        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.caption,photoArray[photoId][3]);
        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('AutoSlide');
                if (AutoSlideActive == true) {
                    //this.autoSlide.writeAttribute("background", "url(../img/pause_chevron.png)");
                    Element.hide('PrevLink');
                    Element.hide('NextLink');
                }
                else {
                    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();
    },
    initSwap: function(){
        // Begin by hiding main elements
        Element.show(this.loader);
        Element.hide(this.photo);
        //Auskommentiert:
        //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 AutoSlide(){
    var myPhoto = new Slideshow(photoId);
    if (AutoSlideActive == true) {
        Element.hide(myPhoto.nextLink);
        Element.hide(myPhoto.prevLink);
        //document.getElementById('AutoSlide').innerHTML = "Diashow anhalten";
		document.getElementById('AutoSlide').title="Diashow anhalten";
		document.getElementById('AutoSlideButton').src='img/media-playback-pause.gif';
        myPhoto.nextPhoto();
        timeoutId = window.setTimeout("AutoSlide()", Onerotate_delay);
    }
    else {
        //document.getElementById('AutoSlide').innerHTML = "Diashow starten";
		document.getElementById('AutoSlide').title="Diashow starten";
		document.getElementById('AutoSlideButton').src='img/media-playback-start.gif';
        Element.show(myPhoto.prevLink);
        Element.show(myPhoto.nextLink);
        window.clearTimeout(timeoutId);
    }
}

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

// 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.onclick = function(){
            var myPhoto = new Slideshow(photoId);
            myPhoto.prevPhoto();
        }
    },
    '#NextLink': function(element){
        element.onclick = function(){
            var myPhoto = new Slideshow(photoId);
            myPhoto.nextPhoto();
        }
    },
    '#AutoSlide': function(element){
        element.onclick = function(){
            AutoSlideActive = (AutoSlideActive == false) ? true : false;
            AutoSlide();
        }
    },
    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();
}
