var lineVertex	=	new Image();
	lineVertex.src	=	__path_to_resources__+'/img/sitemap_vertikal.gif'; // __path_to_resources__ wird im Toptemplate definiert
var tVertex	=	new Image();
	tVertex.src	=	__path_to_resources__+'/img/sitemap_split.gif';
var lVertex	=	new Image();
	lVertex.src	=	__path_to_resources__+'/img/sitemap_ecke.gif';
var emptyVertex	=	new Image();
	emptyVertex.src	=	__path_to_resources__+'/img/spacer.gif';

var rootNode	=	new Image();
	rootNode.src	=	__path_to_resources__+'/img/sitemap_home_2.gif';

var nodeWithChild	=	// Hier werden die Grafiken festgelegt, die einen Knoten darstellen, an dem weitere Unterknoten hängen.
	[
    	new Image(),	//level 1
        new Image(),	//level 2
        new Image()		//level 3
	]
;
	nodeWithChild[0].src	=	__path_to_resources__+'/img/sitemap_stufe1.gif';
	nodeWithChild[1].src	=	__path_to_resources__+'/img/sitemap_stufe2.gif';
	nodeWithChild[2].src	=	__path_to_resources__+'/img/sitemap_stufe3.gif';

var nodeWithoutChild	=	// Hier werden die Grafiken festgelegt, die einen Knoten darstellen, an dem keine weiteren Unterknoten hängen.
	[                     // In diesem Fall sind die Grafiken identisch.
    	new Image(),	//level 1
        new Image(),	//level 2
        new Image()		//level 3
	]
;
	nodeWithoutChild[0].src	=	__path_to_resources__+'/img/sitemap_stufe1.gif';
	nodeWithoutChild[1].src	=	__path_to_resources__+'/img/sitemap_stufe2.gif';
	nodeWithoutChild[2].src	=	__path_to_resources__+'/img/sitemap_stufe3.gif';

var sitetreeArray	=	new Array();

function drawSitemap() // aus dem HTML-Code heraus aufgerufene Funktion
{
    var lastNavigationChildIndex	=	-1;

    for(i=0;i<theSitetree.length;i++)
    {
        if(theSitetree[i][POS_ISNAVIGATION]=='true') lastNavigationChildIndex	=	i;
    } // lastNavigationChildIndex erhält den Indexwert desjenigen Eintrags des theSitetree Arrays aus dem sitetree.js, der den letzten Navigationspunkt enthält.

    for(i=0;i<theSitetree.length;i++)
    {
	       build(
        	theSitetree[i], // i-tes Arrayelement
            0,   // oberste Hierarchiestufe der Navigation
            new Array(0),
            (i==0),		// true, fuer den ersten Hauptpunkt
            (i==lastNavigationChildIndex) // true wenn dasjenige Arrayelement prozessiert wird, das den letzten Navigationspunkt der obersten Navigationsebene darstellt
            
       	);
    }

    // Die Sitemap befindet sich nun inklusive aller Bilder, Texte und Links im Array sitetreeArray

    document.write('<table cellspacing="0" cellpadding="0" border="0" width="300">'); // Die umschließende Tabelle.
    document.write('<tr><td height="14" width="15"><img src=\"'+rootNode.src+'" width="15" height="14"></td><td width="285" colspan="'+(sitetreeArray[0].length-2)+'">&nbsp;</td></tr>'); // Die Zeile, in der der Wurzelknoten angezeigt wird.
    for(i=0;i < sitetreeArray.length;i++) // alle Zeilen werden durchlaufen
	{
    	
    
        document.write('<tr>');
        for(var j=0;j < sitetreeArray[i].length;j++) // alle Zellen werden durchlaufen
                {
        	if(sitetreeArray[i][j]!=null) // hier wird geprüft, ob überhaupt etwas in der j-ten Zelle der i-ten Zeile steht
            {	
            	
           		
                if(typeof(sitetreeArray[i][j])== 'string')
                { // falls Text in der j-ten Zelle der i-ten Zeile des sitetreeArray steht, wird dieser Text verlinkt in das Dokument geschrieben.
            		document.write('<td align="left" height="14" width="'+(300-j*15)+'" colspan="'+(sitetreeArray[i].length-j-1)+'"><a href="'+sitetreeArray[i][j+1]+'">'+sitetreeArray[i][j]+'</a></td>');
                    j++;
                }
                else
                { // andernfalls ist eine Grafik in der j-ten Zelle
            		document.write('<td height="14 width="15"><img border="0" src="'+sitetreeArray[i][j].src+'" width="15" height="14"></td>');
            		
                }
			
            }
        }
        document.write('</tr>');
    }
    document.write('</table>');

}



