if (typeof addEvent != 'function')
{
 var addEvent = function(o, t, f, l)
 {
  var d = 'addEventListener', n = 'on' + t, rO = o, rT = t, rF = f, rL = l;
  if (o[d] && !l) return o[d](t, f, false);
  if (!o._evts) o._evts = {};
  if (!o._evts[t])
  {
   o._evts[t] = o[n] ? { b: o[n] } : {};
   o[n] = new Function('e',
    'var r = true, o = this, a = o._evts["' + t + '"], i; for (i in a) {' +
     'o._f = a[i]; r = o._f(e||window.event) != false && r; o._f = null;' +
     '} return r');
   if (t != 'unload') addEvent(window, 'unload', function() {
    removeEvent(rO, rT, rF, rL);
   });
  }
  if (!f._i) f._i = addEvent._i++;
  o._evts[t][f._i] = f;
 };
 addEvent._i = 1;
 var removeEvent = function(o, t, f, l)
 {
  var d = 'removeEventListener';
  if (o[d] && !l) return o[d](t, f, false);
  if (o._evts && o._evts[t] && f._i) delete o._evts[t][f._i];
 };
}

function cancelEvent(e, c)
{
 e.returnValue = false;
 if (e.preventDefault) e.preventDefault();
 if (c)
 {
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
 }
};
function DivFloat(myName, config)
{
 var defaults = {
  myName: myName,        
  allowNesting: false,   
  cssProp: 'visibility', 
  cssVis: 'inherit',
  cssHid: 'hidden',
  IESelectBoxFix: true,  
  showDelay: 0,          
  hideDelay: 0,
  animInSpeed: 0.7,           // Animation speed, from 0.0 to 1.0; 1.0 disables.
  animOutSpeed: 0.7,
  animations: [],        
  mouseX: 0, mouseY: 0,  
  notes: {},             
  rootElm: null,         
  onshow: null,          
  onhide: null
 };

 for (var p in defaults)
  this[p] = (typeof config[p] == 'undefined') ? defaults[p] : config[p];

 var obj = this;
 addEvent(document, 'mouseover', function(evt) { obj.mouseHandler(evt, 1) } );
 addEvent(document, 'click', function(evt) { obj.mouseHandler(evt, 2) } );
 addEvent(document, 'mousemove', function(evt) { obj.mouseTrack(evt) } );
 addEvent(document, 'mouseout', function(evt) { obj.mouseHandler(evt, 0) } );

 this.instance = DivFloat.instances.length;
 DivFloat.instances[this.instance] = this;
}
DivFloat.instances = [];
DivFloat.prototype.bTypes = {};
DivFloat.prototype.pTypes = {};

DivFloat.prototype.pTypes.mouseoffset = function(obj, noteID, nextVis, nextAnim) { with (obj)
{
 var note = notes[noteID];
 if (nextVis && !note.animating && !note.visible)
 {
	var distTop;
	if(navigator.appName.search("Microsoft")>-1){
		distTop = 125 ;
	}
	else{ 
		distTop = 125 ;
	}
// note.ref.style.left = checkWinX(mouseX-220, note) + 'px';
 note.ref.style.left = checkWinX(mouseX - parseInt(document.getElementById("conteneur").offsetLeft, note) ) + 'px';
  
  alert (checkWinX(mouseX-220, note) + ' et ' + checkWinX(mouseX - parseInt(document.getElementById("conteneur").offsetLeft, note) ) );
  
  note.ref.style.top = checkWinY(mouseY-distTop, note) + 'px';
 }
}};


DivFloat.prototype.pTypes.mousetrack = function(obj, noteID, nextVis, nextAnim) { with (obj)
{
 var note = notes[noteID];
 if (nextVis && !note.animating && !note.visible)
 {
  var posString = 'with (' + myName + ') {' +
   'var note = notes["' + noteID + '"];' +
   'note.ref.style.left = checkWinX(mouseX, note) + "px";' +
   'note.ref.style.top = checkWinY(mouseY, note) + "px" }';
  eval(posString);
  obj.IEFrameFix(noteID, 1);
  if (!note.trackTimer) note.trackTimer = setInterval(posString, 50);
 }
 else if (!nextVis && !nextAnim)
 {
  clearInterval(note.trackTimer);
  note.trackTimer = null;
 }
}};


