
function Array2D(x, y) {
  //Array erzeugen (aus unser Klasse Array2D) 
  this.items = new Array(x);
  //Für jedes Element ein Neben-Array erzeugen
  for(i=0;i<y;i++) 
    this.items[i] = new Array(y);
}

function roundNumber(x, n) {
  //Stimmen die Anzahl Nachkommastellen? (Min: 1, Max: 14)
  if (n < 1 || n > 14)
    return false;
  
  var e = Math.pow(10, n);
  var k = (Math.round(x * e) / e).toString();
  
  //Ein Dezimalpunkt vorhanden?
  //Wenn nicht einen hinzufügen (an das Ende)
  if (k.indexOf('.') == -1) 
    k += '.';
  
  //Dezimalpunkt durch Komma ersetzen und 
  //verbleibende Nachkommastellen hinzufügen
  k += e.toString().substring(1);
  return (k.substring(0, k.indexOf('.') + n+1)).replace(".", ",");
}

function showSwitch(a){
	var object = document.getElementById(a);
	if(!object) { return true; }
	if(object.className == "package_show"){
		object.className = "package_hide";
	} else {
		object.className = "package_show";
		include(); //Datei einfügen
	}
	return true;
}

function include() {
  if(req.readyState == 4 || req.readyState == 0) {
    req.open("GET", "/cgi/parse.php", true);
    req.setRequestHeader("Content-Type","text/html; charset=iso-8859-1");
    req.onreadystatechange = setIncludeResponse;
    req.send(null);
  } 
}

function setIncludeResponse() {
  if(req.readyState == 4) {
    document.getElementById("packageswitch").innerHTML = req.responseText;
  }
}


function checkPackage() {

}

