var BROWSER_MSIE     = 0;
var BROWSER_NETSCAPE = 1;
var BROWSER_MOZILLA  = 2;
var BROWSER_OPERA    = 3;
var BROWSER_OTHER    = 4;

/**
 * liefert den verwendeten Browser als Konstante zurück
 *
 * @return gibt den Browser als Konstante zurück
 */
function detectBrowser() {
  var agent=navigator.userAgent.toLowerCase();
  if ( navigator.product=="gecko" )
    return BROWSER_MOZILLA;
  if ( agent.indexOf("opera") >= 0 )
    return BROWSER_OPERA;
  if ( agent.indexOf("msie") >= 0 )
    return BROWSER_MSIE;
  if ( navigator.appName.toLowerCase()=="netscape" )
    return BROWSER_NETSCAPE;
  return BROWSER_OTHER;
}

/**
 * liefert den verwendeten Browser als String zurück
 *
 * @return gibt den Browser als String zurück
 */
function browserName() {
  var browser=detectBrowser();
  if ( browser == BROWSER_MSIE )
    return "Microsoft Internet Explorer";
  if ( browser == BROWSER_NETSCAPE )
    return "Netscape Navigator";
  if ( browser == BROWSER_MOZILLA )
    return "Mozilla-basierter Browser";
  if ( browser == BROWSER_OPERA )
    return "Opera";
  else
    return "unbekannter Browser";
}

/**
 * überprüft, ob der Browser in JavaScript reguläre Ausdrücke unterstützt
 *
 * @return true - RegEx-Unterstützung vorhanden; false - keine RegEx
 */
function regExSupport() {
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr))
      return true;
  }
  return false;
}

/**
 * überprüft, ob es sich um eine gültige Email-Adresse handelt
 *
 * @param email E-Mail-Adresse (String)
 * @return true - Email-Adresse könnte gültig sein; false - ungültige Email
 */
function validEmail(email) {
if ( !regExSupport() )
  return (email.indexOf(".") > 2) && (email.indexOf("@") > 0);

  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(email) && r2.test(email));
}

/**
 * liefert die Download-Zeit zurück
 *
 * @param the_size Gr&ouml;&szlig;e des Downloads in KBytes
 * @param kbps Geschwindkeit in Kilobit pro Sekunde
 * @return gibt die Download-Zeit in Sekunden zurück
 */
function downloadTime(the_size, kbps) {
  speed=Math.round(the_size/kbps*8);
  if ( speed < 10 )
    speed=10;
  if ( speed >= 95 )
    return Math.round(speed/60).toString() + " min";
  else
    return (Math.round(speed/10)*10).toString() + " s";
}

/**
 * zeigt die Größe eines Downloads an
 *
 * @param the_size Gr&ouml;&szlig;e des Downloads in KBytes
 * @return gibt den die Download-Größe als Text zurück
 */
function downloadSize(the_size) {
  if ( the_size < 1000 )
    size=the_size+" KB"
  else
    size=(Math.round(the_size/1024*10)/10).toString()+" MB";
  t34=  "V34: "  + downloadTime(the_size,  33) + "; ";
  tISDN="ISDN: " + downloadTime(the_size,  64) + "; ";
  tDSL= "DSL: "  + downloadTime(the_size, 768);
  return "("+size+"; <FONT SIZE=-1>"+t34+tISDN+tDSL+"</FONT>)\n";
}

/**
 * zeigt einen Download an, wählt eine von 2 Download-URLs per Zufall aus und gibt einen Schätzwert für die Download-Zeit aus
 *
 * @param the_size Gr&ouml;&szlig;e des Downloads in KBytes
 * @param url1 Download-URL 1
 * @param url2 Download-URL 2 (optional, wenn nicht vorhanden, dann "" angeben)
 * @return gibt nichts zur&uuml;ck, sondern gibt den Text direkt im Browser aus
 */
function download(the_size, url1, url2) {
  if ( url2.length < 1 )
    url=url1
  else {
    r=Math.round(Math.random()*2);
    if ( r==0 )
      url=url1
    else
      url=url2;
  }
  document.write("<BR>[ <A HREF=\""+url+"\">Download</A> ]\n");
  document.write( downloadSize(the_size) );
}

/**
 * prüft, ob es sich beim Browser um Netscape bis einschlie&szlig;lich Version 4 handelt
 *
 * @return true - Netscape-Browser bis Version 4; false - aktuellerer Browser
 */
function isOldNetscape() {
// document.write("Browser: "+navigator.appName+"; \n");
// document.write("Version: "+navigator.appVersion+"; \n");
  return ( (navigator.appName=="Netscape") && (navigator.appVersion.substring(0,1)<="4") );
}

/**
 * Script aus Dreamweaver
 */
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if ( init ) {
    if ( isOldNetscape() ) {
      document.MM_pgW=innerWidth;
      document.MM_pgH=innerHeight;
      onresize=MM_reloadPage;
    }
  } else if ( innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH )
    location.reload();
}

/**
 * Script aus Dreamweaver
 */
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr;
  for ( i=0; a&&i < a.length && (x=a[i]) && x.oSrc; i++ )
    x.src=x.oSrc;
}

/**
 * Script aus Dreamweaver
 */
function MM_preloadImages() { //v3.0
  var d=document;
  if ( d.images ) {
    if (!d.MM_p)
      d.MM_p=new Array();
    var i,j=d.MM_p.length, a=MM_preloadImages.arguments;
    for( i=0; i < a.length; i++ )
      if ( a[i].indexOf("#")!=0 ) {
        d.MM_p[j]=new Image;
        d.MM_p[j++].src="images/products/"+a[i]+".gif";
      }
  }
}

/**
 * Script aus Dreamweaver
 */
function MM_findObj(n, d) { //v4.01
  var p,i,x;
  if (!d)
    d=document;
    if ( (p=n.indexOf("?")) > 0 && parent.frames.length ) {
      d=parent.frames[n.substring(p+1)].document;
      n=n.substring(0,p);
    }
    if ( !(x=d[n]) && d.all )
      x=d.all[n];
      for ( i=0; !x && i < d.forms.length; i++ )
        x=d.forms[i][n];
     for ( i=0; !x && d.layers && i < d.layers.length; i++ )
       x=MM_findObj(n,d.layers[i].document);
     if ( !x && d.getElementById )
       x=d.getElementById(n);
  return x;
}

/**
 * Script aus Dreamweaver
 */
function MM_swapImage() { //v3.0
  var i,j=0, x,a=MM_swapImage.arguments;
  document.MM_sr=new Array;
  for( i=0; i < (a.length-2); i+=3 )
    if ( (x=MM_findObj(a[i])) != null ) {
      document.MM_sr[j++]=x;
      if ( !x.oSrc )
        x.oSrc=x.src;
      x.src=a[i+2];
    }
}

/**
 * setzt die Hintergrundfarbe eines HTML-Elements; für Netscape <= Version 4.0 tut die Funktion nichts
 *
 * @param element HTML-Node
 * @param color Farbe (Text oder Hexcode)
 * @return gibt nichts zur&uuml;ck
 */
function setColor(element, color) {
  if ( !isOldNetscape() ) {
    element.style.backgroundColor=color;
  }
}