// ColorBox v1.3.3 - a full featured, light-weight, customizable lightbox based on jQuery 1.3
// c) 2009 Jack Moore - www.colorpowered.com - jack@colorpowered.com
// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
// JavaScript Document

(function($){
var colorbox='colorbox',
hover='hover',
TRUE=true,
FALSE=false,
cboxPublic,
isIE=!$.support.opacity,
isIE6=isIE&&!window.XMLHttpRequest,
cbox_click='click.colorbox',
cbox_open='cbox_open',
cbox_load='cbox_load',
cbox_complete='cbox_complete',
cbox_cleanup='cbox_cleanup',
cbox_closed='cbox_closed',
cbox_resize='resize.cbox_resize',
$overlay,
$cbox,
$wrap,
$content,
$topBorder,
$leftBorder,
$rightBorder,
$bottomBorder,
$related,
$window,
$loaded,
$loadingOverlay,
$loadingGraphic,
$title,
$current,
$slideshow,
$next,
$prev,
$close,
interfaceHeight,
interfaceWidth,
loadedHeight,
loadedWidth,
element,
index,
settings,
open,
active,
callback,
defaults={
transition:"elastic",
speed:350,
width:FALSE,
height:FALSE,
innerWidth:FALSE,
innerHeight:FALSE,
initialWidth:"400",
initialHeight:"400",
maxWidth:FALSE,
maxHeight:FALSE,
scalePhotos:TRUE,
scrolling:TRUE,
inline:FALSE,
html:FALSE,
iframe:FALSE,
photo:FALSE,
href:FALSE,
title:FALSE,
rel:FALSE,
opacity:0.9,
preloading:TRUE,
current:"image {current} of {total}",
previous:"previous",
next:"next",
close:"close",
open:FALSE,
overlayClose:TRUE,
slideshow:FALSE,
slideshowAuto:TRUE,
slideshowSpeed:2500,
slideshowStart:"start slideshow",
slideshowStop:"stop slideshow",
preloadIMG:TRUE
};
function setSize(size,dimension){
dimension=dimension==='x'?document.documentElement.clientWidth:document.documentElement.clientHeight;
return(typeof size==='string')?Math.round((size.match(/%/)?(dimension/100)*parseInt(size,10):parseInt(size,10))):size;
}
function isImage(url){
return settings.photo||url.match(/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i);
}
function process(){
for(var i in settings){
if(typeof(settings[i])==='function'){
settings[i]=settings[i].call(element);
}
}
}
cboxPublic=$.fn.colorbox=function(options,custom_callback){
if(this.length){
this.each(function(){
var data=$(this).data(colorbox)?$.extend({},
$(this).data(colorbox),options):$.extend({},defaults,options);
$(this).data(colorbox,data).addClass("cboxelement");
});
}else{
$(this).data(colorbox,$.extend({},defaults,options));
}
$(this).unbind(cbox_click).bind(cbox_click,function(e){
element=this;
settings=$(element).data(colorbox);
process();
callback=custom_callback||FALSE;
var rel=settings.rel||element.rel;
if(rel&&rel!=='nofollow'){
$related=$('.cboxelement').filter(function(){
var relRelated=$(this).data(colorbox).rel||this.rel;
return(relRelated===rel);
});
index=$related.index(element);
if(index<0){
$related=$related.add(element);
index=$related.length-1;
}
}else{
$related=$(element);
index=0;
}
if(!open){
open=TRUE;
active=TRUE;
$().bind("keydown.cbox_close",function(e){
if(e.keyCode===27){
e.preventDefault();
cboxPublic.close();
}
}).bind("keydown.cbox_arrows",function(e){
if(e.keyCode===37){
e.preventDefault();
$prev.click();
}else if(e.keyCode===39){
e.preventDefault();
$next.click();
}
});
if(settings.overlayClose){
$overlay.css({"cursor":"pointer"}).one('click',cboxPublic.close);
}
element.blur();
$.event.trigger(cbox_open);
$close.html(settings.close);
$overlay.css({"opacity":settings.opacity}).show();
settings.w=setSize(settings.initialWidth,'x');
settings.h=setSize(settings.initialHeight,'y');
cboxPublic.position(0);
if(isIE6){
$window.bind('resize.cboxie6 scroll.cboxie6',function(){
$overlay.css({width:$window.width(),height:$window.height(),top:$window.scrollTop(),left:$window.scrollLeft()});
}).trigger("scroll.cboxie6");
}
}
cboxPublic.slideshow();
cboxPublic.load();
e.preventDefault();
});
if(options&&options.open){
$(this).triggerHandler(cbox_click);
}
return this;
};
cboxPublic.init=function(){
function $div(id){
return $('<div id="cbox'+id+'"/>');
}
$window=$(window);
$cbox=$('<div id="colorbox"/>');
$overlay=$div("Overlay").hide();
$wrap=$div("Wrapper");
$content=$div("Content").append(
$loaded=$div("LoadedContent").css({width:0,height:0}),
$loadingOverlay=$div("LoadingOverlay"),
$loadingGraphic=$div("LoadingGraphic"),
$title=$div("Title"),
$current=$div("Current"),
$slideshow=$div("Slideshow"),
$next=$div("Next"),
$prev=$div("Previous"),
$close=$div("Close")
);
$wrap.append(
$('<div/>').append(
$div("TopLeft"),
$topBorder=$div("TopCenter"),
$div("TopRight")
),
$('<div/>').append(
$leftBorder=$div("MiddleLeft"),
$content,
$rightBorder=$div("MiddleRight")
),
$('<div/>').append(
$div("BottomLeft"),
$bottomBorder=$div("BottomCenter"),
$div("BottomRight")
)
).children().children().css({'float':'left'});
$('body').prepend($overlay,$cbox.append($wrap));
if(isIE){
$cbox.addClass('cboxIE');
if(isIE6){
$overlay.css('position','absolute');
}
}
$content.children()
.addClass(hover)
.mouseover(function(){$(this).addClass(hover);})
.mouseout(function(){$(this).removeClass(hover);})
.hide();
interfaceHeight=$topBorder.height()+$bottomBorder.height()+$content.outerHeight(TRUE)-$content.height();
interfaceWidth=$leftBorder.width()+$rightBorder.width()+$content.outerWidth(TRUE)-$content.width();
loadedHeight=$loaded.outerHeight(TRUE);
loadedWidth=$loaded.outerWidth(TRUE);
$cbox.css({"padding-bottom":interfaceHeight,"padding-right":interfaceWidth}).hide();
$next.click(cboxPublic.next);
$prev.click(cboxPublic.prev);
$close.click(cboxPublic.close);
$content.children().removeClass(hover);
};
cboxPublic.position=function(speed,loadedCallback){
var
animate_speed,
winHeight=document.documentElement.clientHeight,
posTop=Math.max(winHeight-settings.h-loadedHeight-interfaceHeight,0)/2+$window.scrollTop(),
posLeft=Math.max(document.documentElement.clientWidth-settings.w-loadedWidth-interfaceWidth,0)/2+$window.scrollLeft();
animate_speed=($cbox.width()===settings.w+loadedWidth&&$cbox.height()===settings.h+loadedHeight)?0:speed;
$wrap[0].style.width=$wrap[0].style.height="9999px";
function modalDimensions(that){
$topBorder[0].style.width=$bottomBorder[0].style.width=$content[0].style.width=that.style.width;
$loadingGraphic[0].style.height=$loadingOverlay[0].style.height=$content[0].style.height=$leftBorder[0].style.height=$rightBorder[0].style.height=that.style.height;
}
$cbox.dequeue().animate({width:settings.w+loadedWidth,height:settings.h+loadedHeight,top:posTop,left:posLeft},{duration:animate_speed,
complete:function(){
modalDimensions(this);
active=FALSE;
$wrap[0].style.width=(settings.w+loadedWidth+interfaceWidth)+"px";
$wrap[0].style.height=(settings.h+loadedHeight+interfaceHeight)+"px";
if(loadedCallback){loadedCallback();}
},
step:function(){
modalDimensions(this);
}
});
};
cboxPublic.resize=function(object){
if(!open){return;}
var topMargin,
prev,
prevSrc,
next,
nextSrc,
photo,
timeout,
speed=settings.transition==="none"?0:settings.speed;
$window.unbind(cbox_resize);
if(!object){
timeout=setTimeout(function(){
var $child=$loaded.wrapInner("<div style='overflow:auto'></div>").children();
settings.h=$child.height();
$loaded.css({height:settings.h});
$child.replaceWith($child.children());
cboxPublic.position(speed);
},1);
return;
}
$loaded.remove();
$loaded=$('<div id="cboxLoadedContent"/>').html(object);
function getWidth(){
settings.w=settings.w||$loaded.width();
return settings.w;
}
function getHeight(){
settings.h=settings.h||$loaded.height();
return settings.h;
}
$loaded.hide()
.appendTo($overlay)
.css({width:getWidth(),overflow:settings.scrolling?'auto':'hidden'})
.css({height:getHeight()})
.prependTo($content);
$('#cboxPhoto').css({cssFloat:'none'});
if(isIE6){
$('select:not(#colorbox select)').filter(function(){
return this.style.visibility!=='hidden';
}).css({'visibility':'hidden'}).one(cbox_cleanup,function(){
this.style.visibility='inherit';
});
}
function setPosition(s){
cboxPublic.position(s,function(){
if(!open){return;}
if(isIE){
if(photo){$loaded.fadeIn(100);}
$cbox[0].style.removeAttribute("filter");
}
$content.children().show();
if(settings.iframe){
$loaded.append("<iframe id='cboxIframe'"+(settings.scrolling?" ":"scrolling='no'")+" name='iframe_"+new Date().getTime()+"' frameborder=0 src='"+(settings.href||element.href)+"' />");
}
$loadingOverlay.hide();
$loadingGraphic.hide();
$slideshow.hide();
if($related.length>1){
$current.html(settings.current.replace(/\{current\}/,index+1).replace(/\{total\}/,$related.length));
$next.html(settings.next);
$prev.html(settings.previous);
if(settings.slideshow){
$slideshow.show();
}
}else{
$current.hide();
$next.hide();
$prev.hide();
}
$title.html(settings.title||element.title);
$.event.trigger(cbox_complete);
if(callback){
callback.call(element);
}
if(settings.transition==='fade'){
$cbox.fadeTo(speed,1,function(){
if(isIE){$cbox[0].style.removeAttribute("filter");}
});
}
$window.bind(cbox_resize,function(){
cboxPublic.position(0);
});
});
}
if((settings.transition==='fade'&&$cbox.fadeTo(speed,0,function(){setPosition(0);}))||setPosition(speed)){}
if(settings.preloading&&$related.length>1){
prev=index>0?$related[index-1]:$related[$related.length-1];
next=index<$related.length-1?$related[index+1]:$related[0];
nextSrc=$(next).data(colorbox).href||next.href;
prevSrc=$(prev).data(colorbox).href||prev.href;
if(isImage(nextSrc)){
$('<img />').attr('src',nextSrc);
}
if(isImage(prevSrc)){
$('<img />').attr('src',prevSrc);
}
}
};
cboxPublic.load=function(){
var href,img,setResize,resize=cboxPublic.resize;
active=TRUE;
function preload(html){
var
$ajax=$(html),
$imgs=$ajax.find('img'),
x=$imgs.length;
function loadloop(){
var img=new Image();
x=x-1;
if(x>=0&&settings.preloadIMG){
img.onload=loadloop;
img.src=$imgs[x].src;
}else{
resize($ajax);
}
}
loadloop();
}
element=$related[index];
settings=$(element).data(colorbox);
process();
$.event.trigger(cbox_load);
settings.h=settings.height?
setSize(settings.height,'y')-loadedHeight-interfaceHeight:
settings.innerHeight?
setSize(settings.innerHeight,'y'):
FALSE;
settings.w=settings.width?
setSize(settings.width,'x')-loadedWidth-interfaceWidth:
settings.innerWidth?
setSize(settings.innerWidth,'x'):
FALSE;
settings.mw=settings.w;
settings.mh=settings.h;
if(settings.maxWidth){
settings.mw=setSize(settings.maxWidth,'x')-loadedWidth-interfaceWidth;
settings.mw=settings.w&&settings.w<settings.mw?settings.w:settings.mw;
}
if(settings.maxHeight){
settings.mh=setSize(settings.maxHeight,'y')-loadedHeight-interfaceHeight;
settings.mh=settings.h&&settings.h<settings.mh?settings.h:settings.mh;
}
href=settings.href||$(element).attr("href");
$loadingOverlay.show();
$loadingGraphic.show();
$close.show();
if(settings.inline){
$('<div id="cboxInlineTemp" />').hide().insertBefore($(href)[0]).bind(cbox_load+' '+cbox_cleanup,function(){
$(this).replaceWith($loaded.children());
});
resize($(href));
}else if(settings.iframe){
resize(" ");
}else if(settings.html){
preload(settings.html);
}else if(isImage(href)){
img=new Image();
img.onload=function(){
var percent;
img.onload=null;
img.id='cboxPhoto';
$(img).css({margin:'auto',border:'none',display:'block',cssFloat:'left'});
if(settings.scalePhotos){
setResize=function(){
img.height-=img.height*percent;
img.width-=img.width*percent;
};
if(settings.mw&&img.width>settings.mw){
percent=(img.width-settings.mw)/img.width;
setResize();
}
if(settings.mh&&img.height>settings.mh){
percent=(img.height-settings.mh)/img.height;
setResize();
}
}
if(settings.h){
img.style.marginTop=Math.max(settings.h-img.height,0)/2+'px';
}
resize(img);
if($related.length>1){
$(img).css({cursor:'pointer'}).click(cboxPublic.next);
}
if(isIE){
img.style.msInterpolationMode='bicubic';
}
};
img.src=href;
}else{
$('<div />').load(href,function(data,textStatus){
if(textStatus==="success"){
preload(this);
}else{
resize($("<p>Request unsuccessful.</p>"));
}
});
}
};
cboxPublic.next=function(){
if(!active){
index=index<$related.length-1?index+1:0;
cboxPublic.load();
}
};
cboxPublic.prev=function(){
if(!active){
index=index>0?index-1:$related.length-1;
cboxPublic.load();
}
};
cboxPublic.slideshow=function(){
var stop,timeOut,className='cboxSlideshow_';
$slideshow.bind(cbox_closed,function(){
$slideshow.unbind();
clearTimeout(timeOut);
$cbox.removeClass(className+"off"+" "+className+"on");
});
function start(){
$slideshow
.text(settings.slideshowStop)
.bind(cbox_complete,function(){
timeOut=setTimeout(cboxPublic.next,settings.slideshowSpeed);
})
.bind(cbox_load,function(){
clearTimeout(timeOut);
}).one("click",function(){
stop();
$(this).removeClass(hover);
});
$cbox.removeClass(className+"off").addClass(className+"on");
}
stop=function(){
clearTimeout(timeOut);
$slideshow
.text(settings.slideshowStart)
.unbind(cbox_complete+' '+cbox_load)
.one("click",function(){
start();
timeOut=setTimeout(cboxPublic.next,settings.slideshowSpeed);
$(this).removeClass(hover);
});
$cbox.removeClass(className+"on").addClass(className+"off");
};
if(settings.slideshow&&$related.length>1){
if(settings.slideshowAuto){
start();
}else{
stop();
}
}
};
cboxPublic.close=function(){
$.event.trigger(cbox_cleanup);
open=FALSE;
$().unbind("keydown.cbox_close keydown.cbox_arrows");
$window.unbind(cbox_resize+' resize.cboxie6 scroll.cboxie6');
$overlay.css({cursor:'auto'}).fadeOut('fast');
$cbox
.stop(TRUE,FALSE)
.fadeOut('fast',function(){
$loaded.remove();
$cbox.css({'opacity':1});
$content.children().hide();
$.event.trigger(cbox_closed);
});
};
cboxPublic.element=function(){return $(element);};
cboxPublic.settings=defaults;
$(cboxPublic.init);
}(jQuery));