//Spezifikation
//Die Seite wird durch die Index Seite in 1 dreitteiliges Frameset aufgebaut.
//durch den sub_menu_index wird das Mainframe wiederum in ein Framset aufgeteilt. Folgende
//Anforderungen sind an den Designer gerichtet.
//Das Hauptfenster muss immer mainFrame sein. Das Menu Frame muss immer menuFrame sein.
//Das mainFrame wird durch Inhalte in submenuFrame und contentFrame geteilt.
//Sollte diese Spezifikation nicht eingehalten werden, funktionieren die page Scripte nicht.
//Weitere Spezifikationen entnehmen SIe bitte den Funktionen.
//------------------------------------------------------------------------------------------*/


//Base URL gibt das Root verzeichniss der Seite an (muss mit slash abschließen)
//Für lokales testen der Seite muss file:/// vor dem pfad angegeben werden (und slash statt backslash)
var base_url = 'http://www.gmw05.de/';

//Hauptindex Seite
var index_page = base_url+'index.html';		
//SubIndex Seite zum laden des Submenus und einer Inhaltsseite
var sub_index_page  = base_url+'redict.htm';
//Seite die als erstes im Mainframe geladen wird
var start_page  = 'sites/index.html';

//Gibt den Container an, in dem der Navbalken gezeichnet werden soll
var nav_bar_container = 'nav_bar';
//gibt den Namen des ersten Eintrags im Navbar an
var home_name = 'home[de]:';

//globale Variable zum angeben ob ein Frameset geladen wurde
var noframe = false;

//Erzeugt ein Feld von Argumenten die an die Seite übergeben wurde
//Dabei ist query_string, der String der mit ? an die URL angefügt wurde (das ? muss aus query_string entfernt sein)
//der String muss URL decodieret sein (keine Charcode für Sonderzeichen wie ? und &)
function query_params(query_string)
{
	var argname = '';
	var data = '';
	var searchstr = query_string;
	var args = new Array();
	var pos = 0;
	
	//solange immer noch ein = zu finden ist
	while ((pos = searchstr.indexOf('='))!=-1)	{
		//den argument namen herausfiltern
		argname = searchstr.substring(0,pos);
		//jetzt den string verkleinern
		searchstr = searchstr.substring(pos+1, searchstr.length);
		//jetzt ein '&' suchen
		if ((pos = searchstr.indexOf('&'))==-1) {
			pos = searchstr.length;
		}
		
		//jetzt die Daten herausfiltern
		data = searchstr.substring(0, pos);
		//und searchstr trimmen
		searchstr = searchstr.substring(pos+1, searchstr.length);
		
		//jetz noch ins array einfügen
		args[argname] = data;
	}

	//Feld liefern
	return args;
}

//Holt die Argumentenliste die an eine Seite übergeben wurde
function get_args(win)
{
	//Paramter holen
	var query_str = win.location.search.substring(1,win.location.search.length);
	return query_params(query_str);
}

//Liefert die URL der Content Seite.
//Wenn args_array gesetzt wird der Argument String nicht nochmal geparst
function get_content_location(win, args_array)
{
	var args = null;
	var ret = start_page;

	//Paramter holen
	if (args_array)
		args = args_array;	else args = get_args(win);
	
	//wenn content gesetzt wurde
	if (args['content'] != null) {
		//und menu gesetzt wurde
		if (args['menu'] != null) {
			ret = sub_index_page + '?menu='+args['menu']+'&content='+args['content'];
		} 
		else { //wenn nur der content gesetzt wurde			
			ret = args['content'];
		}
	}
	return ret;	
}

//Läd das Frameset, wenn es noch nicht geladen wurde, es sei denn es wurde das Argument noframe=1 an 
//die Seite übergeben. Dann kommt der Aufruf aus der Sitemap und das Frameset wird nicht geladen.
//win - das aktuelle Fenster
//menu - url zur submenu Seite zu base_root
//content - url zur Inhaltsseite relativ zu base_root
function load_frameset(win, menu, content)
{
	//Paramter holen
	var args = get_args(win);
	var loadframes = false;
	//noframes ermitteln
	noframe = (args['noframe']=='1');
	
	//schauen ob das Frameset geladen wurde
	if (win.parent) {
		if (win.parent.frames.length == 0) {
			loadframes = true;
		}
	} 
	else {
		loadframes = true;
	}
	
	if (loadframes && !noframe)
	{
		//querystr erzeugen
		query_str = '';
		if (menu)
			query_str = 'menu='+menu;
			
		if (content)
			if (query_str.length > 0)
				query_str = query_str+'&content='+content;
			else
				query_str = 'content='+content;
				
		//Querystring anfügen
		query_str = index_page+'?'+query_str;
		win.location= query_str;
		//reload damit seite sofort geladen wird
		//win.reload();
	}
}			

// erzeugt einen Link mit der SubIndex-Seite wenn menu mit angegeben wird und noframe deaktiviert wurde
// sonst wird content durchgereicht und gegebenenfalls noframe mit rangehängt.
function create_link(menu, content)
{
	var page = base_url;

	//wenn keine Frame dann content durchreichen
	if (noframe)
		page = page+content+'?noframe=1'; 
	else
		//sonst wenn menu dann sub_index_page mit parametern erzeugen
		if (menu)
			page = sub_index_page+'?menu='+menu+'&content='+content;
		else
			//sonst nur content einfach druchreichen
			page = page+content;
			
	return page;
}