function calcCosts() {
  var now = new Date();   //Aktuelles Datum
  var currentElement;     //Aktuelles Element während der Bearbeitung
  var sum = 0.00;         //Gesamtpreis
  var log = "";           //Log-Nachrichten
  
  //BEGIN LOG
    log += "<span style=\"float: right;\"><i>" + now.toString() + "</i></span><br /><br />"
    log += "<b>Anzahl Elemente: </b>" + elements.items.length + "<br /><br />";
    log += "<hr class=\"inverted\" /><br />";
  //END LOG
  
  //Alle Elemente im Array durchlaufen
  for(var i=0;i<elements.items.length;i++) {
    //BEGIN LOG
      log += "[" + (i+1) + "] <b>" + elements.items[i][4] + "</b> ist ";
    //END LOG
    
    //Ist das Element eine Checkbox?
    if(elements.items[i][3] == true) {
      //Ja, Status der Box zwischenspeichern
      currentElement = document.getElementById(elements.items[i][4] + "_value").checked;
      
      //BEGIN LOG
        log += "eine <span style=\"color:#DA5C00;\">Checkbox</span> und ";
      //END LOG
      
      //Ist der Status "checked"?
      if(currentElement == true) {
        //BEGIN LOG
          log += "<span style=\"color:green;\">ausgewählt</span>.<br />"
          log += "&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"font-size: 8pt;\">Zwischensumme: " + roundNumber(sum, 2) + " + <b>" + roundNumber((currentElement * elements.items[i][0]), 2) + "</b> = " + roundNumber((sum+elements.items[i][0]), 2) + "</span><br />";
        //END LOG
        
        //Ja ist "checked", Preis zur Summe addieren
        sum += elements.items[i][0];
      } else {
        //Nein, nicht "checked" ...
        
        //BEGIN LOG
          log += "<span style=\"color:red;\">nicht ausgewählt.</span><br />"
          log += "&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"font-size: 8pt;\">Zwischensumme: " + roundNumber(sum, 2) + " + " + "<b>0,00</b>" + " = " + roundNumber(sum, 2) + "</span><br />";
        //END LOG
      }
    } else {
      //Keine Checkbox. Aber eine Textbox
      //Wert der Textbox abspeichern
      currentElement = document.getElementById(elements.items[i][4] + "_value").value;
      
      //Maximalgrenze überschritten?
      if(currentElement > elements.items[i][2]) {
        //Jo, Eingabe auf Maximum setzen und Ansicht akualisieren
        currentElement = elements.items[i][2];
        document.getElementById(elements.items[i][4] + "_value").value = elements.items[i][2];
      } 
      
      //Minimumgrenze unterschhritten?
      if(currentElement < elements.items[i][1]) {
        //Jo, Eingabe auf Minimum setzen und Ansicht akualisieren
        currentElement = elements.items[i][1];
        document.getElementById(elements.items[i][4] + "_value").value = elements.items[i][1];
      }
      
      //BEGIN LOG
        log += "ein <span style=\"color:#0085DA;\">Textfeld</span> mit dem Wert ";
      //END LOG
      
      //Ist der Wert gültig? (eine Zahl größer-gleich Null)
      if(currentElement >= 0) {
        //BEGIN LOG
          log += "<span style=\"color:green;\">" + currentElement + "</span><br />";
          log += "&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"font-size: 8pt;\">Zwischensumme: " + roundNumber(sum, 2) + " + <b>" + roundNumber((currentElement * elements.items[i][0]), 2) + "</b> = " + roundNumber((sum + (currentElement * elements.items[i][0])), 2) + "</span><br />";
        //END LOG
        
        //Ja ein gültiger Wert.
        //Gesamtkosten = Gesamtkosten + (X * PreisProX)
        sum += (currentElement * elements.items[i][0]);
      } else {
        //BEGIN LOG
          log += "<span style=\"color:red;\">" + currentElement + "</span" + "<br />";
          log += "&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"font-size: 8pt;\">Zwischensumme: " + roundNumber(sum, 2) + " + " + "<b>0,00</b>" + " = " + roundNumber(sum, 2) + "</span><br />";
        //END LOG
        
        //Ungültiger Wert
        //In der Berechnung ignorieren ... 
      }
    }

    //BEGIN LOG
      log += "<br />";
    //END LOG
  }
  
  //Jetzt Sonderfälle bearbeiten
  //Sonderfall 1: Traffic ist 0 (soll unendlich entsprechen)
  if(document.getElementById(elements.items[1][4] + "_value").value == 0) {
    log += "<b>Sonderfall 1:</b> Unbegrenztes Transfervolumen<br />";
    log += "&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"font-size: 8pt;\">Zwischensumme: " + roundNumber(sum, 2) + " + " + "<b>5,00</b>" + " = " + roundNumber((sum+5), 2) + "</span><br /><br />";
    sum += 5; 
  }
  
  //Sonderfall 2: Ungleiche Anzahl von Email-Adressen und POP3-Postfächern
  if(document.getElementById(elements.items[7][4] + "_value").value != document.getElementById(elements.items[8][4] + "_value").value) {
    //Felder angleichen auf den jeweiligen höhere Wert
    if(document.getElementById(elements.items[7][4] + "_value").value > document.getElementById(elements.items[8][4] + "_value").value) {
      document.getElementById(elements.items[8][4] + "_value").value = document.getElementById(elements.items[7][4] + "_value").value;     
    } else {
      document.getElementById(elements.items[7][4] + "_value").value = document.getElementById(elements.items[8][4] + "_value").value;
    }
    
    //Funktion erneut aufrufen, um die Berechnung neu durchzuführen
    calcSum();
  }
  
  //BEGIN LOG
    log += "<hr class=\"inverted\" /><br /><b>Gesamtkosten: </b> " + roundNumber(sum, 2) + " EUR monatlich<br />";
  //END LOG

  //Berechnungs-Log abzeigen
  document.getElementById("log").innerHTML = log;
}

/*****************************
 *    ELEMENT PROPERTIES     *
 *****************************/ 

var elements = new Array2D(5,18);

//space
elements.items[0][0] = 0.0005;    //price per unit
elements.items[0][1] = 100;       //min value
elements.items[0][2] = 50000;     //max value
elements.items[0][3] = false;     //checkbox?
elements.items[0][4] = "space";   //id

//traffic
elements.items[1][0] = 0.0001;    //price per unit
elements.items[1][1] = 0;         //min value
elements.items[1][2] = 500000;    //max value
elements.items[1][3] = false;     //checkbox?
elements.items[1][4] = "traffic"; //id