DivFloat.prototype.pTypes.triggeroffset = function(obj, noteID, nextVis, nextAnim) { with (obj)
{
 var note = notes[noteID];
 if (nextVis && !note.animating && !note.visible)
 {
  var x = 0, y = 0, elm = note.trigRef;
  while (elm)
  {
   x += elm.offsetLeft;
   y += elm.offsetTop;
   elm = elm.offsetParent;
  }
 // note.ref.style.left = checkWinX(x-177, note) + 'px';
    note.ref.style.left = checkWinX(x-177 - parseInt(document.getElementById("conteneur").offsetLeft), note)  + 'px';
 // alert (checkWinX(x-177, note) + ' et ' + (parseInt(checkWinX(x, note))  - parseInt(document.getElementById("conteneur").offsetLeft))  );
  note.ref.style.top = checkWinY(y-120, note) + 'px';
 }
}};


DivFloat.prototype.bTypes.pinned = function(obj, noteID, nextVis) { with (obj)
{
 return (!nextVis) ? false : true;
}};





// *** OBJECT METHODS ***

DivFloat.prototype.docBody = function()
{
 return document[(document.compatMode &&
  document.compatMode.indexOf('CSS') > -1) ? 'documentElement' : 'body'];
};
DivFloat.prototype.getWinW = function()
{
 return this.docBody().clientWidth || window.innerWidth || 0;
};
DivFloat.prototype.getWinH = function()
{
 return this.docBody().clientHeight || window.innerHeight || 0;
};
DivFloat.prototype.getScrX = function()
{
 return this.docBody().scrollLeft || window.scrollX || 0;
};
DivFloat.prototype.getScrY = function()
{
	if(navigator.appName.search("Microsoft")>-1){
		return this.docBody().scrollTop || window.scrollY || 0;
	}
	else{ 
		return 0;
	}
};

DivFloat.prototype.checkWinX = function(newX, note) { with (this)
{
 return Math.max(getScrX(), Math.min(newX, getScrX() + getWinW() - note.ref.offsetWidth - 8));
}};
DivFloat.prototype.checkWinY = function(newY, note) { with (this)
{
 //return Math.max((getScrY()) , Math.min(newY, getScrY() + getWinH() - note.ref.offsetHeight - 8));
 if(navigator.appName.search("Microsoft")>-1){
		return Math.min(newY, getScrY() + getWinH() - note.ref.offsetHeight - 8);
	}
	else{ 
		return Math.min(newY, getScrY() + getWinH() + window.scrollY - note.ref.offsetHeight - 8);
	}
 
}};


DivFloat.prototype.mouseTrack = function(evt) { with (this)
{
 mouseX = evt.pageX || evt.clientX + getScrX() || 0;
 mouseY = evt.pageY || evt.clientY + getScrY() || 0;
}};


DivFloat.prototype.mouseHandler = function(evt, show) { with (this)
{
 if (!document.documentElement) return true;
 var srcElm = evt.target || evt.srcElement,
  trigRE = new RegExp(myName + '-(intra|click)-([a-z0-9]+)', 'i'),
  targRE = new RegExp(myName + '-(divintra)-([a-z0-9]+)', 'i'),
  trigFind = 1,
  foundNotes = {};

 if (srcElm.nodeType != 1) srcElm = srcElm.parentNode;
 var elm = srcElm;
 while (elm && elm != rootElm)
 {
  if (targRE.test(elm.id) || (trigFind && trigRE.test(elm.className)))
  {
   if (!allowNesting) trigFind = 0;
   var click = RegExp.$1 == 'click' ? 1 : 0,
    noteID = RegExp.$2,
    ref = document.getElementById(myName + '-divintra-' + noteID),
    trigRef = trigRE.test(elm.className) ? elm : null;
   if (ref)
   {
    if (!notes[noteID])
    {
     notes[noteID] = {
      click: click,
      ref: ref,
      trigRef : null,
      visible: 0,
      animating: 0,
      timer: null
     };
     ref._sn_obj = this;
     ref._sn_id = noteID;
    }
    var note = notes[noteID];
    if (!note.click || (trigRef != srcElm)) foundNotes[noteID] = true;
    if (!note.click || (show == 2))
    {
     if (trigRef)
      notes[noteID].trigRef = notes[noteID].ref._sn_trig = elm;
     display(noteID, show);
     if (note.click && (srcElm == trigRef)) cancelEvent(evt);
    }
   }
  }
  if (elm._sn_trig)
  {
   trigFind = 1;
   elm = elm._sn_trig;
  }
  else
  {
   elm = elm.parentNode;
  }
 }
 if (show == 2) for (var n in notes)
 {
  if (notes[n].click && notes[n].visible && !foundNotes[n]) display(n, 0);
 }
}};


