/* Global Variables */
var listRoot;			// reference to the Linked List Root
var counter=0;			// id counter

/* Constructor of listItem */
function listItem()
{
	// public constants

	// public variables
							// Linked List Controlls
	this.parent = null;		// Parent in Level structure
	this.child = null;		// Next Child in Level structure
	this.next = null;		// Next Item in linked-list

	this.id	= null;			// Single List Element properties
	this.caption = null;
	this.href = null;
	this.icon = null;
	this.isOpen = null;
	this.isVisible = null;

	// public methods

	this.createRoot = createRoot;	// Initialize a Linked List and create the ROOT-NODE
	this.insertItem = insertItem;	// Insert a Item into the Linked List
	this.renderAll	= renderAll;	// Render the whole Linked List to HTML
	this.propagateProperties = propagateProperties;		// self-explaining
	this.clickOnItem = clickOnItem; // View logic after a click on an Item

}

function insertItem (tree, parent, caption, href)
{
	itm = new listItem();			// Generate new Item
	itm.parent = parent;		// Set Parent of new Item
	itm.caption = caption;		// Set Caption of new Item
	itm.href = href;
	itm.isOpen = 0;				// All Folders are closed at the begining
	itm.isVisible = 1;			// All Folders are visible at the begining
	
	var cursor = parent;

	if (parent == tree)				// Item belongs to the uppermost level
	{
		while (cursor.next != null)	// Let the new Item descend to the end of the Linked List
			cursor = cursor.next;
		
		cursor.next = itm;			// Link the last Item in the Linked List to the present one.
	} 
	else							// Item has a Parent in a upper level
	{

		while (cursor.parent == parent && cursor.next != null)
			cursor = cursor.next;	// Seek the last Item belonging to that level

		var dummy = cursor.next;	// Insert the new Item at the end of the Level
		cursor.next = itm;			// it belongs to
		itm.next = dummy;
		parent.child = itm;			// Set Parent's child to the new Item
	}
	
	itm.id = ++counter;			// Increase ID and write back to new Item
	
	return (itm);
}

function createRoot ()
{
	itm = new listItem();
	itm.isOpen = 1;
	itm.isVisible = 1;
	itm.id = 0;
	return (itm);
}

function renderAll (tree)
{
	var item, output;
	item = tree;
	output = "";	

	while (item.next != null)
	{
		item = item.next;
		output += "<div id=\""+item.id+"\"";
		if (item.isOpen == 0 && item.parent != tree)
			output += " class='browserMenuElementChild' style='display: none;'";
		else
			output += " class='browserMenuElement'";
		output += ">";
		output += "<table border=0 cellpadding=0 cellspacing=1 border=0><tr>";

		var dummy = item;
		var c=0;
		while (dummy.parent != tree)
		{
			c++;
			dummy = dummy.parent;
		}

		if (item.child != null)
			output += "<td width="+c*5+">&nbsp;</td><td valign=\"top\" width=13><a href='javascript:clickOnItem(\""+item.id+"\",\"none\")'><img id=\"icon_"+item.id+"\" src=\"images/browser/ftv2pnode.gif\" border=0></a></td><td>&nbsp;</td>";
		else
			output += "<td width="+c*5+">&nbsp;</td><td width=13>&nbsp;</td><td>&nbsp;</td>";

		output += "<td valign=\"middle\"><a href='javascript:clickOnItem(\""+item.id+"\",\""+item.href+"\")'>"+item.caption+"</a></td>";

		output += "</tr></table>";
		output += "</div>";
	}


	//document.write(output);
	return (output);
}

