// validate.js v 1.98
// a generic form validator 
// (cc) Brian Lalonde http://webcoder.info/downloads/validate.html
// License: http://creativecommons.org/licenses/by-sa/2.0/

function formFocus(frm)
{ // convenient way to start the form onLoad
  if(!document.forms.length) return;
  var els= ( frm || document.forms[0] ).elements;
  for(var i= 0; i < els.length; i++)
    if(els[i].type != 'hidden') { els[i].focus(); return; }
}

function formChanged(frm)
{ // determine whether any form fields have changed
  if(!document.forms.length) return;
  var els= ( frm || document.forms[0] ).elements;
  for(var i= 0; i < els.length; i++)
    switch(els[i].type)
    {
      case 'text': 
      case 'textarea': 
      case 'password': 
      case 'hidden':
      case 'file':
        if(els[i].defaultValue!=els[i].value)
        { status= 'The '+fieldname(els[i])+' field has changed.'; return true; } 
        break;
      case 'checkbox':
        if(els[i].defaultChecked!=els[i].checked)
        { status= 'The '+fieldname(els[i])+' checkbox has changed.'; return true; }
        break;
      case 'select-one':
        for(var j= 1; j < els[i].options.length; j++)
          if(els[i].options[j].defaultSelected!=els[i].options[j].selected)
          { status= 'The '+fieldname(els[i])+' selection has changed.'; return true; }
        break;
      case 'select-multiple':
        for(var j= 0; j < els[i].options.length; j++)
          if(els[i].options[j].defaultSelected!=els[i].options[j].selected)
          { status= 'The '+fieldname(els[i])+' selections have changed.'; return true; }
        break;
      case 'radio':
        if(els[i].length)
          for(var j= 0; j < els[i].length; j++)
            if(els[i][j].defaultChecked!=els[i][j].checked)
            { status= 'The '+fieldname(els[i])+' choice has changed.'; return true; }
        break;
    }
  return false;
}

function fieldname(fld)
{ // get the field label text or name
  if(fld.id && document.getElementsByTagName)
  {
    for(var i= 0, lbl= document.getElementsByTagName('LABEL'); i < lbl.length; i++)
      if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
    for(var i= 0, lbl= document.getElementsByTagName('label'); i < lbl.length; i++)
      if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
  }
  return fld.name||fld.type;
}

function requireValue(fld)
{ // disallow a blank field
  if(fld.disabled) return true;
  if(!fld.value.length)
  { status= 'Das Feld "'+fieldname(fld)+'" muß ausgefüllt werden.'; return false; }
  return true;
}


function dependants(enabled,elements)
{ // convenience function to enable/disable dependant fields, passed in as an array 
  if(!elements.length) return true;
  for(var i= 0; i < elements.length; i++)
    elements[i].disabled= !enabled;
}

function requireOneCD(fld) {
    var form = fld.form;
   var gesamtZahl = ((form.anzahl_em.value * 10) + (form.anzahl_sr.value * 10) + (form.anzahl_midz1.value * 3) + (form.anzahl_midz2.value * 3) + (form.anzahl_midz3.value * 3));
    if(gesamtZahl == 0)
    { status= 'Sie müssen mindestens eine CD bestellen!'; return false; }
    return true;
}

function allowChars(fld,chars)
{ // provide a string of acceptable chars for a field
  if(fld.disabled) return true;
  for(var i= 0; i < fld.value.length; i++)
  {
    if(chars.indexOf(fld.value.charAt(i)) == -1)
    { status= 'The '+fieldname(fld)+' field may not contain "'+fld.value.charAt(i)+'" characters.'; return false; }
  }
  return true;
}

function disallowChars(fld,chars)
{ // provide a string of unacceptable chars for a field
  if(fld.disabled) return true;
  for(var i= 0; i < fld.value.length; i++)
  {
    if(chars.indexOf(fld.value.charAt(i)) != -1)
    { status= 'The '+fieldname(fld)+' field may not contain "'+fld.value.charAt(i)+'" characters.'; return false; }
  }
  return true;
}

function checkEmail(fld)
{ // simple email check
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var phony= /@(\w+\.)*example\.(com|net|org)$/i;
  if(phony.test(fld.value))
  { status= 'Please enter your email address in the '+fieldname(fld)+' field.'; return false; }
  var emailfmt= /^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,8}$/;
  if(!emailfmt.test(fld.value))
  { status= 'Bitte geben Sie eine gültige E-Mail-Adresse ein.'; return false; }
  return true;
}


