<!--
  /// Elements
  var lastRequest = null;
  var contentContainer;
  // Konstanten
  var REQUEST_GET  = 0;
  var REQUEST_HEAD = 1;
  var REQUEST_POST = 2;
  var REQUEST_XML  = 3;

  // globales XMLHttpRequest-Objekt erzeugen
  var xmlHttp = getXMLRequester();

  function getXMLRequester()
  {
    var xmlHttp = false; //Variable initialisieren

    try
    {
      // Der Internet Explorer stellt ein ActiveXObjekt zur Verfügung
      if( window.ActiveXObject )
      {
        // Versuche die neueste Version des Objektes zu laden
        for( var i = 5; i; i-- )
        {
          try
          {
            //Wenn keine neuere geht, das alte Objekt verwenden
            if( i == 2 )
            {
              xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );    
            }
            // Sonst die neuestmögliche Version verwenden
            else
            {
              xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
            }
            break; //Wenn eine Version geladen wurde, unterbreche Schleife
          }
          catch( excNotLoadable )
          {
            xmlHttp = false;
          }
        }
      }
      // alle anderen Browser
      else if( window.XMLHttpRequest )
      {
        xmlHttp = new XMLHttpRequest();
      }
    }
    // loading of xmlhttp object failed
    catch( excNotLoadable )
    {
      xmlHttp = false;
    }
    return xmlHttp ;
  }
  
  function sendRequest( strSource, strData, intType, intID )
  {
    lastRequest = [strSource,strData,intType,intID];
  
    // Falls strData nicht gesetzt ist, als Standardwert einen leeren String setzen
    if( !strData ) strData = '';
    // Falls der Request-Typ nicht gesetzt ist, standardmäßig auf GET setzen
    if( isNaN(intType) ) intType = 0;

    // wenn ein vorhergehender Request noch nicht beendet ist, beenden
    if( xmlHttp && xmlHttp.readyState )
    {
      xmlHttp.abort( );
      xmlHttp = false;
    }
        
    // wenn möglich, neues XMLHttpRequest-Objekt erzeugen, sonst abbrechen
    if( !xmlHttp )
    {
      xmlHttp = getXMLRequester( );
      if( !xmlHttp ) return;
    }
    
    // Falls die zu sendenden Daten mit einem & oder einem ? beginnen, erstes Zeichen abschneiden
    if( intType != 1 && ( strData && strData.substr(0,1) == '&' || strData.substr(0,1) == '?' ) )
    {
      strData = strData.substring( 1, strData.length );
    }

    // Als Rückgabedaten die gesendeten Daten, oder die Zieladresse setzen
    var dataReturn = strData ? strData : strSource;
    
    switch( intType )
    {
      case 1:
      {
        //Falls Daten in XML-Form versendet werden, xml davorschreiben
        strData = "xml=" + strData;
      }
      case 2:
      {
        // falls Daten per POST versendet werden
        // Verbindung öffnen 
        xmlHttp.open( "POST", strSource, true );
        xmlHttp.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
        xmlHttp.setRequestHeader( 'Content-length', strData.length );
        break;
      }
      case 3:
      {
        // Falls keine Daten versendet werden
        // Verbindung zur Seite aufbauen
        xmlHttp.open( "HEAD", strSource, true );
        strData = null;
        break;
      }
      default:
      {
        // Falls Daten per GET versendet werden
        //Zieladresse zusammensetzen aus Adresse und Daten
        var strDataFile = strSource + (strData ? '?' + strData : '' );
        // Verbindung aufbauen
        xmlHttp.open( "GET", strDataFile, true );
        strData = null;
      }
    }
    
    // die Funktion processResponse als Event-handler setzen, wenn sich der Verarbeitungszustand der Anfrage ändert
    xmlHttp.onreadystatechange = new Function( "", "processResponse(" + intID + ")" ); ;

    // Anfrage an den Server setzen
    xmlHttp.send( strData );    //strData enthält nur dann Daten, wenn die Anfrage über POST passiert

    // gibt die gesendeten Daten oder die Zieladresse zurück
    return dataReturn;
  }
  
  function processResponse(intID)
  {
    if (xmlHttp.readyState == 1)      $("status").innerHTML = "Verbindung hergestellt...";
    else if (xmlHttp.readyState == 2) $("status").innerHTML = "Inhalt angefordert...";
    else if (xmlHttp.readyState == 3) $("status").innerHTML = "Warte...";
    else if (xmlHttp.readyState == 4)
    {
      // Http-Status überprüfen
      if( xmlHttp.status == 200 )    // Erfolg
      {
        $("status").innerHTML = "Daten erhalten...";
        processData( xmlHttp, intID ); //Daten verarbeiten
      }
      if ( xmlHttp.status != 200 )
      {
        if( window.handleAJAXError )
          $("status").innerHTML = "Unknown error occured for ID " + intID;
        else
          $("status").innerHTML = "HTTP "+xmlHttp.status+" ("+xmlHttp.statusText+")";
      }
      
      setTimeout("$('status').innerHTML = 'Web 2.0 aktiviert'", 2000);
      
      try
      {
        /**
         * Aufgrund der Flashrahmenentfernung im IE muss diese Funktion nach dem Nachladen
         * aufgerufen werden, um das Flashobjekt nachträglich in das DOM zu schreiben.
         */        
        writeFlash();
      }
      catch (Exception) { };
    }
  }

  function processData( xmlHttp, intID )
  {  
    // process text data
    contentContainer.innerHTML = xmlHttp.responseText;
  }

  /**
   * Writes results into the document
   */
  function performInputAction(event)
  {
    var element = this;
    var event = (event != null) ? event : window.event;
  
    switch (event.type)
    {
       case "keypress":
      {
         /// Show window if: keycode isn't numeric (or return) OR the elements value isn't numeric and not empty
        if (event.keyCode != 0 && !regExpPC.test(String.fromCharCode(event.keyCode)) && event.keyCode != 13 || !regExpPC.test(element.value) && element.value != "")
        {
          showInfoWindow(this.infowindow);
          event.keyCode = "";
         }
        if (event.keyCode == 0 && !regExpPC.test(String.fromCharCode(event.charCode)) && event.charCode != 13 || !regExpPC.test(element.value) && element.value != "")
        {
          showInfoWindow(this.infowindow);
          event.charCode = "";
         }
         else hideElement(this.infowindow);
         break;
       }
    }
  }
  
  function registerContentContainer(id)
  {
    contentContainer = $(id);
  }
  
  /**
   * Register element to enable the functionality
   * @param string id ID of the HTML element
   * @param string defaultValue Default value for the element (e.g. prefilled input)
   */
  function registerElement(id, value)
  {
    var element          = $(id);
    element.onkeypress   = performInputAction;
    element.infowindow   = "infowindow_"+id;
    element.value        = value != null ? value : "";

    /// Generate a info window for this element (and perform pngfix)
    document.write('<div id="infowindow_'+id+'" class="infowindow"> </div>');
    pngfix('infowindow_'+id);
  }

  /**
   * Set the style attribute display to none.
   * @param object element Object reference of a HTML object
   */
  function hideElement(id)
  {
    $(id).style.display = 'none';
  }
  
  /**
   * Shows the info window
   */
  function showInfoWindow(infowindow, message)
  {
    /// Define default parameter value
    var message = (message == null) ? "An unknown<br />error occured.<br/>" : message;
    var infowindow = $(infowindow);
    
    infowindow.innerHTML = "<br>" + message;
    infowindow.style.display = 'block';
    
    /// If the info window was not positioned yet, position it 95 pixels above the element
    if (infowindow.style.top == "")
    {
      var parentOfInfoWindow = $(infowindow.id.substring(11));
      var pos = findPos(parentOfInfoWindow);
      infowindow.style.top = pos[1] - 75;
      infowindow.style.left = pos[0] - 5;
    }

    setTimeout('hideElement("'+infowindow.id+'")', 223000);
  }

  /**
   * Determine the postition of a html object
   */
  function findPos(obj)
  {
    var curleft = curtop = 0;
    if (obj.offsetParent)
    {
      curleft = obj.offsetLeft
      curtop = obj.offsetTop
      while (obj = obj.offsetParent)
      {
        curleft += obj.offsetLeft
        curtop += obj.offsetTop
      }
    }

    return [curleft,curtop];
  }  

  /**
   * Make transparent .png's for IE6
   * @param string id ID of a HTML object
   */
  function pngfix(id)
  {
    var IE = (document.all && document.fireEvent && navigator.platform == "Win32") ? true : false;
    if (IE)
    {
      $(id).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://localhost/weinkombinat/images/sprechblase.png', sizingMethod='scale')"; 
      $(id).style.backgroundImage = "url('/weinkombinat/images/cron.gif')"; 
    }
  }

  function $(id)
  {
    return document.getElementById(id);
  }
//-->