//ftp
elements.items[2][0] = 0.20;      //price per unit
elements.items[2][1] = 1;         //min value
elements.items[2][2] = 500;       //max value
elements.items[2][3] = false;     //checkbox?
elements.items[2][4] = "ftp";     //id

//statistic
elements.items[3][0] = 0.25;      //price per unit
elements.items[3][1] = 0;         //min value
elements.items[3][2] = 0;         //max value
elements.items[3][3] = true;      //checkbox?
elements.items[3][4] = "statistik"; //id

//php
elements.items[4][0] = 0.50;      //price per unit
elements.items[4][1] = 0;         //min value
elements.items[4][2] = 0;         //max value
elements.items[4][3] = true;      //checkbox?
elements.items[4][4] = "php";     //id

//cgi
elements.items[5][0] = 0.50;      //price per unit
elements.items[5][1] = 0;         //min value
elements.items[5][2] = 0;         //max value
elements.items[5][3] = true;      //checkbox?
elements.items[5][4] = "cgi";     //id

//mysql
elements.items[6][0] = 0.40;      //price per unit
elements.items[6][1] = 0;         //min value
elements.items[6][2] = 50;        //max value
elements.items[6][3] = false;     //checkbox?
elements.items[6][4] = "mysql";   //id

//email
elements.items[7][0] = 0.02;      //price per unit
elements.items[7][1] = 0;         //min value
elements.items[7][2] = 500;       //max value
elements.items[7][3] = false;     //checkbox?
elements.items[7][4] = "email";   //id

//pop3
elements.items[8][0] = 0.01;      //price per unit
elements.items[8][1] = 0;         //min value
elements.items[8][2] = 500;       //max value
elements.items[8][3] = false;     //checkbox?
elements.items[8][4] = "pop3";    //id

//spamfilter
elements.items[9][0] = 0.25;      //price per unit
elements.items[9][1] = 0;         //min value
elements.items[9][2] = 0;         //max value
elements.items[9][3] = true;      //checkbox?
elements.items[9][4] = "spamfilter"; //id

//autoresponder
elements.items[10][0] = 0.10;     //price per unit
elements.items[10][1] = 0;        //min value
elements.items[10][2] = 500;      //max value
elements.items[10][3] = false;    //checkbox?
elements.items[10][4] = "autoresponder"; //id

//ssi
elements.items[11][0] = 0.50;     //price per unit
elements.items[11][1] = 0;        //min value
elements.items[11][2] = 0;        //max value
elements.items[11][3] = true;     //checkbox?
elements.items[11][4] = "ssi";    //id

//webmail
elements.items[12][0] = 0.50;     //price per unit
elements.items[12][1] = 0;        //min value
elements.items[12][2] = 0;        //max value
elements.items[12][3] = true;     //checkbox?
elements.items[12][4] = "webmail"; //id

//webftp
elements.items[13][0] = 0.50;     //price per unit
elements.items[13][1] = 0;        //min value
elements.items[13][2] = 0;        //max value
elements.items[13][3] = true;     //checkbox?
elements.items[13][4] = "webftp"; //id

//wap
elements.items[14][0] = 0.50;     //price per unit
elements.items[14][1] = 0;        //min value
elements.items[14][2] = 0;        //max value
elements.items[14][3] = true;     //checkbox?
elements.items[14][4] = "wap";    //id

//cronjob
elements.items[15][0] = 0.25;     //price per unit
elements.items[15][1] = 0;        //min value
elements.items[15][2] = 50;       //max value
elements.items[15][3] = false;    //checkbox?
elements.items[15][4] = "cronjob"; //id

//webapp
elements.items[16][0] = 0.01;     //price per unit
elements.items[16][1] = 0;        //min value
elements.items[16][2] = 500;      //max value
elements.items[16][3] = false;    //checkbox?
elements.items[16][4] = "webapp"; //id

//backup
elements.items[17][0] = 0.50;     //price per unit
elements.items[17][1] = 0;        //min value
elements.items[17][2] = 0;        //max value
elements.items[17][3] = true;     //checkbox?
elements.items[17][4] = "backup"; //id
