// -------------- Initialisierung ----------------------------
objPixel = new Image();
objPixel.src='../../images/pixel_black.gif';
DFS = new Object();


// -------------- Funktionen ---------------------------------

// Wrapperfunktion zum starten oder stoppen einer Show für einen Imageknoten
function StartStopShow (TagId,Mode,Direction) {

	switch (Mode) {
		case 'start':
			// Aktives setTimeout abbrechen falls vorhanden
			if (DFS[TagId][3]) {clearTimeout(DFS[TagId][3])};
			// Gesamtcounter zurück setzen
			DFS[TagId][2]=0;
			ImageControl(TagId,'show',Direction);
			break;
		case 'stop':
			// Aktives setTimeout stoppen
			clearTimeout(DFS[TagId][3]);
			// Counter > 100 setzen damit eine laufende Schleife von ImageControl abbrechen würde (sehr unwarscheinlich)
			DFS[TagId][2]=999;
			break;
		default:
			return
			break;
	}


}

// Erste Funktion der Rekursion
function ImageControl (TagId,Mode,Direction) {

	// ########## Laufende Show stoppen falls Einzelschritte
	//
	//
	if (Mode=='step') {
		clearTimeout(DFS[TagId][3]);
		DFS[TagId][2]=999;
	}

	// ########## Im Show Modus abbrechen falls der Gesamtcounter erreicht ist, sonst erhöhen
	//
	//
	if ((Mode == 'show') && (DFS[TagId][2]>99)) {
			DFS[TagId][2]=999;
			return;
	} else {
		DFS[TagId][2]+=1;
	}


	// ########## Nächste Position und URL im Image Array finden
	// Aktuelle Position im Bilder-Array: DFS[TagId][0];
	//
	var NextArrayIndex;

	if (Direction == 'reverse') {
		if (DFS[TagId][0]>4) {
			NextArrayIndex=DFS[TagId][0]-1;
		} else {
			NextArrayIndex=DFS[TagId].length-1;
		}
	} else {
		if (DFS[TagId][0]<DFS[TagId].length-1) {
			NextArrayIndex=DFS[TagId][0]+1;
		} else {
			NextArrayIndex=DFS[TagId][0]=4;
		}
	}


	// ########## Preload des nächsten Bildes starten
	//
	//
	var NextURL;
	var objPreload;

	if (! DFS[TagId][NextArrayIndex][5]) {
		NextURL=DFS[TagId][NextArrayIndex][0];
		objPreload=new Image();
		objPreload.src=NextURL;
		DFS[TagId][NextArrayIndex][5]=objPreload;
	} else {
		objPreload=DFS[TagId][NextArrayIndex][5];
	}
	
	
	// ########## Mindest Timeout prüfen
	if (DFS[TagId][1] < 2000) {
		DFS[TagId][1]='2000';
	}


	// ########## SwapImage aufrufen

	if (Mode=='step') {
		SwapImage(TagId,Mode,Direction,objPreload,NextArrayIndex);
	} else {
		var functionTMP = function() {SwapImage(TagId,Mode,Direction,objPreload,NextArrayIndex)};
		DFS[TagId][3]=setTimeout(functionTMP,DFS[TagId][1]);
	}
}


// Zweite Funktion der Rekursion
function SwapImage(TagId,Mode,Direction,objPreload,NextArrayIndex) {

	// Im Modus 'show' den Gesamtcounter prüfen und ggf. abbrechen.
	if ((Mode == 'show') && (DFS[TagId][2]>99)) {return;}

	// ########## Rekursion falls das Bild noch nicht geladen ist abbrechen und Rekusrion nach 100ms
	if (! objPreload.complete) {
		var functionTMP=function(){SwapImage(TagId,Mode,Direction,objPreload,NextArrayIndex)};
		DFS[TagId][3]=setTimeout(functionTMP,100);
		return;
	}

	// ########## Bildwechsel und globale Variablen anpassen

	// HTML Objekte für Image-Tag und A-Tag
	var objImage=document.getElementById(TagId);
	var objAnchor=document.getElementById(TagId + 'a');

	// Änderungen vornehmen
	objImage.src=objPixel.src;
	objImage.width=DFS[TagId][NextArrayIndex][1];
	objImage.height=DFS[TagId][NextArrayIndex][2];
	objAnchor.href=DFS[TagId][NextArrayIndex][3];
	objAnchor.target=DFS[TagId][NextArrayIndex][4];
	objImage.title=DFS[TagId][NextArrayIndex][6];
	objImage.src=objPreload.src;

	// Aktuelle Position speichern
	DFS[TagId][0]=NextArrayIndex;


	// ########## Nächster Aufruf / Rekursion falls Modus 'show'
	if (Mode=='show') {
		ImageControl(TagId,Mode,Direction);
	}

}

