/**
 * @author      Andre Berg
 * 
 * @copyright   Copyright (c) 2009, Andre Berg (Berg Media) 
 *              All rights reserved.
 * 
 * @license         * Redistributions of source code must retain the above copyright notice, 
 *                    this list of conditions and the following disclaimer.
 *                  * Redistributions in binary form must reproduce the above copyright notice,
 *                    this list of conditions and the following disclaimer in the documentation
 *                    and/or other materials provided with the distribution.
 *                  * Neither the name of Berg Media nor the name of Andr‚àö¬© Berg may be used to 
 *                    endorse or promote products derived from this software without specific 
 *                    prior written permission.
 *
 *              The above copyright notice and this permission notice shall be included in
 *              all copies or substantial portions of the Software.
 *              
 *              THIS SOFTWARE IS PROVIDED BY ANDRE BERG OF BERG MEDIA (DESIGNATED FROM HEREON 
 *              AS "THE AUTHOR") "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 *              NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
 *              PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 
 *              ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *              (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 *              LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 *              ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 *              (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 *              SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *              
 * @requires    jQuery 1.3+
 * 
 * @info        Visor v0.9.5
 *              
 *              A sophisticated image/video viewer (a.k.a gallery) which incorporates
 *              intelligent callback APIs plus sensible defaults to make the approach
 *              to this type of web app inherently flexible. This jQuery plugin is 
 *              currently not available for the public. Please do not use this plugin
 *              at this time. Although it is likely to be prime-time ready, it is
 *              planned to release the fully annotated source code at a later date.
 *              It is also planned to make this plugin open source, though this may
 *              change without notice.
 *              
 *              If you still want to use this plugin on your own site, like, right now,
 *              all I ask is to be given proper credit for my work. It took tremendous 
 *              amount of time to construct and test this plugin on a variety of systems 
 *              and browsers.
 *              
 */
