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

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

// Define each photo's name, height, width, and caption
var photoArray = new Array(
        // Source, Width, Height, Caption
        new Array("001.jpg", "660", "438", "Welcome to the Urania parking house. At the exact geographic center of Zurich, right next to the Lindenhof hill, you will find the most popular internet cafe of Switzerland.<span style='display:block;background:#FFFFFF;color:#55CC00;padding:6px'>NOTE: To browse through the gallery, click the photo with your mouse.</span>"),
        new Array("002.jpg", "660", "438", "Your windows to the world... The most sophisticated way to go online in Zurich."),
        new Array("003.jpg", "660", "438", "A lot of space and calmness helps you relax. Our locale is bright, friendly and clean."),
        new Array("004.jpg", "660", "438", "Warm during winter, refreshingly cool during summer: Enjoy surfing with fresh air."),
        new Array("005.jpg", "660", "438", "Peace and quiet for discovering the web, reading, thinking, or just relaxing."),
        new Array("006.jpg", "660", "438", "The internet cafe for all people young or old... Kids and elder folks are just as welcome."),
        new Array("007.jpg", "660", "438", "Stephan Kaufmann, founder of the Internetcafe. Since 13 years he enjoys having guests from all around the world."),
        new Array("008.jpg", "660", "438", "We offer the high quality that our guests expect - from our exclusive VAIO widescreen workstations to the  excellent coffee!"),
        new Array("009.jpg", "660", "438", "No matter if they surf, email, chat, do office work, print or copy documents, fax, or use WLAN - all generations like to use our reliable technology."),
        new Array("010.jpg", "660", "438", "As evening dawns and daylight fades in Zurich, our surfing center is still full of life. Seven days a week, from morning to evening we offer you: Surf and Snack!")
        );

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

