/*!
 * Slide Show with jQuery
 * =========================== 
 * Autor : Václav Fiala [tONE]
 * Date : 2011-06-19 13:45
 * Version : 0.2  
 */
 
/*window.onerror = function(a,b,c) {
  alert(a+"\n"+b+"\n"+c);
  return true;
}*/

function slideShow(o) {
  // config and system vars
  var cfg = {
    "container":"#slideShow",
    "effect":"fade",
    "duration":1000,
    "interval":4000,
    "mousePause":false
  };
  var vars = {
    "elm":"",
    "moveNext":true,
    "cPhoto":0,
    "elmWidth":0,
    "elmHeight":0
  };
  // array with photo info
  var photo = [];
  // cache for loaded image names
  var pCache = [];
  // load image to cache
  var loadImage = function(i,cb) {
    if(!pCache[i]) {
      var d = new Date();
      var imgName = photo[i].src+"?v="+d.getTime();
      var img = new Image();
      img.onload = function() {
        pCache[i] = imgName;
        if((typeof cb) == "function") {
          cb();
        }
      }
      img.src = imgName;
    }
    else { // image is on cache -> only callback
      if((typeof cb) == "function") {
        cb();
      }
    }
  };
  // preload images
  var imagePreloader = function() {
    for(i=0;i<photo.length;i++) {
      //loadImage(i);
    }
  };
  // starting slide
  var playSlide = function() {
    var e = cfg.effect;
    effect[e]();
  }
  // create slideshow container
  var create = function() {
    var d = new Date();
    var idNew = "slideShow"+d.getTime();
    var firstImage = $(cfg.container).html();
    $(cfg.container).html('<div style="position:relative;" id="'+idNew+'">'+firstImage+'</div>');
    var w = 944;//parseInt($("#"+idNew+" img").width());
    var h = 121;//parseInt($("#"+idNew+" img").height());
    vars.elm = "#"+idNew;
    vars.elmWidth = w;
    vars.elmHeight = h;
    $("head").append('<style>'+cfg.container+' div { position:relative; width:'+w+'px; height:'+h+'px; overflow:hidden; } '+cfg.container+' div a, '+cfg.container+' div img { position:absolute; top:0px; left:0px; }</style>');
    setTimeout(playSlide, cfg.interval);
  };
  // load users config, preloadImages, create slideshow
  if((typeof o) == "object") {
    if(o.cfg) {
      $.extend(cfg, o.cfg);
    }
    photo = o.photo;
    imagePreloader();
    create();
  }
  // foto counter
  var fotoCount = function() {
    vars.cPhoto = vars.cPhoto + eval(1);
    if(vars.cPhoto == photo.length) {
      vars.cPhoto = 0;
    }
    return vars.cPhoto;
  }
  // make slide code
  var makeSlide = function(f) {
    var s1 = "", s2 = "";
    if(photo[f].url != "") {
      s1 = '<a href="'+photo[f].url+'"'; 
      if(photo[f].target != "") {
        s1 += ' target="'+photo[f].target+'"';
      }
      s1 += '>';
      s2 += '</a>';
    }
    return s1+'<img src="'+pCache[f]+'" />'+s2;
  }
  // slide effects
  var effect = {
    "fade" : function() {
      var f = fotoCount();
      loadImage(f, function() {
        $(vars.elm+" :first").before(makeSlide(f));
        $(vars.elm+" :last").animate({'opacity': 0}, cfg.duration, function(){
          $(vars.elm+" :last").remove();
        });
        setTimeout(playSlide, cfg.interval);
      });
    }
  };
}
// complete run slideShow 
$(document).ready(function(){
  new slideShow({"photo":[{"src":"images/slide02.jpg", "url":"", "target":""},
                          {"src":"images/slide03.jpg", "url":"", "target":""},
                          {"src":"images/slide01.jpg", "url":"", "target":""}]});
});
