Incordia.Packages.load("Incordia.dom.Window");Incordia.Packages.create("CDON.ui.ImageViewer");CDON.ui.ImageViewer=Incordia.Class.extend({dimmer:null,holder:null,viewer:null,toolbar:null,viewerImageBox:null,viewerImage:null,toolbarCaption:null,preloader:null,arguments:null,constructor:function(arguments){this.arguments=Incordia.merge(CDON.ui.ImageViewer.defaults,arguments);this.preloader=new Image();this.preloader.src=this.arguments.preloader;this.holder=document.createElement("div");this.holder.style.position="absolute";this.holder.style.top=this.holder.style.left="0px";this.holder.style.width="100%";this.holder.style.display="none";this.holder.style.zIndex=1001;if(this.arguments.clickAlwaysCloses)this.holder.style.cursor="default";this.dimmer=document.createElement("div");this.dimmer.style.backgroundColor="#000";this.dimmer.style.MozOpacity=this.arguments.alpha;this.dimmer.style.opacity=this.arguments.alpha;this.dimmer.style.filter="alpha(opacity="+(this.arguments.alpha*100)+")";this.dimmer.style.position="absolute";this.dimmer.style.top=this.dimmer.style.left="0px";this.dimmer.style.display="none";this.dimmer.style.zIndex=1000;this.viewer=document.createElement("div");this.viewer.style.backgroundColor="#FFF";this.viewer.style.margin="0px auto";this.viewer.style.position="relative";this.viewer.style.zIndex=1002;this.viewer.style.padding=this.arguments.paddingSize+"px";this.viewer.style.top=this.viewer.style.left="0px";this.toolbar=document.createElement("div");this.toolbar.className="ImageViewertoolbar";this.toolbar.style.paddingTop=this.arguments.paddingSize+"px";var closeBtn=document.createElement("span");closeBtn.style.cursor="pointer";closeBtn.style.styleFloat=closeBtn.style.cssFloat="right";addEvent(closeBtn,"click",this.toggleContainer.rbind(this,false));closeBtn.appendChild(document.createTextNode(this.arguments.closeText));this.toolbar.appendChild(closeBtn);this.groupSelection=document.createElement("ul");this.groupSelection.className="paging imageviewer-groupselector";this.toolbar.appendChild(this.groupSelection);this.toolbarCaption=document.createElement("span");this.toolbar.appendChild(this.toolbarCaption);this.viewerImageBox=document.createElement("div");this.viewerImageBox.style.textAlign="center";this.viewerImage=document.createElement("img");this.viewerImage.src=this.arguments.preloader;this.viewerImage.style.margin="0px auto";this.holder.appendChild(this.dimmer);this.holder.appendChild(this.viewer);this.viewerImageBox.appendChild(this.viewerImage);this.viewer.appendChild(this.viewerImageBox);this.viewer.appendChild(this.toolbar)},load:function(){document.body.appendChild(this.holder);addEvent(this.holder,"mousedown",this.toggleContainer.rbind(this,false));if(!this.arguments.clickAlwaysCloses)addEvent(this.viewer,"mousedown",Incordia.dom.Event.halt);addEvent(window,"resize",this._updateSizes.bind(this));this._adjustTo({x:0,y:0});this._updateSizes();this._updateToScroll();this._runLinkBinder()},_updateToScroll:function(){var scroll=Incordia.dom.Window.getScroll();this.viewer.style.top=(scroll.y+50)+"px"},_updateSizes:function(doubleCheck){var scroll=Incordia.dom.Window.getScroll();var size=Incordia.dom.Window.getSize();this.dimmer.style.width=(size.window.x+scroll.x)+"px";this.dimmer.style.height=(size.window.y+scroll.y)+"px";size=Incordia.dom.Window.getSize();this.dimmer.style.width=(size.page.x)+"px";this.dimmer.style.height=size.page.y+"px"},_adjustTo:function(size){this.viewer.style.width=Math.max(200,size.x)+"px";this.viewerImageBox.style.width=Math.max(200,size.x)+"px";this.viewerImageBox.style.height=size.y+"px";this.viewerImage.style.width=size.x+"px";this.viewerImage.style.height=size.y+"px"},_runLinkBinder:function(){this._groups={};$A(document.getElementsByTagName("a")).each(this.bindLink.bind(this));if(this.arguments.onAfterBinding)this.arguments.onAfterBinding.call(this)},bindLink:function(item){var setting=Incordia.getSetting(item.rel,this.arguments.rel);if(setting!=null){var value=Incordia.QueryString.parse(setting.value);if(value&&value.group&&item._imageviewer_skip!="1"&&value["skip-group"]!="1"){if(!this._groups[value.group])this._groups[value.group]=[];this._groups[value.group].push({href:item.href,rel:item.rel,data:value})}this.bind(item,(value||"").path,value)}},_groups:null,_postshow:function(image){var img=new Image();addEvent(img,"load",function(){var size={x:-1,y:-1};if(img.width>img.height){size.x=Math.max(this.arguments.minSize,Math.min(img.width,this.arguments.maxSize));size.y=size.x*(img.height/img.width)}else{size.y=Math.max(this.arguments.minSize,Math.min(img.height,this.arguments.maxSize));size.x=size.y*(img.width/img.height)}this._adjustTo(size);this.viewerImage.src=img.src}.bind(this));img.src=image},show:function(image,title,details){var isShowing=this.holder.style.display!="none";this._displayGroup((details||"").group,image);if(this.viewerImage.src!=image){this.viewerImage.style.display="none";if(this._preLoader)this._preLoader.onload=this._preLoader.onerror=null;this._preLoader=new Image();this._preLoader.onload=function(){this._preLoader.onload=this._preLoader.onerror=null;var size={x:-1,y:-1};size.x=this._preLoader.width;size.y=this._preLoader.height;this.viewerImage.src=this._preLoader.src;this._adjustTo(size);this.viewerImage.style.display="block"}.bind(this);this.viewerImage.src=this.arguments.preloader;if(this._imageLoader)this._imageLoader.onload=this._imageLoader.onerror=null;this._imageLoader=new Image();this.toolbarCaption.innerHTML=title||"&nbsp;";this._imageLoader.onload=this._imageLoader.onerror=function(){this._preLoader.onload=null;this._preLoader=null;this._imageLoader.onload=this._imageLoader.onerror=null;this._postshow.rbind(this,image)();this.viewerImage.style.display="block";this._updateSizes()}.bind(this);this._imageLoader.src=image}if(!isShowing){this._updateSizes();this._updateToScroll();this.toggleContainer(true)}},_preLoader:null,_imageLoader:null,_activeGroup:null,_displayGroup:function(group,active){var viewer=this;var groupUL=this.groupSelection;groupUL.innerHTML="";var items=this._groups[group];if(!group||!items)return;var pageLink=Incordia.Class.extend({text:null,href:null,rel:null,constructor:function(text,href,rel){this.text=text;this.href=href;this.rel=rel},create:function(){var isActive=(!this.href||this.href==active);var li=document.createElement("li");if(isActive){li.innerHTML=this.text}else{var link=document.createElement("a");link._imageviewer_skip="1";link.href=this.href;link.rel=this.rel;link.innerHTML=this.text;viewer.bindLink(link);li.appendChild(link)}return li},done:function(){groupUL.appendChild(this.create())}});var _activeIndex=-1;for(var i=0,mi=items.length;i<mi;++i)if(items[i].href==active){_activeIndex=i;break}if(items.length>1){var prev=new pageLink(this.arguments.prevText);if(_activeIndex>0){prev.href=items[_activeIndex-1].href;prev.rel=items[_activeIndex-1].rel}prev.done();for(var i=0,mi=items.length;i<mi;++i){new pageLink(i+1,items[i].href,items[i].rel).done()}var next=new pageLink(this.arguments.nextText);if(_activeIndex<items.length-1){next.href=items[_activeIndex+1].href;next.rel=items[_activeIndex+1].rel}next.done()}},bind:function(link,title,details){addEvent(link,"click",function(e,link,title,details){this.show(link.href,title||link.title,details);if(e.preventDefault)e.preventDefault();e.returnValue=false;return false}.bind(this,link,title,details))},toggleContainer:function(show){var list=$A(document.getElementsByTagName("select")).concat($A(document.getElementsByTagName("object")));if(show)list.each(function(em){em.__old_display=em.style.display;em.style.display="none"});else list.each(function(em){em.style.display=em.__old_display||""});this.holder.style.display=this.dimmer.style.display=show?"":"none"},global:{defaults:{alpha:0.8,rel:"imageviewer",paddingSize:10,maxSize:400,minSize:0,clickAlwaysCloses:false,onAfterBinding:null,nextText:"&gt;&gt;",prevText:"&lt;&lt;",closeText:"Close",preloader:"/media/images/preloader.gif"}}});
