// Version : v2.0g
// Usage : cf. popup.js.txt

var bpop;
var topZ=66;
var im=[];
var imove=-1, ilast=-1, itop=-1;
var action='';
var d=document, dE=d.documentElement;
var w=window;
var ieb = d.compatMode && d.compatMode != 'BackCompat' ? dE : d.body;
var ie=(d.all && !w.opera);
var tipfocus="Cliquer pour fermer ou déplacer";
var tip="Cliquer pour passer devant";

addHdl(w, 'load', diapo);
addHdl(w, 'load', init);

function getW () { return ie ? ieb.clientWidth : (dE.clientWidth || self.innerWidth);}
function getH () { return ie ? ieb.clientHeight : self.innerHeight;}
function $(a) { return d.getElementById(a); }

function creer_zone() {
 if (!bpop) {
  bpop=d.createElement('div');
  css(bpop, { position: 'fixed', left: 0, top: 0, width: '100%', zIndex: topZ });
  d.body.appendChild(bpop);
  if (ie) {
   css(bpop, { position: 'absolute', top: 0 });
   css(d.body, { background: '#fff url(null) fixed' });
  }
 }
}

function init(e) {
 creer_zone();
 // tableau images; statiques seules
 var els=d.getElementsByTagName('a');
 for (var i=0; i < els.length; i++) {
  if (els[i].className == "couv") new_pop(els[i], els[i].href, 0)
 }
}

function new_pop(a, href, dyn) {
 ni=d.createElement('img');
 ni.className='cPix';
 ni.src=href;

 addHdl(ni, 'mousedown', down);
 bpop.appendChild(ni);
 key=im.length;
 im[key]=[];
 im[key].a=a;
 im[key].dyn=dyn;
 if (dyn == 1) im[key].id_a=a.id;
 im[key].img=ni;
 css(im[key].img, { display: 'none', visibility: 'hidden' });
 return key;
}

function addHdl(el, event, func) {
 try {
  el.addEventListener(event, func, false);
 } catch (e) {
  try {
   el.detachEvent('on'+ event, func);
   el.attachEvent('on'+ event, func);
  } catch (e) {
   el['on'+ event]=func;
  }
 }
}

function delHdl(el, event, func) {
 try {
  el.removeEventListener(event, func, false);
 } catch (e) {
  try {
   el.detachEvent('on'+ event, func);
  } catch (e) {
   el['on'+ event]=null;
  }
 }
}

function down(e){	
 if (!e) e=w.event;
 if (e.button > 1) return true;
 if (!e.target) e.target=e.srcElement;
 action='';

 for (var i=0; i < im.length; i++) {
  if (im[i].img == e.target && im[i].visible == true) {
   // prendre focus
   action='close';
   if (im[i].img.style.zIndex != topZ) {
    action='focus';
    pop(i);
   }
   css(im[i].img, { opacity: '0.75' })
   imove=i; // memo image et coord
   im[i].clickX=e.clientX;
   im[i].clickY=e.clientY;
   addHdl(d, 'mouseup', up);
   // éventuel déplacement
   addHdl(d, 'mousemove', deplace);
   if (e.preventDefault) e.preventDefault(); // FF
  }
 }
}	

function up(e){	
 if (!e) e=w.event;
 for (var i=0; i < im.length; i++) {
  if (imove != -1 && im[i].img == im[imove].img && im[i].visible == true) {
   css(im[i].img, { opacity: 1, cursor: 'crosshair' }) // opaque
   // relachement
   delHdl(d, 'mousemove', deplace);
   delHdl(d, 'mouseup', up);
   imove=-1;
   // si down-up -> ferme
   if (action == 'close') fpop(i);
   else if (action == 'move') {
    im[i].x += im[i].dX;
    im[i].y += im[i].dY;
   }
  }
 }
}	

function deplace(e){
 if (!e) e=w.event;
 i=imove;

 im[i].dX=e.clientX - im[i].clickX;
 im[i].dY=e.clientY - im[i].clickY;	
 var dist_approx=Math.abs(im[i].dX) + Math.abs(im[i].dY);
 if (dist_approx > 5) action='move';

 if (action == 'move') {
  var x=im[i].x + im[i].dX;
  var y=im[i].y + im[i].dY;
   css(im[i].img, { left: x+'px', top: y+'px', cursor: 'move', opacity: 0.5 })
   ilast=i;
 }
 return false;
}

function touche(e) {
 var op=null;
 switch (e.keyCode) {
  case 32: case 39: case 40: // sp+fleches
   op=1;
   break;
  case 8: case 37: case 38: // bascksp+fleches
   op=-1;
   break;
  case 27: // Escape
   op=0;
 }
 if (op !== null) {
  delHdl(d, w.opera ? 'keypress' : 'keydown', touche);
  if (e.preventDefault) e.preventDefault();
  else e.returnValue=false;

  if (op == 0) { fpop(itop); }
  else { next(itop, op); }
  return false;
 }
 return true;
}

