// ---------------------------------------------------------------------------------------
// globale JavaScript-Funktionen fuer Funktionen
// $Id: inc.redSysFormJS.js,v 1.5 2003/03/31 08:51:53 praktikant Exp $
// ---------------------------------------------------------------------------------------

// ---------------------------------------------------------------------------------------
// Funktion		submitForm
// Beschr.		schickt nach Plausibilitätsprüfungen ein Formular ab
//
// Parameter
// formName		Name des Formulares
// check		zu überprüfende Forumlarfelder
//              Syntax: ForumlarfeldName, Formularfeldbeschreibung, Plausibilitätskontrolle
//				z.B.: "plz,Postleitzahl,notEmpty"

function submitForm(formName,check) {
	if (check) {
		checkArray = check.split(",");
		msg = ""
		for (i=0; i <= checkArray.length; i+=3) {
			if (checkArray[i+2] == "notEmpty") {
				if (document.forms[formName].elements[checkArray[i]].value == "")
					msg = msg + "\n- " +checkArray[i+1] + StrgMsgNotEmpty;
			}
			if (checkArray[i+2] == "isEmail") {
				if (!isEmail(document.forms[formName].elements[checkArray[i]].value))
					msg = msg + "\n- " +checkArray[i+1] + StrgMsgIsEmail;
			}
			if (checkArray[i+2] == "isDate") {
				if (!isDate(document.forms[formName].elements[checkArray[i]].value))
					msg = msg + "\n- " +checkArray[i+1] + StrgMsgIsDate;
			}
			if (checkArray[i+2] == "isTime") {
				if (!isTime(document.forms[formName].elements[checkArray[i]].value))
					msg = msg + "\n- " +checkArray[i+1] + StrgMsgIsTime;
			}
			if (checkArray[i+2] == "isPic") {
				if (!isPic(document.forms[formName].elements[checkArray[i]].value))
					msg = msg + "\n- " +checkArray[i+1] + StrgMsgIsPic;
			}
			if (checkArray[i+2] == "isChecked") {
        newsletterSelected = false;

        // mehr als eine Checkbox vorhanden
        if (document.forms[formName].elements[checkArray[i]].length) {
          bereichCount = document.forms[formName].elements[checkArray[i]].length;
          for(j=0;j<bereichCount;++j) {
      			if ( document.forms[formName].elements[checkArray[i]][j].checked == true ) {
              newsletterSelected = true;
            }
          }
  			} else { // nur eine checkbox vorhanden
     			if ( document.forms[formName].elements[checkArray[i]].checked == true ) {
            newsletterSelected = true;
          }
        }
				if (!newsletterSelected) { msg = msg + "\n- " + StrgMsgNoNLChecked; }
      }
		}
		if (msg != "")
			alert(StrgMsgFormCorrection + msg );
		else
			document.forms[formName].submit();
	}
	else
		document.forms[formName].submit();
}

// This function checks if the text has the 
// format xxxx@yyyy.zzzz. And if the text
// contains no special (invalid) characters
function isEmail(emailAddress) {
  bln_isEmail = true;
	var email_regex = /^.+\@.+\..+$/;
	if (!email_regex.test(emailAddress)) {
    bln_isEmail = false;
  }
	var email_regex = /\;|\t|,|<|>|\+|#/;
	if (email_regex.test(emailAddress)) {
    bln_isEmail = false;
  }
  if (bln_isEmail) { return(true); }
	else { return(false); }
}

// This function checks the fileextension of fileName.
//if it is different than ".jpg", ".gif" or ".jpeg" then it returns false
function isPic(fileName) {
  isValidPic = false;
  if (fileName.substr(fileName.length-4, 4).toLowerCase() == ".jpg" || 
      fileName.substr(fileName.length-4, 4).toLowerCase() == ".gif" ||
      fileName.substr(fileName.length-5, 5).toLowerCase() == ".jpeg") {
    return(true); }
  else {
  	return(false); }
}

// Checks & unchecks all checkboxes within a form
function checker(action) {
    action == "check" ? state = "true" : state = "false"

    for(i=0;i<document.forms[0].length;++i) {
        if (document.forms[0].elements[i].type == "checkbox") {
            eval("document.forms[0].elements[i].checked = "+ state +";");
        }
    }
}

// ---------------------------------------------------------------------------------------
// Funktion		submitInsertForm
//
// wird fuer Forum/Themen benoetigt
function submitInsertForm() {
   if (document.insertForm.authorEmail.value != "") {   
    if(isEmail(document.insertForm.authorEmail.value))
      submitForm('insertForm','authorName,Name,notEmpty,title,Überschrift,notEmpty,text,Text,notEmpty');
    else
      alert(StrgMsgInvalidEmail);
    }
  else if (document.insertForm.emailPub.checked)
    alert(StrgMsgNoPubEmail);
  else if (document.insertForm.emailLetter.checked)
    alert(StrgMsgNoLetterEmail);
  else
    submitForm('insertForm','authorName,Name,notEmpty,title,Überschrift,notEmpty,text,Text,notEmpty');
}

