var inputForm = document.forms['rechner_form'];
var outputTable = document.getElementById('rechner_result_list');
var loadBarContainer = document.getElementById('rechner_loadbar');


//keyPressed Eventhandler, der verhindert, dass Buchstaben eingegeben werden
function noText(e)
{
         var keynum;
         var keychar;
         var numcheck;

         if(window.event) // IE
         {
                 keynum = e.keyCode;
         }
         else if(e.which) // Netscape/Firefox/Opera
         {
                 keynum = e.which;
         }
         keychar = String.fromCharCode(keynum);
         numcheck = /[a-zA-Z_]/;
         return !numcheck.test(keychar);
}

//Prüft ob i element der natürlichen Zahlen ist
function isElementN (i) {
         return ((i != "") && ((i % 1) == 0) && (i > 0));
}

//Validiert das Feld "products_qty". (Zahl element N) Bei misserfolg resetten auf 1
function products_qty_validate() {
         if(!isElementN(inputForm.products_qty.value)) {
                 alert("Bitte geben sie eine gültige Produktzahl ein.");
                 inputForm.products_qty.value = "1";
                 return false;
         }
         return true;
}
//Validiert das Feld "pagecount". (Zahl element N) Bei misserfolg resetten auf 1
function pagecount_validate() {
         if(!isElementN(inputForm.pagecount.value)) {
                 alert("Bitte geben sie eine gültige Seitenzahl ein.");
                 inputForm.pagecount.value = "1";
                 return false;
         }
         return true;
}

//Resetten der Tabelle (alle reihen löschen, ausser Table Header)
function resetTable(table) {
 for (var i = table.rows.length-1;i > 0;i--) {
   table.deleteRow(i);
 }
}

//Fügt einer Tabelle eine reihe hinzu.
function addRow(table,bindung,preis) {
  var TR = table.insertRow(table.rows.length);
  //var td_bindung = document.createElement("td"); DAS IST DIE BINDUNG!
  //var td_bindung_text = document.createTextNode(""); DAS IST DIE BINDUNG!
  var td_preis = document.createElement("td");
  var td_preis_text = document.createTextNode("");
  //@Markus: Hier ggf den Tabellenzellen Styles hinzufügen. Z.b.:
  // td_preis.class = "deineCSSklasse";  
  
//td_bindung.appendChild(td_bindung_text); BINDUNG!
  td_preis.appendChild(td_preis_text);
//TR.appendChild(td_bindung); BINDUNG!
  TR.appendChild(td_preis);

//td_bindung.innerHTML = bindung; BINDUNG!
  td_preis.innerHTML = preis;
}

//Schickt die eingegebenen Daten an den Server und hohlt sich das resultat.
//diese werden in der Ausgabetabelle angezeigt.
//Da die ClientServer Kommunikation asynchron läuft, werden Sendefolgenummern vergeben, um nicht aktuellere Daten
//mit älteren Antworten zu überschreiben.
function getCalculation() {
  var req = createXMLHttpRequest();
  if (!req) {
    alert("Ihr Browser unterstützt kein XMLHttpRequest. Sie können diese Anwendung leider nicht ausführen.");
    return;
  }
  req.open('POST', 'index.php?requ='+send_sequence_number_lastSent, true);
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.onreadystatechange = function() {
    if (req.readyState == 4) {
       if (req.status == 200) {
         var messages = req.responseText.split(";TRENNOR;");
		 if (messages.length == 1) {
		   if (parseInt(messages[0]) > send_sequence_number_lastRecieved) {
             send_sequence_number_lastRecieved = messages[0];
             resetTable(outputTable);
    		 addRow(outputTable,"In dieser Konfiguration nicht Angeboten","---");
			 loadBarContainer.style.display = "none";
           }
         }
         if (messages.length < 3) { return; }
         if (parseInt(messages[0]) > send_sequence_number_lastRecieved) {
           send_sequence_number_lastRecieved = messages[0];
           resetTable(outputTable);
           for (var i = 1;i < messages.length;i+=2) {
             addRow(outputTable,messages[i],messages[i+1]);
           }
		   loadBarContainer.style.display = "none";
         }
       } else {
          alert("Es ist ein Fehler bei der Serveranfrage aufgetreten. Bitte wiederholen sie die Anfrage. Sollte das Problem weiterhin bestehen, wenden sie sich an den Administrator.");
       }
    }
  }
  var reqString = "pagecount="+inputForm.pagecount.value+
                 "&products_qty="+inputForm.products_qty.value+
				 "&Format="+radioWert(inputForm.Format)+
				 "&Farbigkeit="+radioWert(inputForm.Farbigkeit);
                 
  req.send(reqString);
  send_sequence_number_lastSent++;
  resetTable(outputTable);
  loadBarContainer.style.display = "block";
  return;
}

//Sendefolgenummern:
//Letzte gesendete Folgenummer
var send_sequence_number_lastSent = 0;
//Letzte erhaltene Folgenummer
var send_sequence_number_lastRecieved = -1;

//Generiert einen XMLHttpRequest. Ob man auf return false prüfen sollte ist fraglich :/
function createXMLHttpRequest() {
  var types = [
    'Microsoft.XMLHTTP',
    'MSXML2.XMLHTTP.5.0',
    'MSXML2.XMLHTTP.4.0',
    'MSXML2.XMLHTTP.3.0',
    'MSXML2.XMLHTTP'
   ];

  for (var i = 0; i < types.length; i++) {
    try {
      return new ActiveXObject(types[i]);
    } catch(e) {}
  }

  try {
    return new XMLHttpRequest();
  } catch(e) { }

  return false; // XMLHttpRequest not supported
}

function radioWert(rObj) { 
     for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;
     return false;
   }
