// ----------------------------------------------------------------------------------- // // 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 //RF var photoDir = "photos/01/"; //var photoDir = "http://media.gordon.nl/shoots/"; var photoDir = ""; // Define each photo's name, height, width, and caption var photoArray = new Array( // Source, Width, Height, Caption new Array("http://media.gordon.nl/shoots/foto_1_1_8g29rk88ez.jpg", "331", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_28_doyq3dtfkv.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_29_nkzdpdxhua.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_27_3j14xtl5q2.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_30_echoaogl39.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_31_rwl4b3bcnd.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_32_a38lmh3fum.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_33_vbco7g7oq6.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_34_9zcqqqy7hf.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_1_35_0776h6hjeh.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_36_vexiogqluc.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_37_4bnoqdn7zb.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_38_65x95y5gkj.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_39_ud0m5uak32.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_40_ihl4hi7fdg.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_41_flm4v8arbc.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_42_6285yx15qh.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_43_ih86zl2f05.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_44_7oozy6x5fq.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_45_kk71j28vlu.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_46_dq1j7mr6qw.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_108_j6pimjoxof.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_109_gyoac7sday.jpg", "267", "400", ""), new Array("http://media.gordon.nl/shoots/foto_2_111_tuu6vmo0v7.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_112_85s7mqocte.jpg", "500", "333", ""), new Array("http://media.gordon.nl/shoots/foto_2_113_7xoqcgf34z.jpg", "500", "333", "") ); // 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(){ // 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'); } }, 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(); //RF soundManagerInit(); }