/**
 * jQuery Lightbox @author Warren Krewenki
 * Version 0.5 - 11/29/2007
 **/

(function($){
var opts
$.fn.lightbox=function(options){
opts=$.extend({},$.fn.lightbox.defaults,options)
$.fn.lightbox.initialize()
return this.each(function(){
$(this).click(function(){
$(this).lightbox.start(this)
return false
})
})}
$.fn.lightbox.initialize=function(){
$('#overlay').remove()
$('#lightbox').remove()
opts.inprogress=false
var outerImage='<div id="outerImageContainer"><div id="imageContainer"><img id="lightboxImage"><div id="hoverNav"><a href="javascript://" title="'+opts.strings.prevLinkTitle+'" id="prevLink"></a><a href="javascript://" id="nextLink" title="'+opts.strings.nextLinkTitle+'"></a></div><div id="loading"><a href="javascript://" id="loadingLink"><img src="'+opts.fileLoadingImage+'"></a></div></div></div>'
var imageData='<div id="imageDataContainer" class="clearfix"><div id="imageData"><div id="imageDetails"><span id="caption"></span><span id="numberDisplay"></span></div><div id="bottomNav">'
if(opts.displayHelp)
imageData+='<span id="helpDisplay">'+opts.strings.help+'</span>'
imageData+='<a href="javascript://" id="bottomNavClose" title="'+opts.strings.closeTitle+'"><img src="'+opts.fileBottomNavCloseImage+'"></a></div></div></div>'
var string
if(opts.navbarOnTop){
string='<div id="overlay"></div><div id="lightbox">'+imageData+outerImage+'</div>'
$("body").append(string)
$("#imageDataContainer").addClass('ontop')
}else{
string='<div id="overlay"></div><div id="lightbox">'+outerImage+imageData+'</div>'
$("body").append(string)}
$("#overlay").click(function(){$.fn.lightbox.end();}).hide()
$("#lightbox").click(function(){$.fn.lightbox.end();}).hide()
$("#loadingLink").click(function(){$.fn.lightbox.end();return false;})
$("#bottomNavClose").click(function(){$.fn.lightbox.end();return false;})
$('#outerImageContainer').width(opts.widthCurrent).height(opts.heightCurrent)
$('#imageDataContainer').width(opts.widthCurrent)}
$.fn.lightbox.getPageSize=function(){
var xScroll,yScroll
if(window.innerHeight&&window.scrollMaxY){
xScroll=window.innerWidth+window.scrollMaxX
yScroll=window.innerHeight+window.scrollMaxY
}else if(document.body.scrollHeight>document.body.offsetHeight){
xScroll=document.body.scrollWidth
yScroll=document.body.scrollHeight
}else{
xScroll=document.body.offsetWidth
yScroll=document.body.offsetHeight}
var windowWidth,windowHeight
if(self.innerHeight){
if(document.documentElement.clientWidth){
windowWidth=document.documentElement.clientWidth
}else{
windowWidth=self.innerWidth}
windowHeight=self.innerHeight
}else if(document.documentElement&&document.documentElement.clientHeight){
windowWidth=document.documentElement.clientWidth
windowHeight=document.documentElement.clientHeight
}else if(document.body){
windowWidth=document.body.clientWidth
windowHeight=document.body.clientHeight}
if(yScroll<windowHeight){
pageHeight=windowHeight
}else{
pageHeight=yScroll}
if(xScroll<windowWidth){
pageWidth=xScroll
}else{
pageWidth=windowWidth}
var arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight)
return arrayPageSize}
$.fn.lightbox.getPageScroll=function(){
var xScroll,yScroll
if(self.pageYOffset){
yScroll=self.pageYOffset
xScroll=self.pageXOffset
}else if(document.documentElement&&document.documentElement.scrollTop){
yScroll=document.documentElement.scrollTop
xScroll=document.documentElement.scrollLeft
}else if(document.body){
yScroll=document.body.scrollTop
xScroll=document.body.scrollLeft}
var arrayPageScroll=new Array(xScroll,yScroll)
return arrayPageScroll}
$.fn.lightbox.pause=function(ms){
var date=new Date()
var curDate=null
do{curDate=new Date();}
while(curDate-date<ms)}
$.fn.lightbox.start=function(imageLink){
$("select, embed, object").hide()
var arrayPageSize=$.fn.lightbox.getPageSize()
$("#overlay").hide().css({width: '100%',height: arrayPageSize[1]+'px',opacity : opts.overlayOpacity}).fadeIn()
opts.imageArray=[]
imageNum=0
var anchors=document.getElementsByTagName(imageLink.tagName)
if(!imageLink.rel ||(imageLink.rel=='')){
opts.imageArray.push(new Array(imageLink.href,opts.displayTitle ? imageLink.title : ''))
}else{
$("a").each(function(){
if(this.href&&(this.rel==imageLink.rel)){
opts.imageArray.push(new Array(this.href,opts.displayTitle ? this.title : ''))}
})
for(i=0;i<opts.imageArray.length;i++){
for(j=opts.imageArray.length-1;j>i;j--){
if(opts.imageArray[i][0]==opts.imageArray[j][0]){
opts.imageArray.splice(j,1)}}}
while(opts.imageArray[imageNum][0] !=imageLink.href){imageNum++;}}
var arrayPageScroll=$.fn.lightbox.getPageScroll()
var lightboxTop=arrayPageScroll[1]+(arrayPageSize[3]/10)
var lightboxLeft=arrayPageScroll[0]
$('#lightbox').css({top: lightboxTop+'px',left: lightboxLeft+'px'}).show()
if(!opts.slideNavBar)
$('#imageData').hide()
$.fn.lightbox.changeImage(imageNum)}
$.fn.lightbox.changeImage=function(imageNum){
if(opts.inprogress==false){
opts.inprogress=true
opts.activeImage=imageNum
$('#loading').show()
$('#lightboxImage').hide()
$('#hoverNav').hide()
$('#prevLink').hide()
$('#nextLink').hide()
if(opts.slideNavBar){
$('#imageDataContainer').hide()
$('#imageData').hide()
$.fn.doChangeImage()
}else{
$.fn.doChangeImage()}}}
$.fn.doChangeImage=function(){
imgPreloader=new Image()
imgPreloader.onload=function(){
var newWidth=imgPreloader.width
var newHeight=imgPreloader.height
if(opts.fitToScreen){
var arrayPageSize=$.fn.lightbox.getPageSize()
var ratio
var initialPageWidth=arrayPageSize[2]-2*opts.borderSize
var initialPageHeight=arrayPageSize[3]-200
if(imgPreloader.height>initialPageHeight){
newWidth=parseInt((initialPageHeight/imgPreloader.height)*imgPreloader.width)
newHeight=initialPageHeight}
else if(imgPreloader.width>initialPageWidth){
newHeight=parseInt((initialPageWidth/imgPreloader.width)*imgPreloader.height)
newWidth=initialPageWidth}}
$('#lightboxImage').attr('src',opts.imageArray[opts.activeImage][0])
.width(newWidth).height(newHeight)
$.fn.lightbox.resizeImageContainer(newWidth,newHeight)}
imgPreloader.src=opts.imageArray[opts.activeImage][0]}
$.fn.lightbox.end=function(){
$.fn.lightbox.disableKeyboardNav()
$('#lightbox').hide()
$('#overlay').fadeOut()
$('select, object, embed').show()}
$.fn.lightbox.preloadNeighborImages=function(){
if((opts.imageArray.length-1)>opts.activeImage){
preloadNextImage=new Image()
preloadNextImage.src=opts.imageArray[opts.activeImage+1][0]}
if(opts.activeImage>0){
preloadPrevImage=new Image()
preloadPrevImage.src=opts.imageArray[opts.activeImage-1][0]}}
$.fn.lightbox.keyboardAction=function(e){
if(e==null){
var keycode=event.keyCode
var escapeKey=27
}else{
var keycode=e.keyCode
var escapeKey=e.DOM_VK_ESCAPE}
var key=String.fromCharCode(keycode).toLowerCase()
if((key=='x')||(key=='o')||(key=='c')||(keycode==escapeKey)){
$.fn.lightbox.end()
}else if((key=='p')||(keycode==37)){
if(opts.activeImage !=0){
$.fn.lightbox.disableKeyboardNav()
$.fn.lightbox.changeImage(opts.activeImage-1)}
}else if((key=='n')||(keycode==39)){
if(opts.activeImage !=(opts.imageArray.length-1)){
$.fn.lightbox.disableKeyboardNav()
$.fn.lightbox.changeImage(opts.activeImage+1)}}}
$.fn.lightbox.resizeImageContainer=function(imgWidth,imgHeight){
opts.widthCurrent=document.getElementById('outerImageContainer').offsetWidth
opts.heightCurrent=document.getElementById('outerImageContainer').offsetHeight
var widthNew=(imgWidth+(opts.borderSize*2))
var heightNew=(imgHeight+(opts.borderSize*2))
opts.xScale=(widthNew/opts.widthCurrent)*100
opts.yScale=(heightNew/opts.heightCurrent)*100
wDiff=opts.widthCurrent-widthNew
hDiff=opts.heightCurrent-heightNew
$('#imageDataContainer').animate({width: widthNew},opts.resizeSpeed,'linear')
$('#outerImageContainer').animate({width: widthNew},opts.resizeSpeed,'linear',function(){
$('#outerImageContainer').animate({height: heightNew},opts.resizeSpeed,'linear',function(){
$.fn.lightbox.showImage()
})
})
if((hDiff==0)&&(wDiff==0)){
if(jQuery.browser.msie){$.fn.lightbox.pause(250);}else{$.fn.lightbox.pause(100);}}
$('#prevLink').height(imgHeight)
$('#nextLink').height(imgHeight)}
$.fn.lightbox.showImage=function(){
$('#loading').hide()
$('#lightboxImage').fadeIn("fast")
$.fn.lightbox.updateDetails()
$.fn.lightbox.preloadNeighborImages()
opts.inprogress=false}
$.fn.lightbox.updateDetails=function(){
if(opts.imageArray[opts.activeImage][1]){
$('#caption').html(opts.imageArray[opts.activeImage][1]).show()}
if(opts.imageArray.length>1){
var nav_html
nav_html=opts.strings.image+(opts.activeImage+1)+opts.strings.of+opts.imageArray.length
if((opts.activeImage)>0){
nav_html='<a title="'+opts.strings.prevLinkTitle+'" href="#" id="prevLinkText">'+opts.strings.prevLinkText+"</a>"+nav_html}
if((opts.activeImage+1)<opts.imageArray.length){
nav_html+='<a title="'+opts.strings.nextLinkTitle+'" href="#" id="nextLinkText">'+opts.strings.nextLinkText+"</a>"}
$('#numberDisplay').html(nav_html).show()}
if(opts.slideNavBar){
$("#imageData").slideDown(opts.navBarSlideSpeed)
}else{
$("#imageData").show()}
var arrayPageSize=$.fn.lightbox.getPageSize()
$('#overlay').height(arrayPageSize[1])
$.fn.lightbox.updateNav()}
$.fn.lightbox.updateNav=function(){
$('#hoverNav').show()
if(opts.activeImage !=0){
$('#prevLink,#prevLinkText').show().click(function(){
$.fn.lightbox.changeImage(opts.activeImage-1);return false
})}
if(opts.activeImage !=(opts.imageArray.length-1)){
$('#nextLink,#nextLinkText').show().click(function(){
$.fn.lightbox.changeImage(opts.activeImage+1);return false
})}
$.fn.lightbox.enableKeyboardNav()}
$.fn.lightbox.enableKeyboardNav=function(){
document.onkeydown=$.fn.lightbox.keyboardAction}
$.fn.lightbox.disableKeyboardNav=function(){
document.onkeydown=''}
$.fn.lightbox.defaults={
fileLoadingImage : 'images/lightbox/loading.gif',
fileBottomNavCloseImage : 'images/lightbox/closelabel.gif',
overlayOpacity : 0.8,
borderSize : 10,
imageArray : new Array,
activeImage : null,
inprogress : false,
resizeSpeed : 350,
widthCurrent: 250,
heightCurrent: 250,
xScale : 1,
yScale : 1,
displayTitle: true,
navbarOnTop: false,
slideNavBar: false,
navBarSlideSpeed: 350,
displayHelp: false,
strings :{
help: ' \u2190 / P - previous image\u00a0\u00a0\u00a0\u00a0\u2192 / N - next image\u00a0\u00a0\u00a0\u00a0ESC / X - close image gallery',
prevLinkTitle: 'previous image',
nextLinkTitle: 'next image',
prevLinkText: '&laquo; Previous',
nextLinkText: 'Next &raquo;',
closeTitle: 'close image gallery',
image: 'Image ',
of: ' of '
},
fitToScreen: false}
})(jQuery)
