//todo:
// ! fix IE bug that remember last used url in an iframe despite F5.
// ? fix Safari issue that calculates BODY with differenly and causes scrollbars with the opacity sheet.

var RemOverlay = new Object();

/// Defaults
RemOverlay.settings = new Map({
   opacity:0.6,
   boxwidth:0,
   boxheight:0,
   speed:600,
   top:100,
   width:500,
   height:500,
   type:'url',
   immediate:false,

   ////////////
   onfinishanimation:null
});
RemOverlay.activesettings = new Map();
RemOverlay.customsettings = new Map();

RemOverlay.jContent = null;
RemOverlay.jSheet = null;
RemOverlay.jClose = null;

RemOverlay.init = function (mapSettings) {
   if (!mapSettings) {
      mapSettings = new Map();
   }

   //apply immediate settings
   RemOverlay.customsettings = mapSettings;

   jQuery(document).ready(RemOverlay.main);
}

RemOverlay.main = function () {
   var overlayHtml = '';

   overlayHtml += '<div class="removerlay">';
   overlayHtml += '<div class="overlay"></div>';
   overlayHtml += '<div class="overlay_content">';
   overlayHtml += '<a href="" class="overlay_close"><img src="'+ Globals.webRoot +'resources/images/kngu/removerlay/close.png" class="overlay_close_img" /></a>';
   overlayHtml += '</div>';
   overlayHtml += '</div>';

   overlayDom = jQuery(overlayHtml);

   jQuery('body').append(overlayDom);

   RemOverlay.jContent = jQuery('.removerlay .overlay_content');
   RemOverlay.jSheet = jQuery('.removerlay .overlay');
   RemOverlay.jClose = jQuery('.removerlay .overlay_close');

   RemOverlay.applySettings(RemOverlay.customsettings);

   //grab marked links form document
   jQuery('a[rel=overlay]').click(function () {
      //apply link-specific settings

      var linkSettings = RemOverlay.getLinkSettings(this.getAttribute('options'));
      if (!RemOverlay.settings.url) {
         linkSettings.url = this.href;
      }

      RemOverlay.applySettings(linkSettings);
      RemOverlay.show();
      return false;
   });

   //Set extra events
   RemOverlay.jSheet.click(function () {
      RemOverlay.hide();
   });
   RemOverlay.jClose.click(function () {
      RemOverlay.hide();
	  return false;
   });

   if (RemOverlay.activesettings.immediate === true) {
      RemOverlay.show();
   }
}

//Copies defaults and provided settings into a temporary map, so that different link settings on a page behave consistently
//otherwise, links may append each other's settings, and produce different boxes depending on click order ( :D ).
RemOverlay.applySettings = function (mapSettings) {
   for (var key in RemOverlay.settings) {
      RemOverlay.activesettings[key] = RemOverlay.settings[key];
   }

   for (var key in mapSettings) {
      RemOverlay.activesettings[key] = mapSettings[key];
   }

   //expand boxwidth with padding and border, to correct animation positions.
   RemOverlay.activesettings.boxwidth = (parseInt(RemOverlay.activesettings.width) || 0)
      + getStyleValue(RemOverlay.jContent.get(0), 'padding-left', NOUNIT)
      + getStyleValue(RemOverlay.jContent.get(0), 'padding-right', NOUNIT)
      + getStyleValue(RemOverlay.jContent.get(0), 'border-left-width', NOUNIT)
      + getStyleValue(RemOverlay.jContent.get(0), 'border-right-width', NOUNIT);

   RemOverlay.activesettings.boxheight = (parseInt(RemOverlay.activesettings.height) || 0)
      + getStyleValue(RemOverlay.jContent.get(0), 'padding-top', NOUNIT)
      + getStyleValue(RemOverlay.jContent.get(0), 'padding-bottom', NOUNIT)
      + getStyleValue(RemOverlay.jContent.get(0), 'border-top-width', NOUNIT)
      + getStyleValue(RemOverlay.jContent.get(0), 'border-bottom-width', NOUNIT);
}
RemOverlay.getLinkSettings = function (strSettings) {
   var arrSettingCombos = strSettings.split(';');
   var mapSettings = {}, _setting;

   for (var i=0; i < arrSettingCombos.length; i++) {
      _setting = arrSettingCombos[i].split(':');
      mapSettings[ _setting[0] ] = (parseInt(_setting[1], 10) || _setting[1]);
   }

   return mapSettings;
}


RemOverlay.show = function () {
   if ( /MSIE/.test(navigator.userAgent) ){
      jQuery('embed').css('display', 'none');
      jQuery('object').css('display', 'none');
   }

   var body = jQuery('body');
   var winSize = new Map({
      x: body.width(),
      y: body.height()
   });
   var scrollHeight = measure('scroll').y;

   /// 1. Display document coversheet
   RemOverlay.jSheet
   .css({
      width: winSize.x,
      height: winSize.y,
      display: 'block',
      opacity:0
   })
   .animate({
      opacity: RemOverlay.activesettings.opacity
   }, RemOverlay.activesettings.speed, 'swing', function () {
   /// 2. Display popup-contentcontainer
      RemOverlay.jContent
      .css({
         width: 0,
         height: 0,
         display: 'block',
         opacity:0,
         top:RemOverlay.activesettings.top + RemOverlay.activesettings.boxheight/2 + scrollHeight,
         left: winSize.x/2 - RemOverlay.activesettings.boxwidth/2 + RemOverlay.activesettings.width/2
      })
      .animate({
         width: RemOverlay.activesettings.width,
         height: RemOverlay.activesettings.height,
         opacity:2,
         top:RemOverlay.activesettings.top + scrollHeight,
         left:winSize.x/2 - RemOverlay.activesettings.boxwidth/2
      }, RemOverlay.activesettings.speed, 'swing', function () {
   /// 3. Display content
         switch (RemOverlay.activesettings.type) {
            case 'url':   RemOverlay.loadUrl(RemOverlay.activesettings.url); break;
            case 'image': console.log('IMAGE CONTENT'); break;
         }

         if (typeof RemOverlay.activesettings.onfinishanimation == 'function') {
            RemOverlay.activesettings.onfinishanimation();
         }
      });
   });
}

RemOverlay.hide = function () {
   if ( /MSIE/.test(navigator.userAgent) ){
      jQuery('embed').css('display', 'block');
      jQuery('object').css('display', 'block');
   }

   RemOverlay.jContent.animate({
      opacity: 0
   }, RemOverlay.activesettings.speed/2, 'swing', function () {
      RemOverlay.jContent.hide();
      jQuery('iframe', RemOverlay.jContent).hide();
   });

   RemOverlay.jSheet.animate({
      opacity:0
   }, RemOverlay.activesettings.speed/2, 'swing', function () {
      RemOverlay.jSheet.hide();
   });
}


RemOverlay.loadUrl = function (strUrl) {
   var iFrame = jQuery('iframe', RemOverlay.jContent).get(0);

   if (!iFrame) {
      iFrame = document.createElement('IFRAME');
      iFrame.className = 'overlay_frame';
      iFrame.setAttribute('frameBorder','no');
      iFrame.src = '';
   }

   iFrame.width = RemOverlay.activesettings.width;
   iFrame.height = RemOverlay.activesettings.height;
   iFrame.src = strUrl;
   //iFrame.scrolling = '';

   RemOverlay.jContent.append(iFrame);

   jQuery(iFrame).show();
}
