/* Copyright (c) 2010 Benjamin Schudel (http://belleville.ch)
 *
 * Version: 0.1.1
 * 
 * Requires: 1.3.2+
 */
 (function($){var app={name:"gallery",version:"0.1.1",date:"2010/06/01",author:"Benjamin Schudel"};var Gallery=function(element,options){var _self=this;var core={hover:false,url:null,height:0,zoom:""};var opt={index:1,speed:400,scrollOffset:82};var ref={root:null,zoom:null,shell:null,caption:null,loading:null,thumbs:null,iconClose:null,iconNext:null,iconPrevious:null};var els={current:null,first:null,thumb:null};var obj={};var data={};this._get=function(name,key){var obj=eval(name);return(obj&&key)?obj[key]:obj};this.isVisible=function(){return(ref.zoom.is(":visible"))};this.fInit=function(){var root=ref.root=$(element);if(options){jQuery.extend(opt,options)}var rel=root.attr("rel");if(rel){eval("var ndata = %s;".replace("%s",rel));jQuery.extend(data,ndata);if(data.options){jQuery.extend(opt,data.options)}root.removeAttr("rel")}this.fSetup()};this.fSetup=function(){ref.root.prepend('<div class="zoomarea-wrapper"><div class="zoomarea" style="display: none;"><div class="shell"><div class="loading"><div class="shade"></div><div class="spinner"></div></div></div><div class="caption-wrapper"><div class="caption"><div class="icon icon-close"></div><div class="icon icon-next"></div><div class="icon icon-previous"></div><div class="title"></div><div class="text"></div></div></div></div></div>');ref.zoom=ref.root.find(".zoomarea");ref.shell=ref.zoom.find(".shell");ref.caption=ref.zoom.find(".caption");ref.loading=ref.zoom.find(".loading");ref.thumbs=ref.root.find("> img.thumb");ref.loading.find(".shade").css("opacity",0.5);ref.loading.hide();ref.caption.hide();ref.zoom.css({marginTop:-ref.zoom.outerHeight(true)}).hide();ref.thumbs.addClass("cursorZoomIn").each(function(index,el){var item=$(el);var rel=item.attr("rel");if(rel){eval("var ndata = %s;".replace("%s",rel));item.data("data",ndata)}}).click(function(event){var el=event.target;var thumb=$(el);if(thumb.hasClass("cursorZoomOut")){_self.fHide()}else{_self.fChangeInsert(el);_self.fLoadImage(el)}});ref.iconClose=ref.caption.find(".icon-close");ref.iconClose.click(function(event){_self.fHide()});ref.iconNext=ref.caption.find(".icon-next");ref.iconNext.click(function(event){_self.fNext()});ref.iconPrevious=ref.caption.find(".icon-previous");ref.iconPrevious.click(function(event){_self.fPrevious()})};this.fLoadImage=function(el){var thumb=$(el);var data=thumb.data("data");var url=data.url;if(els.thumb){$(els.thumb).removeClass("cursorZoomOut").addClass("cursorZoomIn")}thumb.removeClass("cursorZoomIn").addClass("cursorZoomOut");ref.root.find("> img.thumb").each(function(index,item){var opacity=(item==el)?0.5:1;$(item).fadeTo(opt.speed,opacity).data("oldopacity",opacity)});if(url==core.url){if(!this.isVisible()){this.fShow()}return false}if(els.current){ref.loading.show()}var img=new Image();$(img).addClass("image cursorZoomOut").hide().load(function(event){$(event.target).click(function(event){_self.fHide()});_self.fSwitch(this)});this.fHideCaption(function(){$(img).attr("src",url)});ref.shell.append(img);els.thumb=el;core.url=url;if(!this.isVisible()){this.fShow()}};this.fChangeInsert=function(el){var first=null;ref.root.find("> img").each(function(index,el2){var item=$(el2);if(item.position().left==0){first=el2}if(el2==el){return false}});if(first!=els.first){var wrapper=ref.zoom.parent();if(this.isVisible()){ref.shell.animate({height:0},{duration:"normal",complete:function(){wrapper.insertBefore(first)}})}else{wrapper.insertBefore(first)}els.first=first}};this.fSwitch=function(el){var image=$(el);var width=image.attr("width");var height=image.attr("height");ref.caption.width(_self.fCalcWidth(ref.caption,width)).hide();this.fSetCaption();ref.shell.animate({height:height},{duration:opt.speed,complete:function(){_self.fScrollTo();if(els.current){var current=$(els.current);current.animate({width:width},{duration:opt.speed,complete:function(){image.fadeIn("slow",function(){current.remove();_self.fShowCaption()})}});ref.loading.animate({width:width,height:height},{duration:opt.speed,complete:function(){ref.loading.hide()}})}else{ref.loading.width(width).height(height);image.fadeIn(opt.speed,function(){_self.fShowCaption()})}els.current=el}})};this.fScrollTo=function(){var to=ref.zoom.offset().top-opt.scrollOffset;$("html,body").animate({scrollTop:to},"normal")};this.fNext=function(){var thumb=$(els.thumb);do{thumb=thumb.next();if(!thumb.length){return false}}while(!thumb.is("img.thumb"));this.fLoadImage(thumb[0])};this.fPrevious=function(){var thumb=$(els.thumb);do{thumb=thumb.prev();if(!thumb.length){return false}}while(!thumb.is("img.thumb"));this.fLoadImage(thumb[0])};this.fSetCaption=function(){var thumb=$(els.thumb);var data=thumb.data("data");ref.caption.find(".title").html(data.title||"");ref.caption.find(".text").html(data.text||"");ref.caption.css({marginTop:-ref.caption.outerHeight()});ref.iconNext.show();ref.iconPrevious.show();var first=ref.thumbs.filter(":first");var last=ref.thumbs.filter(":last");if(thumb[0]==last[0]){ref.iconNext.hide()}else{if(thumb[0]==first[0]){ref.iconPrevious.hide()}}};this.fShowCaption=function(cback){ref.caption.show().animate({marginTop:0},{duration:opt.speed*0.5,complete:function(){if(cback){cback()}}})};this.fHideCaption=function(cback){ref.caption.animate({marginTop:-ref.caption.outerHeight()},{duration:opt.speed*0.5,complete:function(){ref.caption.hide();if(cback){cback()}}})};this.fShow=function(cback){ref.zoom.show().animate({marginTop:0},{duration:opt.speed*1.5,complete:function(){if(cback){cback()}}})};this.fHide=function(cback){ref.root.find("> img.thumb").removeClass("cursorZoomOut").addClass("cursorZoomIn").fadeTo("fast",1);ref.zoom.animate({marginTop:-ref.zoom.outerHeight(true)},{duration:opt.speed*1.5,complete:function(){ref.zoom.hide();if(cback){cback()}}})};this.fCalcWidth=function(el,width){var el=$(el);var margin=parseInt(el.css("marginLeft"))+parseInt(el.css("marginRight"));var padding=parseInt(el.css("paddingLeft"))+parseInt(el.css("paddingRight"));var border=parseInt(el.css("borderLeftWidth"))+parseInt(el.css("borderRightWidth"));return width-(margin+padding+border)};this.fInit()};jQuery.fn.extend({gallery:function(a){return this.each(function(c,d){if($(this).data("gallery")){return}var b=new Gallery(this,a);$(this).data("gallery",b)})}});})(jQuery);
