/**
 * Mit dieser Klasse können Bilder vorgeladen werden und die klassische
 * Swap-Image Funktionalität (Bilder-Tauschen) ausgeführt werden.
 * Die Klasse ersetzt somit unsere alten Swap-Funktionen.
 *
 *
 * Beispiele:
 * ----------
 * Preload mehrerer Bilder (meist im Body Tag des HTML-Dokuments)
 * => <body onload="javascript:ImageSwapRestore.preload('bild1.jpg', [...], 'bild55.jpg');">
 * ----------
 * Swap eines Bildes
 * => <img src="i1.jpg" id="bild" onmouseover="javascript:ImageSwapRestore.swap('bild','','i2.jpg');">
 * ----------
 * Swap mehrerer Bilder gleichzeitig bei einem Mouseover
 * => <img src="i1.jpg" id="bild1" onmouseover="javascript:ImageSwapRestore.swap('bild1','','i2.jpg', ['bildx', '', 'bildx.jpg'], 'bild2','','i3.jpg');" onmouseout="[...]">
 * ----------
 * Bild wiederherstellen
 * => <img src="i1.jpg" id="bild" onmouseover="[...]" onmouseout="javascript:ImageSwapRestore.restore();">
 * ----------
 *
 * @category ImageSwap
 * @author Matthias Göbels <goebels@medienpark.net>
 * @copyright Copyright by medienPARK 2006
 * @version 27.04.2006
 * @access public
 **/
 
var ImageSwap =
{
  /**
   * Speicher in dem die Uhrsprungsbilder beim Bildertausch festgehalten werden.
   *
   * @var array
   */
  swap_storage: null,
  
  /**
   * Speicher in dem die zu ladenden Bilder festgehalten werden.
   *
   * @var array
   */
  preload_storage: null,

  /**
   * Zeigt das/die Uhrsprungsbild/-er wieder an die vorher ausgetauscht wurden.
   *
   * @access public
   **/
  restore: function()
  {
    var i,x,a = this.swap_storage;
    
    for(i=0; a && i<a.length && (x=a[i]) && x.oSrc; i++)
    {
      x.src=x.oSrc;
    }
  },

  /**
   * Lädt Bilder in den Cache, bevor diese im HTML-Dokument auftauchen.
   *
   * @param string bildnamen Bestimmt die Bilder, die in den Cache geladen werden sollen.
   * @access public
   **/
  preload: function() 
  {   
    if(document.images)
    {
      if(!this.preload_storage)
      {
        this.preload_storage = new Array();
      }
      
      var i,j = this.preload_storage.length;
      var a   = this.preload.arguments;
      
      for(i=0; i<a.length; i++)
      {
        if (a[i].indexOf("#")!=0)
        {
          this.preload_storage[j] = new Image;
          this.preload_storage[j++].src=a[i];
        }
      }
    }
  },
    
  /**
   * Sucht ein definiertes Element im HTML-Dokument und gibt es zurück.
   *
   * @param string name Name des gesuchten Objektes
   * @param object d Verweis auf das HTML-Dokument
   * @access public
   * @return object Gibt das gesuchte Objekt zurück.
   **/
  findObj: function(name, d)
  {
    var p,i,x;
    
    if(!d)
    {
      d = document;
    }
    
    if((p = name.indexOf("?")) > 0 && parent.frames.length)
    {
      d = parent.frames[n.substring(p + 1)].document;
      name = name.substring(0, p);
    }
    
    if(!(x = d[name]) && d.all)
    {
      x = d.all[name];
    }
    
    for (i=0; !x && i < d.forms.length; i++)
    {
      x = d.forms[i][name];
    }
    
    for(i=0; !x && d.layers && i < d.layers.length; i++)
    {
      x = this.findObj(n, d.layers[i].document);
    }
    
    return x;
  },
      
  /**
   * Tauscht ein oder mehrere definierte Bilder gegen ein jeweils neues und
   * speichert den alten Stand um Ihn wieder herstellen zu können (restore).
   *
   * @param string name Inhalt des Name/Id Tags des gesuchten Objektes
   * @param string unknown unbekannt zu welchem Zweck , einfach '' angeben
   * @param string uri URI des Bildes
   * @access public
   **/
  swap: function() 
  {
    var i,j = 0
    var x,a = this.swap.arguments;
    
    this.swap_storage = new Array;
    
    for(i = 0; i < (a.length - 2); i+=3)
    {
      if ((x = this.findObj(a[i])) != null)
      {
        this.swap_storage[j++] = x;
        if(!x.oSrc)
        {
          x.oSrc = x.src;
        }
        x.src = a[i+2];
      }
    }
  }
}
