function addEvent(el, event, func) 
{
  if(el.addEventListener) 
  { 
    el.addEventListener(event, func, false);
  } 
  else 
  { 
    el.attachEvent('on'+event, func);
  }
}

function removeEvent(el, event, func) 
{
  if(el.removeEventListener) 
  { 
    el.removeEventListener(event, func, false);
  } 
  else 
  { 
    el.detachEvent('on'+event, func);
  }
}

if (!document.getElementsByClassName)
{
  document.getElementsByClassName = function(className)
  {
    var touselements = document.getElementsByTagName("*");
    var elements = [];
    var touselementslength = touselements.length;
    
    for(var i = 0; i< touselementslength; i++)
    {
      if(touselements[i].className.indexOf(className) !== -1)
      {
	elements.push(touselements[i]);
      }
    }
    
    return elements;
    
  }
}

function mouseCoords(ev)
{
  return {x:ev.clientX, y:ev.clientY};
}

// Slideshow

var GBSlideShows = [];

function GBSlideShow(element)
{
  var SlidesArea;
  var ButtonsArea;
  var slides  = [];
  var buttons = [];
  var transition;
  var me = this;
  
  var current = 0;
  var curslideShow = this;
  
  var childNodes = element.childNodes;
  var node;
  for(var i = 0, c = childNodes.length; i < c; i++)
  {
    node = childNodes[i];
    if(node.className == "GBSlideArea") SlidesArea = node;
    else if(node.className == "GBSlideButtonArea") ButtonsArea = node;
  }
  
  if(!SlidesArea || ! ButtonsArea) return;
  
  childNodes = SlidesArea.childNodes;
  for(var i = 0, c = childNodes.length; i < c; i++)
  {
    node = childNodes[i];
    if(node.className == "GBSlide") slides.push(node);
  }
  
  
  function AddButtonEventclick(button, index)
  {
    addEvent(button, "click", function(){
	curslideShow.slideTo(index);
      });
  }
  
  childNodes = ButtonsArea.childNodes;
  var j = 0;
  for(var i = 0, c = childNodes.length; i < c; i++)
  {
    node = childNodes[i];
    if(node.tagName == "BUTTON")
    {
      buttons.push(node);
      AddButtonEventclick(node, j);
      j++;
    }
  }
  
  this.slideTo = function(index)
  {
    slides[current].className = "GBSlide";
    slides[index].className = "GBSlide visible";
    buttons[current].className = "";
    buttons[index].className = "selected";
    current = index;
  };
  
  this.slideNext = function()
  {
    if((current + 1) > (slides.length - 1))
    {
      this.slideTo(0);
    }
    else
    {
      this.slideTo(current + 1);
    }
  };
  
  this.enableSlide = function()
  {
    if(transition) me.disableSlide();
  transition = setInterval(function(){
    curslideShow.slideNext();
  }, 15000);
    
  };
  
  this.disableSlide = function()
  {
    clearInterval(transition);
  };
  
  this.slideTo(0);
  
  addEvent(element, "mouseover", function(){curslideShow.disableSlide()});
  addEvent(element, "mouseout", function(){curslideShow.enableSlide()});
  
}

addEvent(window, "load", function(){
var results = document.getElementsByClassName("GBSlideshow");
var slideshow;
for (var i = 0, c = results.length; i < c; i++) 
{
  slideshow = new GBSlideShow(results[i]);
  GBSlideShows.push(slideshow);
  slideshow.enableSlide();
}
});

//Actions


addEvent(window, "load", function(){
  var results = document.getElementsByClassName("GBAction");
  var action;
  var link;
  for(var i = 0, c = results.length; i < c; i++)
  {
    link = results[i];
    if(!link.onclick) continue;
    action = document.createElement("button");
    action.onclick = link.onclick;
    action.innerHTML = link.innerHTML;
    action.className = link.className;
    if(action.id) action.id = link.id;
    link.parentNode.replaceChild(action, link);
  }
});

//Windows

var GBWindows = {};

var GBWindow = function(conteneur){
  
  var haut;
  var boutonFermer;
  var children = conteneur.childNodes;
  var child;
  for(var i = 0, c = children.length; i < c; i++)
  {
    child = children[i];
    if(child.tagName == "H3"){ haut = child; break;}
  }
  if(!haut) return;
  
  boutonFermer = document.createElement("button");
  boutonFermer.appendChild(document.createTextNode("Fermer"));
  haut.appendChild(boutonFermer);
  
  var curWindow = this;
  this.open = function()
  {
    conteneur.className = "GBWindow open";
    curWindow.center();
    if(curWindow.onOpen) curWindow.onOpen();
  };
  
  this.close = function()
  {
    conteneur.className = "GBWindow";
    if(curWindow.onClose) curWindow.onClose();
  };
  
  this.move = function(x, y)
  {
    conteneur.style.left = x + "px";
    conteneur.style.top = y + "px";
  };
  
  
  this.center = function()
  {
    curWindow.move(window.innerWidth / 2 - conteneur.offsetWidth / 2,
		  window.innerHeight / 2 - conteneur.offsetHeight / 2);
  }
  
  this.content = conteneur;
  
  var clickX = 0;
  var clickY = 0;
  var moveWindow = function(ev)
  {
    coords = mouseCoords(ev);
    curWindow.move(coords.x - clickX, coords.y - clickY);
  };
  
  addEvent(haut, "mousedown", function(event){
    var coords = mouseCoords(event);
    clickX = coords.x - parseFloat(conteneur.style.left);
    clickY = coords.y - parseFloat(conteneur.style.top); 
    
    event.returnValue = false; //IE
    if(event.preventDefault) event.preventDefault();
    addEvent(document.body, "mousemove", moveWindow);
  });
  
  addEvent(haut, "mouseup", function(){
    removeEvent(document.body, "mousemove", moveWindow);
  });
  
  if (boutonFermer) {addEvent(boutonFermer, "click", this.close);}
  
  
  this.close();
  this.center();
  
  
}

function firstChildByTag(parent, tagName)
{
  for(var i = 0, c = parent.childNodes.length; i < c; i++)
  {
    if(parent.childNodes[i].tagName == tagName) return parent.childNodes[i];
  }
}

addEvent(window, "load", function(){
var results = document.getElementsByClassName("GBWindow");
var win;
for(var i = 0, c = results.length; i < c; i++)
{
  win = results[i];
  if(win.id){GBWindows[win.id] = new GBWindow(win);}
}
});


