LightboxOptions = Object.extend({
    overlayOpacity: 0.5,   // transparency level
    overlayDuration: 0.4   // fade speed
}, window.LightboxOptions || {});

var Lightbox = Class.create();

Lightbox.prototype = {
  // Constructor runs on completion of the DOM loading and inserts html at the 
  // bottom of the page which is used to display the shadow overlay.
  initialize: function() {    

    $('overlay').hide().observe('click', (function() { this.end(); }).bind(this));

    var th = this;
    (function(){
      var ids = 'overlay';   
      $w(ids).each(function(id){ th[id] = $(id); });
    }).defer();
  },

  start: function() {
    // stretch overlay to fill page and fade in
    var arrayPageSize = this.getPageSize();
    $('overlay').setStyle({ width: arrayPageSize[0] + 'px', height: arrayPageSize[1] + 'px' });

    new Effect.Appear($('overlay'), { duration: LightboxOptions.overlayDuration, from: 0.0, to: LightboxOptions.overlayOpacity });
  },

  end: function() {
    new Effect.Fade($('overlay'), { duration: LightboxOptions.overlayDuration,
                        afterFinish: function() { resetCorners(); } });
    $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible' });
  },

  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){ // all but Explorer Mac
      xScroll = document.body.scrollWidth;
      yScroll = document.body.scrollHeight;
    } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
      xScroll = document.body.offsetWidth;
      yScroll = document.body.offsetHeight;
    }

    var windowWidth, windowHeight;

    if (self.innerHeight) {	// all except Explorer
      if(document.documentElement.clientWidth){
        windowWidth = document.documentElement.clientWidth; 
      } else {
        windowWidth = self.innerWidth;
      }
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
      windowWidth = document.documentElement.clientWidth;
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
      windowWidth = document.body.clientWidth;
      windowHeight = document.body.clientHeight;
    }	

    // for small pages with total height less then height of the viewport
    if(yScroll < windowHeight){
      pageHeight = windowHeight;
    } else { 
      pageHeight = yScroll;
    }

    // for small pages with total width less then width of the viewport
    if(xScroll < windowWidth){	
      pageWidth = xScroll;		
    } else {
      pageWidth = windowWidth;
    }

    return [pageWidth,pageHeight];
  }
}

var dimmer;
document.observe('dom:loaded', function () { dimmer = new Lightbox(); });

var corners;
document.observe('dom:loaded', function () {
                   corners = $$('table.addrBubble td.tl', 'table.addrBubble td.tr',
                                'table.addrBubble td.bl', 'table.addrBubble td.br');
                 });

// preload images
var tl = new Image(); tl.src = "/images/addrBubble/tls.gif";
var tr = new Image(); tr.src = "/images/addrBubble/trs.gif";
var bl = new Image(); bl.src = "/images/addrBubble/bls.gif";
var br = new Image(); br.src = "/images/addrBubble/brs.gif";
