var movementX;
var movementY;
var optionsY;
var optionsStatus=0;
var velocity=1;
var xpad=ypad=6;
var imageWait;
var imgID=imgpID=imgnID=0;
var imgObj=[];
var imgthumbObj=[];
var imgalreadyLoaded=[];
var iCounter=0;
var boardtop=24;
var toppad=0;
var lightboxready=false;
var lbreadytest;
var objopacity;
var btype=testforBrowser();

function initLightbox(){
 //PREPARE LIGHTBOX
 var l=getObject("lightboxOuterDiv");
 var fd=document.createElement('div');
 fd.id="fadedDiv";
 l.appendChild(fd).appendChild(document.createTextNode(" "));
 
 //BOARD
 var bod=document.createElement('div');
 bod.id="boardOuterDiv";
 var bd=document.createElement('div');
 bd.id="boardDiv";
 var od=document.createElement('div');
 od.id="optionsDiv";
 l.appendChild(bod);
 bod.appendChild(bd).appendChild(document.createTextNode(" "));
 bod.appendChild(od).appendChild(document.createTextNode(" "));
 getObject("optionsDiv").innerHTML='<a href="javascript:startstopLightbox(0)" class="close">Close</a>';
 
 //LOADING
 var lod=document.createElement('div');
 lod.id="loadingOuterDiv";
 var ld=document.createElement('div');
 ld.id="loadingDiv";
 l.appendChild(lod);
 lod.appendChild(ld).appendChild(document.createTextNode(" "));
 getObject("loadingDiv").innerHTML='<img src="graphics/loading.gif" alt="Loading" title="Loading" id="loadingImg" /><a href="javascript:startstopLightbox(0)">Cancel Loading...</a>';
 
 //PREVNEXT
 var pnod=document.createElement('div');
 pnod.id="pnOuterDiv";
 var pnid=document.createElement('div');
 pnid.id="pnInnerDiv";
 var nd=document.createElement('div');
 nd.id="nextDiv";
 var pd=document.createElement('div');
 pd.id="prevDiv";
 l.appendChild(pnod);
 pnod.appendChild(pnid);
 pnid.appendChild(nd).appendChild(document.createTextNode(" "));
 pnid.appendChild(pd).appendChild(document.createTextNode(" "));
 getObject("nextDiv").innerHTML='<a href="javascript:loadLightboxImage(++imgID)">Next</a>';
 getObject("prevDiv").innerHTML='<a href="javascript:loadLightboxImage(--imgID)">Prev</a>';

 //PREVNEXT IMAGE
 var pniod=document.createElement('div');
 pniod.id="pnimageOuterDiv";
 var pniid=document.createElement('div');
 pniid.id="pnimageInnerDiv";
 var nid=document.createElement('div');
 nid.id="nextimageDiv";
 var pid=document.createElement('div');
 pid.id="previmageDiv";
 l.appendChild(pniod);
 pniod.appendChild(pniid);
 pniid.appendChild(nid).appendChild(document.createTextNode(" "));
 pniid.appendChild(pid).appendChild(document.createTextNode(" "));
 getObject("nextimageDiv").innerHTML='<a href="javascript:loadLightboxImage(++imgID)"><img src="" alt="" title="" id="nextimage" /></a>';
 getObject("previmageDiv").innerHTML='<a href="javascript:loadLightboxImage(--imgID)"><img src="" alt="" title="" id="previmage" /></a>';
  
 //CANVAS
 var cod=document.createElement('div');
 cod.id="canvasOuterDiv";
 var cd=document.createElement('div');
 cd.id="canvasDiv";
 l.appendChild(cod);
 cod.appendChild(cd).appendChild(document.createTextNode(" ")); 
 getObject("canvasDiv").innerHTML='<img src="" alt="" title="" id="canvasImg" onload="showLightboxImage()" />'; 
 
 //PREPARE LISTENERS
 var d=getObjDims("boardDiv");
 movementX=new moveObj(d.l,d.l);
 movementY=new moveObj(d.h,d.h);
 optionsY=new moveObj(d.t,d.t);
 window.setInterval(updateBoardDims, 20);
 window.setInterval(updateOptionsDims, 20);
 
 lightboxready=true;
}
function lightbox(id){
 imgID=id;
 startlightboxifready();
}
function startlightboxifready(){
 if(lbreadytest){
  clearInterval(lbreadytest);
 }
 lbreadytest=setInterval(islightboxready,20);
}
function islightboxready(){
 if(lightboxready){
  if(lbreadytest){
   clearInterval(lbreadytest);
  }
  startstopLightbox(1);
 }
}
function startstopLightbox(f){
 if(f){
  setLightboxPosition();
  loadLightboxImage(imgID);
 }else{
  hvisibleElements();
 }
 hsLightbox(f);
 hsOuterDivs(f);
 hsFaded(f);
 hsBoard(f);
}
function loadLightboxImage(id){
 hvisibleElements();
 
 id=(id<0)?imgf.length-1:((id>imgf.length-1)?0:id);
 imgID=id;
 imgpID=id-1;
 imgnID=id+1;
 imgnID=(imgnID<0)?imgf.length-1:((imgnID>imgf.length-1)?0:imgnID);
 imgpID=(imgpID<0)?imgf.length-1:((imgpID>imgf.length-1)?0:imgpID);
 if(!imgObj[imgID])imgObj[imgID]=new Image();
 imgObj[imgID].src="graphics/gallery/"+imgf[imgID]+".jpg";
 
 imgthumbObj[imgnID]=new Image();
 imgthumbObj[imgnID].src="graphics/gallery/"+imgf[imgnID]+"_thumb.jpg";
 imgthumbObj[imgpID]=new Image();
 imgthumbObj[imgpID].src="graphics/gallery/"+imgf[imgpID]+"_thumb.jpg";
 
 optionsStatus=(optionsStatus==0)?0:1;
 waitforImagetoLoad();
}
function waitforImagetoLoad(){
 if(imageWait){
  clearInterval(imageWait);
 }
 imageWait=setInterval(setImageSrc,20);
}
function setImageSrc(){
 var i=imgObj[imgID];
 if(imgLoaded(i) || imgalreadyLoaded[imgID]){
 
  //RESIZE TO IMAGE H/W
  if(imgalreadyLoaded[imgID]){
   if(imageWait){
    clearInterval(imageWait);
   }  
   optionsStatus=3;
   
   //TEST IMAGE DIMENSIONS
   if(testLightboxImageSize()){
    resizeBoard(imgw[imgID],imgh[imgID]);
   }
  }else{
   optionsStatus=2;
  }
 }else{
  imgalreadyLoaded[imgID]=false;
 
  //INITIAL SET-UP
  if(optionsStatus==0){
   optionsStatus=1;
   resizeBoard(400,400);
  }else if(optionsStatus==1){
   hsCanvas(0);
  }
 }
}
function resizeBoard(w,h){
 if(movementX.getVelocity()==0){
  movementX.setVelocity(velocity);
  movementY.setVelocity(velocity);
 }
 movementX.setTarget(w+(2*xpad));
 movementY.setTarget(h+(2*ypad));
}
function updateBoardDims(){
 with(getStyle("boardDiv")){
  width=movementX.updatePosition()+"px";
  height=movementY.updatePosition()+"px"; 
 }
 if(movementX.hasStopped() && movementY.hasStopped()){
  if(optionsStatus==1){
   if(!imgalreadyLoaded[imgID]){
    hsPrevNext(1);
    hsLoading(1);
    hsCanvas(0);
   }else{
    hsPrevNext(0);
    hsLoading(0);
   }
  }else if(optionsStatus==2 || (imgalreadyLoaded[imgID] && optionsStatus==3)){
   var i=imgObj[imgID];
   with(getStyle("canvasDiv")){
    if(imgw[imgID]!=undefined && imgh[imgID]!=undefined){
     width=imgw[imgID]+"px";
     height=imgh[imgID]+"px";
    }
   }
   with(getObject("canvasImg")){
    src=i.src;
    alt="Image: "+imgf[imgID];
    title="Image: "+imgf[imgID];
   }
  }
  if(optionsStatus==3){
   hsCanvas(1);
   hsPrevNext(1);
   hsOptions(1);
  }
 }else{
  hsPrevNext(0);
  hsLoading(0);
 }
}
function showLightboxImage(){
 imgalreadyLoaded[imgID]=true;
}

