// Umschalten eines akustischen Datenstroms
//	- zwischen verschiedenen Quellen
//	- mit Verzögerung und ohne Redundanz
//	- mit Kompatibilität bis IE 4 bzw NN 3
// 
// Setzt auf der HTML-Seite voraus:
//	-	optional Redefinition von
//		- defaultfile		// falls Aufruf ohne Argument
//		- timeout			// Verzögerung bis zum Umschalten des Sounds
//		- resdir			// Verzeichnis, unter dem gemeinsam genutzte Ressourcen ("sound.png", "nosound.png", "medien_lader.htm") liegen
// 
// Ansteuerung:
//	
//	Von der ursprünglichen Intention her würde genügen:
//		
//		musik(sounddateiname);		// erzeugt von onMouseOver und onMouseOut an Links mit Musik
//		musik_ein_aus();			// schaltet die automatische Musikumschaltung ein/aus
//		
//		Wirkung:
//			Wenn sich der Sounddateiname seit der letzten Umschaltung geändert hat,
//			wird der Sound timeout nach Aufruf dieser Funktion umgeschaltet,
//			wobei eine eventuell vorher veranlaßte und noch nicht ausgeführte
//			Umschaltung anulliert wird.
//			Die Soundwidergabe erfolgt außerhalb des Browsers
//			mit dem systemweit definierten Werkzeug.
//		
//	Tatsächlich muß zur Erzielung korrekter Verhältnisse der Fokussetzung
//	(was für halbwegs konsistente Navigation notwendig ist)
//	zusätzlich verfolgt werden:
//		
//		onBlur, onFocus, onClick an Links mit Musik
//		onBlur, onFocus am window
//

var undefined;						// für alte IE und NN
w					= window;		// Abkürzung

if (!w.defaultfile)	defaultfile	= "index.mp3";
if (!w.timeout)		timeout		= 1000;			// Umschaltverzögerung [ms]
if (!w.resdir) 		resdir		= "";			// Ressourcen-Verzeichnis

timer				= null;			// aktuell anhängige Sound-Umschaltung
active_name			= "initial";	// aktuelle Sounddatei
musik_ein			= true;			// Sound-Schalter
nfoc				= 0;			// Menge der Fokus-Setzungen im Fenster (bei IE können mehrere Elemente, deren Foki sich "eigentlich" (langfristig) ausschließen, temporär gleichzeitig gesetzt sein, ohne daß dies näher definiert wäre)

// Varianten der Erzeugung der Sound-Umschaltung:
//	0:	mit Layern + (embeds | objects)
//	1:	mit temporär erzeugtem media_loader_window
//	2:	mit stationärem media_loader_window
//	3:	mit eigenem window
variant				= 2;
media_loader_window	= null;


if (variant == 2)
{
	w.setTimeout("init_media_loader();", 0);
	
	init_media_loader = function()
	{
		if (!w.media_loader_window || media_loader_window.closed)
			media_loader_window = w.open(resdir+"medien_lader.htm", "media_loader","width=100,height=100,dependent,resizable=1");
	};
}


musik1 = function(name)
{

	timer = null;
	active_name = name;

	// In allen getesteten Windows-Installationen unter keinen Umständen korrekte MP3-Widergabe...
	if (variant == 0)
	{
		var text = '<embed src="'+name+'" autostart="true" loop="true" hidden="true">';
	
		// Ansteuerung von "document.embeds" nicht standardisiert -> Layer-Methode...
		if (w.document.layers)
		{
			var s = w.document.layers['ml'].document;
			s.open(); s.write(text); s.close();
		}
		else
		{
			w.document.all['ml'].innerHTML = text;
		}
	}

	// Undokumentiert, daß folgende Varianten nicht tatsächlich document.location ändern,
	// sondern einfach nur die angegebene Datei dem als zuständig definierten Programm übergeben...
	// Funktioniert bei IE und NN in allen getesteten Versionen.
	if (variant == 1)
	{
		media_loader_window = open(name, "media_loader", "width=100,height=100,dependent,resizable=1");
		media_loader_window.close();
		w.setTimeout("focus()",500);
	}

	if (variant == 2)
	{
		init_media_loader();
		media_loader_window.document.location = name;
		w.setTimeout("focus()",500);
	}

	if (variant == 3)
	{
		w.location = name;
		w.setTimeout("focus()",500);
	}

	return;
};

// Verzögern der Musik, um den HTML-Aufbau abzuwarten (zwingend für die Layer-Methode)
musik = function(name)
{
	if (timer) w.clearTimeout(timer);

	if (!name) name = defaultfile;

	if (name == active_name)
		timer = null;
	else
		timer = w.setTimeout("musik1('"+name+"');", timeout);
};

// Verwerfen von bereits in Auftrag gegebenen Umschaltungen
reset = function()
{
	if (timer) w.clearTimeout(timer);
	timer = null;
};

// Auto-Musikwechsel nach Mausposition
mi = function(name)		{if (musik_ein && nfoc) musik(name);};
mo = function()			{if (musik_ein && nfoc) musik(    );};
cl = function()			{reset();};

// Fokusverfolgung
fo  = function(inc)
{
	nfoc += inc;
	if (nfoc < 0) nfoc = 0;
	if (nfoc == 0) reset();
};

// Auto-Musik ein/aus
musik_ein_aus = function()
{
	w.document.images["Musik-Schalter"].src = resdir+(musik_ein ? "nosound.png" : "sound.png");
	musik_ein = !musik_ein;

	if (musik_ein) musik();
	else reset();
};

