/*******************************************************************************
* Datei :           repetition.js   ***JAVASCRIPT***                           *
*                                                                              *
* Projekt :         NC EveCal                                                  *
* Version :         3.3                                                        *
* Datum :           03.07.2004                                                 *
* Letzte Änderung : 23.09.2004                                                 *
* Autor :           Manuel Rennecke <info@netconcept24.de>                     *
* Herausgeber :     (c) 2001-2004 - Net Concept 24                             *
*                                                                              *
* Wiederholungsintervall- & Datums-Funktionen                                  *
*******************************************************************************/

//**** Intervall-Layer anzeigen *************************************
function show_repetition(element) {
	if (document.getElementById) {
		document.getElementById('none').style.display    = "none";
		document.getElementById('daily').style.display   = "none";
		document.getElementById('weekly').style.display  = "none";
		document.getElementById('monthly').style.display = "none";
		document.getElementById('yearly').style.display  = "none";

		document.getElementById(element.value).style.display = "block";
	} else if (document.all) {
		document.all('none').style.display    = "none";
		document.all('daily').style.display   = "none";
		document.all('weekly').style.display  = "none";
		document.all('monthly').style.display = "none";
		document.all('yearly').style.display  = "none";

		document.all(element.value).style.display = "block";
	}
}

//**** Datumsangaben überprüfen *************************************
function checkdate(rep, type, form) {
  if (rep == "none") {
    field = document.forms[form].none_start_date;
  } else if (rep == "daily") {
    if (type == "start")
      field = document.forms[form].daily_start_date;
    else if (type == "end")
      field = document.forms[form].daily_end_date;
  } else if (rep == "weekly") {
    if (type == "start")
      field = document.forms[form].weekly_start_date;
    else if (type == "end")
      field = document.forms[form].weekly_end_date;
  } else if (rep == "monthly") {
    if (type == "start")
      field = document.forms[form].monthly_start_date;
    else if (type == "end")
      field = document.forms[form].monthly_end_date;
  } else if (rep == "yearly") {
    if (type == "start")
      field = document.forms[form].yearly_start_date;
    else if (type == "end")
      field = document.forms[form].yearly_end_date;
  }

  if (((typeof(requireEnd) != 'undefined' && requireEnd == 1) || type != "end") && field.value == "") {
    if (rep == "none")
      alert("Bitte geben Sie das Datum der Veranstaltung an!");
    else {
      if (type == "start")
        alert("Bitte geben Sie das Anfangsdatum der Veranstaltung an!");
	  else
        alert("Bitte geben Sie das Enddatum der Veranstaltung an!");
    }
    field.focus();
    return false;
  }

  if (field.value != "") {
    check_date = field.value;
    check_date = check_date.split('.');
    if (check_date.length != 3) {
      if (rep == "none")
        alert("Das angegebene Datum der Veranstaltung ist ungültig!");
      else {
        if (type == "start")
          alert("Das angegebene Anfangsdatum der Veranstaltung ist ungültig!");
        else if (type == "end")
          alert("Das angegebene Enddatum der Veranstaltung ist ungültig!");
      }
      field.focus();
      return false;
    }

    check_date[0] = parseInt(check_date[0],10);
    check_date[1] = parseInt(check_date[1],10)-1;

    if (check_date[2].length == 2) 
      check_date[2] = '20' + check_date[2];
    test_date = new Date(check_date[2],check_date[1],check_date[0]);
    if (test_date.getDate() != check_date[0] || test_date.getMonth() != check_date[1] || test_date.getFullYear() != check_date[2]) {
      if (rep == "none")
        alert("Das angegebene Datum der Veranstaltung ist ungültig!");
      else {
        if (type == "start")
          alert("Das angegebene Anfangsdatum der Veranstaltung ist ungültig!");
        else if (type == "end")
          alert("Das angegebene Enddatum der Veranstaltung ist ungültig!");
      }
      field.focus();
      return false;
	}
  }
} 

