function cImageRandomizer()  {
  /* ********************************************************************************************************************************* */
  /*            constants                                 */
  /* ********************************************************************************************************************************* */
  // each time specification is done in milliseconds
  // Hover on motorisatie tab triggers click event.
  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....
  
  // Set the relative path to the suzuki theme for the splash.
  var IMAGE_HOME = './sites/all/themes/suzuki_theme/images/splash/';    // 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 = './sites/all/themes/suzuki_theme/images/splash/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';
    */
  }
};