DivFloat.prototype.display = function(noteID, show) { with (this)
{
 with (notes[noteID])
 {
  clearTimeout(timer);

  if (!animating || (show ? !visible : visible))
  {
   var tmt = animating ? 1 : (show ? showDelay||1 : hideDelay||1);
   timer = setTimeout('DivFloat.instances[' + instance + '].setVis("' +
    noteID + '", ' + show + ', false)', tmt);
  }
 }
}};


DivFloat.prototype.checkType = function(noteID, nextVis, nextAnim) { with (this)
{
 var note = notes[noteID], bType, pType;
 if ((/snp-([a-z]+)/).test(note.ref.className)) pType = RegExp.$1;
 if ((/snb-([a-z]+)/).test(note.ref.className)) bType = RegExp.$1;

 if (nextAnim && bType && bTypes[bType] &&
  (bTypes[bType](this, noteID, nextVis) == false)) return false;
 if (pType && pTypes[pType]) pTypes[pType](this, noteID, nextVis, nextAnim);
 return true;
}};


DivFloat.prototype.setVis = function(noteID, show, now) { with (this)
{
 // Called from display() above; sets the note visibility,
 // calls the type handler function, and calls animate() below.
 // Pass 'now' in order to show/hide immediately (skips animation).

 var note = notes[noteID];
 if (note && checkType(noteID, show, 1) || now)
 {
  note.visible = show;
  note.animating = 1;
  animate(noteID, show, now);
 }
}};


DivFloat.prototype.animate = function(noteID, show, now) { with (this)
{
 // Repeatedly called to animate a note in and out (if applicable).

 var note = notes[noteID];

 if (!note.animTimer) note.animTimer = 0;
 if (!note.animC) note.animC = 0;

 with (note)
 {
  clearTimeout(animTimer);
  var speed = (animations.length && !now) ? (show ? animInSpeed : animOutSpeed) : 1;

  if (show && !animC)
  {
   if (onshow) this.onshow(noteID);
   IEFrameFix(noteID, 1);
   ref.style[cssProp] = cssVis;
  }

  animC = Math.max(0, Math.min(1, animC + speed * (show ? 1 : -1)));

  if (document.getElementById && speed < 1)
   for (var a = 0; a < animations.length; a++) animations[a](ref, animC);

  if (!show && !animC)
  {
   if (onhide) this.onhide(noteID);
   IEFrameFix(noteID, 0);
   ref.style[cssProp] = cssHid;
  }

  if (animC != parseInt(animC))
  {
   animTimer = setTimeout(myName + '.animate("' +
    noteID + '", ' + show + ')', 50);
  }
  else
  {
   checkType(noteID, animC ? 1 : 0, 0);
   note.animating = 0;
  }
 }
}};


DivFloat.prototype.IEFrameFix = function(noteID, show) { with (this)
{
 // Positions a hidden IFRAME under a note to allow it to cross over <select>
 // boxes in MSIE.

  if (!window.createPopup || !IESelectBoxFix) return;

  var note = notes[noteID], ifr = note.iframe;
  if (!ifr)
  {
   ifr = notes[noteID].iframe = document.createElement('iframe');
   ifr.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
   ifr.style.position = 'absolute';
   ifr.style.borderWidth = '0';
   note.ref.parentNode.insertBefore(ifr, note.ref.parentNode.firstChild);
  }

  if (show)
  {
   ifr.style.left = note.ref.offsetLeft + 'px';
   ifr.style.top = note.ref.offsetTop + 'px';
   ifr.style.width = note.ref.offsetWidth + 'px';
   ifr.style.height = note.ref.offsetHeight + 'px';
   ifr.style.visibility = 'inherit';
  }
  else
  {
   ifr.style.visibility = 'hidden';
  }

}};