//**** Datumsangaben vergleichen ************************************
function comparedates(rep, form) {
  if (rep == "daily") {
    start_field = document.forms[form].daily_start_date;
    end_field   = document.forms[form].daily_end_date;
  } else if (rep == "weekly") {
    start_field = document.forms[form].weekly_start_date;
    end_field   = document.forms[form].weekly_end_date;
  } else if (rep == "monthly") {
    start_field = document.forms[form].monthly_start_date;
    end_field   = document.forms[form].monthly_end_date;
  } else if (rep == "yearly") {
    start_field = document.forms[form].yearly_start_date;
    end_field   = document.forms[form].yearly_end_date;
  }
  
  if (end_field.value != "") {
    start = start_field.value.split('.');
    end   = end_field.value.split('.');
  
    start[0] = parseInt(start[0],10);
    start[1] = parseInt(start[1],10)-1;
    if (start[2].length == 2) 
      start[2] = '20' + start[2];
    end[0] = parseInt(end[0],10);
    end[1] = parseInt(end[1],10)-1;
    if (end[2].length == 2) 
      end[2] = '20' + end[2];

    test_start = new Date(start[2],start[1],start[0]);
    test_end   = new Date(end[2],end[1],end[0]);
    if (test_end.getTime() < test_start.getTime()) {
      alert("Das angegebene Anfangsdatum ist größer als das Enddatum!");
      end_field.focus();
      return false;
	}
  }
}

//**** Zeitangaben überprüfen ***************************************
function checktime(rep, type, form) {
  if (rep == "none") {
    if (type == "start")
      field = document.forms[form].none_start_time;
    else if (type == "end")
      field = document.forms[form].none_end_time;
  } else if (rep == "daily") {
    if (type == "start")
      field = document.forms[form].daily_start_time;
    else if (type == "end")
      field = document.forms[form].daily_end_time;
  } else if (rep == "weekly") {
    if (type == "start")
      field = document.forms[form].weekly_start_time;
    else if (type == "end")
      field = document.forms[form].weekly_end_time;
  } else if (rep == "monthly") {
    if (type == "start")
      field = document.forms[form].monthly_start_time;
    else if (type == "end")
      field = document.forms[form].monthly_end_time;
  } else if (rep == "yearly") {
    if (type == "start")
      field = document.forms[form].yearly_start_time;
    else if (type == "end")
      field = document.forms[form].yearly_end_time;
  }

  if (field.value != "") {
    check_time = field.value;
    check_time = check_time.split(':');
    if (check_time.length != 2) {
      if (type == "start")
        alert("Die angegebene Anfangsuhrzeit der Veranstaltung ist ungültig!");
      else if (type == "end")
        alert("Die angegebene Enduhrzeit der Veranstaltung ist ungültig!");
      field.focus();
      return false;
    }

    check_time[0] = parseInt(check_time[0],10);
    check_time[1] = parseInt(check_time[1],10);

    test_time = new Date(1970,1,1,check_time[0],check_time[1],0);
    if (test_time.getHours() != check_time[0] || test_time.getMinutes() != check_time[1]) {
      if (type == "start")
        alert("Die angegebene Anfangsuhrzeit der Veranstaltung ist ungültig!");
      else if (type == "end")
        alert("Die angegebene Enduhrzeit der Veranstaltung ist ungültig!");
      field.focus();
      return false;
    }
  }
} 

