/*
  Copyright 2010 ZombieTuesday Ltd.

  Distributed under the terms of the GPL version 3.

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
  For a copy of the GNU General Public License see <http://www.gnu.org/licenses/>.
 */

var elems;
var widths;
var sliding = false;
var current = null;

var closedwidth = 110;
var slidecap = 6;
var framepause = 1;
var maxfade = 0.6;

var fadecurrent = null;
var currentfade = 0;
var fadestep = 0.05;

var stopslideshow = false;
var slideshowpause = 3000;

function fadeUp() {
  if(current != fadecurrent) {
    createThread(slideOut, 'RUN');
    end();
  } else {
    // Fade text...
    var is = current.getElementsByTagName('DIV');
    var text;
    var inner;
    for(var j = 0; j < is.length; j++) {
      if(is[j].className == 'textinner') {
	inner = is[j];
      } else if(is[j].className == 'textover') {
	text = is[j];
      }
    }
    currentfade += fadestep;
    // Set max fade...
    var divfade = currentfade * maxfade;

    text.style.opacity = divfade;
    text.style.filter = 'alpha(opacity=' + (divfade * 100) + ')';

    // Fade the text itself to 100% opaque, without a cap
    inner.style.opacity = currentfade;
    inner.style.filter = 'alpha(opacity=' + (currentfade * 100) + ')';

    if(currentfade < 1.0) {
      wait(framepause);
    } else {
      sliding = false;
      end();
    }
  }
}

function fadeDown(i) {
    // Fade text...
    var is = elems[i].getElementsByTagName('DIV');
    var text;
    var inner;
    for(var j = 0; j < is.length; j++) {
      if(is[j].className == 'textinner') {
	inner = is[j];
      } else if(is[j].className == 'textover') {
	text = is[j];
      }
    }
    //currentfade += fadestep;
    var fade = (1.0 * (parseInt(elems[i].style.width) - closedwidth)) / (widths[i] - closedwidth);

    // Set max fade...
    var divfade = fade * maxfade;

    text.style.opacity = divfade;
    text.style.filter = 'alpha(opacity=' + (divfade * 100) + ')';

    // Fade the text itself to 100% opaque, without a cap
    inner.style.opacity = fade;
    inner.style.filter = 'alpha(opacity=' + (fade * 100) + ')';
}

function slideOut() {
  var stillsliding = false;
  if(current == null) {
    current = elems[0];
  }

  for(var i = 0; i < elems.length; i++) {
    var w = parseInt(elems[i].style.width);
    if(elems[i] != current) {
      if((w - closedwidth) < 10) {
	elems[i].style.width = closedwidth + 'px';
      } else {
	var slide = ((w - closedwidth) / 2);
	if(slide > slidecap) {
	  slide = slidecap;
	}
	elems[i].style.width =  (w - slide) + 'px';
	stillsliding = true;
      }
      fadeDown(i);
    } else {
      if((widths[i] - w) < 10) {
	elems[i].style.width = widths[i] + 'px';
      } else {
	var slide = ((widths[i] - w) / 2);
	if(slide > slidecap) {
	  slide = slidecap;
	}
	elems[i].style.width = (w + slide) + 'px';
	stillsliding = true;
      }
    }
  }
  

  if(stillsliding) {
    sliding = true;
    wait(framepause);
  } else {
    // sliding = false;
    fadecurrent = current;
    //currentfade = 0;
    var inner = current.getElementsByTagName('DIV');
    inner = inner[1];
    currentfade = parseFloat(inner.style.opacity);
    createThread(fadeUp, 'RUN');
    end();
  }
}

function beginSlideOut(e) {
  stopslideshow = true;
  if(!e) {
    var e = window.event;
  }

  var reltg = (e.srcElement) ? e.srcElement : e.target;
  while (reltg.className != 'slider' && reltg.nodeName != 'BODY') {
    reltg = reltg.parentNode;
  }
  if((current == reltg)||((reltg.nodeName == 'BODY')&&(current == elems[0]))) {
    return;
  }
  if(reltg.nodeName == 'BODY') {
    current = null;
  } else {
    current = reltg;
  }
  if(!sliding) {
    createThread(slideOut, 'RUN');
    sliding = true;    
  }
}

function slideNext() {
  var found = false;
  for(var i = 0; i < elems.length; i++) {
    if(elems[i] == current) {
      found = true;
      if((i+1) < elems.length) {
	current = elems[i+1];
      } else {
	current = elems[0];
      }
      break;
    }
  }
  if(!found) {
    current = null;
  }
  if(!sliding) {
    createThread(slideOut, 'RUN');
    sliding = true;    
  }
}

function slideShow() {
  if(stopslideshow) {
    end();
    return;
  }
  slideNext();
  wait(slideshowpause);
}

function initSlider() {
  elems = new Array();
  widths = new Array();
  var divs = document.getElementsByTagName('LI');
  for(var i = 0; i < divs.length; i++) {
    if(divs[i].className == 'slider') {
      elems.push(divs[i]);
      var w = divs[i].offsetWidth - (10 + (divs[i].id == 'Texte' ? 10 : 0));
      widths.push(w);
      divs[i].onmouseover = beginSlideOut;
      divs[i].style.overflow = 'hidden';
      divs[i].style.width = closedwidth + 'px';
    }
  }
  fadeDown(0);
  document.body.onmouseover = beginSlideOut;
  createThread(slideShow, 'RUN');
  //sliding = true;    
}

window.onload = initSlider;

