// Copyright NetRando, all right reserved


function bannerStartup(imageID, textAdvertisement) {

if ((document.getElementById) || (document.all)) {   // permettra aux diverses methodes utilisees avec setTimeout de retrouver l'element
  if(document.getElementById) bannerStartup.element = document.getElementById(imageID);
  else if (document.all) bannerStartup.element = document.all[imageID];
  var element = bannerStartup.element;
}

 textAdvertisement.replace(/\n/,"\r");
 textAdvertisement.replace(/\r\r/,"\r");
 var adSpliterArr = textAdvertisement.split("\r"); 
 cleanArray(adSpliterArr, '');
 fadeType = 'none' // variable globale
 startup = (new Date()).getTime()/1000; // variable globale
 imageSrcArr = new Array(adSpliterArr.length); // variable globale
 imageLinkArr = new Array(adSpliterArr.length); // variable globale
 imageAltArr = new Array(adSpliterArr.length); // variable globale
 beforeArr = new Array(adSpliterArr.length); // variable globale
 fadeUpArr = new Array(adSpliterArr.length); // variable globale
 duringArr = new Array(adSpliterArr.length); // variable globale
 fadeDownArr = new Array(adSpliterArr.length); // variable globale
 afterArr = new Array(adSpliterArr.length); // variable globale
 controlArr = new Array(beforeArr.length); // variable globale
 imageArr = new Array(beforeArr.length); // variable globale
  for (var i = 0; i < adSpliterArr.length; i++) {
  controlArr[i] = 0;
  imageArr[i] = new Image();
  imageArr[i].onload = imageLoaded;
  imageArr[i].onerror = imageFailed;
  imageArr[i].onabort = imageAborted;
  var tempArr = adSpliterArr[i].split("\t");
  imageSrcArr[i] = (tempArr[0].search(/http:\/\//) == -1 ? 'http:\/\/' + window.location.host : '') + tempArr[0];
  imageLinkArr[i] = tempArr[1];
  imageAltArr[i] = tempArr[2];
  beforeArr[i] = isNaN(parseFloat(tempArr[3])) ? 0 : parseFloat(tempArr[3]);
  fadeUpArr[i] = isNaN(parseFloat(tempArr[4])) ? 0 : parseFloat(tempArr[4]);
  duringArr[i] = isNaN(parseFloat(tempArr[5])) ? 0 : parseFloat(tempArr[5]);
  fadeDownArr[i] = isNaN(parseFloat(tempArr[6])) ? 0 : parseFloat(tempArr[6]);
  afterArr[i] = isNaN(parseFloat(tempArr[7])) ? 0 : parseFloat(tempArr[7]);
 }


 if((beforeArr.length > 0) && (typeof element != 'undefined')){
  var appliName = navigator.appName;
  if (appliName == 'Microsoft Internet Explorer') {
   var stringVersion = navigator.appVersion;
   stringVersion = stringVersion.substring(stringVersion.indexOf('MSIE')+5,stringVersion.indexOf('MSIE')+11);
   var appliVersion = parseFloat(stringVersion);
  }
  else var appliVersion = parseFloat(navigator.appVersion);
  var isWindows = (navigator.appVersion.indexOf("Macintosh") == -1);
  var isPossible = true // par defaut on suppose que l'on peut focntionner...
  if (appliName == 'Microsoft Internet Explorer') {
   if (isWindows) isPossible = (appliVersion >= 5.5); // il faudra voir si la version intermediaire est OK, la 5.0 plante !
   else isPossible = (appliVersion >= 5);
  }
  else if (appliName == 'Netscape') isPossible = (appliVersion >= 5); // le numero de version correspond a la version de Mozilla
  if (!isPossible) { // on ne joue pas l'anim
   var count = getRandom(0, beforeArr.length - 1);
   element.src = imageSrcArr[count];
   element.alt = imageAltArr[count];
   element.style.visibility = 'visible';
   element.onmouseout = function() {window.status = '';}; // pour effacer la barre de status sous MIE
   manageLink(element, imageLinkArr[count]); // pour effacer la barre de status sous MIE
  }
  else { // on joue l'animation
   loadPicture.flag = true; // vrai au premier dŽmarrage
   element.onmouseout = function() {window.status = '';}; // pour effacer la barre de status sous MIE
   if (typeof element.style.opacity != 'undefined') fadeType = 'w3c';
   else if (typeof element.style.MozOpacity != 'undefined') fadeType = 'moz';
   else if (typeof element.style.KhtmlOpacity != 'undefined') fadeType = 'khtml';
   else if (typeof element.filters == 'object') fadeType = (element.filters.length > 0 && typeof element.filters.alpha == 'object' && typeof element.filters.alpha.opacity == 'number') ? 'ie' : 'none';
   if (fadeType == 'none') { // on redistribue les temps si on ne peut appliquer le changement progressif d'image
    for (var i=0; i < beforeArr.length; i++) {
     duringArr[i] = beforeArr[i] == 0 ? duringArr[i]+fadeUpArr[i] : duringArr[i]+(fadeUpArr[i]/2); // si pas de temps avant, la duree est augmentee de la totalite du temps de transition
     beforeArr[i] = beforeArr[i] == 0 ? 0 : beforeArr[i]+(fadeUpArr[i]/2); // si temps de pose avant, on ajoute la moitie du temps de transition
     fadeUpArr[i] = 0;
     duringArr[i] = afterArr[i] == 0 ? duringArr[i]+fadeDownArr[i] : duringArr[i]+(fadeDownArr[i]/2);
     afterArr[i] = afterArr[i] == 0 ? 0 : afterArr[i]+(fadeDownArr[i]/2);
     fadeDownArr[i] = 0;
    }  
   }
   do {
    loadPicture.count = getRandom(0, beforeArr.length - 1);  // on utilise une variable statique
    var count = loadPicture.count;
    imageArr[count].onload = imageLoadedInit;  // change le contexte de l'appel
    imageArr[count].src = imageSrcArr[count];
    if(controlArr[count] == -1) {
     deleteRow(count);
     if(beforeArr.length == 0) count = 0;
     else {
      loadPicture.count = getRandom(0, beforeArr.length - 1);
      count = loadPicture.count;
     }
    }
    else {
     if(fadeType == 'none') element.style.visibility = 'hidden';
     else applyOpacity (element, 0);
     setTimeout ("loadPicture(1)", 10000); // attend maxi 10 secondes pour le premier chargement
     count = 0;
    }
   } while (count != 0);
  }
 }
}

function imageLoaded () {
 if(typeof this.src == 'undefined') { // bug de Safari
  for (var i=0; i < beforeArr.length; i++) { // on va supposer que toutes les images complete sont chargees
   if (imageArr[i].src != '') {
     if(controlArr[i] == 0) controlArr[i] = 1;
   }
  }
 }
 else imageControl(this.src, 1);
}

function imageLoadedInit() {
 if(typeof this.src == 'undefined') { // bug de Safari
  for (var i=0; i < beforeArr.length; i++) { // on va supposer que toutes les images complete sont chargees
   if (imageArr[i].src != '') {
  //  if (imageArr[i].complete) {
     if(controlArr[i] == 0) controlArr[i] = 1;
    }
//   }
  }
 }
 else imageControl(this.src, 1);
 loadPicture(1);
}

function imageFailed () {
 if(typeof this.src != 'undefined') imageControl(this.src, -1); // evite le bug de safari
}

function imageAborted () {
 if(typeof this.src == 'undefined') { // bug de Safari : on retire les images non chargee
  if(controlArr[i] == 0) controlArr[i] = -1;
 }
 else imageControl(this.src, -1);
}

function imageControl (imageSrc, value) {
 for (var i=0; i < beforeArr.length; i++) {
  if(matchSourceTest(imageSrc, imageSrcArr[i])) controlArr[i] = value;
 }
}

function matchSourceTest(imageSrc, imageLink) {
var length1 = imageSrc.length
var length2 = imageLink.length
if (length1 < length2) return false;
else if (imageSrc == imageLink) return true;
else return (imageSrc.substr(length1-length2, length2) == imageLink);
}


function deleteRow (rowNbr) { // fonction qui nettoie les tableaux des images qui n'ont pu etre chargee
 imageSrcArr.splice(rowNbr, 1);
 imageLinkArr.splice(rowNbr, 1);
 imageAltArr.splice(rowNbr, 1);
 beforeArr.splice(rowNbr, 1);
 fadeUpArr.splice(rowNbr, 1);
 duringArr.splice(rowNbr, 1);
 fadeDownArr.splice(rowNbr, 1);
 afterArr.splice(rowNbr, 1);
 controlArr.splice(rowNbr, 1);
 imageArr.splice(rowNbr, 1);
}


function loadPicture(callType) {
if (loadPicture.flag) {
 loadPicture.flag = false;
 var beginFlag = true;
 }
 else var beginFlag = false;
 if (beginFlag || (callType == 0)) { // ou premier appel, ou appel enchaine - evite double execution du lancement
 
  if (loadPicture.count >= beforeArr.length) loadPicture.count = 0;
  if (beginFlag) {
   for (var i = 0; i < beforeArr.length; i++) {
    if(controlArr[i] == 0)   imageArr[i].src = imageSrcArr[i];
   }
  }
  var currentDate = (new Date()).getTime()/1000;
  if ((currentDate-startup) > 120) {
   for (var i=0; i < beforeArr.length; i++) controlArr[i] = (controlArr[i] == 0) ? -1 : controlArr[i];
  }
  for (var i=beforeArr.length-1; i >= 0; i--) {
   if (controlArr[i] == -1) deleteRow(i);
  } 
  if(loadPicture.count > (beforeArr.length-1)) loadPicture.count = (beforeArr.length == 0) ? -1 : 0; // possible apres nettoyage du tableau
  if (loadPicture.count >=0 ) {
 
   if (controlArr[loadPicture.count] == 0) { // on cherche une image qui convient
    for (var i = (loadPicture.count + 1); i < beforeArr.length; i++) {
     if (controlArr[i] == 1) loadPicture.count = i;
    }
    if (controlArr[loadPicture.count] == 0) { // aucune image n'a ŽtŽ trouvŽ
     for (var i = 0; i < loadPicture.count; i++) {
      if (controlArr[i] == 1) loadPicture.count = i;
     }
    }
   }
   if (controlArr[loadPicture.count] == 1) { // on a une image qui convient
    var pauseTime = beforeArr[loadPicture.count]
    if (beginFlag) pauseTime = pauseTime - (((new Date()).getTime()/1000)-startup); // retire le temps de chargement
    if(pauseTime < 0) pauseTime = 0;
    if(pauseTime == 0) showPicture();
    else setTimeout("showPicture()", pauseTime*1000); // on passe le temps en millisecondes 
   }
   else { // on n'a pas d'image qui convient : on va relancer la fonction avec un temps retard
    loadPicture.count = (loadPicture.count == beforeArr.length) ? 0 : loadPicture.count+1;
    setTimeout("loadPicture(0)", (1 + beforeArr[loadPicture.count]) * 1000); // on ajoute une seconde
   }
  }
  
 }
}


function showPicture() {
 var element = bannerStartup.element;
 var count = loadPicture.count
 element.src = imageSrcArr[count];
 element.alt = imageAltArr[count];
 if(fadeType == 'none') {
  element.style.visibility = 'visible';
  manageLink (element, imageLinkArr[count]);
 }
 else fade (element, 0, fadeUpArr[count], showLink);
 setTimeout("hidePicture()", (fadeUpArr[count] + duringArr[count]) * 1000); // passe le temps en millisecondes
}


function showLink (element) {
var sourceImage = element.src
 for (var i=0; i < beforeArr.length; i++) {
  if(matchSourceTest(sourceImage, imageSrcArr[i]))
  {
  manageLink (element, imageLinkArr[i]);  
  i = beforeArr.length; // sort de la boucle
  }
 }
}

function manageLink (element, linkString) { // gestion du lien
 element.onmouseover = function() {window.status = linkString; return true;}; // ne fonctionne qu'avec MIE (ineficace sur Safari et Firefox pour eviter le detournement d'adresse)
 if (linkString == '') {// sinon inutile de fixer un lien
   element.onclick = '';
   setPointer(element, 'default');
   }
   else {
  element.onclick = function() {window.open(linkString);};
  setPointer(element, 'pointer');
 }
}


function setPointer(element, pointerType) {
if(typeof element.style.cursor != 'undefined') {
 if (pointerType == 'default') element.style.cursor = 'default'; 
 else if (navigator.appName == 'Microsoft Internet Explorer') element.style.cursor = 'hand';
 else  element.style.cursor = 'pointer';
 }
}


function hidePicture() {
 var element = bannerStartup.element;
 var count = loadPicture.count;
 if(fadeType == 'none') element.style.visibility = 'hidden';
 else fade (element, 1, fadeDownArr[count]);
 element.alt = '';
 manageLink (element,'');
 loadPicture.count++ 
 setTimeout("loadPicture(0)", (fadeDownArr[count]+afterArr[count]) * 1000); // passe le temps en millisecondes
}

function fade (element, action, duration, endFct) {
 doFade.what = (action == 1);
 var iterationMaxi = 20;
 if (arguments.length == 4) anime (element, iterationMaxi, 1000*duration/iterationMaxi, doFade, endFct);
 else anime (element, iterationMaxi, 1000*duration/iterationMaxi, doFade); 
}

function anime (element, iterationMaxi, iterationDelay, animationFct, endFct) {
 var frame = 0;
 var time = 0;
 var intervalID = setInterval(doAnimation, iterationDelay);
 function doAnimation() {
  var testEnd = false;
  if (frame >= iterationMaxi) testEnd = true;
  else testEnd = animationFct(element, frame, iterationMaxi); // on pourrait entourer par try/catch, mais non supporte par IE4.0
  if (testEnd) {
  clearInterval (intervalID);
  if (endFct) endFct(element);
  }
 frame++;
 time+=iterationDelay;
 }
}


function doFade (element, frame, iterationMaxi) {
 if(doFade.what) {
  var fade = 1 - (Math.pow(1/0.9, frame) / Math.pow(1/0.9, iterationMaxi-1));
  if(fade < (1/iterationMaxi)) fade = 0;
  }
 else {
  var fade = Math.pow(1/0.9, frame) / Math.pow(1/0.9, (iterationMaxi-1));
  if (fade > (1-(1/iterationMaxi))) fade = 1;
 }
 applyOpacity(element, fade);
 return ((fade == 0) || (fade ==1));
}


function applyOpacity (element, fade) {
 switch(fadeType)
 {
  case 'ie' :
   element.filters.alpha.opacity = fade * 100;
   break;
  case 'khtml' :
   element.style.KhtmlOpacity = fade;
   break;
  case 'moz' :
   element.style.MozOpacity = (fade == 1 ? 0.9999999 : fade);
   break;
  default :
   element.style.opacity = (fade == 1 ? 0.9999999 : fade);
 }
}


function cleanArray (theArray, testString) {
 for (var i=theArray.length-1; i >= 0; i--) {
  if (theArray[i] == testString) theArray.splice(i, 1);
 }
}


Array.prototype.splice = function(offset, limit) { // remplacement de splice pour supprimer des lignes (pour IE5)
 var replacement = (Array.prototype.splice.arguments.length == 3) ? Array.prototype.splice.arguments[2] : [];
 var removed = [];
 for(var i = offset; i < offset + limit; i++) {
  removed[removed.length] = this[i];
 }
 var store = [];
 for(var i = offset + limit; i < this.length; i++) {
  store[store.length] = this[i];
 }
 while(this.length > offset) {
  delete this[this.length - 1];
  this.length--;
 }
 for(var i = 0; i < replacement.length; i++) {
  this[this.length] = replacement[i];
 }
 for(var i = 0; i < store.length; i++) {
  this[this.length] = store[i];
 }
return removed;
}


function getRandom (mini, maxi) { // retourne un nombre entier au hasard dans l'intervalle [mini, maxi]
 var output = 0;
 var scope = maxi - mini +1; // limite superieure de la fonction escalier: hors du resultat
 do { // fonction en escalier dans l'intervalle [0, scope[
  output = Math.floor(Math.random() * scope);
  } while(output==scope) // normalement random s'applique sur [0, 1[, mais il vaut mieux s'en assurer
 output = output + mini;
 return output;
}