/*
 * TERMS OF USE - Lichtbild Hamm - ImageBarFx
 * Freeware - do what ever you want
 * 2010 by Martin Bücker <info@mbfx.de>
 */
"use strict";var lbh={util:{delegate:function(a,b){return function(){b.apply(a,arguments)}},ImageLoader:function(){this.imageCache={};this.load=function(a,b){if(this.imageCache[a]===undefined){this.imageCache[a]=new Image();this.imageCache[a].onload=b;this.imageCache[a].src=a}else{setTimeout(b,10)}};this.loadSet=function(b,d){var a,e={imgLoaded:0,imgCount:b.length,successFunc:d},c=function(){e.imgLoaded+=1;if(e.imgLoaded===e.imgCount){e.successFunc();if(this){this.onload=null}e.successFunc=null;e=null}};for(a=0;a<b.length;a+=1){this.load(b[a],c)}}},Broadcaster:{initialize:function(a){a.addListener=this.addListener;a.removeListener=this.removeListener;a.broadcastMessage=this.broadcastMessage;a.listeners=[]},addListener:function(a){this.removeListener(a);this.listeners.push(a);return true},removeListener:function(d){var c,b=this.listeners;for(c=0;c<b.length;c+=1){if(b[c]===d){b.splice(c,1);return true}}return false},broadcastMessage:function(d,b){var f,e,c=this.listeners;for(e=0;e<c.length;e+=1){f=c[e];if(f[d]){f[d].call(f,b)}}}},RotatingList:function(a){this.list=a;this.index=0;this.next=function(){var b=this.list[this.index];this.index=(this.index+1)%this.list.length;return b}}},ImageBarFx:{model:{imageBaseUrl:null,imageDataUrl:null,rotatingList:null,imageLoader:null,init:function(a){if(a.imageDataUrl===null){throw"Error: imageDataUrl missing"}this.imageDataUrl=a.imageDataUrl;lbh.util.Broadcaster.initialize(this);this.imageLoader=new lbh.util.ImageLoader();this.onLoadPageDelegate=lbh.util.delegate(this,function(){this.broadcastMessage("onLoadPage")})},loadImageData:function(){var a=lbh.util.delegate(this,function(b,d,c){this.imageBaseUrl=b.baseUrl;this.rotatingList=new lbh.util.RotatingList(b.imageList);this.broadcastMessage("onLoadImageData")});jQuery.ajax({url:this.imageDataUrl,success:a,error:function(c,d,b){throw"Error loading data: "+c.statusText+" ("+c.status+")"}})},getNextPage:function(b){var a,c=[];do{a=this.rotatingList.next();b-=a.width;c.push(a)}while(b>0);return c},preloadPage:function(c){var a,b=[];for(a=0;a<c.length;a+=1){b.push(this.getImageUrl(c[a]))}this.imageLoader.loadSet(b,this.onLoadPageDelegate)},getImageUrl:function(a){return this.imageBaseUrl+a.filename}},view:{m:null,container:null,containerId:null,width:0,height:0,animDuration:0,loaderImageUrl:null,shadowImageUrl:null,shadowWidth:0,currentImageNodes:null,newImageNodes:null,NEW_PAGE_ZINDEX_BASE:200,OLD_PAGE_ZINDEX_BASE:100,init:function(b,a){if(b.containerId===undefined){throw"Error: containerId missing"}this.containerId=b.containerId;this.container=jQuery("#"+b.containerId);this.width=b.width||this.container.width();this.height=b.height||this.container.height();this.animDuration=b.animDuration||1000;this.loaderImageUrl=b.loaderImageUrl;if(b.shadowImageUrl){this.shadowImageUrl=b.shadowImageUrl;this.shadowWidth=b.shadowWidth||0}this.m=a;this.setupContainer();lbh.util.Broadcaster.initialize(this)},setupContainer:function(){this.container.css({width:this.width+"px",height:this.height+"px",position:"relative",overflow:"hidden"})},showLoadingScreen:function(){var a=this.loaderImageUrl?'<img src="'+this.loaderImageUrl+'" />':"";this.container.html(a);this.container.addClass("loading")},showFxScreen:function(){this.container.removeClass("loading");this.container.addClass("fx");this.container.html('<style type="text/css">/*<![CDATA[*/\n#'+this.containerId+".fx img {\n  padding-left: "+this.shadowWidth+"px;\n  margin-left: -"+this.shadowWidth+"px;\n  position: absolute;\n  top: 0px;\n"+(this.shadowImageUrl?"  background: url("+this.shadowImageUrl+") repeat-y left;\n":"")+"}\n/*]]>*/</style>\n")},sendCurrentPageToBack:function(){this.currentImageNodes=this.newImageNodes;if(this.currentImageNodes){for(var a=0;a<this.currentImageNodes.length;a+=1){this.currentImageNodes[a].css("z-index",this.OLD_PAGE_ZINDEX_BASE-a)}}},createNewPage:function(b){this.newImageNodes=[];for(var a=0;a<b.length;a+=1){this.newImageNodes.push(this.createImageNode(b[a],this.NEW_PAGE_ZINDEX_BASE-a))}},animatePage:function(a){this.sendCurrentPageToBack();this.createNewPage(a);if(this.currentImageNodes){this.hideCurrentPage()}this.showNewPage()},removeCurrentPage:function(){for(var a=0;a<this.currentImageNodes.length;a+=1){this.currentImageNodes[a].remove()}},hideCurrentPage:function(){var c,d,a=this.currentImageNodes.length,e=a,b=lbh.util.delegate(this,function(){e-=1;if(e===0){this.removeCurrentPage()}});for(c=0;c<a;c+=1){d=this.currentImageNodes[c];d.animate({left:-d.width()},this.animDuration+this.animDuration*0.05,"easeInSine",b)}},showNewPage:function(){var f=this.newImageNodes,b=this.newImageNodes.length,e=0,a=this.width,c=(this.animDuration/this.width),d=lbh.util.delegate(this,function(){if(e<b){var h=f[e],g=h.width();e+=1;h.css("left",a);a-=g;h.animate({left:a},c*g,"easeOutSine",d)}else{this.broadcastMessage("onAnimationDone")}});d.call()},createImageNode:function(a,b){this.container.append('<img src="'+this.m.getImageUrl(a)+'" width="'+a.width+'" height="'+this.height+'" style="left:'+this.width+"px;z-index:"+b+';" />');return this.container.children("img").last()}},controller:{m:null,v:null,breakDuration:0,currentPage:null,state:{pageNumLoaded:0,imageDataLoaded:false,volati1e:{animationDone:false,breakDone:false}},init:function(c,a,b){this.breakDuration=c.breakDuration||1000;this.m=a;this.v=b;this.m.addListener(this);this.v.addListener(this);this.onBreakDoneDelegate=lbh.util.delegate(this,this.onBreakDone)},onLoadImageData:function(){this.state.imageDataLoaded=true;this.decide()},onLoadPage:function(){this.state.pageNumLoaded+=1;this.decide()},onAnimationDone:function(){this.state.volati1e.animationDone=true;this.decide()},onBreakDone:function(){this.state.volati1e.breakDone=true;this.decide()},decide:function(){this.decideOn(this.state);this.state.volati1e={}},decideOn:function(a){if(a.imageDataLoaded){if(a.volati1e.breakDone||a.pageNumLoaded===0){this.currentPage=this.m.getNextPage(this.v.width);this.m.preloadPage(this.currentPage)}else{if(a.volati1e.animationDone){this.startBreakCountdown()}else{if(a.pageNumLoaded===1){this.v.showFxScreen()}this.v.animatePage(this.currentPage)}}}else{this.v.showLoadingScreen();this.m.loadImageData()}},startBreakCountdown:function(){setTimeout(this.onBreakDoneDelegate,this.breakDuration)}},create:function(a){this.model.init(a);this.view.init(a,this.model);this.controller.init(a,this.model,this.view);this.controller.decide()}}};jQuery(function(){lbh.ImageBarFx.create({imageDataUrl:"get_photo_list.php?height=135",containerId:"portfolio",loaderImageUrl:"style/loading8.gif",shadowImageUrl:"style/shadow.png",shadowWidth:10,breakDuration:3000,animDuration:1000})});