function build // Diese Funktion baut rekursiv den sitetreeArray, der Zeile für Zeile die Zusammenstellung aus
	(            // Bildern und Text enthält.
    	pageArray,
        level,
        vertexArray,
        isFirstNavigationChild,
        isLastNavigationChild
    )
{
	if(pageArray[POS_ISNAVIGATION]=='true') // nur etwas tun, wenn das übergebene Arrayelement ein Navigationspunkt ist
    {

		if (!isFirstNavigationChild && level == 0) {
			var sitetreeArrayRow	=	new Array(6);
			sitetreeArrayRow[0] = lineVertex;
			for (var i=1;i<6;i++)
				sitetreeArrayRow[i] = emptyVertex;
				sitetreeArray[sitetreeArray.length]	=	sitetreeArrayRow;
		} 
		




        var thisVertexArray	=	new Array(level+1); // Dieser Array wird beim rekursiven Aufruf von build als vertexArray übergeben
        var i;                                    // und enthält Kombinationen von nebeneinanderstehenden Grafiken
        var sitetreeArrayRow	=	new Array(6); // Eine Zeile im Sitetree enthält max. 4 Grafiken, den Text und den HRef
                                              // also 6 Elemente.
                                              
        for(i=0;i<level;i++)
        {
            sitetreeArrayRow[i]	=	vertexArray[i];
            thisVertexArray[i]	=	vertexArray[i];
        }

		if(isLastNavigationChild)
        {
            sitetreeArrayRow[i]	=	lVertex; // L - Stück als Abschluss
            thisVertexArray[i]	=	emptyVertex; // transparentes Gif
        }else
        {
            sitetreeArrayRow[i]	=	tVertex; // T - Stück (um 90 Grad gegen den Uhrzeigersinn gedreht)
            thisVertexArray[i]	=	lineVertex; // I - Stück, vertikale Linie
        }

        i++;
        if(hasNavigationChildren(pageArray))
        {
            sitetreeArrayRow[i]	=	nodeWithChild[level];
        }else
        {
            sitetreeArrayRow[i]	=	nodeWithoutChild[level];
        }
        i++;
        sitetreeArrayRow[i]	=	pageArray[POS_NAVIGATIONTEXT]; // Das i-te Element von links erhält den Navigationstext aus dem sitetree.js
        if(sitetreeArrayRow[i]=='')	sitetreeArrayRow[i]	=	pageArray[POS_NAME]; // Falls der Navigationstext leer ist, wird der Name eingesetzt.
        i++;

        sitetreeArrayRow[i]	=	__path_prefix__+pageArray[POS_HREF]; // Der Link wird als i-tes Element in die Zeile des sitetreeArray geschrieben.
                                                                  // __path_prefix__ ist eine CM4all-Javascript-Variable, siehe die Template-Doku.
        sitetreeArray[sitetreeArray.length]	=	sitetreeArrayRow;

        var lastNavigationChildIndex	=	-1;

        for(i=0;i<pageArray[POS_CHILDS].length;i++)
        {
            if(pageArray[POS_CHILDS][i][POS_ISNAVIGATION]=='true') lastNavigationChildIndex	=	i;
        }

        for(i=0;i<pageArray[POS_CHILDS].length;i++)
        {
            build(
            	pageArray[POS_CHILDS][i],
                level+1,
                thisVertexArray,
                (i==0),
                (i==lastNavigationChildIndex)
           	);
        }
    }
}


function hasNavigationChildren(pageArray) // hier wird geprüft, ob der übergebene Navigationspunkt Unterpunkte hat.
{                                         // Der Navigationspunkt entspricht hier einem Array aus dem sitetree.js

    var children	=	pageArray[POS_CHILDS];

    for(var i=0;i<children.length;i++)
    {
        if(children[i][POS_ISNAVIGATION]=='true') return true;
    }

    return false;
}