//Öffnet einen Link in dem angegebenen Target. Dabei wird entschieden ob der Link in dem Parentfenster
//oder im katuellen geöffnet wird. Ist menu gesetzt, muss die sub_index_page neu geladen werden (im Parentframe)
//mit dem angegeben menu und dem content. ist nur der content gesetzt wird der Link im aktuellen Frame geladen.
//Ist noframe aktiv so wird menu nicht beachtet und die Seite im aktuellen Fenster geladen.
//win - aktuelles Fenster
//menu - submenu relativ zu base_root
//content - inhalt relativ zu base_root
//no_winchage - (true, false) gibt an dass die Seite ins aktuelle Fenster und nicht in den Parent geladen werden
function open_link(win, menu, content, no_winchange)
{
	//Link erstellen
	var page = create_link(menu, content);
	//wenn menu gesetzt wurde und noframe nicht aktiv ist dann im Parent laden
	if (menu && !noframe && !no_winchange)
		win.parent.location = page; 
	//sonst ist nur content oder noframe	
	else 
		win.location = page;
}

//-------------------------------------------------------------------------------------------------------------------//
// Funktionen zum erzeugen des Navibars
// Diese nachfolgenden Funktionen unterliegen der obgenannten Spezifikation und sollten nur mit dem automatischen 
// Frameset eingesetzt werden.
//-------------------------------------------------------------------------------------------------------------------//

//Findet das Menuframe aus dem geladen Frameset
//interne Funktion
function find_menu_frame()
{
	//wenn die Anzahl der Frames >=5 beträgt dann ist mit Border geladen
	//und das menuframe ist dann das 1 Frame (0 ist left_border)
	if (top.frames.length >= 5)
		return top.frames[1];
	else
		//sonst ist kein Border und das Frameset besteht aus >=3 Frame
		//dass menuframe ist dann das 0 Frame
		if (top.frames.length >= 3)
			return top.frames[0];
		else 
			alert("Seite läuft außerhalb der Spezifikation. Bitte überprüfen sie das Frameset.");
}


//Erzeugt einen neuen Nav Eintrag
//in_main_frame gibt an dass die Seite auch ohne submenu in das mainFrame geladen werden soll
function naventry(name, menu, content, in_main_frame)
{
	//link erzeugen
	this.lnk = create_link(menu, content);
	//Je nach dem ob menu oder nicht menu parent laden
	if (noframe)
		this.target = '_top';
	else	
		if (menu || in_main_frame)
			this.target = 'mainFrame';
	else
		this.target = 'contentFrame';

	//name setzen
	this.name = name;
}

//einen neuen Navbar erzeugen, dazu muss das Fenster übergeben werden, in dem der Navbar erzeugt wird
function navbar()
{
	//array für die Button eintragen
	this.entrys = new Array();
	this.index = 1;	//da erster eintrag home
	//und home eintrag hinzufügen
	this.entrys[0] = new naventry(home_name, null, start_page, true);
}

//neune naventry dem Navbar hinzufügen
//nav_bar - objekt welches durch new navbar erzeugt wurde
//in_main_frame gibt an dass die Seite auch ohne submenu in das mainFrame geladen werden soll
function add_naventry(nav_bar, name, menu, content, in_main_frame)
{
	nav_bar.entrys[nav_bar.index] = new naventry(name, menu, content, in_main_frame);
	++nav_bar.index;
}

//Zeichnet die Navigationsbalken im Menuframe oder wenn noframe oder in_doc angegeben sind im aktuellen Dokument.
//alle Links des Navigationsbalken werden der nav_lnk Klasse zugewiesen. draw_navbar zeichnet nur eine Ansammlung von
//Links in Dokument. Es kümmert sich nicht um Ausrichtung aussehen. Für das Zeichen gilt das im
//Document oder Menu ein Container mit dem Namen <nav_bar_container> (wert von nav_bar_container) gibt.
//Diese Methode darf erst im Body aufgerufen werden.
//in_doc - ins aktuelle dokument zeichnen
function draw_navbar(win, nav_bar, in_doc)
{
	var target = null;
	var lnk_str = '';
	var nav_bar_str = '';
	var container = null;
	var el,i;
	
	//target suchen wohin gezeichnet wird
	if (in_doc || noframe)
		target = win; 
	else
		target = find_menu_frame();
		
	//container ermitteln
	if (target.document.getElementById)
		container = target.document.getElementById(nav_bar_container);
	else
		container = target.document.all[nav_bar_container];
	
	//wenn target gesetzt und nav_bar_container gefunden wird dann
	if (target)
		if (container)
		{
			nav_bar_str = '';
			//alle Elemente durchlaufen
			for (i=0; i<nav_bar.index; i++)
			{
				//link erzeugen
				el = nav_bar.entrys[i];
				lnk_str = '<a href=\"'+el.lnk+'\" target=\"'+el.target+'\" class=\"nav_lnk\">'+el.name+'</a>';
				//an den gesammten string anfügen
				if (i == 0)
					nav_bar_str = lnk_str;
				else
					nav_bar_str = nav_bar_str +' / '+ lnk_str;
			}
			
			//jetzt noch den String ausgeben
			with (container)
			{
			    if (document.layers) {
					document.write(nav_bar_str); 
					document.close();
				}
			    else innerHTML = nav_bar_str;
			}
			if (container.visibility)
				container.visibility = "show"; else container.style.visibility="visible";
		}
}