//**** Wiederholungsintervall prüfen ********************************
function checkRepetition(form) {
  if (document.forms[form].repetition.value == "none") {
    if (checkdate('none','start',form) == false) return false;
    if (checktime('none','start',form) == false) return false;
    if (checktime('none','end',form) == false) return false;
  } else if (document.forms[form].repetition.value == "daily") {
    if (checkdate('daily','start',form) == false) return false;
    if (checkdate('daily','end',form) == false) return false;
    if (checktime('daily','start',form) == false) return false;
    if (checktime('daily','end',form) == false) return false;
    if (comparedates('daily',form) == false) return false;
  } else if (document.forms[form].repetition.value == "weekly") {
    if (checkdate('weekly','start',form) == false) return false;
    if (checkdate('weekly','end',form) == false) return false;
    if (checktime('weekly','start',form) == false) return false;
    if (checktime('weekly','end',form) == false) return false;
    if (comparedates('weekly',form) == false) return false;
    if (document.forms[form].weekly_cycle[1].checked == true && document.forms[form].weekly_cycle_intervall.value == "") {
      alert('Bitte geben Sie einen Wochenintervall an!');
      document.forms[form].weekly_cycle_intervall.focus();
      return false;
    }
    var chkZ = 1;
    for(i=0;i<document.forms[form].weekly_cycle_intervall.value.length;++i)
    if(document.forms[form].weekly_cycle_intervall.value.charAt(i) < "0" || document.forms[form].weekly_cycle_intervall.value.charAt(i) > "9")
      chkZ = -1;
    if(chkZ == -1) {
      alert("Bitte verwenden Sie beim Wochenintervall nur natürliche Zahlen!");
      document.forms[form].weekly_cycle_intervall.focus();
      return false;
    }
    if (document.forms[form].weekly_monday.checked == false && document.forms[form].weekly_tuesday.checked == false &&
        document.forms[form].weekly_wednesday.checked == false && document.forms[form].weekly_thursday.checked == false &&
        document.forms[form].weekly_friday.checked == false && document.forms[form].weekly_saturday.checked == false &&
        document.forms[form].weekly_sunday.checked == false) {
      alert('Bitte wählen Sie mindestens einen Wochentag aus!');
      document.forms[form].weekly_monday.focus();
      return false;
    }
  } else if (document.forms[form].repetition.value == "monthly") {
    if (checkdate('monthly','start',form) == false) return false;
    if (checkdate('monthly','end',form) == false) return false;
    if (checktime('monthly','start',form) == false) return false;
    if (checktime('monthly','end',form) == false) return false;
    if (comparedates('monthly',form) == false) return false;
    if (document.forms[form].monthly_cycle[0].checked == true) {
      if (document.forms[form].monthly_cycle_intervall_date.value == "") {
        alert('Bitte geben Sie einen Monatstag an!');
        document.forms[form].monthly_cycle_intervall_date.focus();
        return false;
      }
      test = parseInt(document.forms[form].monthly_cycle_intervall_date.value,10);
      if (test < 1 || test > 31) {
        alert('Bitte geben Sie einen gültigen Monatstag an!');
        document.forms[form].monthly_cycle_intervall_date.focus();
        return false;
      }
    }
    if (document.forms[form].monthly_cycle[1].checked == true) {
      if (document.forms[form].elements['monthly_cycle_intervall_number[]'].selectedIndex != 0 &&
          document.forms[form].elements['monthly_cycle_intervall_number[]'].selectedIndex != 1 &&
          document.forms[form].elements['monthly_cycle_intervall_number[]'].selectedIndex != 2 &&
          document.forms[form].elements['monthly_cycle_intervall_number[]'].selectedIndex != 3 &&
          document.forms[form].elements['monthly_cycle_intervall_number[]'].selectedIndex != 4 &&
          document.forms[form].elements['monthly_cycle_intervall_number[]'].selectedIndex != 5) {
        alert('Bitte wählen Sie die gewünschten Intervall-Eigenschaften aus!');
        document.forms[form].elements['monthly_cycle_intervall_number[]'].focus();
        return false;
      }
      if (document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 0 &&
          document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 1 &&
          document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 2 &&
          document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 3 &&
          document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 4 &&
          document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 5 &&
          document.forms[form].elements['monthly_cycle_intervall_weekday[]'].selectedIndex != 6) {
        alert('Bitte wählen Sie die gewünschten Intervall-Eigenschaften aus!');
        document.forms[form].elements['monthly_cycle_intervall_weekday[]'].focus();
        return false;
      }
    }
    if (document.forms[form].monthly_january.checked == false && document.forms[form].monthly_february.checked == false &&
        document.forms[form].monthly_march.checked == false && document.forms[form].monthly_april.checked == false &&
        document.forms[form].monthly_may.checked == false && document.forms[form].monthly_june.checked == false &&
        document.forms[form].monthly_july.checked == false && document.forms[form].monthly_august.checked == false &&
        document.forms[form].monthly_september.checked == false && document.forms[form].monthly_october.checked == false &&
        document.forms[form].monthly_november.checked == false && document.forms[form].monthly_december.checked == false) {
      alert('Bitte wählen Sie mindestens einen Monat aus!');
      document.forms[form].monthly_january.focus();
      return false;
    }
  } else if (document.forms[form].repetition.value == "yearly") {
    if (checkdate('yearly','start',form) == false) return false;
    if (checkdate('yearly','end',form) == false) return false;
    if (checktime('yearly','start',form) == false) return false;
    if (checktime('yearly','end',form) == false) return false;
    if (comparedates('yearly',form) == flase) return false;
  }
}