function updateOptionsDims(){
 if(optionsStatus==4){
  with(getStyle("optionsDiv")){
   display="block";
   top=optionsY.updatePosition()+"px";
  }
  if(optionsY.hasStopped()){
   optionsStatus=5;
   setLightboxPosition();
  }
 }
}
function setLightboxPosition(){
 var d=getObjDims("boardDiv");
 var bh=d.h+boardtop+getObject("optionsDiv").offsetHeight;
 var wh=docProperties.windowHeight();
 var oldp=getStyle("boardOuterDiv").position;
 if(wh>bh){
  var newp=(btype.isIE && !btype.isIE7)?"absolute":"fixed";
 }else{
  var newp="absolute";
 }
 if(oldp!=newp){
  toppad=boardtop+((newp=="absolute")?docProperties.scrollTop():0);
  for(var n in a=["fadedDiv", "boardOuterDiv", "loadingOuterDiv", "canvasOuterDiv", "pnOuterDiv", "pnimageOuterDiv"]){
   getStyle(a[n]).position=newp;
  }
 
  //SET LAYOUT VALUES
  getStyle("boardDiv").top=toppad+"px";
  getStyle("optionsDiv").top=toppad+"px";
  getStyle("loadingDiv").top=(toppad+xpad)+"px";
  getStyle("canvasDiv").top=(toppad+xpad)+"px";
  getStyle("pnInnerDiv").top=(toppad+xpad+30)+"px";
  getStyle("pnimageInnerDiv").top=(toppad+xpad+140)+"px";
 }
}
function testLightboxImageSize(){
 var iw=imgw[imgID];
 var sw=docProperties.screenAvailWidth();
 var m=Math.round(0.9*sw);
 
 if(iw==0 || iw==undefined){
  return false;
 }else{
  if(iw>m){
   var ar=imgh[imgID]/iw;
   imgw[imgID]=m;
   imgh[imgID]=Math.round(m*ar);
  }
  return true;
 }
}
function winstatus(){
 window.status=optionsStatus+", "+imgalreadyLoaded[imgID];
}







