  var einTag = 24*60*60*1000;
  
  function initCalendarPopup() {
     cal4 = new CalendarPopup();
     cal4.setMonthNames('Januar','Februar','März','April','Mag','Juni','Juli','August','September','Oktober','November','Dezember');
     cal4.setDayHeaders('S','M','D','M','D','F','S');
     cal4.setWeekStartDay(1);
     cal4.setTodayText("Heute");
  }
  
  function isNumber(v) {
    return !isNaN(v) && isFinite(v);
  }
  
  // usage: format_zahl( number [, number]  [, bool]  )
  // Quelle - http://javascript.jstruebig.de/javascript/37/
  function formatZahl(zahl, k, fix)
  {
      if(!k) k = 0;
      var neu = '';
      // Runden
      var f = Math.pow(10, k);
      zahl = '' + parseInt( zahl * f + (.5 * (zahl > 0 ? 1 : -1)) ) / f ;
      // Komma ermittlen
      var idx = zahl.indexOf('.');
      // fehlende Nullen einfügen
      if(fix)
      {
           zahl += (idx == -1 ? '.' : '' )
           + f.toString().substring(1);
      }
      // Nachkommastellen ermittlen
      idx = zahl.indexOf('.');
      if( idx == -1) idx = zahl.length;
      else neu = ',' + zahl.substr(idx + 1, k);
  
      // Tausendertrennzeichen
      while(idx > 0)
      {
          if(idx - 3 > 0)
          neu = '.' + zahl.substring( idx - 3, idx) + neu;
          else
          neu = zahl.substring(0, idx) + neu;
          idx -= 3;
      }
      return neu;
  }
  
  function nextDay(tach) {
    return new Date(tach.getTime()+einTag);
  }
  function prevDay(tach) {
    return new Date(tach.getTime()-einTag);
  }
  
  function calculate() {
    var anzahl = document.getElementById("anzahl").value;
    var typ    = document.getElementById("typ").value;
    var von    = document.getElementById("vonDatum").value;
    var bis    = document.getElementById("bisDatum").value;

    if (anzahl == "") {
      alert ("Bitte geben Sie an, wieviele Kartons Sie benötigen!")
      return false;
    }
    if (!isNumber(anzahl) || anzahl <= 0) {
      alert ("Bitte geben Sie eine Anzahl größer als 0 ein!");
      return false;
    }
    anzahl = parseInt(anzahl);
    if (von == "") {
      alert ("Bitte geben Sie ein Von-Datum an, indem Sie auf 'wählen' klicken!")
      return false;
    }
    if (bis == "") {
      alert ("Bitte geben Sie ein Bis-Datum an, indem Sie auf 'wählen' klicken!")
      return false;
    }
    
    var heute   = new Date();
    var vonDate = new Date(getDateFromFormat(von, 'dd.MM.yyyy'));
    var bisDate = new Date(getDateFromFormat(bis, 'dd.MM.yyyy'));
    
    if (vonDate < prevDay(heute) || bisDate < prevDay(heute)) {
      alert ("Die Daten dürfen nicht in der Vergangenheit liegen!");
      return false;
    }
    
    if (bisDate <= vonDate) {
      alert ("Das Bis-Datum muss nach dem Von-Datum liegen!");
      return false;
    }
    
    // wenn der erste oder/und der letzte Tag Montage sind,
    // dürfen diese nicht mitgezählt werden 
    var mondays = 0;
    var d = nextDay(vonDate);
    while (d < bisDate) {
      if (d.getDay()==1) {
        mondays++;
      }
      d=nextDay(d);
    }
    var wochen = mondays + 1;
    
    var preisStk   = types[typ]["preis"];
    var minRueck   = types[typ]["minRueck"];
    var mieteWoche = types[typ]["mieteProWoche"];
    
    var bezahlung = anzahl * preisStk;
    var gesamt    = anzahl * wochen * mieteWoche;
    var zurueck   = bezahlung - gesamt;
    
    if (zurueck < (minRueck*anzahl)) {
      zurueck = minRueck*anzahl;
      gesamt  = bezahlung - zurueck;
    }
    
    bezahlung = formatZahl(bezahlung /100.0, 2, true);
    zurueck = formatZahl(zurueck / 100.0, 2, true);
    gesamt = formatZahl(gesamt / 100.0, 2, true);
    
    
    
    document.getElementById("wochen").firstChild.data = wochen;
    document.getElementById("bezahlung").firstChild.data = bezahlung;
    document.getElementById("zurueck").firstChild.data = zurueck;
    document.getElementById("gesamt").firstChild.data = gesamt;
    
    return false;
  }