function propagateProperties(item)
{
	var cursor = item.next;
	var isVisible = item.isVisible;
	while (cursor.next != null)
	{
		while (cursor.parent == item)
		{
			cursor.isVisible = isVisible;
	
			obj = document.getElementById(cursor.id);
			if (isVisible)
				obj.style.display = 'block';
			else		
				obj.style.display = 'none';
		
			if (cursor.child != null && cursor.isOpen)
				propagateProperties (cursor);
			
			cursor = cursor.next;
		}
		
		if (cursor.next != null)
			cursor = cursor.next;
	}	

}


		try{
           		req = new XMLHttpRequest();
      		}
		catch (e){
			try{
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e){
				try{
                 			req = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (failed){
					req = null;
				}
			}  
		}
function receiveFunction(){
			switch(req.readyState)
			{
				case 1,2,3:
					document.getElementById('chiBrowserContent').innerHTML = 'downloading...';
				case 4:
					if(req.status!=200) {
					    document.getElementById('chiBrowserContent').innerHTML = "Fehler:"+req.status; 
					}else{    
					    //schreibe die antwort in den div container mit der id content 
					    document.getElementById('chiBrowserContent').innerHTML = req.responseText;
					}
				break;
				
				default:
				    return false;
					break;     
			}
		}
function clickOnItem(id, href)
{	
	var cursor = listRoot;

	if (href != "none" && href != "?")
	{
		//remove anchors for IE (not working anyway)
		if (href.indexOf("#") > 0)
		{
			href = href.substr(0,href.indexOf("#"));
		}
		href = 'demo/' + href;
		req.open('GET', href, true);
		//req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.onreadystatechange = receiveFunction;
		req.send(null);


	} else {
		document.getElementById('chiBrowserContent').innerHTML = "<h2>Demo</h2>Die Seite die Sie versuchen aufzurufen is in der Demo nicht beinhaltet! Die Demo-Version umschliesst folgende Kapitel:<ul><li>Kapitel 1 - Die Welt der Teilchen</li><li>Anhang A - Bedeutende Namen</li><li>Anhang D - Glossar</li></ul>";
	}


	if (id != null)
	{
		while (cursor.id != id)			// Descend the List until we've got the Item with
			cursor = cursor.next;		// the coresponding ID
	
		if (cursor.child != null)
			obj = document.getElementById("icon_"+cursor.id);
	
		if (cursor.isOpen == 1)
		{
			cursor.isOpen = 0;	
			cursor.isVisible = 0;
			obj.src = "images/browser/ftv2pnode.gif"
		}
		else
		{	
			cursor.isOpen = 1;
			cursor.isVisible = 1;
			obj.src = "images/browser/ftv2mnode.gif"
		}
		if (cursor.next != null)
		{
			propagateProperties(cursor);
		}
	}

}

function debug(tree)
{
	var item, output;
	item = tree;
	output = "--------------- debug -----------------<br>";
	while (item.next != null)
	{
		item = item.next;
		output += "id: "+ item.id+" / caption: "+ item.caption+" / parent: "+item.parent.caption+" / child: "+item.child+"<br>";
	}
	output += "---------------------------------------<br>";
	document.write("<div id=\"debug\">"+output+"</div>");
}





















/* Main Function called from outside */
function GenerateMenu()
{

var tree, dummy;
	
/* here comes the menu stucture */



foldersTree = createRoot();
listRoot=foldersTree;


	aux1 = insertItem(foldersTree, foldersTree, "Vorwort", "vorwort.htm");
	aux2 = insertItem(foldersTree, foldersTree, "1 - Die Welt der Teilchen", "kap1/kap1.htm");
		aux2_8 = insertItem(foldersTree, aux2, "1.8 - Web-Links", "kap1/kap18.htm");
		aux2_7 = insertItem(foldersTree, aux2, "1.7 - Literatur", "kap1/kap17.htm");
		aux2_6 = insertItem(foldersTree, aux2, "1.6 - Lernkontrolle", "kap1/kap16.htm");
		aux2_5 = insertItem(foldersTree, aux2, "1.5 - Übungsaufgaben", "kap1/kap15.htm");
		aux2_4 = insertItem(foldersTree, aux2, "1.4 - Stoffgemische und reine Stoffe", "kap1/kap14.htm");
		aux2_3 = insertItem(foldersTree, aux2, "1.3 - Gasgesetze", "kap1/kap13.htm");
		aux2_2 = insertItem(foldersTree, aux2, "1.2 - Die Aggregatszustände", "kap1/kap12.htm");
		aux2_1 = insertItem(foldersTree, aux2, "1.1 - Die Stoffmenge", "kap1/kap11.htm");
	aux3 = insertItem(foldersTree, foldersTree, "2 - Der Aufbau der Atome", "?");
		aux3_7 = insertItem(foldersTree, aux3, "2.7 - Web-Links", "?");
		aux3_6 = insertItem(foldersTree, aux3, "2.6 - Literatur", "?");
		aux3_5 = insertItem(foldersTree, aux3, "2.5 - Lernkontrolle", "?");
		aux3_4 = insertItem(foldersTree, aux3, "2.4 - Übungsaufgaben", "?");
		aux3_3 = insertItem(foldersTree, aux3, "2.3 - Die Elektronenhülle", "?");
		aux3_2 = insertItem(foldersTree, aux3, "2.2 - Der Atomkern", "?");
		aux3_1 = insertItem(foldersTree, aux3, "2.1 - Das Kern-Hülle-Modell", "?");
	aux4 = insertItem(foldersTree, foldersTree, "3 - Bindungslehre", "?");
		aux4_9 = insertItem(foldersTree, aux4, "3.9 - Web-Links", "?");
		aux4_8 = insertItem(foldersTree, aux4, "3.8 - Literatur", "?");
		aux4_7 = insertItem(foldersTree, aux4, "3.7 - Lernkontrolle", "?");
		aux4_6 = insertItem(foldersTree, aux4, "3.6 - Übungsaufgaben", "?");
		aux4_5 = insertItem(foldersTree, aux4, "3.5 - Zwischenpartikuläre Kräfte", "?");
		aux4_4 = insertItem(foldersTree, aux4, "3.4 - Die Metallbindung", "?");
		aux4_3 = insertItem(foldersTree, aux4, "3.3 - Die Ionenbindung", "?");
		aux4_2 = insertItem(foldersTree, aux4, "3.2 - Die kovalente Bindung (Atombindung)", "?");
		aux4_1 = insertItem(foldersTree, aux4, "3.1 - Einleitung", "?");
	aux5 = insertItem(foldersTree, foldersTree, "4 - Die Lehre von den Stoffen", "?");
		aux5_13 = insertItem(foldersTree, aux5, "4.13 - Web-Links", "?");
		aux5_12 = insertItem(foldersTree, aux5, "4.12 - Literatur", "?");
		aux5_11 = insertItem(foldersTree, aux5, "4.11 - Lernkontrolle", "?");
		aux5_10 = insertItem(foldersTree, aux5, "4.10 - Übungsaufgaben", "?");
		aux5_9 = insertItem(foldersTree, aux5, "4.9 - Trends im Periodensystem", "?");
		aux5_8 = insertItem(foldersTree, aux5, "4.8 - Die Übergangsmetalle", "?");
		aux5_7 = insertItem(foldersTree, aux5, "4.7 - Die Elemente Kohlenstoff und Silizium", "?");
		aux5_6 = insertItem(foldersTree, aux5, "4.6 - Die Elemente Stickstoff und Phosphor", "?");
		aux5_5 = insertItem(foldersTree, aux5, "4.5 - Die Chalkogene", "?");
		aux5_4 = insertItem(foldersTree, aux5, "4.4 - Die Halogene", "?");
		aux5_3 = insertItem(foldersTree, aux5, "4.3 - Die Edelgase", "?");
		aux5_2 = insertItem(foldersTree, aux5, "4.2 - Die Erdalkalimetalle", "?");
		aux5_1 = insertItem(foldersTree, aux5, "4.1 - Die Alkalimetalle", "?");
	aux6 = insertItem(foldersTree, foldersTree, "5 - Salze in wässrigen Lösungen", "?");
		aux6_9 = insertItem(foldersTree, aux6, "5.9 - Web-Links", "?");
		aux6_8 = insertItem(foldersTree, aux6, "5.8 - Literatur", "?");
		aux6_7 = insertItem(foldersTree, aux6, "5.7 - Lernkontrolle", "?");
		aux6_6 = insertItem(foldersTree, aux6, "5.6 - Übungsaufgaben", "?");
		aux6_5 = insertItem(foldersTree, aux6, "5.5 - Eigenschaften von Lösungen", "?");
		aux6_4 = insertItem(foldersTree, aux6, "5.4 - Komplexionen", "?");
		aux6_3 = insertItem(foldersTree, aux6, "5.3 - Das Löslichkeitsprodukt", "?");
		aux6_2 = insertItem(foldersTree, aux6, "5.2 - Löslichkeiten", "?");
		aux6_1 = insertItem(foldersTree, aux6, "5.1 - Der Lösungsvorgang", "?");
	aux7 = insertItem(foldersTree, foldersTree, "6 - Reaktionslehre", "?");
		aux7_9 = insertItem(foldersTree, aux7, "6.9 - Web-Links", "?");
		aux7_8 = insertItem(foldersTree, aux7, "6.8 - Literatur", "?");
		aux7_7 = insertItem(foldersTree, aux7, "6.7 - Lernkontrolle", "?");
		aux7_6 = insertItem(foldersTree, aux7, "6.6 - Übungsaufgaben", "?");
		aux7_5 = insertItem(foldersTree, aux7, "6.5 - Chemie in Technik und Umwelt", "?");
		aux7_4 = insertItem(foldersTree, aux7, "6.4 - Das chemische Gleichgewicht", "?");
		aux7_3 = insertItem(foldersTree, aux7, "6.3 - Thermodynamik", "?");
		aux7_2 = insertItem(foldersTree, aux7, "6.2 - Kinetik", "?");
		aux7_1 = insertItem(foldersTree, aux7, "6.1 - Stöchiometrie", "?");
	aux8 = insertItem(foldersTree, foldersTree, "7 - Säuren und Basen", "?");
		aux8_9 = insertItem(foldersTree, aux8, "7.9 - Web-Links", "?");
		aux8_8 = insertItem(foldersTree, aux8, "7.8 - Literatur", "?");
		aux8_7 = insertItem(foldersTree, aux8, "7.7 - Lernkontrolle", "?");
		aux8_6 = insertItem(foldersTree, aux8, "7.6 - Übungsaufgaben", "?");
		aux8_5 = insertItem(foldersTree, aux8, "7.5 - Neutralisationen", "?");
		aux8_4 = insertItem(foldersTree, aux8, "7.4 - Pufferlösungen", "?");
		aux8_3 = insertItem(foldersTree, aux8, "7.3 - Säurestärke und Berechnung von pH-Werten", "?");
		aux8_2 = insertItem(foldersTree, aux8, "7.2 - Die pH-Skala, Indikatoren", "?");
		aux8_1 = insertItem(foldersTree, aux8, "7.1 - Säuren und Basen nach Brönsted", "?");
	aux9 = insertItem(foldersTree, foldersTree, "8 - Redoxreaktionen", "?");
		aux9_9 = insertItem(foldersTree, aux9, "8.9 - Web-Links", "?");
		aux9_8 = insertItem(foldersTree, aux9, "8.8 - Literatur", "?");
		aux9_7 = insertItem(foldersTree, aux9, "8.7 - Lernkontrolle", "?");
		aux9_6 = insertItem(foldersTree, aux9, "8.6 - Übungsaufgaben", "?");
		aux9_5 = insertItem(foldersTree, aux9, "8.5 - Korrosion", "?");
		aux9_4 = insertItem(foldersTree, aux9, "8.4 - Elektrolysen", "?");
		aux9_3 = insertItem(foldersTree, aux9, "8.3 - Akkumulatoren", "?");
		aux9_2 = insertItem(foldersTree, aux9, "8.2 - Galvanische Zellen", "?");
		aux9_1 = insertItem(foldersTree, aux9, "8.1 - Oxidationszahlen", "?");
	aux10 = insertItem(foldersTree, foldersTree, "9 - Organische Chemie", "?");
		aux10_13 = insertItem(foldersTree, aux10, "9.13 - Web-Links", "?");
		aux10_12 = insertItem(foldersTree, aux10, "9.12 - Literatur", "?");
		aux10_11 = insertItem(foldersTree, aux10, "9.11 - Lernkontrolle", "?");
		aux10_10 = insertItem(foldersTree, aux10, "9.10 - Übungsaufgaben", "?");
		aux10_9 = insertItem(foldersTree, aux10, "9.9 - Proteine", "?");
		aux10_8 = insertItem(foldersTree, aux10, "9.8 - Kohlenhydrate", "?");
		aux10_7 = insertItem(foldersTree, aux10, "9.7 - Kunststoffe", "?");
		aux10_6 = insertItem(foldersTree, aux10, "9.6 - Lipide und Seifen", "?");
		aux10_5 = insertItem(foldersTree, aux10, "9.5 - Funktionelle Gruppen", "?");
		aux10_4 = insertItem(foldersTree, aux10, "9.4 - Organische Reaktionen", "?");
		aux10_3 = insertItem(foldersTree, aux10, "9.3 - Chiralität", "?");
		aux10_2 = insertItem(foldersTree, aux10, "9.2 - Kohlenwasserstoffe", "?");
		aux10_1 = insertItem(foldersTree, aux10, "9.1 - Petrochemie", "?");
	aux11 = insertItem(foldersTree, foldersTree, "10 - Farbstoffe und Farben", "?");
		aux11_13 = insertItem(foldersTree, aux11, "10.10 - Web-Links", "?");
		aux11_12 = insertItem(foldersTree, aux11, "10.9 - Literatur", "?");
		aux11_11 = insertItem(foldersTree, aux11, "10.8 - Lernkontrolle", "?");
		aux11_10 = insertItem(foldersTree, aux11, "10.7 - Übungsaufgaben", "?");
		aux11_6 = insertItem(foldersTree, aux11, "10.6 - Lebensmittelfarbstoffe", "?");
		aux11_5 = insertItem(foldersTree, aux11, "10.5 - Färbeverfahren", "?");
		aux11_4 = insertItem(foldersTree, aux11, "10.4 - Organische Absorptionsfarben", "?");
		aux11_3 = insertItem(foldersTree, aux11, "10.3 - Anorganische Absorptionsfarben", "?");
		aux11_2 = insertItem(foldersTree, aux11, "10.2 - Emissionsfarben", "?");
		aux11_1 = insertItem(foldersTree, aux11, "10.1 - Phänome Farbe", "?");
	aux12 = insertItem(foldersTree, foldersTree, "11 - Analytische Chemie", "?");
		aux12_9 = insertItem(foldersTree, aux12, "11.9 - Web-Links", "?");
		aux12_8 = insertItem(foldersTree, aux12, "11.8 - Literatur", "?");
		aux12_7 = insertItem(foldersTree, aux12, "11.7 - Lernkontrolle", "?");
		aux12_6 = insertItem(foldersTree, aux12, "11.6 - Übungsaufgaben", "?");
		aux12_5 = insertItem(foldersTree, aux12, "11.5 - Massenspektrometrie MS", "?");
		aux12_4 = insertItem(foldersTree, aux12, "11.4 - NMR - Spektroskopie", "?");
		aux12_3 = insertItem(foldersTree, aux12, "11.3 - IR - Spektroskopie", "?");
		aux12_2 = insertItem(foldersTree, aux12, "11.2 - UV/VIS - Spektroskopie", "?");
		aux12_1 = insertItem(foldersTree, aux12, "11.1 - Einleitung", "?");
	aux13 = insertItem(foldersTree, foldersTree, "12 - Vitamine", "?");
		aux13_6 = insertItem(foldersTree, aux13, "12.6 - Web-Links", "?");
		aux13_5 = insertItem(foldersTree, aux13, "12.5 - Literatur", "?");
		aux13_4 = insertItem(foldersTree, aux13, "12.4 - Lernkontrolle", "?");
		aux13_3 = insertItem(foldersTree, aux13, "12.3 - Die wasserlöslichen Vitamine", "?");
		aux13_2 = insertItem(foldersTree, aux13, "12.2 - Die fettlöslichen Vitamine", "?");
		aux13_1 = insertItem(foldersTree, aux13, "12.1 - Einleitung", "?");
	aux14 = insertItem(foldersTree, foldersTree, "13 - Stoffwechsel", "?");
		aux14_9 = insertItem(foldersTree, aux14, "13.9 - Web-Links", "?");
		aux14_8 = insertItem(foldersTree, aux14, "13.8 - Literatur", "?");
		aux14_7 = insertItem(foldersTree, aux14, "13.7 - Lernkontrolle", "?");
		aux14_6 = insertItem(foldersTree, aux14, "13.6 - Verknüpfungen im Zellstoffwechsel", "?");
		aux14_5 = insertItem(foldersTree, aux14, "13.5 - Der Fettabbau", "?");
		aux14_4 = insertItem(foldersTree, aux14, "13.4 - Der Harnstoffzyklus", "?");
		aux14_3 = insertItem(foldersTree, aux14, "13.3 - Der Citronensäurezyklus", "?");
		aux14_2 = insertItem(foldersTree, aux14, "13.2 - Die Glycolyse", "?");
		aux14_1 = insertItem(foldersTree, aux14, "13.1 - Der Energietransport", "?");
	aux15 = insertItem(foldersTree, foldersTree, "14 - Formeln", "?");
		aux15_1 = insertItem(foldersTree, aux15, "14.1 - Einheiten und Konstanten", "?");


	aux20 = insertItem(foldersTree, foldersTree, "A - Bedeutende Namen", "bednam/bedeutendenamen.htm");	
	aux21 = insertItem(foldersTree, foldersTree, "B - Timeline", "?");
	aux22 = insertItem(foldersTree, foldersTree, "C - Animationen", "?");
	aux23 = insertItem(foldersTree, foldersTree, "D - Glossar", "glossar/glossar.htm");
	aux24 = insertItem(foldersTree, foldersTree, "E - Nobelpreise", "?");
	aux25 = insertItem(foldersTree, foldersTree, "F - Periodensystem ", "?");
	aux26 = insertItem(foldersTree, foldersTree, "G - Tabellen ", "?");


	
tail = insertItem(foldersTree,foldersTree,"","");

return renderAll (foldersTree);

}


function startChiBrowser()
{

	var chiBrowser = document.getElementById('chiBrowser');
	
	chiBrowser.style.width = '100%';
	chiBrowser.style.height = '600px';
	chiBrowser.style.background = '#FFF';
	chiBrowser.style.border = '0px solid #AAA';
	
	chiBrowser.innerHTML = '<div id="chiBrowserMenu">menu</div><div id="chiBrowserContent"><div align="center"><br><br><br><br><img src="images/browser/browser_logo.jpg"><br><br><br><img src="uploads/chi_letter_25.gif"><br><h4>BROWSER v4.0 (Demo)</h4></div></div>';
	
	
	var chiBrowserMenu = document.getElementById('chiBrowserMenu');	
	chiBrowserMenu.innerHTML = GenerateMenu();
	
	var chiBrowserContent = document.getElementById('chiBrowserContent');
	
}
