/* (c) 2003 Markus Hillig
 * This is free software according to the General Public Licence (GPL)
 * available at www.gnu.org
 */

/*
 * Zusaetzlich zu dieser Datei muessen im HEAD-Bereich eines HTML-Dokuments
 * noch folgende JavaScript-Dateien geladen bzw. muessen die benoetigten
 * Funktion und Variablen direkt definiert werden:
 *
 * - browsercheck.js
 *     definiert die Variablen:
 *     - NS4, NS6, IE4
 *     definiert die Funktionen:
 *     - checkBrowser()
 *     - NS4Warning()
 *     
 * - *_photo_data.js
 *     definiert die Arrays:
 *     - photos[] -> alle Dateinamen der zu ladenden Fotos
 *
 * - Datei, in der die Follow-up-Funktion definiert ist und die
 *   Variable followUpFunction definiert wurde
 */
 
// Definition und Initialisierung der nicht konfigurierbaren Variablen des Progessbars
// (die konfigurierbaren Variablen werden in der aufrufenden Datei definiert)
var loadedImgCnt=0; // speichert die Anzahl der schon gecachten Fotos
var cachedPhotos=new Array(); // Cache fuer die Photos
var blockWidth=Math.floor(barWidth/photos.length); // Laenge eines Blocks
var remainderPerBlock=barWidth/photos.length-blockWidth; // Rest pro Block
var remainderTotal=0; //aktuell aufgelaufener, nichtangezeigter Gesamtrest
var correction=0; // aktuell aufgelaufene, angezeigte Korrekturweite
var imagesdone=false;
var perouter, perdone;

// DEBUG START
//alert("barWidth: "+barWidth+"\nblockWidth: "+blockWidth+"\nremainderPerBlock: "+remainderPerBlock);
// DEBUG END

// HTML-Code fuer den Progessbar
var pbCode='<div id="perouter" style="position:absolute; visibility:hidden; background-color:'+bordercolor+'">';
pbCode+='<table cellpadding="0" cellspacing="1" border="0"><tr><td width="'+barWidth+'" height="'+barHeight+'" valign="center">';
pbCode+='<table cellpadding="0" cellspacing="0" border="0"><tr><td width="'+barWidth+'" height="'+barHeight+'" valign="center" bgcolor="'+unloadedcolor+'"><center><font color="'+loadedcolor+'" size="1" face="sans-serif">Loading Images...</font></center></td></tr></table>';
pbCode+='<div id="perdone" style="position:absolute; top:1px; left:1px; width:'+barWidth+'px; height:'+barHeight+'px; background-color:'+loadedcolor+'; z-index:100">';
pbCode+='<table cellpadding="0" cellspacing="0" border="0"><tr><td width="'+barWidth+'" height="'+barHeight+'" valign="center" bgcolor="'+loadedcolor+'"><center><font color="'+unloadedcolor+'" size="1" face="sans-serif">Loading Images...</font></center></td></tr></table>';
pbCode+='</div></td></tr></table></div>';
document.write(pbCode); // HTML-Code fuer PB gleich beim Laden des Dokuments schreiben

function checkImgLoaded(k)
{
   (cachedPhotos[k].complete) ? dispbars() : setTimeout('checkImgLoaded('+k+')', 100);
}

// positioniert Progressbar horizontal (zentriert) und vertikal (zentriert + Abweichung von oben)
function setouterpos()
{
   var winWidth=(IE4) ? document.body.clientWidth : window.innerWidth;
   var winHeight=(IE4) ? document.body.clientHeight : window.innerHeight;
   var xPos=(winWidth-barWidth)/2;
   var yPos=(winHeight-barTopPadding-barHeight)/2 + barTopPadding;

   if(IE4||NS6) {
      perouter.style.left=xPos+'px';
      perouter.style.top=yPos+'px';
   }
}

function dispbars()
{   
   remainderTotal+=remainderPerBlock;
   if(remainderTotal >= 1) {
      correction++;
      remainderTotal-=1;
   }
   
   loadedImgCnt++;
   cliplayer(perdone, 0, blockWidth*loadedImgCnt+correction, barHeight, 0);
   if(loadedImgCnt==photos.length) { // alle Fotos fertig geladen
      setTimeout('hideperouter()', 200);
   }
// DEBUG START
//alert("loadedImgCnt: "+loadedImgCnt+"\nWeite: "+eval(blockWidth*loadedImgCnt+correction));
// DEBUG END
}

function hideperouter()
{
// DEBUG START
//alert("in img_preloader.js:\nhideperouter fupFunc: "+followUpFunction);
// DEBUG END
   imagesdone=true;
   perouter.style.visibility="hidden"; // PB ausblenden
   
   // Funktion aufrufen, die regelt, wie es nach dem Ausblenden des Progessbars
   // weitergeht
   window.setTimeout(followUpFunction, 100);
}

function cliplayer(layer, ct, cr, cb, cl)
{
   if(IE4||NS6)
      layer.style.clip='rect('+ct+' '+cr+' '+cb+' '+cl+')';
}

function startProgressbar()
{
   // Sicherstellen, dass die Variablen NS4, NS6, IE4 gesetzt sind
   checkBrowser();
   
   // Progressbar vorbereiten
   if(NS6) {
      perouter=document.getElementById('perouter');
      perdone=document.getElementById('perdone');
   }
   if(IE4) {
      perouter=document.all.perouter;
      perdone=document.all.perdone;
   }
   cliplayer(perdone,0,0,barHeight,0); // Progessbar auf 0 setzen
   window.onresize=setouterpos;
   setouterpos(); // Progessbar positionieren ...
   perouter.style.visibility="visible"; // ... und einblenden
   
   // alle Bilder der Serie cachen
   for(var n=0; n<photos.length; n++) {
      cachedPhotos[n]=new Image();
      cachedPhotos[n].src=photos[n];
      setTimeout('checkImgLoaded('+n+')', (n+1)*100);
   }
}