/**
 ** Code für das dynamische Layout der Seite.
 ** Getestet mit FF2, IE7, Opera9, Safari 3.1.2 Win
 **
 ** Kacheln werden nicht mehr per Javascript generiert.
 **
 ** @version 20080830
 ** @author Joachim Fuchs
 **/

// Wie tief reichen die Content-Boxen in die Seite hinein?
// Wird benötigt um die Kacheln entsprechend weit auszulegen.
var maxOffsetHeight = 0;
// Randbreite der Kacheln
var UNIT_BORDER = 6;
// Breite der Kacheln ohne Rand
var UNIT_WIDTH = 75;
// Höhe der Kacheln ohne Rand
var UNIT_HEIGHT = 112;
// Startpunkt X der Kacheln
var OFFSET_X = 0;
// Startpunkt Y der Kacheln
var OFFSET_Y = 112;
// Speichert die letzte Zufallszahl um zu vermeiden, dass benachbarte Kacheln das gleiche Bild zeigen
var lastRandom;
// Zum Laden des Hintergrundbildes
var backgroundImage;
// verzögerung der Anzeige der Content-Boxen nach Laden der Hintergrundgrafik (in ms)
var showBoxesDelay = 100;

 /*
 * Stößt das Layouten der Inhalts-Boxen und der Kacheln im Hintergrund an.
 *
 * Die Kacheln werden jetzt nicht mehr per Javascript erzeugt sondern
 * als Hintergrundbild vom Server generiert.
 *
 * @version 20080830
 * @author JF
 */
function layoutPage() {
    layoutBoxes();
	initBackground();
}

/**
*	Lädt die Hintergrundgrafik und stößt das weitere Handling an.
*	
*	@version 20080903
*	@author JF
*/
function initBackground() {
	var bd = document.getElementsByTagName('body')[0];
	backgroundImage = new Image();
	backgroundImage.src = 'php/background.php';				
	window.setTimeout('setBackground()', 100);
}

/**
*	Ist die Hintergrundgrafik fertig geladen, wird sie angezeigt 
*	und das Anzeigen der Boxen angestoßen.
*	
*	@version 20080903
*	@author JF
*/
function setBackground() {		
	if (backgroundImage && backgroundImage.complete) {
		var bd = document.getElementsByTagName('body')[0];
		bd.style.backgroundImage = 'url(' + backgroundImage.src + ')';
		window.setTimeout('showBoxes()', showBoxesDelay);
	} else {
		window.setTimeout('setBackground()', 100);
	}
}

/**
*	Zeigt die Content-Boxen, die mit 'later' markiert sind an.
*	
*	@version 20080903
*	@author JF
*/
function showBoxes() {
	var divs = document.getElementsByTagName('div');
	for (var i=0; i<divs.length; i++) {
		if (divs[i].getAttribute('show') == 'later') {
			divs[i].style.visibility = 'visible';
		} 
	}
}


/**
 * Passt die Größe der Boxen an ihren Inhalt an. Mit dem berechneten 'maxOffsetHeight'
 * wird bestimmt, wie weit der Bildschirm mit kacheln gefüllt werden soll.
 *
 * @version 20080827
 * @author JF
 */
function layoutBoxes() {
    maxOffsetHeight = 0;
    for (var i=0; i<document.getElementsByTagName('div').length; i++) {
        
        var container = document.getElementsByTagName('div')[i];

        if (container.getAttribute('container') == 'true') {
            container.parentNode.style.height = getHeight(container) + 'px';   
            var h = parseInt(container.parentNode.style.height);
            if (h > maxOffsetHeight) {
                maxOffsetHeight = h;
            }
        }
    }
    maxOffsetHeight = Math.max(maxOffsetHeight + 100, screen.height);
	var spacer = document.getElementById('spacer');
	if (spacer) {
		spacer.style.top = (maxOffsetHeight + 142) + 'px';
	}
}

/**
*  Liefert die Höhe der Parent-Box, die benötigt wird, damit die übergebene Box
*  dargestellt werden kann ohne eine Kachel teilweise zu überdecken.
*
*  Wird von layoutBoxes() aufgerufen.
*
*  @version 20080830
*  @author JF
*/
function getHeight(container) {
    var result = container.parentNode.offsetHeight;
    while (result < container.offsetHeight) {
        result += UNIT_HEIGHT + 2 * UNIT_BORDER;		
    }
    return result;
}

