// namespace object for gg modal overlay functions
var modallayer = new Object();

//basic vars to customize
modallayer.options = {
  'layerBgColor'        : '#FFF',
  'layerOpacity'        : 0.4,
  'layerFadingDuration' : 600,
  'layerDefaultAnchor'  : 'page'
};

/**
 * updates size and position of modal container
 */
modallayer.positionModalContainer = function (anchorDivId, show, lopacity) {
  if (!lopacity){
    lopacity = modallayer.options['layerOpacity'];
  }
  
  if(anchorDivId && (show || $('PageOverlay').getStyle('display') == 'block')){
 
    var h = window.getScrollHeight() + 'px'; 
    var w = window.getScrollWidth() + 'px'; 
    var opacity = 0.0;

    if(!$('PageOverlay').hasClass('hideout'))
      opacity = lopacity;

    $('PageOverlay').setStyles({width: w, top: '0px', height: h, opacity: opacity, 'background-color': modallayer.options['layerBgColor']}); 
    if(window.ie6)
      $('PageOverlayFrame').setStyles({width: w, top: '0px', height: h, opacity: 0.1});
    else
      $('PageOverlayFrame').setStyles({width: w, top: '0px', height: h, opacity: 0.0});

    //content layer is positioned directly on top of the page div
    var anchorDiv =  (anchorDivId) ? $(anchorDivId) : $('page');
    var contentDiv = $('PageOverlayContent');
    if($('PageOverlay').hasClass('hideout')){
    $('PageOverlayContent').setStyles({opacity: 0.0});
      $('PageOverlay').removeClass('hideout');
      $('PageOverlayFrame').removeClass('hideout');
      $('PageOverlayFrame').setStyle('visibility', 'visible');
      $('PageOverlayContent').removeClass('hideout');

      new Fx.Tween($('PageOverlay'), {
        property  : 'opacity',
        duration  : modallayer.options['layerFadingDuration'],
        onStart   : function () {
          new Fx.Tween($('PageOverlayContent'), {property : 'opacity', duration: modallayer.options['layerFadingDuration']}).start(1.0);
        }}
      ).start(lopacity);
    }
    
    var left = anchorDiv.getLeft() + (anchorDiv.getSize().x - contentDiv.getSize().x) / 2;
    var top = anchorDiv.getTop() + (anchorDiv.getSize().y - contentDiv.getSize().y) / 2;
    top = (top < 0) ? 0 : top;
    $('PageOverlayContent').setStyles({top: top + 'px', left: left + 'px'});
  }
  else{
    new Fx.Tween($('PageOverlay'), {
      property  : 'opacity',
      duration  : modallayer.options['layerFadingDuration'],
      onStart   : function () {
                    new Fx.Tween($('PageOverlayContent'), {property : 'opacity', duration: modallayer.options['layerFadingDuration']}).start(0.0);
                  },
      onComplete: function () {
                    $('PageOverlay').addClass('hideout');
                    $('PageOverlayFrame').addClass('hideout');
                    $('PageOverlayContent').addClass('hideout');
                    $('PageOverlay').setStyles({opacity: 0.0, 'background-color': modallayer.options['layerBgColor']});
                  }}
    ).start(0.0);
  }
}

/**
 * opens a modal layer using a given url
 */
modallayer.open = function (layerURL, anchorDivId, lopacity, positionOnResize) {
  if(!anchorDivId)
    anchorDivId = modallayer.options['layerDefaultAnchor'];
  
  var mbAjax = new Request.HTML({
    url        : layerURL,
    method     : 'get',
    onRequest  : function () {
                  //$('PageOverlayContent').set('html', '<div style="background-color:red;"></div>');
                  //modallayer.positionModalContainer(anchorDivId, true);
                 },
    evalScripts: true,
    onComplete : function () {
                   modallayer.positionModalContainer(anchorDivId, true, lopacity);
                   //$('PageOverlayContent').scrollIntoView(true);
                   //alert('ready');
                   //alert($('PageOverlayContent').get('html'));
                 },
    update     : $('PageOverlayContent')
  }).send();

  if(positionOnResize || positionOnResize == null)
    window.addEvent('resize', modallayer.positionModalContainer.bind(this, anchorDivId));
};

modallayer.show = function(layerContent, anchorDivId, lopacity, positionOnResize){
  $('PageOverlayContent').set('html', layerContent);
  modallayer.positionModalContainer(anchorDivId, true, lopacity);

  if(positionOnResize || positionOnResize == null)
    window.addEvent('resize', modallayer.positionModalContainer.bind(this, anchorDivId));
}

/**
 * opens a modal layer using a given form
 */
modallayer.openForm = function (formId, anchorDivId, validator) {
  if(!anchorDivId)
    anchorDivId = modallayer.options['layerDefaultAnchor'];
  $(formId).addEvent('submit', function(e) {
      new Event(e).stop();
      if(!validator || (validator && validator.validate(true))) {
        this.send({
          evalScripts: true,
          update: $('PageOverlayContent'),
          onRequest  : function () {
            //$('PageOverlayContent').set('html', '<div style="background-color:red;width:200px;height:100px;"></div>');
            //modallayer.positionModalContainer(anchorDivId, true);
          },
          onComplete: function() {
            modallayer.positionModalContainer(anchorDivId, true);
            window.addEvent('resize', modallayer.positionModalContainer.bind(this, anchorDivId));
            $('PageOverlayContent').scrollIntoView(true);
          }
        });
      }
  });
};


/**
 * close a modal layer using a given identifier
 */
modallayer.close = function () {
  modallayer.positionModalContainer(null, false);
  $('page').removeClass('dont_print');
};

