//
// Mailformular überprüfen
//   Aufruf mit 'Feldname','Feldbezeichnung','Test'   (wenn 2. Parameter == '' dann = 1.Parameter)
//   mit den möglichen Überprüfungen bei Test:
//   'R' oder 'N': benötigtes Feld
//   'isEmail'   : E-Mail Adresse
//   'isAlpha'   : nur Buchstaben, Leerräume und Satzzeichen, keine Ziffern
//   'isTel'     : Telefonnummer
//   'isDatum'   : Datum
//   'isNum'     : Zahl
//   'inRange1:3': Zahl im Bereich von 1 bis 3
//   'Select1'   : Element in einer Liste (bei Menü 2.Element) muss ausgewählt sein
//   'Radio'     : Element im Optionsfeld muss ausgewählt sein
//   'Checkbox'  : Mindestens ein Element der Checkboxen muss ausgewählt sein
//
function CheckMail() {
  var i,p,pa,q,name,test,num,min,max,errors='',args=CheckMail.arguments

  for (i=0; i<(args.length-2); i+=3) {
    name = (args[i+1] ? args[i+1] : args[i])
    test = args[i+2]
    val  = MM_findObj(args[i])

    if (val) {
      if (test.indexOf('Select') != -1) {
        p = test.substring(7)
        if (val.selectedIndex < p)
            errors += '- '+name+' muss ausgewählt werden.\n'
	      }
	      
      else if (test.indexOf('Radio') != -1) {
        if (!GetRadioValue(val))
            errors += '- '+name+' muss ausgewählt werden.\n'
	      }
		  
      else if (test.indexOf('Checkbox') != -1) {
        if (!GetCheckboxValue(val))
            errors += '- '+name+' muss ausgewählt werden.\n'
	      }
		  
      else if ((val=val.value) != "") {
        if (test.indexOf('isEmail') != -1) {
          p  = val.indexOf('@')
          pa = val.split('@')
          if (p<1 || p==(val.length-1) || (q=pa.length)>2 || pa[1]==pa[1].split('.')[0])
            errors += '- '+name+' muss eine korrekte E-Mail-Adresse sein.\n'
          }

         else if (test.indexOf('isAlpha') != -1) {
          if ((q = CheckMailText(val,'Alpha')) != '')
            errors += '- '+name+q
	 }

         else if (test.indexOf('isTel') != -1) {
          if ((q = CheckMailText(val,'Tel')) != '')
            errors += '- '+name+q
	 }
		  
	 else if (test.indexOf('isDatum') != -1) {
//          if ((q = CheckMailText(val,'Datum')) != '')
          if ((q = string2date(val)) != '')
            errors += '- '+name+q
	 }

         else if (test != 'R') {
          num = parseFloat(val)
	  if (val.replace(/^0*/,"") != ''+num)
            errors += '- '+name+' muss eine Zahl sein.\n'

          if (test.indexOf('inRange') != -1) {
            p   = test.indexOf(':')
            min = test.substring(8,p)
            max = test.substring(p+1)        
            if (num<min || max<num)
              errors+='- '+name+' muss eine Zahl zwischen '+min+' und '+max+' sein.\n'
            }
          }
        }
       else if (test.charAt(0) == 'R')
         errors += '- '+name+' wird benötigt.\n'
      }
    }

  if (errors)
    alert('Beim Ausfüllen des Formulars sind Fehler aufgetreten:\n'+errors)

  return (errors == '')
}


//
// Überprüfung eines Textes auf korrekte Zeichen
//
function CheckMailText(text,was) {
  var i,j,ch,checkOK,errorText,error=''

  if (was == 'Tel') {
	checkOK   = "0123456789+()/- \t\r\n\f"
	errorText = " darf nur Ziffern, Leerräume und \"+()/-\"-Zeichen enthalten.\n"
	}
   else if (was == 'Datum') {
	checkOK   = "0123456789./-\t\r\n\f"
	errorText = " darf nur Ziffern und \".-/\"-Zeichen enthalten.\n"
    }
   else if (was == 'Alpha') {
	checkOK   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ,.-' \t\r\n\f"
	errorText = " darf nur Buchstaben, Leerräume und \",.-\"'-Zeichen enthalten.\n"
    }

  for (i=0; i<text.length; i++) {
    ch = text.charAt(i)
    for (j=0; j<checkOK.length; j++)
      if (ch == checkOK.charAt(j))
        break
    if (j == checkOK.length) {
      error = errorText
      break
      }
    }

  return error
}


function MM_findObj(n, d) { //v3.0 Dreamweaver
  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); return x;
}


//
// Wert einer Auswahl bestimmen
//
function GetRadioValue( radioObject ) {
  var value = null;

  // Validate parameter value
  if (radioObject+"" == "undefined" || radioObject == null)
    return null;
  for (var i=0; i < radioObject.length; i++) {
    if (radioObject[i].checked) {
      value = radioObject[i].value;
      break;
      }
    }
  return value;
}


//
// Wert einer Checkbox bestimmen
//
function GetCheckboxValue( checkboxObject ) {
  var value = null;

  // Validate parameter value
  if (checkboxObject+"" == "undefined" || checkboxObject == null)
    return null;
  for (var i=0; i < checkboxObject.length; i++) {
    if (checkboxObject[i].checked) {
      value += checkboxObject[i].value + ", ";
      break;
      }
    }
  return value;
}


//
// Wert einer Liste bestimmen
//
function GetListValue( listObject ) {
  var value = null;

  // Validate parameter value
  if (listObject+"" == "undefined" || listObject == null)
    return null;

  return(listObject[listObject.selectedIndex].value)
}



///////////////////////////////////////////////////////////
//
// string2date(string)
//
// string => TT.MM.YYYY HH:MM:SS
// Das Trennzeichen kann ein: "./-" sein
// prüft einen String auf ein gültiges Datum
// gibt ein Datum Objekt oder null zurück
// HPM: gibt eine Fehlermeldung zurück
 
function string2date(string)
{
    if(!string) return null;
    string += '';
    string = string.replace(/[-\/]/g, '.'); // Trennzeichen normalisieren
    string = string.replace(/[^0-9.: ]/g, ''); // ungültige Zeichen entfernen
    string = string.replace(/ +/g, ' '); // doppelte Leerzeichen entfernen
    var uhr = string.split(" "); // Uhrzeit abtrennen
    var split = uhr[0].split(".");
    var day = parseInt(split[0], 10);
    var month = parseInt(split[1] || 0, 10);
    var year = parseInt(split[2] || 0, 10);
 
    if(isNaN(year)) year = getFullYear();
 
    var check = new Date(year, month - 1, day);
    if(uhr[1])
    {
         var uhr = uhr[1].split(':');
         check.setHours( uhr[0] || 0 );
         check.setMinutes( uhr[1] || 0 );
         check.setSeconds( uhr[2] || 0 );
    }
 
    var day2 = check.getDate();
    var year2 = getFullYear(check);
    var month2 = check.getMonth() + 1;
 
//    return ( year2 == year && month == month2 && day == day2 ) ? check : null;
    var error = " ist kein korrektes Datum.\n";
    return ( year2 == year && month == month2 && day == day2 ) ? "" : error;
}

function getFullYear(date)
{
    if(!date) date = new Date();
    if(typeof date.getFullYear != 'undefined') return date.getFullYear();
    var year = date.getYear();
    if(year < 1000) year += 2000;
    return year;
}
 
