function cImageRandomizer() 
{
	/* ********************************************************************************************************************************* */
	/*						constants 																*/
	/* ********************************************************************************************************************************* */
	// each time specification is done in milliseconds
	
	var TIME_TO_NEXT_IMAGE = 3000;		// duration of an image of the slideshow is displayed. (including time to fade in and fade out)
	var LOGO_TIME_NEXT_IMAGE = 3000;	// duration the logo is displayed (including time to fade in and fade out)
	
	var TIME_TO_FADE_IN = 700;			// duration for fade-in effect
	var FADE_IN_STEPS = 20;				// number of step the fade-in effect will be devided in
	
	var TIME_TO_FADE_OUT = 700;			// duration for fade-out effect
	var FADE_OUT_STEPS = 20;			// number of step the fade-out effect will be devided in
	var FADE_OUT_TOLERANCE = 100;		// because processing take some time, calculate some extra time to be able to finish fade-out effect in time	
	
	var SHOW_LOGO_EACH_IMAGE = 5;		// determine how often the logo will be shown. Currently every fifth image....
	
	var IMAGE_HOME = './images/';		// relative path to the image base directory
	var IMAGE_SLIDESHOW_HOME = IMAGE_HOME + 'slideshow/';	// relative path to the folder which contains all images for the slideshow
	var IMAGE_ANIMATION_HOME = IMAGE_HOME + 'animation/'; 	// relative path to the folder which contains the images for the animation to simulate fade-in and fade-out effect.
	
	var SLIDESHOW_CONFIG_FILE_NAME = 'slideshow.xml';		// file name of the slideshow configuration file
		
	
	/* ********************************************************************************************************************************* */
	/*						variables 																*/
	/* ********************************************************************************************************************************* */
	// two-dimensional array. Index of first dimension determine the category. Index of second dimension contains the image path
	var maMap = new Array();
	
	// path to Suzuki logo
	var mtSuzukiLogo = "";		
		
	// some browser doesn't supported fade-in/-out effects via javascript. Use images instead
	var mbUseImageAnimation = false;
	
	// some browser doesnt' support fade-in/-out effects via Javascript and doesn't support transparent image. Turn all effects of that stuff...
	var mbNoEffects = false;
	
	// signalizes that the current image is the first image. This means that the user just have entered the page
	var mbIsFirstImageOnPageLoad = true;
	
	// determine the sequence of the categories which are displayed
	// 0 = auto, 1 = moto, 2 = marine, 3=atv
	var maCategoryCycle = new Array(0,1,3,2);
	
	// internal counter to determine which category have to be displayed and when the logo have to be shown
	var miImageCount = 5;
	var miCategoryCount = 0; 
	
	// determine which image size have to be used
	var mbUseSmallImages = false;

	
	/* ********************************************************************************************************************************* */
	/*						methods 																*/
	/* ********************************************************************************************************************************* */			
	this.start = function() {
		// Browser, OS und Bildschirmgröße bestimmen
		determineSystem();
		
		// Anzeigebereich der Bildschirmgröße anpassen
		setUpContentArea();
		
		// Bilder laden
		loadImagesXML();	// XML Konfigurations-Datei mit allen Bildern wird via AJAX vom WebServer geladen
		//loadImages();			// Bilder werden lokal in dieser Methode definiert (IAA version)	
		
		// NoScript-Bereich ausblenden
		if( document.getElementById('contentNoJavaScript') ) {
			// sofern Java-Script aktiviert ist, ist bei einigen Browsern das NoScript Tag nicht im DOM enthalten. Daher würde diese Anweisung zu einem Fehler führen.
			document.getElementById('contentNoJavaScript').style.display = 'none';
		}
		
		// dynmaischen Bildwechsel aktivieren
		document.getElementById('logoTopRight').style.display = 'block';
		document.getElementById('content').style.display = 'block';
	
		// starten ....
		this.setRandomImage();
	}
	
	
	// Bilder anzeigen
	this.setRandomImage = function() {
		miImageCount += 1;
		
		// neues Bild speichern. jedes 4. Bild Suzuki Logo anzeigen
		if( miImageCount >= SHOW_LOGO_EACH_IMAGE ) {
			miImageCount = 0;
			
			// kleines Logo rechts-oben ausblenden
			document.getElementById('logoTopRight').style.display = 'none';
			
			// Logo anzeigen
			document.getElementById('contentImg').src = mtSuzukiLogo;
			
			// festlegen, wann das nächste Bild angezeigt werden soll
			setTimeout('ImageRandomizer.setRandomImage()', LOGO_TIME_NEXT_IMAGE );
			
			// festlegen, wann der fade-out Effekt gestartet werden soll
			setTimeout('ImageRandomizer.fadeOut()', LOGO_TIME_NEXT_IMAGE - TIME_TO_FADE_OUT - FADE_OUT_TOLERANCE);
			
			
			// fade-in direkt starten
			this.fadeIn();
						
		} else {				
			// neues Bild zufällig aus dem Pool der aktuellen Kategorie wählen						
			var laImageList = maMap[maCategoryCycle[miCategoryCount]];							
			var liRandomNumber = Math.floor( laImageList.length * (Math.random ()) );
			document.getElementById('contentImg').src = laImageList[liRandomNumber];
			
			// festlegen, wann das nächste Bild angezeigt werden soll
			setTimeout('ImageRandomizer.setRandomImage()', TIME_TO_NEXT_IMAGE);		
			
			// festlegen, wann der fade-out Effekt gestartet werden soll
			setTimeout('ImageRandomizer.fadeOut()', TIME_TO_NEXT_IMAGE - TIME_TO_FADE_OUT - FADE_OUT_TOLERANCE);		
			
			// interne Datenstruktur aktualisieren
			if( miCategoryCount < maCategoryCycle.length - 1) {
				miCategoryCount += 1;
			} else {
				miCategoryCount = 0;
			}
			
			// für das erste Bild nach dem großem Logo wird das kleine Logo mit in den fade-in Effekt einbezogen
			if( mbIsFirstImageOnPageLoad == true ) {
				document.getElementById('logoTopRight').style.zIndex = '20';
				mbIsFirstImageOnPageLoad = false;
			} else {
				if( miImageCount == 1 ) {
					document.getElementById('logoTopRight').style.zIndex = '6';
					//document.getElementById('content').style.zIndex = 'none';
				}
			}
			
			// fade-in direkt starten
			this.fadeIn();
			
			// kleines Logo rechts-oben anzeigen
			document.getElementById('logoTopRight').style.display = 'block';		
		}			
	}
	
	// Bild ausblenden 
	this.fadeOut = function() {
		if( mbNoEffects == true ) {
			// kein Ausblendeffekt
			return;
		}
			
			
		if( miImageCount == 1 ) {
			document.getElementById('logoTopRight').style.zIndex = '20';
			//document.getElementById('content').style.zIndex = '5';
		}
			
		if( mbUseImageAnimation ) {
			// Bild-Animation verwenden, um den Ausblendeffekt zu simulieren
			this.fadeOutImageAnimation(0);
		} else {
			// CSS & Javascript verwenden, um den Ausblendeffekt zu simulieren
			var lobjNode = document.getElementById('contentImgCover');
		
			lobjNode.style.opacity = 0.0;
			lobjNode.style.MozOpacity = 0.0;
			lobjNode.style.filter = "alpha(opacity=0)";
			
			this.increaseOpacity();
		}
	}
	
	this.increaseOpacity= function() {
		var lobjContentImgCoverNode = document.getElementById('contentImgCover');
		var liNewOpacity = lobjContentImgCoverNode.style.opacity / 1 + (1.00/FADE_OUT_STEPS);
		
		lobjContentImgCoverNode.style.opacity =  liNewOpacity;
		lobjContentImgCoverNode.style.MozOpacity = liNewOpacity;	
		lobjContentImgCoverNode.style.filter = "Alpha(opacity="+(liNewOpacity*100)+")";
							
		if( lobjContentImgCoverNode.style.opacity < 1.0 ) {
			setTimeout('ImageRandomizer.increaseOpacity()', TIME_TO_FADE_OUT/FADE_OUT_STEPS);
		} 
	}
	
	this.fadeOutImageAnimation = function(piImage) {
		document.getElementById('contentImageAnimation').src = IMAGE_ANIMATION_HOME + piImage+'.png';
		
		if( piImage < 100 ) {
			setTimeout('ImageRandomizer.fadeOutImageAnimation('+(piImage+5)+')',TIME_TO_FADE_OUT/21);
		}
	}
	
	
	
	// Bild einblenden
	this.fadeIn = function() {
		if( mbNoEffects == true ) {
			// kein Einblendeffekt
			return;
		}
		
		if( mbUseImageAnimation ) {			
			// Bild-Animation verwenden, um den Einblendeffekt zu simulieren
			this.fadeInImageAnimation(100);			
		} else {
			// CSS & Javascript verwenden, um den Einblendeffekt zu simulieren
			var lobjNode = document.getElementById('contentImgCover');
			
			lobjNode.style.opacity = 1.00;
			lobjNode.style.MozOpacity = 1.00;
			lobjNode.style.filter = "alpha(opacity=100)";
						
			this.decreaseOpacity();
		}
	}
	
	this.decreaseOpacity = function() {
		var lobjContentImgCoverNode = document.getElementById('contentImgCover');
		var liNewOpacity = lobjContentImgCoverNode.style.opacity / 1 - (1.00/FADE_IN_STEPS);
		
		lobjContentImgCoverNode.style.opacity =  liNewOpacity;
		lobjContentImgCoverNode.style.MozOpacity = liNewOpacity;		
		lobjContentImgCoverNode.style.filter = "Alpha(opacity="+(liNewOpacity*100)+")";
		
		if( lobjContentImgCoverNode.style.opacity > 0 ) {
			setTimeout('ImageRandomizer.decreaseOpacity()', TIME_TO_FADE_IN/FADE_IN_STEPS);
		}
	}
	
	this.fadeInImageAnimation = function(piImage) {
		document.getElementById('contentImageAnimation').src = IMAGE_ANIMATION_HOME + piImage+'.png';
		
		if( piImage > 0 ) {
			setTimeout('ImageRandomizer.fadeInImageAnimation('+(piImage-5)+')', TIME_TO_FADE_IN/21);
		}
	}
	
	
	
	
	function loadImagesXML() {
		// interne Datenstruktor initialisieren
		maMap[0] = new Array();		// Index 0	=> 	auto
		maMap[1] = new Array();		// Index 1	=>	motorbike
		maMap[2] = new Array();		// Index 2 	=>	marine
		maMap[3] = new Array();		// Index 3 	=> 	atv 
	
		// AJAX Request stellen
		var lobjHTTPRequest = null;
			
		try {
			lobjHTTPRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e1) {
			try {
				lobjHTTPRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e2) {
				try {
					lobjHTTPRequest = new XMLHttpRequest();			
				} catch(e3) {
					alert("instantiate HTTP Request failed.")
					return;
				}				
			}
		}
					
		//  Bilder auslesen (synchroner Aufruf)
		lobjHTTPRequest.open("GET", IMAGE_SLIDESHOW_HOME + SLIDESHOW_CONFIG_FILE_NAME, false);					
		lobjHTTPRequest.send(null);
		
		// aus der HTTP-Response automatisch generierter DOM
		var lobjHTTPResponse = lobjHTTPRequest.responseXML; 

		if( !lobjHTTPResponse || !lobjHTTPResponse.documentElement ) { 
			// sofern der Standardprozess nicht funktioniert hat, versuchen Browser-eigene Methoden zu verwenden
			if( window.ActiveXObject ) { 
				// Msxml COM Object verwenden (IE)
				lobjHTTPResponse = new ActiveXObject("Msxml2.DOMDocument");
				lobjHTTPResponse.loadXML( lobjHTTPRequest.responseText );
			} else if ( DOMParser ) { 
				// Gecko DOM-Parser verwenden
				lobjHTTPResponse = new DomParser().parseFromString(lobjHTTPRequest.responseText, "text/xml" );
			}
		}
		
		// endgültig aufgeben: ....... :-(
		if( !lobjHTTPResponse || !lobjHTTPResponse.documentElement ) { 
			return;
		}
		
		// Bilder der jeweiligen Category einlesen
		if( lobjHTTPResponse.getElementsByTagName('auto').length == 1 ) {
			loadImagesXML_LoadCategory(lobjHTTPResponse.getElementsByTagName('auto')[0], 0)
		}
		if( lobjHTTPResponse.getElementsByTagName('moto').length == 1 ) {
			loadImagesXML_LoadCategory(lobjHTTPResponse.getElementsByTagName('moto')[0], 1)
		}
		if( lobjHTTPResponse.getElementsByTagName('marine').length == 1 ) {
			loadImagesXML_LoadCategory(lobjHTTPResponse.getElementsByTagName('marine')[0], 2)
		}
		if( lobjHTTPResponse.getElementsByTagName('atv').length == 1 ) {
			loadImagesXML_LoadCategory(lobjHTTPResponse.getElementsByTagName('atv')[0], 3)
		}
		
		// Logo-Bild separat speichern
		mtSuzukiLogo = IMAGE_HOME + lobjHTTPResponse.getElementsByTagName('logo')[0].firstChild.nodeValue;		
	}
	
	function loadImagesXML_LoadCategory(pobjCategoryNode, piCategoryIndex) {
		var ltCategorySubfolder = pobjCategoryNode.getAttribute('subfolder')
		
		var laImageNodeList = pobjCategoryNode.getElementsByTagName('image');			
		for(var liImagePos=0; liImagePos<laImageNodeList.length; liImagePos++) {			
			maMap[piCategoryIndex][liImagePos] = IMAGE_SLIDESHOW_HOME+ltCategorySubfolder+"/"+laImageNodeList[liImagePos].firstChild.nodeValue;
		}
	}
	

	// Bilder direkt im JavaScript editieren. Für eine lokale Version
	//
	//	Erst mal nur für die IAA !!!
	//
	function loadImages() {			
		// interne Datenstruktor initialisieren
		maMap[0] = new Array();		// Index 0	=> 	auto
		maMap[1] = new Array();		// Index 1	=>	motorbike
		maMap[2] = new Array();		// Index 2 	=>	marine
		maMap[3] = new Array();		// Index 3 	=> 	atv 
		
		// Auto
		maMap[0][0] = IMAGE_SLIDESHOW_HOME + 'auto/12u13_038_001.jpg';
		maMap[0][1] = IMAGE_SLIDESHOW_HOME + 'auto/217.jpg';
		maMap[0][2] = IMAGE_SLIDESHOW_HOME + 'auto/image_presentation-1.jpg';
		maMap[0][3] = IMAGE_SLIDESHOW_HOME + 'auto/image_presentation-7.jpg';
		maMap[0][4] = IMAGE_SLIDESHOW_HOME + 'auto/jimny.jpg';
		maMap[0][5] = IMAGE_SLIDESHOW_HOME + 'auto/new_grandvitara.jpg';
		maMap[0][6] = IMAGE_SLIDESHOW_HOME + 'auto/Suzuki_Tag_0525_001.jpg';
				
		// Motorrad-Bilder
		maMap[1][0] = IMAGE_SLIDESHOW_HOME + 'moto/Alex_RAP20153.jpg';
		maMap[1][1] = IMAGE_SLIDESHOW_HOME + 'moto/Bild-4.jpg';
		maMap[1][2] = IMAGE_SLIDESHOW_HOME + 'moto/Bild-9.jpg';
		maMap[1][3] = IMAGE_SLIDESHOW_HOME + 'moto/Bild-17.jpg';
		maMap[1][4] = IMAGE_SLIDESHOW_HOME + 'moto/Bild-18.jpg';
		
		// Schiffs-Bilder
		maMap[2][0] = IMAGE_SLIDESHOW_HOME + 'marine/Marine_UK.jpg';
		maMap[2][1] = IMAGE_SLIDESHOW_HOME + 'marine/Bild-21.jpg';
		maMap[2][2] = IMAGE_SLIDESHOW_HOME + 'marine/Bild-22.jpg';
		
		// ATV-Bilder
		maMap[3][0] = IMAGE_SLIDESHOW_HOME + 'atv/Bild-10.jpg';
		maMap[3][1] = IMAGE_SLIDESHOW_HOME + 'atv/Bild-13.jpg';
		maMap[3][2] = IMAGE_SLIDESHOW_HOME + 'atv/Bild-20.jpg';		
		

		// Logobild speichern
		mtSuzukiLogo = IMAGE_HOME + "logo_small.gif";
	}		
	
	
	function determineSystem() {
		// Bildschirmgröße
		if( screen.width == 800 ) {
			if( screen.height == 600 ) {
				mbUseSmallImages = true;
			}
		} 
	
		// Browser-weiche
		var mtUserAgent = navigator.userAgent;
	
		if (mtUserAgent.indexOf("Opera") != -1)
		{
			if( mtUserAgent.indexOf("8.5") != -1 ) 	{
				FADE_OUT_TOLERANCE = FADE_OUT_TOLERANCE + 50
				TIME_TO_FADE_OUT = TIME_TO_FADE_OUT + 50;
				mbUseImageAnimation = true; 
			}
			
			if( mtUserAgent.indexOf("8.0") != -1 ) {
				TIME_TO_FADE_OUT = TIME_TO_FADE_OUT + 50;
				TIME_TO_FADE_IN = TIME_TO_FADE_IN - 50;
				FADE_OUT_TOLERANCE = FADE_OUT_TOLERANCE + 50
				mbUseImageAnimation = true; 
			}
		}
		else if(mtUserAgent.indexOf("Netscape") != -1)
		{
			mbUseImageAnimation = true;
			FADE_OUT_TOLERANCE = FADE_OUT_TOLERANCE + 100;
		}
		else if (mtUserAgent.indexOf("MSIE") != -1)
		{
		    if( mtUserAgent.indexOf("5.5") != -1 ) 	{
				mbNoEffects = true;
			}
			if( mtUserAgent.indexOf("5.0") != -1 ) 	{
				mbNoEffects = true;
			}
			
			if( mtUserAgent.toLowerCase().indexOf("mac") != -1 ) 	{
				mbNoEffects = true;
			}
		}
		else if (mtUserAgent.indexOf("Firefox") != -1)
		{
			if( mtUserAgent.indexOf("1.0") != -1 ) 	{
				FADE_OUT_TOLERANCE = FADE_OUT_TOLERANCE + 75
				mbUseImageAnimation = true;
			}
		}
		
		
		// je nach Modus entsprechende Bereiche ein- bzw. ausblenden
		if( mbNoEffects == true ) {
			document.getElementById('contentImgCover').style.display = 'none';
			document.getElementById('contentImageAnimation').style.display = 'none';
		} else {
			if( mbUseImageAnimation == true ) {	
				document.getElementById('contentImgCover').style.display = 'none';
				document.getElementById('contentImageAnimation').style.display = 'block';
			} else {
				document.getElementById('contentImgCover').style.display = 'block';
				document.getElementById('contentImageAnimation').style.display = 'none';
			}
		}
	}
	
	
	
	function setUpContentArea() {
		if( mbUseSmallImages == true ) {
			// Pfad zur Slideshow Konfigurationsdatei setzen
			IMAGE_SLIDESHOW_HOME += 'small/';
			return;
		}
		
		// Pfad zur Slideshow Konfigurationsdatei setzen
		IMAGE_SLIDESHOW_HOME += 'large/'
		
		// Haupt-Element ausrichten
		document.getElementById('main').style.marginLeft = '-355px';
		
		// CSS animierte Effekte
		document.getElementById('contentImgCover').style.width = '710px';
		document.getElementById('contentImgCover').style.height = '450px';
		
		// PNG animierte Effekte
		document.getElementById('contentImageAnimation').style.width = '710px';
		document.getElementById('contentImageAnimation').style.height = '450px';
		
		// Bilder
		document.getElementById('contentImg').style.width = '710px';
		document.getElementById('contentImg').style.height = '450px';
		
		// kleines Logo verschieben
		document.getElementById('logoTopRight').src = 'images/logoclaim.jpg';
		document.getElementById('logoTopRight').style.left = '630px';
		document.getElementById('logoTopRight').style.width = '80px';
		document.getElementById('logoTopRight').style.height = '160px';
		
		// Navigation nach unten verschieben
		document.getElementById('navigation').style.top = '463px';
		document.getElementById('navigation').style.width = '710px';
		
		// Impressum nach untern verschieben
		document.getElementById('imprint').style.top = '545px';
		document.getElementById('imprint').style.width = '710px';
		document.getElementById('imprint').getElementsByTagName('a')[0].style.marginLeft = '560px';
		
	}
}
