var delay = 100; // Maximum delay for matrix animation between member photos
var minimumTime = 0; // Minimum time before animation starts
var matrix;
var timer = new Date();
var originalNumbers = new Array();
var randomNumbers = new Array();
var X = {
   addEvent: function(type,element,func,phase){
       if(document.all){
           element.attachEvent("on"+type, func);
       }else{
           var __phase = (phase===false) ? false : true;
           element.addEventListener(type,func,__phase);
       }
   },
   removeEvent: function(type,element,func,phase){
       if(document.all){
           element.detachEvent("on"+type, func);
       }else{
           var __phase = (phase===false) ? false : true;
           element.removeEventListener(type,func,__phase);
       }
   },
   source: function(object){ return (document.all) ? event.srcElement : object },
   stop: function(e){
       if(document.all){
           event.cancelBubble = true;
       }else{
           e.stopPropagation();
       }
   },
   stopDefault: function(e){
       if(document.all){
           event.returnValue = false;
       }else{
           e.preventDefault();
       }
   }
}
var matrix = {
   canvas: null,
   active: null,
   show: function(current){
      if(slideshow.active==null){
          this.hide();
          this.active = current.parentNode;
          this.active.style.zIndex = "1";
          this.active.firstChild.style.visibility = "visible";
      }
   },
   hide: function(){
       if(this.active!=null){
          this.active.firstChild.style.visibility = "hidden";
          this.active.style.zIndex = "";
          this.active = null;
       }
   }
};
var slideshow = {
   canvas: null,
   slides: [],
   active: null,
   deactive: null,
   next: function(e){
      X.stopDefault(e);
      slideshow.slides[slideshow.active].style.visibility = "hidden";
      slideshow.active = (slideshow.active==slideshow.slides.length-1) ? 0 : parseInt(slideshow.active)+1;
      slideshow.slides[slideshow.active].style.visibility = "visible";
   },
   previous: function(e){
      X.stopDefault(e);
      slideshow.slides[slideshow.active].style.visibility = "hidden";
      slideshow.active = (slideshow.active==0) ? parseInt(slideshow.slides.length)-1 : parseInt(slideshow.active)-1;
      slideshow.slides[slideshow.active].style.visibility = "visible";
   },
   show: function(current, e){
       matrix.hide();
       if(this.active==null){
           this.canvas.style.visibility = "visible";
       }else{
           slideshow.deactive = slideshow.active;
           slideshow.slides[slideshow.deactive].style.visibility = "hidden";
       }
       if(e) X.stop(e);
       X.addEvent("click", document, slideshow.hide, false);
       slideshow.active = current;
       slideshow.slides[slideshow.active].style.visibility = "visible";
   },
   hide: function(e){
       X.stopDefault(e);
       if(slideshow.active!=null){
           slideshow.canvas.style.visibility = "hidden";
           slideshow.slides[slideshow.active].style.visibility = "hidden";
           slideshow.active = null;
           X.removeEvent("click", document, slideshow.hide, false);
       }
   },
   catchEvent: function(e){
       X.stop(e);
   }
};


for(var i=0; i<sourceMatrix.length; i++) originalNumbers.push(i);
while(originalNumbers.length){
    var __tmpNum__ = Math.round(Math.random()*(originalNumbers.length-1))
    var __tmpArr__ = [];
    randomNumbers[randomNumbers.length] = originalNumbers[__tmpNum__];
    for(var i=0, x=0; i< originalNumbers.length; i++)
        if(i!=__tmpNum__) __tmpArr__[x++] = originalNumbers[i]
    originalNumbers = __tmpArr__;
    //randomNumbers.push(originalNumbers.splice(Math.round(Math.random()*(originalNumbers.length-1)),1));
}
//alert()

function kickOff() {
   var timeSinceStart = new Date() - timer;
   if(timeSinceStart<minimumTime){
       setTimeout(start, minimumTime-timeSinceStart);
   }else{
       start();
   }
}

function start(){
  matrix.canvas = document.getElementById("matrix");
  slideshow.canvas = document.getElementById("slideshow");
  X.addEvent("click", slideshow.canvas, slideshow.catchEvent, false);
  X.addEvent("click", document.getElementById("close"), slideshow.hide);
  X.addEvent("click", document.getElementById("previous"), slideshow.previous);
  X.addEvent("click", document.getElementById("next"), slideshow.next);

  for(var i=0; i<sourceMatrix.length; i++){
      var thumb = matrix.canvas.appendChild(document.createElement("DIV"));
      var zoom = matrix.canvas.appendChild(document.createElement("DIV"));
      slideshow.slides.push(slideshow.canvas.appendChild(document.createElement("DIV")));
      thumb.appendChild(zoom);
  }
  var imageMatrix = new Array();
  for(var i=0; i<sourceMatrix.length; i++){
      imageMatrix[i] = {thumb: document.createElement("img"), zoom: document.createElement("img"), flag: document.createElement("img"), screen: document.createElement("img")};
  }
  var i=0;
  function load(){
      var current = matrix.canvas.childNodes[randomNumbers[i]];
      var currentThumb = imageMatrix[randomNumbers[i]].thumb;
      var currentZoom = imageMatrix[randomNumbers[i]].zoom;
      currentThumb.src = baseURL+sourceMatrix[randomNumbers[i]].thumb;
      currentZoom.src = baseURL+sourceMatrix[randomNumbers[i]].zoom;
      currentThumb.id = randomNumbers[i];
      currentZoom.id = randomNumbers[i];
      X.addEvent("mouseover", currentThumb, function(){ matrix.show(X.source(this)) })
      X.addEvent("mouseout", currentZoom, function(){ matrix.hide() });
      X.addEvent("click", currentThumb, function(e){ slideshow.show(X.source(this).id,e) });
      X.addEvent("click", currentZoom, function(e){ window.location = (sourceMatrix[X.source(this).id].uri); });
      current.firstChild.appendChild(imageMatrix[randomNumbers[i]].zoom);
      current.appendChild(imageMatrix[randomNumbers[i++]].thumb);

      function show(){
          if(current.lastChild.width>0&&current.firstChild.firstChild.width>0){
              current.style.zIndex = "1";
              current.firstChild.style.visibility = "visible";
              function pop(){
                  current.firstChild.style.visibility = "hidden";
                  current.style.visibility = "visible";
                  current.firstChild.style.borderWidth = "5px";
                  current.style.zIndex = "";
              }
              setTimeout(pop, 30);
              if(i<sourceMatrix.length)
                  setTimeout(load, Math.random()*delay);
          }else{
              delay -= 20;
              setTimeout(show, 20);
          }
      }
      show();
  }
  load();
}