// ----------------------------------------------------------------------------------- // // Dhonishow v0.7 // by Stanislav Müller // 07/24/07 // // Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/ // // ----------------------------------------------------------------------------------- document.write(""); // to avoid imageload flash var Dhonishow = Class.create(); Dhonishow.prototype = { initialize: function() { this.parentDiv = arguments[0]; // customize for default ++++++++++// this.options = { effect : 'appear', // choose between 'blind', 'slide', 'appear', 'horizontal' parallel : true, duration : 0.6, navigationTop : false, hide: { 'paging': false, 'alt': false, 'navigation': false }, target : "self", pagingTemplate: new Template("#{current} of #{allpages}") }; // customize for default ----------// this.setOptions(); this.setDependences(); return this; }, setOptions: function(){ var options = this.parentDiv.className.match(/(\w+)_(\w+)/g) || []; options.each(function(option){ var option = /(\w+)_(\w+)/.exec(option); var value = option[2]; (/dot/).test(value) ? value = new Number(value.replace(/dot/, ".")) : value; option[1] == "hide" ? this.options.hide[value] = true : this.options[option[1]] = value; }.bind(this)); this.options.queue = { position: 'end', scope: this.parentDiv.id }; this.elements = {}; }, setDependences: function(){ this.dhonishowCurrentElement = 0; this.buildDom(); this.updateNavigation(); this.parentDiv.style.display = 'block'; this.giveParent(this.dhonishowElements[0]).show(); this.addObservers(); this.updateNavigation(); if(this.options.autoplay) this.handleAutoplay(); }, buildDom: function(){ this.buildUl = function(){ var ul = document.createElement('ul'); new Element.addClassName(ul, "dhonishow-image"); this.dhonishowElements = []; $A(this.parentDiv.childNodes).each(function(el){ if(el.nodeType != 3){ var li = document.createElement('li'); li.style.display="none"; if(el.getAttribute('rel')){ var a = document.createElement('a'); a.href = el.getAttribute('rel'); el.removeAttribute("rel"); a.target = "_"+this.options.target; a.appendChild(el); }else{ var a = el; } li.appendChild(a); ul.appendChild(li); this.dhonishowElements.push(el); } }.bind(this)); return ul; }; this.buildNavigation = function(){ var navi = document.createElement('div'); new Element.addClassName(navi, 'dhonishow-navi'); var alt = document.createElement('p'); new Element.addClassName(alt, "dhonishow-picture-alt"); this.elements.alt = alt; navi.appendChild(alt); var next_button = document.createElement('a'); new Element.addClassName(next_button, 'dhonishow-next-picture'); next_button.setAttribute('title', 'Next'); navi.appendChild(next_button); next_button.update("Next"); this.elements.next_button = next_button; var paging = document.createElement('p'); new Element.addClassName(paging, 'paging'); navi.appendChild(paging); this.elements.paging = paging; var previous_button = document.createElement('a'); new Element.addClassName(previous_button, 'dhonishow-previous-picture'); previous_button.setAttribute('title', 'Previous'); navi.appendChild(previous_button); previous_button.update("Back"); this.elements.previous_button = previous_button; return navi; }.bind(this); this.parentDiv.appendChild(this.buildUl()); if(!this.options.hide.navigation){ if(this.navigationTop){ this.parentDiv.insertBefore(this.parentDiv.firstChild, this.buildNavigation()); }else{ this.parentDiv.appendChild(this.buildNavigation()); } } /* Generated HTML Code

Next