;(function($){var name="VISOR";var version="v0.9.5";var consoleGroup=name+' '+version+' Debug';var DEBUG=false;var DEBUG_EVENTS=false;var isAnimating,globalIntervalSpeed,globalSpeed,globalEasing,globalEasingIn,globalEasingOut;$.visor={defaults:{showNav:'auto',showHoverNav:'auto',showCaption:true,showTooltips:false,useArrowKeys:true,enableSlideShow:false,slideShowPauseTime:5000,thumbResizingMethod:'scale',thumbSizeFixedWidth:45,thumbSizeFixedHeight:45,globalIntervalSpeed:200,globalSpeed:400,globalEasing:"easeInOutQuad",globalEasingIn:null,globalEasingOut:null,captionSource:'title',captionPrefix:"",captionSuffix:"",msieNoDecrementOnThumbError:$.browser.msie,basePrefix:"/",viewerTarget:'#viewer',thumbsTarget:'#thumbs',navTarget:'#viewer-navi',hoverNavTarget:'div.imagecontainer',captionTarget:'div#caption',selectedClassName:"selected",loadingClassName:"loading",hoverClassName:"hover",errorClassName:"error",imageAttrs:{className:'image'},thumbAttrs:{className:'thumb clickable'},thumbDivAttrs:{className:'thumbdiv'},thumbListAttrs:{className:'thumblist'},thumbListItemAttrs:{className:'thumblist-item'},prevAttrs:{className:'prev'},nextAttrs:{className:'next'},captionAttrs:{className:'caption'},hoverNavAttrs:{id:'clicknav'},createCaption:function(prefix,text,title,alt,longdesc,suffix){return prefix+" "+text+" "+suffix;},createNavigation:function(prevname,captionname,nextname,shownav,showcaption){var naviHtml,captionHtml;if(showcaption===true){captionHtml='<div id="'+captionname+'"><\/div>';}else{captionHtml='<div id="'+captionname+'">&nbsp;<\/div>';}if(shownav===true){naviHtml='<div id="'+prevname+'" onclick="$.visor.prev();" class="clickable">'+'<img src="'+$D.basePrefix+'images/bullet_prev2.png" class="bulletprev" alt="next image bullet"/>'+'<a href="javascript:void(0);" onclick="$.visor.prev();" title="Vorheriges. Taste: Ctrl+Links, Shift+Ctrl+Links = Anfang">prev<\/a>'+'<\/div>'+captionHtml+'<div id="'+nextname+'" onclick="$.visor.next();" class="clickable">'+'<a href="javascript:void(0);" onclick="$.visor.next();" title="N&auml;chstes. Taste: Ctrl+Rechts, Shift+Ctrl+Rechts = Ende">next<\/a>'+'<img src="'+$D.basePrefix+'images/bullet_next2.png" class="bulletnext" alt="previous image bullet"/>'+'<\/div>';}else{naviHtml='<div id="'+prevname+'">&nbsp;<\/div>'+captionHtml+'<div id="'+nextname+'">&nbsp;<\/div>';}return naviHtml;},createHoverNav:function(image,viewer){var w=image.width();var h=image.height();var vw=viewer.width()||w||590;var vh=viewer.height()||h||590;var t=image.top()||viewer.top();var l=image.left()||viewer.left();var wh=(w/2);var uw=w/4;var uh=h-(h/5);var clickNavHtml='<div id="clicknav" style="position: absolute; margin: 0 auto; left: '+l+'px; top: '+t+'px; width: '+w+'px; z-index: 99;">'+'<a id="clicknext" href="javascript:void($.visor.next());" style="display: block; position: absolute; width: '+uw+'px; float: right; height: '+uh+'px; top: '+((h/2)-(uh/2))+'px; right: 0;"></a>'+'<a id="clickprev" href="javascript:void($.visor.prev());" style="display: block; position: absolute; width: '+uw+'px; float: left; height: '+uh+'px; top: '+((h/2)-(uh/2))+'px; left: 0;"></a>'+'</div>';return clickNavHtml;}},events:{oninit:function(images){},onhoverthumb:function(thumb,event){},onhoverthumbdiv:function(thumb,event){},onloadthumb:function(thumb){thumb.removeAttr("title").hide();},onthumbloaded:function(thumb){thumb.animate({opacity:"show"},{duration:globalSpeed,easing:globalEasing,hidedelay:globalSpeed/2,showdelay:globalSpeed/2});},onctrlright:function(){},onctrlshiftright:function(){},onctrlleft:function(){},onctrlshiftleft:function(){},onshowimage:function(oldimage,image,oldindex,index,images){var s=$.visor.defaults.globalSpeed;var ei=$.visor.defaults.globalEasingIn;var eo=$.visor.defaults.globalEasingOut;var showtips=$.visor.defaults.showTooltips;var tipclass=(showtips===true?"tooltip":"tooltip-disabled");var bias=2.5;var $viewerTarget=$($.visor.defaults.viewerTarget);var vh=$viewerTarget.height();var h=image.height();var w=image.width();var npb=((vh-h)/2)/bias;if(oldindex===index){if(npb>0){image.css('margin-top',npb+"px");}image.addClass(tipclass).animate({opacity:"show"},{duration:0,easing:eo});if(showtips===true){$.visor.events.onshowtooltip(image,s,ei,eo);}}else{$('div[id^=flexitip]').remove();oldimage.removeClass(tipclass).animate({opacity:"hide"},{duration:s,easing:eo,complete:function(){if(npb>0){image.css('margin-top',npb+"px");}image.addClass(tipclass).animate({opacity:"show"},{duration:s,easing:ei,complete:function(){}});if(showtips===true){$.visor.events.onshowtooltip(image,s,ei,eo);}}});}return true;},onimagevisible:function(image){},onshowtooltip:function(image,globalspeed,easingin,easingout){var s=globalspeed;image.flexitip({style:'.tooltip-style-plain',speed:s,hidedelay:s/2,showdelay:s/2});$(window).trigger('resize');},onslideshowstart:function(){},onslideshowend:function(){},onloaderror:function(thumb,thumbdiv,images,index,context){var drop=function(arr,idx){var result=[];for(var i=0;i<arr.length;i+=1){if(i!==idx){result.push(arr[i]);}}return result;};if(typeof console.debug==='function'&&DEBUG===true){console.debug("before: thumb = %o, thumbdiv = %o, images = %o, index = %d, context = %s",thumb,thumbdiv,images,index,context);}if(typeof console.error==='function'){console.error("LoadError: loading image at "+thumb.attr("src")+" failed during "+context);}thumbdiv.removeClass($.visor.defaults.loadingClassName).addClass($.visor.defaults.errorClassName);thumb.remove();return $(drop(images,index));},onthumbscomplete:function(allthumbs){}},currentImage:null,currentIndex:null,oldImage:null,images:null,numImages:null,thumbs:[],next:null,prev:null,showimage:null,updatethumb:null,toString:null};$.fn.visor=function(options,callback){if(DEBUG){t0=new Date().getTime();if(!$.browser.msie){console.group(consoleGroup);}console.time('run time');console.debug("wrapped set: %o",this);}var isEmptyFunction=function(func){return(/function \(\w*\) \{\n\}/.test(func.toString()));};var getClass=function(obj,def){return obj.className.split(" ").join(".")||def;};if(typeof arguments[0]==="function"){callback=arguments[0];options=null;}else if(typeof arguments[arguments.length-1]==='function'){callback=arguments[arguments.length-1];}var isIE8=function(){return($.browser.msie&&parseInt($.browser.version,10)===8);};var isIE7=function(){return($.browser.msie&&parseInt($.browser.version,10)===7);};var isLtIE8=function(){return($.browser.msie&&parseInt($.browser.version,10)<=8);};var isLtIE7=function(){return($.browser.msie&&parseInt($.browser.version,10)<=7);};var metadataFound=(typeof $.metadata!=='undefined');var opts=$.extend(true,{},$.visor.defaults,options);opts=metadataFound?$.extend(true,{},opts,this.data()):opts;var evts=$.extend(true,{},$.visor.events,opts);$$=$.visor;$D=opts;$E=evts;var $listItems=$(this).children('li');var $images=$listItems.find('img');var numImages=$images.length;var $viewerTarget=$($D.viewerTarget);var $thumbsTarget=$($D.thumbsTarget);var $navTarget=$($D.navTarget);var $captionTarget;var captionPrefix=$D.captionPrefix;var captionSuffix=$D.captionSuffix;var imageClass=getClass($D.imageAttrs,"image");var thumbClass=getClass($D.thumbAttrs,"thumb");var prevClass=getClass($D.prevAttrs,"prev");var captionClass=getClass($D.captionAttrs,"caption");var nextClass=getClass($D.nextAttrs,"next");var selectedClass=$D.selectedClassName;var loadingClass=$D.loadingClassName;var hoverClass=$D.hoverClassName;var errorClass=$D.errorClassName;var thumbsFinished=false;var thumbs=[];globalIntervalSpeed=$D.intervalSpeed||250;globalSpeed=$D.globalSpeed||500;globalEasing=$D.globalEasing||"swing";globalEasingIn=globalEasingOut=globalEasing;if(/^easeInOut/.test(globalEasing)){if((typeof $.easing.jswing!=='function')&&typeof console.debug==='function'){var warning='Warning: A transition function has been specified for jQuery.visor'+'that by its name looks like it needs the jQuery easing plugin '+'but the plugin seems to be missing.';console.debug(warning);}var easingName=globalEasing.match(/^easeInOut(\w+)$/)[1];globalEasingIn="easeIn"+easingName;globalEasingOut="easeOut"+easingName;}$.visor.defaults=$D;$.visor.events=$E;if($.visor.defaults.globalEasingIn===null){$.visor.defaults.globalEasingIn=globalEasingIn;}if($.visor.defaults.globalEasingOut===null){$.visor.defaults.globalEasingOut=globalEasingOut;}var $self=this.each(function(){var gallery=this;var imgIndex=0,oldImgIndex=0,thumbIndex=0,oldThumbIndex=0;gallery.init=function(){$E.oninit($images);$images.attr($D.imageAttrs).hide();$$.currentImage=gallery.showImage(imgIndex);$$.currentIndex=imgIndex;gallery.createThumbs($images,$thumbsTarget);gallery.createNavigation();};var error=false;gallery.loadThumb=function(index,$target){var $thumbDiv=$('<div id="thumb'+index+'"><\/div>').appendTo($target).attr($D.thumbDivAttrs).addClass(loadingClass).wrap('<li><\/li>');$thumbDiv.parent().attr($D.thumbListItemAttrs);if(isLtIE8()){$thumbDiv.parent().css({height:'1%'});}if($.browser.msie){var fuckIEInterval=setInterval(function(){if(true){clearInterval(fuckIEInterval);fuckIEInterval=null;}var $thumb=$(new Image()).attr($D.thumbAttrs);if(index===0&&error===false){$thumb.addClass(selectedClass);$thumbDiv.addClass(selectedClass);}$E.onloadthumb($thumb);$thumb.load(function(){$thumbDiv.removeClass(loadingClass).append($thumb);var $container=$thumb.parent("div");var tw=$thumb.width();var th=$thumb.height();var cw=$container.width();var ch=$container.height();if($D.thumbResizingMethod==="scale"&&!$thumb.hasClass('noscale')){var w=Math.floor(tw/th*ch);var h=Math.floor(th/tw*cw);if(w<h){$thumb.css({height:'auto',width:cw,marginTop:-(h-ch)/2});}else{$thumb.css({width:'auto',height:ch,marginLeft:-(w-cw)/2});}}else if($D.thumbResizingMethod==="center"&&!$thumb.hasClass('noscale')){$thumb.css({marginLeft:-(tw-cw)/2,marginTop:-(th-ch)/2});}else{$thumb.css({height:$D.thumbSizeFixedHeight,width:$D.thumbSizeFixedWidth});}thumbs[index]=$thumb;$$.thumbs[index]=$thumb;$E.onthumbloaded($thumb);if((index+1)<numImages){gallery.loadThumb(index+1,$target);}else{thumbsFinished=true;}}).error(function(){var ctx="loadThumb";error=true;$images=$E.onloaderror($thumb,$thumbDiv,$images,index,ctx);if(!$D.msieNoDecrementOnThumbError){numImages=$images.length;$$.numImages=numImages;}if((index+1)<numImages){gallery.loadThumb(index,$target);}else{thumbsFinished=true;}}).attr("src",$images.eq(index).attr('src'));$thumb.click(function(e){if(isAnimating){return false;}var selectedclass=selectedClass;var $thumbs=$("img."+thumbClass);var thumbindex=$thumbs.index(this);var $thisThumb=$thumbs.eq(thumbindex);if($thisThumb.is("."+selectedClass)){return false;}gallery.showImage(thumbindex);$thumbs.removeClass(selectedclass);$("div."+selectedclass).removeClass(selectedclass);$thisThumb.addClass(selectedclass);$thisThumb.parent("div").addClass(selectedclass);return false;});$thumb.hover(function(){$(this).addClass(hoverClass);$E.onhoverthumb($(this),"over");},function(){$(this).removeClass(hoverClass);$E.onhoverthumb($(this),"out");});$thumbDiv.hover(function(){$(this).addClass(hoverClass);$E.onhoverthumbdiv($(this),"over");},function(){$(this).removeClass(hoverClass);$E.onhoverthumbdiv($(this),"out");});},globalIntervalSpeed/3);}else{var $thumb=$(new Image()).attr($D.thumbAttrs);if(index===0&&error===false){$thumb.addClass(selectedClass);$thumbDiv.addClass(selectedClass);}$E.onloadthumb($thumb);$thumb.load(function(){$thumbDiv.removeClass(loadingClass).append($thumb);var $container=$thumb.parent("div");var tw=$thumb.width();var th=$thumb.height();var cw=$container.width();var ch=$container.height();if($D.thumbResizingMethod==="scale"&&!$thumb.hasClass('noscale')){var w=Math.floor(tw/th*ch);var h=Math.floor(th/tw*cw);if(w<h){$thumb.css({height:'auto',width:cw,marginTop:-(h-ch)/2});}else{$thumb.css({width:'auto',height:ch,marginLeft:-(w-cw)/2});}}else if($D.thumbResizingMethod==="center"&&!$thumb.hasClass('noscale')){$thumb.css({marginLeft:-(tw-cw)/2,marginTop:-(th-ch)/2});}else{$thumb.css({height:$D.thumbSizeFixedHeight,width:$D.thumbSizeFixedWidth});}thumbs[index]=$thumb;$$.thumbs[index]=$thumb;$E.onthumbloaded($thumb);if((index+1)<numImages){gallery.loadThumb(index+1,$target);}else{thumbsFinished=true;}}).error(function(){var ctx="loadThumb";error=true;$images=$E.onloaderror($thumb,$thumbDiv,$images,index,ctx);if(!$D.msieNoDecrementOnThumbError){numImages=$images.length;$$.numImages=numImages;}if((index+1)<numImages){gallery.loadThumb(index,$target);}else{thumbsFinished=true;}}).attr("src",$images.eq(index).attr('src'));$thumb.click(function(e){if(isAnimating){return false;}var selectedclass=selectedClass;var $thumbs=$("img."+thumbClass);var thumbindex=$thumbs.index(this);var $thisThumb=$thumbs.eq(thumbindex);if($thisThumb.is("."+selectedClass)){return false;}gallery.showImage(thumbindex);$thumbs.removeClass(selectedclass);$("div."+selectedclass).removeClass(selectedclass);$thisThumb.addClass(selectedclass);$thisThumb.parent("div").addClass(selectedclass);return false;});$thumb.hover(function(){$(this).addClass(hoverClass);$E.onhoverthumb($(this),"over");},function(){$(this).removeClass(hoverClass);$E.onhoverthumb($(this),"out");});$thumbDiv.hover(function(){$(this).addClass(hoverClass);$E.onhoverthumbdiv($(this),"over");},function(){$(this).removeClass(hoverClass);$E.onhoverthumbdiv($(this),"out");});}};gallery.createThumbs=function($images,$target){var $thumbsList=$('<ul><\/ul>').prependTo($target).attr(opts.thumbListAttrs);gallery.loadThumb(0,$thumbsList);var iv=setInterval(function(){if(thumbsFinished){clearInterval(iv);$E.onthumbscomplete(thumbs);}},globalIntervalSpeed);};gallery.updateThumbState=function(index){var selectedclass=selectedClass;var $thumbs=$("img."+thumbClass);var $thisThumb;if(index&&typeof index==='number'&&isFinite(index)){$thisThumb=$thumbs.eq(index);$$.currentIndex=index;}else{var thumbindex=$images.index($$.currentImage);$thisThumb=$thumbs.eq(thumbindex);$$.currentIndex=index;}if($thisThumb.is("."+selectedclass)){return false;}$thumbs.removeClass(selectedclass);$("div."+selectedclass).removeClass(selectedclass);$thisThumb.addClass(selectedclass);$thisThumb.parent("div").addClass(selectedclass);return true;};gallery.showImage=function(index,callback){if(!isAnimating&&index<numImages&&index>=0){isAnimating=true;var $oldImage,$image;oldImgIndex=imgIndex;imgIndex=index;$oldImage=$images.eq(oldImgIndex);$$.oldImage=$oldImage;$image=$images.eq(imgIndex);$$.currentImage=$image;$$.currentIndex=imgIndex;$oldImage.removeClass(selectedClass);$image.addClass(selectedClass);$E.onshowimage($oldImage,$image,oldImgIndex,imgIndex,$images);var iv=setInterval(function(){if($image.is(':visible')){clearInterval(iv);if($D.showCaption!==false&&$captionTarget&&$captionTarget!==undefined){gallery.changeCaption();}gallery.addHoverNav();gallery.updateThumbState(index);$E.onimagevisible($image);if(typeof callback==="function"){callback();}isAnimating=false;}},globalIntervalSpeed);return $image;}else{return false;}};gallery.getNext=function(){if(isAnimating){return;}var newIndex=imgIndex+1;if(newIndex>=numImages){newIndex=0;}gallery.showImage(newIndex);var selectedclass=selectedClass;var $thumbs=$("img."+thumbClass);var $newThumb=$thumbs.eq(newIndex);$thumbs.removeClass(selectedclass);$("div."+selectedclass).removeClass(selectedclass);$newThumb.addClass(selectedclass);$newThumb.parent("div").addClass(selectedclass);return $images.eq(newIndex);};gallery.getPrev=function(){if(isAnimating){return;}var newIndex=imgIndex-1;if(newIndex<0){newIndex=numImages-1;}gallery.showImage(newIndex);var selectedclass=selectedClass;var $thumbs=$("img."+thumbClass);var $newThumb=$thumbs.eq(newIndex);$thumbs.removeClass(selectedclass);$("div."+selectedclass).removeClass(selectedclass);$newThumb.addClass(selectedclass);$newThumb.parent("div").addClass(selectedclass);return $images.eq(newIndex);};gallery.createNavigation=function(){if($D.showNav===false){return false;}else{var navi;if($D.showNav==='auto'&&numImages===1){navi=$D.createNavigation(prevClass,captionClass,nextClass,false,$D.showCaption);}else{navi=$D.createNavigation(prevClass,captionClass,nextClass,true,$D.showCaption);}var $navi=$(navi).appendTo($navTarget);$captionTarget=$($D.captionTarget);}};gallery.addHoverNav=function(){if($D.showHoverNav===false){return false;}else{$('#'+$D.hoverNavAttrs.id).remove();var hovernav;if($D.showHoverNav===true){hovernav=$D.createHoverNav($$.currentImage,$viewerTarget);}else if($D.showHoverNav==='auto'&&$$.numImages>1){hovernav=$D.createHoverNav($$.currentImage,$viewerTarget);}else{return false;}var $clickNav=$(hovernav);$($D.hoverNavTarget).filter(':eq('+$$.currentIndex+')').append($clickNav);}};gallery.changeCaption=function(){var notFoundValue="";var captionText=$$.currentImage.attr($D.captionSource)?$$.currentImage.attr($D.captionSource):notFoundValue;var title=$$.currentImage.attr('title')?$$.currentImage.attr('title'):notFoundValue;var alt=$$.currentImage.attr('alt')?$$.currentImage.attr('alt'):notFoundValue;var longdesc=$$.currentImage.attr('longdesc')?$$.currentImage.attr('longdesc'):notFoundValue;var captionString=$D.createCaption(captionPrefix,captionText,title,alt,longdesc,captionSuffix);if($captionTarget.length>0){var curHtml=$captionTarget.html();return $captionTarget.html(captionString);}else{return false;}};gallery.toString=function(){var result="version: "+version;if(DEBUG===true){var jsDump;(function(){function quote(str){return'"'+str.toString().replace(/"/g,'\\"')+'"';}function literal(o){return o+'';}function join(pre,arr,post){var s=jsDump.separator(),base=jsDump.indent();inner=jsDump.indent(1);if(arr.join){arr=arr.join(','+s+inner);}if(!arr){return pre+post;}return[pre,inner+arr,base+post].join(s);}function array(arr){var i=arr.length,ret=Array(i);this.up();while(i--){ret[i]=this.parse(arr[i]);}this.down();return join('[',ret,']');}var reName=/^function (\w+)/;jsDump={parse:function(obj,type){var parser=this.parsers[type||this.typeOf(obj)];type=typeof parser;return type=='function'?parser.call(this,obj):type=='string'?parser:this.parsers.error;},typeOf:function(obj){var type=typeof obj,f='function';return type!='object'&&type!=f?type:!obj?'null':obj.exec?'regexp':obj.getHours?'date':obj.scrollBy?'window':obj.nodeName=='#document'?'document':obj.nodeName?'node':obj.item?'nodelist':obj.callee?'arguments':obj.call||obj.constructor!=Array&&(obj+'').indexOf(f)!=-1?f:'length'in obj?'array':type;},separator:function(){return this.multiline?this.HTML?'<br />':'\n':this.HTML?'&nbsp;':' ';},indent:function(extra){if(!this.multiline){return'';}var chr=this.indentChar;if(this.HTML){chr=chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');}return Array(this._depth_+(extra||0)).join(chr);},up:function(a){this._depth_+=a||1;},down:function(a){this._depth_-=a||1;},setParser:function(name,parser){this.parsers[name]=parser;},quote:quote,literal:literal,join:join,_depth_:1,parsers:{window:'[Window]',document:'[Document]',error:'[ERROR]',unknown:'[Unknown]','null':'null',undefined:'undefined','function':function(fn){var ret='function',name='name'in fn?fn.name:(reName.exec(fn)||[])[1];if(name){ret+=' '+name;}ret+='(';ret=[ret,this.parse(fn,'functionArgs'),'){'].join('');return join(ret,this.parse(fn,'functionCode'),'}');},array:array,nodelist:array,arguments:array,object:function(map){var ret=[];this.up();for(var key in map){ret.push(this.parse(key,'key')+': '+this.parse(map[key]));}this.down();return join('{',ret,'}');},node:function(node){var open=this.HTML?'&lt;':'<',close=this.HTML?'&gt;':'>';var tag=node.nodeName.toLowerCase(),ret=open+tag;for(var a in this.DOMAttrs){var val=node[this.DOMAttrs[a]];if(val){ret+=' '+a+'='+this.parse(val,'attribute');}}return ret+close+open+'/'+tag+close;},functionArgs:function(fn){var l=fn.length;if(!l){return'';}var args=Array(l);while(l--){args[l]=String.fromCharCode(97+l);}return' '+args.join(', ')+' ';},key:quote,functionCode:'[code]',attribute:quote,string:quote,date:quote,regexp:literal,number:literal,'boolean':literal},DOMAttrs:{id:'id',name:'name','class':'className'},HTML:false,indentChar:'   ',multiline:true};})();result+="\ndefaults: "+jsDump.parse($D);result+="\nevents: "+jsDump.parse($E);result+="\ncurrentImage: "+jsDump.parse($.visor.currentImage);result+="\ncurrentIndex: "+jsDump.parse($.visor.currentIndex);result+="\noldImage: "+jsDump.parse($.visor.oldImage);result+="\nimages: "+jsDump.parse($.visor.images);result+="\nnumImages: "+jsDump.parse($.visor.numImages);result+="\nthumbs: "+jsDump.parse($.visor.thumbs);result+="\nnext: "+jsDump.parse($.visor.next);result+="\nprev: "+jsDump.parse($.visor.prev);result+="\nshowimage: "+jsDump.parse($.visor.showimage);result+="\nupdatethumb: "+jsDump.parse($.visor.updatethumb);}return result;};gallery.init();$$.next=gallery.getNext;$$.prev=gallery.getPrev;$$.showimage=gallery.showImage;$$.updatethumb=gallery.updateThumbState;$$.images=$images;$$.numImages=numImages;$$.thumbs=thumbs;$$.toString=gallery.toString;if($D.useArrowKeys===true){$(document).keydown(function(e){var key=e.charCode?e.charCode:e.keyCode?e.keyCode:0;var index;var iv=null;var startEventCalled=false;switch(key){case 33:case 34:case 39:if(e.ctrlKey&&e.shiftKey){index=numImages-1;gallery.showImage(index);$E.onctrlshiftright();}else if(e.ctrlKey){gallery.getNext();$E.onctrlright();}break;case 37:if(e.ctrlKey&&e.shiftKey){index=0;gallery.showImage(index);$E.onctrlshiftleft();}else if(e.ctrlKey){gallery.getPrev();$E.onctrlleft();}break;}});}});if(typeof callback==="function"){var iv=setInterval(function(){if(thumbsFinished===true){clearInterval(iv);callback(thumbs);if(DEBUG){console.timeEnd('run time');t1=new Date().getTime();console.log("total run time: "+(t1-t0)+"ms");if(!$.browser.msie){console.groupEnd(consoleGroup);}}}},globalIntervalSpeed);setTimeout(function(){clearInterval(iv);},10000);}return $self;};})(jQuery);