/* todo: timed mode timed mode config: intervall int sek loop: true/false funkar hur? om loop, lägg till settimeout sist i showimage */ function agoodslideshow() { // kolla att prototype + scriptaculous är laddade if (typeof($) == "undefined") { alert("slideshow kräver prototype"); } if (typeof(Effect) == "undefined") { alert("slideshow kräver scriptaculous"); } } agoodslideshow.prototype = { argetDiv: null, upperDiv: null, lowerDiv: null, currentImage: 0, images: new Array, options: { showCaption: true, showImageNav: true, showLoadingAnim: true, autoAdvance: false, autoAdvanceDelay: 2000, loop: false, useImageNotes: false, imageNotes: new Array(), texts: { nextImage: "Nästa", previousImage: "Föregående", imageNum: "Bild %1 av %2" } }, addImage: function(args) { this.images.push(args); }, write: function(div) { this.targetDiv = $(div) this.targetDiv.innerHTML = ""; var targetDivInner = document.createElement("div"); this.targetDiv.appendChild(targetDivInner); /* skapa divvar för allt
loading-info
bildnamn, nästa bild etc.
*/ this.upperDiv = document.createElement("div"); this.upperDiv.style.position = "relative"; this.upperDiv.className = "imagenote-image"; targetDivInner.appendChild(this.upperDiv); this.lowerDiv = document.createElement("div"); this.lowerDiv.style.position = "relative"; targetDivInner.appendChild(this.lowerDiv); // gör grundjobbet för imageNotes if (this.options.useImageNotes) { this.notes = new PhotoNoteContainer(this.upperDiv); } // kolla om bild finns lagrad via # i adressen. om: gå till den, annars gå till första var urlImageNumber = parseFloat(window.location.hash.replace("#", "")); if ((urlImageNumber>0) && (urlImageNumber<=this.images.length)) { this.currentImage = urlImageNumber-1; this.showImage(urlImageNumber-1); } else { // ladda och visa första bilden this.currentImage = 0; this.showImage(0); } }, /** * Visar nästa bild * a) inget händer om man är på sista bilden * b) är loop true så går man till första igen **/ showNextImage: function() { if (this.hasNextImage()) { this.currentImage++; if(ie_exception){ window.location.hash = ("#" + (this.currentImage+1)); window.location.reload(); } else{ this.showImage(this.currentImage); } } else if ((this.images.length == this.currentImage+1) && (this.options.loop == true)) { // är loop true ska vi gå till första bilden efter sista //slideshow.options.loop this.currentImage=0; this.showImage(this.currentImage); } }, /** * visar föregående bild */ showPrevImage: function() { if (this.hasPrevImage()) { this.currentImage--; if(ie_exception){ window.location.hash = ("#" + (this.currentImage+1)); window.location.reload(); } else{ this.showImage(this.currentImage); } } }, hasNextImage: function() { if (this.currentImage0) { return true; } else { return false; } }, /** * visar bild n * @param int number bildens nummer, 0=första, images.length-1=sista */ showImage: function(number) { var t = this; var upperDiv = this.upperDiv; var lowerDiv = this.lowerDiv; var targetDiv = this.targetDiv; var fadeFunc = this.fadeInImage; var images = this.images; var options = this.options; var img = document.createElement("img"); if (this.options.useImageNotes) { this.notes.DeleteAllNotes(); this.notes = new PhotoNoteContainer(this.upperDiv); var notes = this.notes; } if (this.options.showLoadingAnim) { divLoadingImg = document.createElement("div"); Element.setStyle(divLoadingImg, $H({ position: "absolute", top: "50%", left: "50%", xdisplay: "none" }) ); divLoadingImg.innerHTML = ''; Element.setOpacity(divLoadingImg, 0.0); upperDiv.appendChild(divLoadingImg); new Effect.Opacity(divLoadingImg, {duration:0.1, from:0.0, to:1 } ); } img.onload = function() { //var size = Element.getDimensions(e); // vill gärna skala rutan, men scriptacoulus stöder bara procentuell skalning // nej.. vänta.. 1.7 stöder ju morph, borde testa det! //new Effect.Scale(e, 100, { afterFinish: afterScale, scaleContent: false, scaleMode: { originalWidth: img.width, originalHeight: img.height } } ); afterScale(); } // ut med aktuellt bild var afterScale = function() { //new Effect.Opacity(targetDiv, {duration:0.7, from:1.0, to:0.0, afterFinish: afterOpacity, queue: 'end' } ); new Effect.toggle(targetDiv, "appear", {duration:0.7, afterFinish: afterOpacity, queue: 'end'} ); } // aktuell bild är gömd: in med ny bild: byt bild + visa diven igen var afterOpacity = function() { var t2 = t; t = t2; // beroende på effekt för att gömma bilden är det inte säkert att den är gömd...? //Element.hide(targetDiv); // "lagra" aktiv bild i adressrad // detta fungerar inte i Safari 2.x pga bugg i webbläsaren, se http://www.quirksmode.org/bugreports/archives/2005/05/Safari_13_visual_anomaly_with_windowlocationhref.html if (navigator.appVersion.indexOf("Safari") < 0) { //window.location.hash = t.currentImage+1; window.location.replace("#" + (t.currentImage+1)); // ersätter url så att tillbaka-knappen leder till föregående sida (inte till samma sida igen men med annan hash (vilket jag inte kan upptäckte och därmed ändra bild)) } upperDiv.innerHTML = ""; lowerDiv.innerHTML = ""; upperDiv.appendChild(img); upperDiv.style.width = img.width + "px"; if (t.options.showCaption && (t.images[t.currentImage].caption != undefined)) { var caption = unescape(t.images[t.currentImage].caption); var infoDiv = document.createElement("div"); infoDiv.innerHTML = "
" + caption + "
"; lowerDiv.appendChild(infoDiv); } var linkPrevContainer = document.createElement("span"); linkPrevContainer.className = "imagenote-nav-previous"; if (t.hasPrevImage()) { var linkPrev = document.createElement("a"); linkPrev.innerHTML = t.options.texts.previousImage; linkPrev.href = "#"; linkPrev.onclick=function() { t.showPrevImage(); return false; }; linkPrevContainer.appendChild(linkPrev); } else { linkPrevContainer.innerHTML = t.options.texts.previousImage; } var linkNextContainer = document.createElement("span"); linkNextContainer.className = "imagenote-nav-next"; if (t.hasNextImage()) { var linkNext = document.createElement("a"); linkNext.innerHTML = t.options.texts.nextImage; linkNext.href = "#"; linkNext.onclick=function() { t.showNextImage(); return false; }; linkNextContainer.appendChild(linkNext); } else { linkNextContainer.innerHTML = t.options.texts.nextImage; } if (t.options.showImageNav) { navDiv = document.createElement("div"); navDiv.className = "imagenote-nav"; var imageNum = t.options.texts.imageNum; // %1 %2 imageNum = imageNum.replace("%1", t.currentImage+1); imageNum = imageNum.replace("%2", t.images.length); navDiv.innerHTML += "" + imageNum + ""; navDiv.appendChild(linkPrevContainer); navDiv.appendChild(linkNextContainer); lowerDiv.appendChild(navDiv); } // fix för IE, blir konstigt när texten fade'as annars lowerDiv.style.background = "white"; lowerDiv.style.backgroundColor = "white"; // effekt för att göra bilden synlig //new Effect.Opacity(targetDiv, {duration:0.7, from:0.0, to:1.0, queue: 'end' } ); new Effect.toggle(targetDiv, "appear", {duration:0.7, queue: 'end'} ); // loopa igenom alla imageNotes if (options.useImageNotes == true) { var imageNotes = images[number].imageNotes; for (i=0; i0) { if (images[number].href) { img.onclick = function() { document.location.href = images[number].href; } img.onmouseover = function() { this.style.cursor = 'pointer'; } } img.src = images[number].src; } }, loopShowNextImage: function(t) { t.showNextImage(); } }