function isMemberOf(elem,classname)
{ // checks to see if elem is a member of the (style) class 
  // trivial cases first: no membership or simple equality
  if(!elem.className)
    return false
  else if(elem.className == classname)
    return true;
  else if(elem.className.indexOf(' ') > -1)
  { // multiple class names; use split, if avail 
    if(parseInt(navigator.appVersion) >= 4)
    {
      var names= elem.className.split(' ');
      for(var index= 0; index < names.length; index++)
        if(names[index] == classname)
          return true;
    }
    // older browsers can fake it 
    // WARNING: "fine" can be found in "oldRefined"
    else if(elem.className.indexOf(classname) > -1)
      return true;
  }
  return false;
}


function autocheckByBlur(frm)
{ // uses the onBlur handler of form elements to check value 
  status= '';
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(el.type == 'radio' && !requireRadio(frm[el.name]))
    { alert(status); frm.elements[index].focus(); return false; }
    else if(el.type != 'hidden' && el.name && el.onblur)
    {
      el.onblur();
      if(status) { alert(status); el.focus(); return false; }
    }
  }
  for(var index= 0; index < frm.elements.length; index++)
    if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function canCheckByBlur(frm)
{ // determines whether programmatic invocation of form element onblur is available
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(el.type != 'hidden' && el.name && typeof(el.onblur)=='function') return true;
  }
  return false;
}

function autocheck(frm)
{ // uses the best available method to check form values 
  var bchar= navigator.appName.substring(0,1);
  if(isMemberOf(frm,'autocheck'))
  { return autocheckByClass(frm); }
  else if(canCheckByBlur(frm))
  { return autocheckByBlur(frm); }
  else
  { return autocheckByName(frm); }
}



// Prize Calculator
// Author: Brian O'Keefe
// Email: okeefeb@canisius.edu
// This code may be used or modified freely as long as the appropriate
// credit is given.
// This is the second release, version 1.0 was unknowingly incompatible
// with anything but Netscape 4
// modified by Moritz Dreßler for jankoch.org


// Thank you Netscape for the next two lines
var userAgent = navigator.appName + " " + navigator.appVersion;
var agentInfo = userAgent.substring(0, 12);

var versand = 2;

function computeForm(form)
{
    var gesamtPreis = ((form.anzahl_sr.value * 10) + (form.anzahl_midz1.value * 3) + (form.anzahl_midz2.value * 3) + (form.anzahl_midz3.value * 3) + versand);
    document.getElementById("gesamtPreis").innerHTML = gesamtPreis + ",00 &euro";
}

function countryChanged(input) {
    var country = input.value;
    if(country == "Deutschland" || country == "deutschland" || country == "de" || country == "De" || country == "DE" || country == "D" || country == "d" || country == "dtl" || country == "Dtl" || country == "") {
        versand = 2;
        document.getElementById("versandEU").style.color = "black";
        document.getElementById("versandCH").style.color = "black";
    } else {
        versand = 5;
        document.getElementById("versandEU").style.color = "red";
        if(country == "Schweiz" || country == "schweiz" || country == "CH" || country == "ch" || country == "Ch") {
            document.getElementById("versandCH").style.color = "red";
        } else {
            document.getElementById("versandCH").style.color = "black";
        }
    }
    document.getElementById("versandKosten").innerHTML = versand + ",00 &euro";
    computeForm(input.form);
    
}

function validateData(theNum)
{
    var str=theNum;
    if (agentInfo == "Netscape 4.0")
 {
     var correctedNum = 0;
     var decimalPlace = 0;
  	 var addOn = "0";
  	 var isDecimal = false;
     for (var i=0; i < str.length; i++)
     {
         var ch=str.substring(i, i+1);
         if (((ch >= "0") && (ch <= "9")) && (!isDecimal))
         {
          correctedNum *= 10;
       correctedNum += ch * 1;
         }
         else if (((ch >= "0") && (ch <= "9")) && (isDecimal))
         {
    addOn += ch;
    ++decimalPlace;
         }
         else if (ch == ".")
          isDecimal = true;
         else if ((ch != ",") && (ch != "$"))
          alert("The invalid character " + ch + " was detected "+
        "and ignored.");
     }
  if (decimalPlace > 0)
   correctedNum += addOn / pow(decimalPlace);
     return correctedNum;
 }
 else
 {
     for (var z=0; z < str.length; z++)
     {
  var ch=str.substring(z, z+1);
  if (((ch < "0") || (ch > "9"))) //  && (ch != ".") für dezimalzahlen
   return false;
     }
     return true;
        }

}

function calc(input)
{
 if (agentInfo == "Netscape 4.0")
 {
     input.value = validateData(input.value);
     computeForm(input.form);
 }
 else
 {
     if (validateData(input.value)) {
		computeForm(input.form);
     } 
	 else
     {
       alert("Bitte nur Ziffern eingeben.");
            input.value = 1;
            computeForm(input.form);
     }
 }

}