function css(el, styles) {
 for (var x in styles) {
  if (ie && x == 'opacity') {
   if (styles[x] > 0.99) el.style.removeAttribute('filter');
	 else el.style.filter='alpha(opacity='+ (styles[x] * 100) +')';
	}
  else el.style[x]=styles[x];
 }
}

function exist(a) {
 var key=-1;
 for (var i=0; i < im.length; i++) {
  if (im[i].dyn == 0) {
   if (im[i].a == a) key=i;
  }
  else if (im[i].id_a == a.id && im[i].img.src.indexOf(a.href) != -1) key=i;
 }
 return key;
}

function img_pop(a) {
 var key=-1;

 key=exist(a);
 if (key == -1) {
  creer_zone();
  key=new_pop(a, a.href, 1);
 }
 if (im[key].visible != true) {
  // reouverture
  if (ilast == -1) { // aucune ouverte
   im[key].x=100;
   im[key].y=20;
  }
  else {
   im[key].x=im[ilast].x + 30;
   if (im[key].x >= getW()) im[key].x-=getW();
   im[key].y=im[ilast].y + 10;
   if (im[key].y >= getH()) im[key].y-=getH();
  }
  css(im[key].img, { left: im[key].x + 'px', top: im[key].y + 'px' });
  ilast=key;
 }
 pop(key);
 return false;
}

function pop(k) {
 css(im[k].img, { display: 'block', visibility: 'visible', cursor: 'crosshair', zIndex : ++topZ });
 im[k].img.title=tipfocus;
 im[k].visible=true;
 addHdl(d, w.opera ? 'keypress' : 'keydown', touche);
 itop=k;
 // Maj tip des autres ouvertes
 for (var i=0; i < im.length; i++) {
  if (i != k && im[i].visible == true) {
   im[i].img.title=tip;
   css(im[i].img, { cursor: 'pointer' }); }
 }
}

function fpop(k) {
 css(im[k].img, { display: 'none', visibility: 'hidden', zIndex: 1 });
 delHdl(d, w.opera ? 'keypress' : 'keydown', touche);	
 im[k].visible=false;

 // Recherche focus
 var top=-1;
 topZ=66; // reinit
 for (var i=0; i < im.length; i++) {
  if (im[i].visible == true && im[i].img.style.zIndex && im[i].img.style.zIndex > topZ) {
   topZ=im[i].img.style.zIndex;
   if (ilast == k) ilast=i; // maj last que si on la ferme
   top=i; 
  }
 }
 if (top != -1) pop(top);
 else { ilast=-1; itop=-1; };
}

function next(k,op) {
 z=k+op;
 if (z >= im.length) z=0;
 if (z < 0) z=im.length - 1;
 im[z].x=im[k].x;
 im[z].y=im[k].y;
 css(im[z].img, { left:im[z].x+'px', top: im[z].y+'px' })
 fpop(k);
 pop(z);
}

var url={n:'', m:'', v:''};
function img_init_url(n, m , v) {
 url={n:n, m:m, v:v};
}

/*
  Images Recueils
*/
function img_change(id, img) {
 $(id).src=url.m + "m_" + img;
 var a=$("A_"+id);
 a.href=url.n + img;
 if (exist(a) == -1) new_pop(a, a.href, 1);
}

/*
  mini-diaporama
*/
var md=[];
var pfx=[];
var ix=[];
var tim=[];
var tempo=5000;

/*
  Ajout image
*/
function img_add(id, src) {
 if (!md[id]) md[id]=[];
 var l=md[id].length;
 md[id][l]=[];
 md[id][l].a=id;
 md[id][l].src=src;
}

/*
  Lancement
*/
function diapo() {
 for (var id in md) {
  var nb=md[id].length;
  var ft="med";
  creer_zone();
  for (i=0; i < nb; i++) {
   new_pop($("A_"+md[id][i].a), url.n + md[id][i].src, 1); // dyn
  }
  if (ft == "norm") pfx[id]=url.n;
  else if (ft == "vign") pfx[id]=url.v + "v_";
  else pfx[id]=url.m + "m_";
  ix[id]=nb - 1 - Math.floor(nb * Math.random());
  img(id);
 }
}

function img(id) {
 var i=md[id][ix[id]];
 if ($(i.a)) {
  $(i.a).src=pfx[id] + i.src;
  if ($("A_" + i.a)) $("A_" + i.a).href=url.n + i.src;
 }
 if (tim[id]) w.clearTimeout(tim[id]);
 tim[id]=w.setTimeout("img_next('"+id+"')", tempo);
}

function img_next(id) {
 ix[id] += 1;
 if (ix[id] >= md[id].length || ix[id] < 0) ix[id]=0;
 img(id);
}

function img_stop(id) {
 if (tim[id]) w.clearTimeout(tim[id]);
}

// IE : pour contourner 'fixed'
var csc=0;
addHdl(w, 'load', poll);
function poll(){
 if (ie) setInterval("upd_ie()", 200);
}
function upd_ie() {
 if(ie) {
  var st=dE.scrollTop;
  bpop.style.top= parseInt(bpop.style.top) + st - csc + "px";
  csc=st;
 }
}