//-------------SHOW HIDE LAYERS
function fadeinout(n,f){
 var o=getStyle(n);
 //if(f){
  if(typeof(o.opacity)=="string"){
   o.opacity=0;
   o.MozOpacity=0;
  }else{
   getStyle(n).filter="alpha(opacity=0)";
  }
  o.display="block";
 //}
 if(objopacity){
  clearInterval(objopacity);
 }
 objopacity=setInterval("updateOpacity('"+n+"',"+f+")",20);
 if(!f){
  o.display="none";
 } 
}
function updateOpacity(n,f){
 var v=(document.all)?getObject(n).filters.alpha.opacity:getStyle(n).opacity*100;
 var i=((f)?5:-5);
 setOpacity(n,f,v,i);

 if((f && (v+i)>=100) || (!f && (v+i)<=0)){
  if(objopacity){
   clearInterval(objopacity);
  }
 }
}
function setOpacity(n,f,v,i){
 var o=getStyle(n);
 //if(f){
  if(typeof(o.opacity)=="string"){
   o.opacity=(v+i)/100;
   o.MozOpacity=(v+i)/100;
  }else{
   getStyle(n).filter="alpha(opacity="+(v+i)+")";
  }
  o.display="block";
 //}
}
function hsLightbox(f){
 var o=getStyle("lightboxOuterDiv");
 if(checkDisplay(o,f))o.display=(f)?"block":"none";
}
function hsFaded(f){
 var o=getStyle("fadedDiv");
 if(f){
  o.height=(docProperties.pageHeight()-1)+"px";
  if(checkDisplay(o,f))o.display="block";
 }else{
  if(checkDisplay(o,f))o.display="none";
 }
}
function hsBoard(f){
 var o=getStyle("boardDiv");
 if(checkDisplay(o,f))o.display=(f)?"block":"none";
}
function hsLoading(f){
 var o=getStyle("loadingDiv");
 if(f){
  var d=getObjDims("boardDiv");
  o.width=(d.w-(2*xpad))+"px";
  o.height=(d.h-(2*xpad))+"px";  
  if(checkDisplay(o,f))o.display="block";
 }else{
  if(checkDisplay(o,f))o.display="none";
 }
}
function hsCanvas(f){
 fadeinout("canvasDiv",f);
}
function hsPrevNext(f){
 var o=getStyle("pnInnerDiv");
 var p=getStyle("pnimageInnerDiv");
 if(f){
  var d=getObjDims("boardDiv");
  o.width=d.w+"px";
  var nw=imgthumbObj[imgnID].width;
  var pw=imgthumbObj[imgpID].width;
  var iw=Math.max(nw,pw);
  p.width=(d.w+(2*(40+iw)))+"px";
  
  getObject("nextimage").src=imgthumbObj[imgnID].src;
  getObject("previmage").src=imgthumbObj[imgpID].src;
  getStyle("previmage").display=((imgpID!=imgnID) || (imgpID==imgnID && imgpID<imgID))?"block":"none";
  getStyle("nextimage").display=((imgpID!=imgnID) || (imgpID==imgnID && imgnID>imgID))?"block":"none";  
  getStyle("nextimageDiv").width=iw+"px";
  getStyle("previmageDiv").width=iw+"px";

  if(checkDisplay(o,f))o.display="block";
  if(checkDisplay(p,f))p.display="block";
 }else{
  if(checkDisplay(o,f))o.display="none";
  if(checkDisplay(p,f))p.display="none";
 }
}
function hsimagePrevNext(f){
 var o=getStyle("pnimageInnerDiv");
 if(f){
  var d=getObjDims("boardDiv");
  o.width=d.w+"px";
  if(checkDisplay(o,f))o.display="block";
 }else{
  if(checkDisplay(o,f))o.display="none";
 }
}
function hsOptions(f){
 var o=getStyle("optionsDiv");
 if(f){
  if(optionsY.getVelocity()==0){
   optionsY.setVelocity(velocity);
  }
  hsOptions(0);
  var d=getObjDims("boardDiv");
  o.width=d.w+"px";
  optionsY.setPosition(toppad-d.h);
  optionsY.setTarget(toppad);
  optionsStatus=4;
 }else{
  if(checkDisplay(o,f))o.display="none";
 }
}
function hsOuterDivs(f){
 var bn=(f)?"block":"none";
 if(checkDisplay(getStyle("boardOuterDiv"),f)){
  for(var n in a=["boardOuterDiv", "loadingOuterDiv", "canvasOuterDiv", "pnOuterDiv", "pnimageOuterDiv"]){
   getStyle(a[n]).display=bn;
  }
 }
}
function hvisibleElements(){
 hsOptions(0);
 hsPrevNext(0);
 hsLoading(0);
 hsCanvas(0);
}
function getDisplay(o){
 return (o)?"":o.display;
}
function checkDisplay(o,f){
 if(o){
  var bn=getDisplay(o);
  return ((f && bn!="block") || (!f && bn!="none"));
 }else{
  return false;
 }
}