Previous
*/ }, addObservers: function(){ if(!this.options.hide.navigation){ this.elements.next_button.onclick = function(e){ this.handleChangeImage(this.dhonishowCurrentElement++); }.bindAsEventListener(this); this.elements.previous_button.onclick = function(e){ this.handleChangeImage(this.dhonishowCurrentElement--); }.bindAsEventListener(this); } }, removeObservers: function(){ if(!this.options.hide.navigation){ this.elements.next_button.onclick = function(){}; this.elements.previous_button.onclick = function(){}; } }, handleChangeImage: function(dhonishowNextElement){ this.changeImage(dhonishowNextElement, this.dhonishowCurrentElement); this.updateNavigation(); }, handleAutoplay: function(){ new PeriodicalExecuter(function(pe){ if(this.effectStarted == false || typeof(this.effectStarted) == "undefined"){ this.periodicalExecuterWay = this.periodicalExecuterWay || 'right'; if(this.dhonishowCurrentElement <= this.dhonishowElements.length && this.periodicalExecuterWay == "right"){ this.dhonishowCurrentElement++; if(this.dhonishowCurrentElement == this.dhonishowElements.length){ this.periodicalExecuterWay = "left"; } }else if(this.periodicalExecuterWay == "left"){ this.dhonishowCurrentElement--; if(this.dhonishowCurrentElement = 1){ this.periodicalExecuterWay = "right"; } } if(this.dhonishowCurrentElement == this.dhonishowElements.length){ this.dhonishowCurrentElement = 0; this.changeImage(0, this.dhonishowElements.length-1); }else{ this.changeImage(this.dhonishowCurrentElement, this.dhonishowCurrentElement-1); } if(!this.options.hide.navigation) this.updateNavigation(); } }.bind(this), this.options.autoplay); }, giveParent: function(elm){ return $(elm).up("li"); }, giveEffect: function(){ if(typeof(Effect) != "undefined") { return Effect.toggle; }else{ return Element.toggle; } }, changeImage: function(next, current){ var effect = this.giveEffect(); Object.extend(this.options, { beforeStart: function(effect){ this.effectStarted = true; this.removeObservers(); }.bind(this), afterFinish: function(effect){ this.effectStarted = false; if(effect.options.to != 0) this.addObservers(); }.bind(this) }); if(this.options.parallel == true && typeof(Effect) != "undefined"){ new Effect.Parallel([ new effect(this.giveParent(this.dhonishowElements[next]), this.options.effect, {sync:true}), new effect(this.giveParent(this.dhonishowElements[current]), this.options.effect, {sync:true}) ], this.options); }else if(typeof(Effect) != "undefined"){ this.giveParent(this.dhonishowElements[next]).setStyle({zIndex: this.dhonishowElements.length}); this.giveParent(this.dhonishowElements[current]).setStyle({zIndex: 1}); new effect(this.giveParent(this.dhonishowElements[next]), this.options.effect, this.options); new effect(this.giveParent(this.dhonishowElements[current]), this.options.effect, this.options); }else{ new effect(this.giveParent(this.dhonishowElements[next]), this.options.effect, this.options); // Fallback, prototype's toggle new effect(this.giveParent(this.dhonishowElements[current]), this.options.effect, this.options); } }, updateNavigation: function(){ if(!this.options.hide.navigation){ this.elements.previous_button.hide(); this.elements.next_button.hide(); var updateButton = function(){ if(this.dhonishowCurrentElement != 0) this.elements.previous_button.show(); if(this.dhonishowCurrentElement != (this.dhonishowElements.length - 1)) this.elements.next_button.show(); }.bind(this); var updatePaging = function(){ this.elements.paging.update(this.options.pagingTemplate.evaluate({current: this.dhonishowCurrentElement+1, allpages: this.dhonishowElements.length})); }.bind(this); var updateAlt = function(element){ if(element.getAttribute('alt')){ var description = element.getAttribute('alt'); }else if(element.getAttribute('src')){ var description = element.getAttribute('src').split('/').last(); }else{ var description = ""; } this.elements.alt.update(description); }.bind(this); if(this.options.hide.paging == false) updatePaging(); if(this.options.hide.alt == false) updateAlt(this.dhonishowElements[this.dhonishowCurrentElement]); updateButton(); } } }; var SearchDhonishow = Class.create(); SearchDhonishow.prototype = { shows: [], initialize: function(){ $$('.dhonishow').each(function(show, number){ if(show.id == '') show.id = 'dhonishow_'+number; this.shows.push(new Dhonishow(show)); }.bind(this)); } }; if(typeof(Effect) != "undefined"){ Effect.SlideRight = function(element) { element = $(element).cleanWhitespace(); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: true, scaleX: true, scaleY: false, scaleFrom: window.opera ? 0 : 1, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); effect.element.makeClipping().show(); }, afterFinishInternal: function(effect) { effect.element.undoClipping().undoPositioned(); effect.element.down().undoPositioned(); }}, arguments[1] || {}) ); }; Effect.Slideleft = function(element) { element = $(element).cleanWhitespace(); return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({ scaleContent: false, scaleX: true, scaleY: false, scaleMode: 'box', scaleFrom: 100, restoreAfterFinish: true, beforeStartInternal: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); effect.element.makeClipping().show(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned(); effect.element.down().undoPositioned(); }}, arguments[1] || {})); }; Effect.toggle = function(element, effect) { element = $(element); effect = (effect || 'appear').toLowerCase(); var options = Object.extend({ queue: { position:'end', scope:(element.id || 'global'), limit: 1 } }, arguments[2] || {}); return new Effect[element.visible() ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); }; Object.extend(Effect.PAIRS, {'horizontal': ['SlideRight', 'Slideleft']}); } new Event.observe(window, "load", function(){ new SearchDhonishow(); });