/* $Id: floatySupport.js,v 1.11 2010/04/28 12:35:11 clinton Exp $ */

var floatyCount = 0;
var ie6 = false;

Event.observe(window, 'load', function(){
  if (Prototype.Browser.IE) {
    var appVersion = navigator.appVersion;
    appVersion = parseFloat(appVersion.substr(appVersion.indexOf("MSIE")+5, 4));
    if (appVersion <= 6) {
      ie6=true;
    }
  }
});

function showFloaty(divName, onCloseCallback, relativeTo, callbacks) {
  var body = $( document.body );
  if ($('modalOverlay') == null) body.insert({
    bottom: '<div id="modalOverlay" style="display:none"></div>'
  });
  $('modalOverlay').show();
  centerOnScreen($('modalOverlay'));

jQuery(".floaty").decorateBlocks({
    cornerSize:21,
    cap:{
      top:true,
      bottom:true
    },
    shadowSize:8
  });

  $(divName).show();
  if (relativeTo == null) {
    centerOnScreen($(divName));
  } else {
    setRelativeTo(divName, relativeTo);
  }

  $(divName).style.height = 'auto';
  $(divName).style.zIndex = 1000;

  if (callbacks && Object.isFunction(callbacks.onActivate))
    callbacks.onActivate();
  if (callbacks && Object.isFunction(callbacks.onClose))
    $(divName).closeCallback = callbacks.onClose;
  if (callbacks && Object.isFunction(callbacks.onCancel))
    $(divName).onCancel = callbacks.onCancel;
  else if (onCloseCallback)
    $(divName).closeCallback = onCloseCallback;
  else
    $(divName).closeCallback = null;
  floatyCount++;
}

function setRelativeTo(element, position) {
  element = $(element); // Ensure it IS an element, not just the id of one.
  var reference = $(position.element);
  if (element == null || reference == null) return;
  
  if (Object.isUndefined(position.top) || position.top == null || isNaN(parseFloat(position.top)))
    position.top = 0; 
  if (Object.isUndefined(position.left) || position.left == null || isNaN(parseFloat(position.left)))
    position.left = 0; 
    
  var elementTop = reference.cumulativeOffset().top + position.top;
  var elementLeft = reference.cumulativeOffset().left + position.left; 
  var elementHeight = element.getHeight();
  var elementWidth = element.getWidth();
  element.absolutize();
  element.style.top = elementTop + 'px';
  element.style.left = elementLeft + 'px'; 
  element.style.height = elementHeight + 'px';
  element.style.width = elementWidth + 'px';

/*
  alert(
    "elementTop: " + elementTop + ", elementLeft: " + elementLeft +
    "\nelementHeight: " + elementHeight + ", elementWidth: " + elementWidth +
    "\noffsetTop: " + reference.cumulativeOffset().top + ", offsetLeft: " + reference.cumulativeOffset().left +
    "\nbodyHeight: " + document.body.getHeight()
    );
*/
}


function hideFloaty(divName, afterFinishCallback) {
  $(divName).hide();
  floatyCount = 0;
  $$('.floaty').each(function(el){
    if(el.visible()) floatyCount++;
  });
  floatyCount--;
  if (!afterFinishCallback && $(divName).closeCallback) afterFinishCallback = $(divName).closeCallback;
  if (floatyCount < 0) {
    /*
    Effect.Fade('modalOverlay', {
      duration: .5,
      afterFinish: afterFinishCallback
    });
    */
    $('modalOverlay') && $('modalOverlay').hide();
    if (Object.isFunction(afterFinishCallback)) afterFinishCallback();
  } else {
    if (Object.isFunction(afterFinishCallback)) afterFinishCallback();
  }
}

function centerOnScreen(element) {
  element = $(element); // Ensure it IS an element, not just the id of one.
  if (element == null) return;
  var elementHeight = element.getHeight();
  var elementWidth = element.getWidth();
  var viewportHeight = document.viewport.getHeight(); if (viewportHeight == 0) viewportHeight = window.screen.availHeight-150;
  var viewportWidth = document.viewport.getWidth(); if (viewportWidth == 0) viewportWidth = window.screen.availWidth;
  var menuWidth = 0;
    
  var elementTop = (viewportHeight - elementHeight)/ 2 + document.viewport.getScrollOffsets().top;
  var elementLeft = (viewportWidth - elementWidth)/ 2+ document.viewport.getScrollOffsets().left - menuWidth/2;
  
  if (elementTop < 0) elementTop = 100;
  if (elementLeft < 0) elementLeft = 100;
  
  element.absolutize();
  element.style.top = elementTop + 'px';
  element.style.left = elementLeft + 'px';
  element.style.height = elementHeight + 'px';
  element.style.width = elementWidth + 'px';

/*
  alert(
    "elementTop: " + elementTop + ", elementLeft: " + elementLeft +
    "\nelementHeight: " + elementHeight + ", elementWidth: " + elementWidth +
    "\nviewportHeight: " + viewportHeight + ", viewportWidth: " + viewportWidth +
    "\nviewportTop: " + document.viewport.getScrollOffsets().top + ", viewportLeft: " + document.viewport.getScrollOffsets().left +
    "\nbodyHeight: " + document.body.getHeight()
    );
*/
}  

function initialiseFloaties() {
  $$('div.floaty').each(function (el) {
    var cb = el.select('span.floatyCloseButton'); 
    if (cb.length > 0) {
      el.close = function() {
        hideFloaty(this.id);
        if (Object.isFunction(this.onCancel)) this.onCancel();
      };
      cb[0].stopObserving('click');
      Event.observe(cb[0], 'click', el.close.bindAsEventListener(el));
    }
  }); 
}

Event.observe(window, 'load', initialiseFloaties);