// ---------------------------------------------------------------------------------------
// Funktion		checkFileName
//
// wird fuer Datei/Bild-Upload benoetigt
// prüft auf ungültige Zeichen im Dateinamen
function checkFileName(field,formName) {
  formVal = eval("document."+formName+"."+field+".value")
  // überprüfen, ob Datei ausgewählt wurde
  if (formVal == "") {
    alert (StrgMsgNoFilename);
  }
  else {
    // Dateiname separieren
    tempArr = formVal.split("\\");
    fileName = tempArr[tempArr.length - 1];
  
    // auf unzulässige Zeichen prüfen
    fileNameValid = true
    for (i=0;i<fileName.length;i++) {
      if (!fileName.substr(i,1).match(/[a-z]|[A-Z]|[0-9]|\.|\-|\_|\+/)) {
        fileNameValid = false;
      }
    }

    // Benutzerdialog, wenn ungültiger Dateiname
    if(fileNameValid) { 
      submitThis = true;
    } else {
      check = confirm(StrgMsgInvalidFilename);
      check ? submitThis = true  : submitThis = false;
    }
    return(submitThis);
  }
}

// ---------------------------------------------------------------------------------------
// Funktion		isDate
// Beschr.		Überprüft eine Formulareingabe auf ihre gültigkeit als Datum im Format
//            dd.mm.yy
//
// Parameter  
// field	kompletter Name des zu prüfenden Formularfeldes mit Angabe von Formnamen
//
function isDate(DateValue){
  if (DateValue.length == 0) { return(false); }
  var checkstr = "0123456789";
  var DateTemp = "";
  var seperator = ".";
  var day;
  var month;
  var year;
  var leap = 0;
  var err = 0;
  var i;

  err = 0;
  /* Delete all chars except 0..9 */
  for (i = 0; i < DateValue.length; i++) {
    if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	    DateTemp = DateTemp + DateValue.substr(i,1);
	  }
  }
  DateValue = DateTemp;
  /* Always change date to 8 digits - string*/
  /* if year is entered as 2-digit / always assume 20xx */
  if (DateValue.length == 6) {
    DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
  if (DateValue.length != 8) { err = 19; }
  /* year is wrong if year = 0000 */
  year = DateValue.substr(4,4);
  if (year == 0) { err = 20; }
  /* Validation of month*/
  month = DateValue.substr(2,2);
  if ((month < 1) || (month > 12)) { err = 21; }
  /* Validation of day*/
  day = DateValue.substr(0,2);
  if (day < 1) { err = 22; }
  /* Validation leap-year / february / day */
  if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0))
    { leap = 1; }
  if ((month == 2) && (leap == 1) && (day > 29))
    { err = 23; }
  if ((month == 2) && (leap != 1) && (day > 28))
    { err = 24; }
   /* Validation of other months */
  if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12")))
    { err = 25; }
  if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
    { err = 26; }
  /* if 00 ist entered, no error, deleting the entry */
  if ((day == 0) && (month == 0) && (year == 00))
    { err = 0; day = ""; month = ""; year = ""; seperator = ""; }
  //Fehler, wenn kein Datum eingegeben wurde.
  //if (DateValue.length == 0) { err = 1; }
   
  if (err == 0) { return(true); }
  else { return(false); }
}



// ---------------------------------------------------------------------------------------
// Funktion		isTime
// Beschr.		Überprüft eine Formulareingabe auf ihre gültigkeit als Uhrzeit im Format
//            hh:mm
//
// Parameter  
// TimeValue	Formularfeldwert
//
function isTime(TimeValue)
{
  if (TimeValue.length == 0) { return(false); }
  var seperator = ":";
  var hour;
  var minute;
  var err = 0;
  err = 0;
  
  hour = TimeValue.substr(0,2);
  minute = TimeValue.substr(3,2);
  
  if (TimeValue.length == 5) {
    if ((isNaN(hour) == false) && (hour < 24)) {}
    else { err = 30; }
    
    if ((isNaN(minute) == false) && (minute < 60)) {}
    else { err = 30; }
    
    if (TimeValue.substr(2,1) == seperator) {}
    else { err = 30; }
  }
  else if (TimeValue.length != 0) { err = 10; }

  if (err == 0) { return(true); }
  else { return(false); }  
}



// ---------------------------------------------------------------------------------------
// Funktion		checkStartEnd
// Beschr.		Überprüft, ob das Startdatum dat_start vor dem Enddatum (dat_end) liegt.
//            Wenn ja, dann return 1 ansonsten return 0
//
// Parameter  
// dat_start	Startdatum
// time_start Startzeit
// dat_end    Enddatum
// time_end   Endzeit
//
function checkStartEnd(dat_start, time_start, dat_end, time_end) {
  year_start = dat_start.substr(6,4);
  month_start = dat_start.substr(2,2);
  day_start = dat_start.substr(0,2);
  hour_start = time_start.substr(0,2);
  minute_start = time_start.substr(3,2);
  
  year_end = dat_end.substr(6,4);
  month_end = dat_end.substr(2,2);
  day_end = dat_end.substr(0,2);
  hour_end = time_end.substr(0,2);
  minute_end = time_end.substr(3,2);
  ts_start = Date.UTC(year_start,month_start,day_start,hour_start,minute_start,00);
  ts_end = Date.UTC(year_end,month_end,day_end,hour_end,minute_end,00);
  ts_difference = ts_end - ts_start;
  if (ts_difference > 0) {
    return(1);
  }
  else {
    return(0);
  }
}
