/*
 *  overlay.js
 *  @date 30. października 2007, 14:13:08
 */
 
function $(id) {
  return document.getElementById(id);
}
 
var Overlay = {};

Overlay.sAbout = '<div id="js-overlay-window-footer"><p>Przeglądaj zdjęcia używając strzałek w lewo i w prawo na klawiaturze.</p><p>Zamknij okno klikając na <strong>X</strong> lub wciśnij <strong>Esc</strong>.</p></div>';
Overlay.sClose = 'X';

Overlay.init = function(oConfig) {
 if (typeof oConfig == 'object') {
     var cLinks = document.getElementsByTagName("a");
     if (cLinks.length) {
         for (var i = 0; i < cLinks.length; i++) {
              if (oConfig.sClass == cLinks[i].className) {
                  cLinks[i].onclick = function() {
                    Overlay.show(this, oConfig);
                    return false;
                  }
              }
         }
     }
 }
};

Overlay.show = function(oObject) {
  if (arguments[1]) {
      var oConfig = arguments[1];
  }
  
  if ($('js-overlay-conteiner')) {
      document.body.removeChild($('js-overlay-conteiner'));
  }
      
  if (!$('js-overlay')) {
      var oOverlay = document.createElement('div');
      oOverlay.id = 'js-overlay';
      document.body.appendChild(oOverlay);
  }
      
  var oConteiner = document.createElement('div');
  oConteiner.id = 'js-overlay-conteiner';
  oConteiner.innerHTML = '<div id="js-overlay-window-wrapper"><div id="js-overlay-window"></div></div>';
  oConteiner.style.visibility = 'hidden';
  document.body.appendChild(oConteiner);
  
  function closeWindow() {
    Overlay.close();
    return false;
  }
  
  // fixed...
  if (window.ActiveXObject) {
      document.documentElement.style.overflow = 'hidden';
      document.body.style.overflow = 'hidden';
  }      
  
  document.documentElement.style.width = '100%';
  document.documentElement.style.height = '100%';
  document.body.style.height = '100%';
  document.body.style.width = '100%';
  
  if (!$('js-overlay-window-preloader')) {
      var oPreloader = document.createElement('div');
      oPreloader.id = 'js-overlay-window-preloader';
      document.body.appendChild(oPreloader);
  }
  
  $('js-overlay-window-preloader').style.display = 'block';
  
  if (/(.jpeg|.jpg|.gif|.png|.bmp)$/.test(oObject.href)) {
      $('js-overlay-window-preloader').innerHTML = '<p>Trwa ładowanie zdjęcia...</p>';
      
      var aImages = new Array;
      if (oObject.rel != '') {
          for (var i = 0; i < document.links.length; i++) {
               if (document.links[i].className == oConfig.sClass && document.links[i].rel == oObject.rel) {
                   aImages.push(document.links[i]);
               }
          }
      } else {
          aImages.push(oObject);
      }
      
      if (aImages.length) {
          for (var i = 0; i < aImages.length; i++) {
               if (aImages[i].href == oObject.href) {
                   var iIndex = i;
                   break;
               }
          }
      }
      
      var oLoadedImage = new Image();
      
      oLoadedImage.onload = function() {
        oLoadedImage.onload = null;
        
        var sHtml = '';
        
        $('js-overlay-window').style.width = (oLoadedImage.width + 20) + "px";
        
        sHtml += '<img title="Zakmnij" id="js-overlay-gallery-img" src="' + oObject.href + '" width="' + oLoadedImage.width + '" height="' + oLoadedImage.height + '" alt="Zamknij" />';
        
        if (oObject.title != '') {
            sHtml += '<div id="js-overlay-gallery-desc">' + oObject.title + '</div>';
        }
        
        if (aImages.length > 1 && oConfig.iDuration > 0) {
            sHtml += '<div id="js-overlay-gallery-slide"><label for="run-slide">Slajdy</label> <input type="checkbox" name="run-slide" id="run-slide" value="" /></div>';
        }
        
        if (aImages.length > 1) {
            sHtml += '<div id="js-overlay-gallery-counter">Obrazek: <strong>' + (iIndex + 1) + '</strong> z ' + aImages.length + '</div>';
        }
        
        if (aImages.length > 1) {
            sHtml += '<div id="js-overlay-gallery-nav">';
            if (iIndex > 0) {
                sHtml += '<a href="#" id="js-nav-prev">&#171; Poprzednie</a>';
            }
            if (iIndex < aImages.length - 1) {
                sHtml += '<a href="#" id="js-nav-next">Następne &#187;</a>';
            }
            sHtml += '</div>';
        }
     
        if (oConfig.iThumbs > 0 && oObject.firstChild.tagName == 'IMG' && aImages.length > 1) {
            var iFactor = Math.floor(oConfig.iThumbs / 2), iFirstThumb, iLastThumb;
            
            if (iIndex <= iFactor) {
                iFirstThumb = 0;
                iLastThumb = oConfig.iThumbs - 1;
            } else {
                iFirstThumb = iIndex - iFactor;
                iLastThumb = iIndex + iFactor;
            }
   
            if (iLastThumb >= aImages.length) {
                var iStart = aImages.length - 1 - (iFactor * 2);
                iFirstThumb = iStart < 0 ? 0 : iStart;
                iLastThumb = aImages.length - 1;
            }
        
            sHtml += '<div id="js-overlay-gallery-thumbs">';
            for (var i = iFirstThumb; i <= iLastThumb; i++) {
              sHtml += '<a href="'+ aImages[i].href + '" id="js-overlay-gallery-thumb-' + i + '" class="' + aImages[i].className + '" rel="' + aImages[i].rel + '"><img src="' + aImages[i].firstChild.src + '" alt="" /></a>';
            }
            sHtml += '</div>';
            
            var bThumb = true;
        }
        
        sHtml += Overlay.sAbout;
        sHtml += '<a href="#" id="js-overlay-gallery-close" title="Zamknij">' + Overlay.sClose + '</a>';
        
        $('js-overlay-window-preloader').style.display = 'none';
        
        $('js-overlay-window').innerHTML = sHtml;
        $('js-overlay-conteiner').style.visibility = 'visible';
        
        if ($('js-nav-prev')) {
            function goPrev() {
              if (Overlay.iTimer) {
                  clearTimeout(Overlay.iTimer);
              }
              Overlay.show(aImages[iIndex - 1], oConfig);
              return false;
            }
            $('js-nav-prev').onclick = goPrev; 
        }
          
        if ($('js-nav-next')) {
            function goNext() {
              if (Overlay.iTimer) {
                  clearTimeout(Overlay.iTimer);
              }
              Overlay.show(aImages[iIndex + 1], oConfig);
              return false;
            }
            $('js-nav-next').onclick = goNext;
        }
        
        if (bThumb === true) {
            for (var i = iFirstThumb; i <= iLastThumb; i++) {
              if ($('js-overlay-gallery-thumb-' + i)) {
                  if (iIndex != i) {
                      $('js-overlay-gallery-thumb-' + i).onclick = function() {
                        Overlay.show(this, oConfig);
                        return false;
                      }
                  } else {
                      $('js-overlay-gallery-thumb-' + i).onclick = function() {
                        return false;
                      }
                  }
              }
            }
        }
        
        if ($('js-overlay-gallery-img')) {
            $('js-overlay-gallery-img').onclick = closeWindow;
        }
        
        if ($('js-overlay-gallery-close')) {
            $('js-overlay-gallery-close').onclick = closeWindow;
        }
        
        function nextSlide() {
          var iNext = iIndex == aImages.length - 1 ? 0 : iIndex + 1;
          oConfig.bSlide = true;
          Overlay.show(aImages[iNext], oConfig);
          return false;
        }
        
        if (oConfig.bRunSlideAtStart === true) {
            if ($('run-slide')) {
                $('run-slide').checked = true;
                oConfig.bRunSlideAtStart = false;
                Overlay.iTimer = setTimeout(function(){
                  nextSlide();
                }, oConfig.iDuration);
            }
        } else {
            if (oConfig.iDuration > 0) {
                if (oConfig.bSlide === true) {
                    if ($('run-slide')) {
                        $('run-slide').checked = true;
                    }
                    Overlay.iTimer = setTimeout(function(){
                      nextSlide();
                    }, oConfig.iDuration);
                }
            }
        }
        
        if ($('run-slide')) {
            $('run-slide').onclick = function() {
              if (this.checked === true) {
                  Overlay.iTimer = setTimeout(function() {
                    nextSlide();
                  }, oConfig.iDuration);
              } else {
                  clearTimeout(Overlay.iTimer);
                  oConfig.bSlide = false;
              }
            }
        }
         
        document.onkeydown = function(e) {
          if (window.event) {
              e = window.event;
          }
          
          if (e.keyCode == 27) {
              closeWindow()
          } else if (e.keyCode == 39) {
              if ($('js-nav-next')) {
                  document.onkeydown = '';
                  goNext();
              }
          } else if (e.keyCode == 37) {
              if ($('js-nav-prev')) {
                  document.onkeydown = '';
                  goPrev();
              }
          } 
        }
      }
      
      oLoadedImage.src = oObject.href;
  } else {
      var sURI = (oObject.href || oObject.action);
      var oProperties = new Object;
      
      if (sURI.indexOf("?") !== -1) {
          var aParts = sURI.split("?");
          var sBaseURI = aParts[0]; 
          oProperties = Overlay.parseQuery(aParts[1]);
      } else {
          var sBaseURI = sURI;
          oProperties = new Object;
      }
    
      if (oProperties['width']) {
          $('js-overlay-window').style.width = oProperties['width'];
      }
      if (oProperties['height']) {
          $('js-overlay-window').style.height = oProperties['height'];
      }
    
      function loadPage(sResponse) {
        sHtml += sResponse;
               
        $('js-overlay-window-preloader').style.display = 'none';
                  
        $('js-overlay-window').innerHTML = sHtml;
        $('js-overlay-conteiner').style.visibility = 'visible';
                 
        if ($('js-overlay-window-close')) {
            $('js-overlay-window-close').onclick = closeWindow;
        }
                  
        document.onkeydown = function(e) {
          if (window.event) {
              e = window.event;
          }
                   
          if (e.keyCode == 27) {
              closeWindow();
          }
        }
      }
    
      var sHtml = '<a href="#" id="js-overlay-window-close" title="Zamknij okno">' + Overlay.sClose + '</a>';
      sHtml += '<div id="js-overlay-window-title"><p>' + (oObject.title || oObject.alt || 'Okno') + '</p></div>';
        
      $('js-overlay-window-preloader').innerHTML = '<p>Trwa wczytywanie strony...</p>';
    
      if (typeof oObject == 'string') {
          setTimeout(function() {
            loadPage(oObject.toString());
          }, 450);
      } else {
         if (typeof Ajax == 'object') {
             if (oObject.tagName.toUpperCase() == 'FORM') {
                 var sPostParams = '';
                 for (var i = 0; i < oObject.elements.length; i++) {
                   if (typeof oObject.elements[i].name != 'undefined' && oObject.elements[i].name != '') {
                       if ((oObject.elements[i].type == 'checkbox' ||  oObject.elements[i].type == 'radio') && oObject.elements[i].checked != true) {
                           continue
                       } 
                       sPostParams = Ajax.addParam(sPostParams, oObject.elements[i].name, oObject.elements[i].value);
                   }
                 }
             }
             
             if (oProperties['ajax'] && oProperties['ajax'].toLowerCase() == 'post') {
                 Ajax.post(sBaseURI, sPostParams, function(sResponse) {
                   loadPage(sResponse);
                 });
             } else {
                 Ajax.get(sBaseURI, function(sResponse) {
                   loadPage(sResponse);
                 });
             }
         }
      }
  }
  
  return false;
};

Overlay.close = function() {
  if ($('js-overlay-conteiner')) {
      document.body.removeChild($('js-overlay-conteiner'));
  }
  
  if (Overlay.iTimer) {
      clearTimeout(Overlay.iTimer);
      delete Overlay.iTimer;
  }
  
  if ($('js-overlay')) {
      document.body.removeChild($('js-overlay'));
  }
  
  if ($('js-overlay-window-preloader')) {
      document.body.removeChild($('js-overlay-window-preloader'));
  }
  
  document.documentElement.removeAttribute('style');
  document.body.removeAttribute('style');
    
  document.onkeydown = '';
  
  return false;
};

Overlay.parseQuery = function(sQuery) {
  var oQueryParams = new Object;
  if (sQuery.indexOf("&")) {
      var aParams = sQuery.split("&");
      for (var i = 0; i < aParams.length; i++) {
        if (aParams[i].indexOf("=")) {
            var aValues = aParams[i].split("=");
            oQueryParams[unescape(aValues[0])] = unescape(aValues[1]);
        }
      }
  }
  return oQueryParams;
};