AI.lightbox = function()
{
/*
---------------------------------------------------------------------------
  PRIVATE
---------------------------------------------------------------------------
*/
 var
  close = $E('span',{id:'lightbox-close', onclick:__hide__}),
  imageLoading = $E('img', {id:'lightbox-loading', src:'/css/lightbox-loading.gif'}),
  overlay = $E('div', {id:'lightbox-overlay', className:'cacher', "onclick":__hide__}, {}, [imageLoading]),
  contenuText = $E('div'), layoutInside = $E('div', {}, {},[contenuText]),
  lienImage = $E('a', {href:'#',target:'_blank'}),
  layout = $E('div', {id:'lightbox', className:'cacher'}, {}, [close, lienImage, layoutInside]),
  goPrev = $E(IS.IE6 ? 'a' : 'span', {href:'#',id:'lightbox-previous', className:'lightbox-navigation cacher', onclick:__previous__}),
  goNext = $E(IS.IE6 ? 'a' : 'span', {href:'#',id:'lightbox-next', className:'lightbox-navigation cacher', onclick:__next__}),
  allUrl = [], allLinks = [],
  current = null, currentLink = null;

 // charge la CSS
 DOM.loadStylesheet('/css/lightbox.css');
 
 function activate(U)
 {
  if ( currentLink != null ) { DOM.removeCSS(currentLink, 'actif'); }
  current = U;
  currentLink = allLinks[allUrl.indexOf(U)];
  DOM.addCSS(currentLink, 'actif');
 }

 // init tout au chargement
 EVT.loader(
  function()
  {
   var tagsA = $tags('a'), i;
   // remplace les liens <a> par des liens lightbox
   for ( i = 0; i < tagsA.length; i++ )
   {
    if ( DOM.hasCSS(tagsA[i], 'lightbox') )
    {
 				tagsA[i].onclick = function () { return __show__(this.href); };
 				allUrl.push(tagsA[i].href);
 				allLinks.push(tagsA[i]);
    }
   }
   // construit le layout
   document.body.appendChild(overlay);
   document.body.appendChild(goPrev);
   document.body.appendChild(layout);
   document.body.appendChild(goNext);
  }
 );

 // event de dechargement
 EVT.unloader(
  function()
  {
   close.onclick = null;
   overlay.onclick = null;
   goPrev.onclick = null;
   goNext.onclick = null;
  }
 );
/*
---------------------------------------------------------------------------
  PROTECTED
---------------------------------------------------------------------------
*/
 function __show__(url)
 {
  var
   vpH = DOM.getViewportHeight(),
   vpW = DOM.getViewportWidth(),
   scrollT = DOM.getScrollTopSum(document.body),
   scrollL = DOM.getScrollLeftSum(document.body),
   loadT = intval((vpH - imageLoading.height) / 2 + scrollT),
   loadL = intval((vpW - imageLoading.width) / 2 + scrollL);

  if ( !url ) { return false; }
  activate(url);

  function AJAXload(R)
  {
   var tmp = AI.AJAX.parse(R);
   if ( current == url)
   {
    if ( tmp && tmp.width && tmp.height && tmp.src !== '' )
    {
     DOM.flush(lienImage);
     lienImage.href = tmp.src;
     contenuText.innerHTML = '';
     layoutInside.style.paddingTop = '0px';
     if ( tmp.contenu !== '' )
     {
      contenuText.innerHTML = tmp.contenu;
      DOM.show(layoutInside);
      layoutInside.style.paddingTop = DOM.getStyleInt(layout, 'paddingTop') + 'px';
     }
     var imageLightbox = $E('img', {id:'lightbox-image', src:tmp.src, width:tmp.width, height:tmp.height, title:tmp.libelle || ''});
     layoutInside.style.width = tmp.width+'px';
     lienImage.appendChild(imageLightbox);
     $style(layout, {top:'-50000px',left:'0px'});
     DOM.show(layout);
     DOM.show(goPrev);
     DOM.show(goNext);
     layout.style.left = intval( ( vpW - tmp.width ) / 2 + scrollL ) + 'px';
     layout.style.top = intval( ( vpH - ( contenuText.offsetHeight + tmp.height ) ) / 2 + scrollT ) + 'px';
     goPrev.style.top = intval( ( vpH - DOM.getAreaHeight(goPrev) ) / 2 + scrollT ) + 'px';
     goNext.style.top = intval( ( vpH - DOM.getAreaHeight(goNext) ) / 2 + scrollT ) + 'px';
     imageLightbox.onerror = function()
     {
      AI.console.error('Image introuvable');
      AI.console.html('Cliquez pour obtenir l\'<a href="' + url + '">image originale</a>');
      __hide__();
     };
    }
    else
    {
     AJAXerror(R);
    }
   }
  }
  function AJAXerror(R)
  {
   AI.console.error("Réponse serveur : " + R.responseText);
   AI.console.error("Erreur de lecture de l'image");
   AI.console.html('Cliquez pour obtenir l\'<a href="' + url + '">image originale</a>');
   __hide__();
  }

  AI.fixIESelect(true);
  $style(overlay, {height:Math.max(DOM.getViewportHeight(), DOM.getAreaHeight(document.body))+'px', width:DOM.getAreaWidth(document.body)+'px'});
  $style(imageLoading, {"top":loadT + 'px',"left":loadL + 'px'});
  DOM.show(overlay);
  DOM.hide(layout);
  DOM.hide(layoutInside);

  // todo : trouver comment choisir le mode d'envoi (?AJAX=AJAX ou /AJAX/AJAX)
  AI.AJAX.send({"url":url + '/AJAX/AJAX',"onload":AJAXload,"onerror":AJAXerror});

  return false;
 }

 function __hide__()
 {
  DOM.hide(layout);
  DOM.hide(overlay);
  DOM.hide(goPrev);
  DOM.hide(goNext);
  AI.fixIESelect(false);
  return false;
 }

 function __previous__()
 {
  var
   prev = allUrl.getLast(),
   index = allUrl.indexOf(current);
  if ( index == -1 ) { return false; }
  else if ( index > 0 ) { prev = allUrl[index - 1]; }
  __show__(prev);
  return false;
 }

 function __next__()
 {
  var
   next = allUrl.getFirst(),
   index = allUrl.indexOf(current);

  try { goNext.blur(); } catch(e) {}
  if ( index == -1 ) { return false; }
  else if ( index < (allUrl.length - 1) ) { next = allUrl[index + 1]; }
  __show__(next);
  return false;
 }

/*
---------------------------------------------------------------------------
  PUBLIC
---------------------------------------------------------------------------
*/
 return {
  "show":__show__, "hide":__hide__,
  "next":__next__, "previous":__previous__
 };
}();
