/*
 *  ssobject.js - SlideShowObject
 *  Generuje efektowny pokaz zdjec na stronie.
 *  Posiada dwa tryby pracy: 
 *    1. random (losowa kolejnosc zdjec)
 *    2. sequnce (zachowana zostaje pierwotna kolejnosc zdjec);
 */
 
ssobject = (function(){
  
  var fade = function(img, conteiner){
    if (img) {
      /* Pobiera aktualny stan przezroczystosci obiektu */
      if (window.attachEvent && !browser.opera) {
        var opacity = parseInt(img.style.filter.slice(14, 17)); // IE 6
      } else {
        var opacity = img.style.opacity * 100;
      }
      
      /* Jesli przezroczystosc jest mniejsza od 100,
         nastepuje jej stopniowe zwiekszanie o 1, poki warunek jest spelniony */
      if (opacity < 100) {
        if (window.attachEvent && !browser.opera) {
          img.style.filter = 'Alpha(Opacity='+(opacity += 5)+')';
        } else {
          img.style.opacity = parseFloat((opacity / 100) + 0.05); 
        }
        
        /* Kontynuacja zmiany przezroczytsoci */
        setTimeout(function(){
          fade(img, conteiner);
        }, 1);
      } else {
        /* Usuwa poprzednie zdjecie z dokumentu - dla zachowania wydajnosci pamieci*/
        if (conteiner.childNodes) {
          if (conteiner.lastChild.previousSibling.tagName == 'IMG') {
            /* Usuwa tylko obrazki */
            conteiner.removeChild(conteiner.lastChild.previousSibling);
          }
        }
      }
    }
  };
  
  var next = function(options, current){
    if (options.conteiner != '') {
      /* Pojemnik, w ktorym będzie wyswietlany pokaz */
      var conteiner = document.getElementById(options.conteiner);
      
      if (conteiner) {
        conteiner.style.position = 'relative';  
        
        /* Obiekt kolejnego zdjecia w pokazie */
        var img = document.createElement('img');
        
        if (img) {
          /* Przypisuje odpowiednie style dla zdjecia;
             kolejne zdjecie jest nakladane na poprzednie */
          img.style.position = 'absolute';
          img.style.left = 0;
          img.style.top = 0;
          
          /* Ukrywamy zdjecie, jesli jest wlaczona opcja fade, 
             powodujaca gladkie przechodzenie jednego zdjecia w drugie */
          if (options.fade === true) {
            if (window.attachEvent && !browser.opera) {
              img.style.filter = 'Alpha(Opacity=0)'; // IE 6
            } else {
              img.style.opacity = 0;
            }
          }
            
          if (options.type == 'random') {
            /* Wyswietlone zostanie losowe zdjecia */
            current = Math.floor(Math.random() * options.elements.length);
          } else if (options.type == 'sequence') {
            /* Pierwotna kolejnosc zdjec */
            if (current == options.elements.length - 1) {
              current = 0;
            } else {
              current++;
            }
          }
          
          img.src = options.elements[current];
          
          /* Wyswietla zdjecie */
          conteiner.appendChild(img);
          
          if (options.fade === true) {
            /* Uaktywnia gladkie przechodzenie jednego zdjecia w drugie */
            setTimeout(function(){
              fade(img, conteiner)
            }, 1);
          }
          
          /* Wyswietl kolejne zdjecie */
          setTimeout(function(){
            next(options, current)
          }, options.speed);
        }
      }
    }
  };
  
  return (function(options){
    if (options.elements.length) {
      /* Przed wywolaniem slajdu wykonywany jest preload zdjec */
      for (var i = 0; i < options.elements.length; i++) {
        var loader = new Image();
        loader.src = options.elements[i];
      }
      
      /* Bezposrednie wywolanie funkcji rozpoczyna pokaz slajdow - 
         jesli czas pomiedzy kolejnymi wywolaniami jest wiekszy od 0 */
      if (options.speed > 0) {
        setTimeout(function(){
          next(options, 0)
        }, options.speed);
      }
    }
  });
  
})();
