var i18nCalendarDateFormat = '';
var i18nOutputDateFormat = '';

// Maximale Anzahl an Terminen die eingegeben werden darf.
var maxTerminCounter = 1000;

function initTermineListbox()
{
	var terminArray = addTermineImpl(new Array());
	updateTermineListbox(terminArray);
}

function updateTermineListbox(terminArray)
{
	// Alle Einträge aus der Listbox entfernen.
	var termineListbox = $('termineList');
	for(var i = termineListbox.length-1; i >= 0; i--)
	{
		termineListbox.options[i] = null; 
	}			

	if(terminArray)
	{
		// Termine hinzufügen.
		var optionIndex = 0;
		for(var i = 0; i < terminArray.length; i+=2)
		{
			var optionText = DateHelper.toString(terminArray[i], i18nOutputDateFormat);
			if(!DateHelper.equals(terminArray[i], terminArray[i+1]))
			{			
				optionText = optionText.concat(' - ');
				optionText = optionText.concat(DateHelper.toString(terminArray[i+1], i18nOutputDateFormat));
			}		
			var option = new Option(optionText);	
			termineListbox.options[optionIndex] = option;
			optionIndex++;
		}
	}		
}	

function addTermineImpl(addTerminArray)
{
	var terminInputHiddenField = $('terminInputHidden');
	var terminArrayString = terminInputHiddenField.value;
	var terminArray = DateHelper.toDayArray(terminArrayString);

	for(var i = 0; i < addTerminArray.length; i+=2)
	{
		if(terminArray.length >= maxTerminCounter * 2)
		{
			break;
		}
		
		var vonDate = addTerminArray[i];
		var bisDate = addTerminArray[i+1];
		
		var index = 0;
		for(var j = 0; j < terminArray.length; j+=2)
		{
			if(DateHelper.after(terminArray[j], vonDate))
			{
				break;
			}
			index+=2;
		}
		terminArray = ToolkitHelper.insertIntoArray(terminArray, bisDate, index);
		terminArray = ToolkitHelper.insertIntoArray(terminArray, vonDate, index);
	}		

	terminInputHiddenField.value = DateHelper.toArrayString(terminArray);
	
	return terminArray;
}

function actionEntfernen()
{
	var terminInputHiddenField = $('terminInputHidden');
	var terminArrayString = terminInputHiddenField.value;
	var terminArray = DateHelper.toDayArray(terminArrayString);

	var newTerminArray = new Array();
	var newTerminIndex = 0;

	var termineListbox = $('termineList');
	for(var i = 0; i < termineListbox.length; i++)
	{
		if(!termineListbox.options[i].selected)
		{
			newTerminArray[newTerminIndex] = terminArray[i*2];
			newTerminIndex++;
			newTerminArray[newTerminIndex] = terminArray[i*2+1];
			newTerminIndex++;
		} 
	}			

	var newTerminArrayString = DateHelper.toArrayString(newTerminArray);
	terminInputHiddenField.value = newTerminArrayString;
	updateTermineListbox(newTerminArray);
}

function actionHinzuTerminSerie()
{	
	var simpleDateFormat = new org_apache_myfaces_SimpleDateFormat(i18nCalendarDateFormat);

	var serieVonCalendar = $('serieVonCalendar');
	var serieBisCalendar = $('serieBisCalendar');
	var serieUmStundeIT = $('serieUmStunde');
	var serieUmMinuteIT = $('serieUmMinute');
	var serieDauerTageIT = $('serieDauerTage');
	var serieDauerStundeIT = $('serieDauerStunde');
	var serieDauerMinuteIT = $('serieDauerMinute');
	
	var serieUmStundeValue = serieUmStundeIT.value;
	if(!serieUmStundeValue || serieUmStundeValue < 0 || serieUmStundeValue > 23)
	{
		return;
	}
	
	var serieUmMinuteValue = serieUmMinuteIT.value;
	if(!serieUmMinuteValue || serieUmMinuteValue < 0 || serieUmMinuteValue > 59)
	{
		return;
	}

	var serieVonDate = simpleDateFormat.parse(serieVonCalendar.value);
	if(!serieVonDate)
	{
		return;
	}

	var serieBisDate = simpleDateFormat.parse(serieBisCalendar.value);
	if(!serieBisDate)
	{
		return;
	} 

	if(DateHelper.after(serieVonDate, serieBisDate))
	{
		return;
	}	

	// Nur Selektierte Wochentage berücksichtigen.
	var serieWeekdaySel = new Array();
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckSu').checked;
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckMo').checked;
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckTu').checked;
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckWe').checked;
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckTh').checked;
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckFr').checked;
	serieWeekdaySel[serieWeekdaySel.length] = $('serieCheckSa').checked;
	
	var dayArray = DateHelper.getDayArray(serieVonDate, serieBisDate);	
	var selDayArray = new Array();
	for(var d = 0; d < dayArray.length; d++)
	{
		if(serieWeekdaySel[dayArray[d].getDay()])
		{
			selDayArray[selDayArray.length] = dayArray[d];
			if(selDayArray.length >= maxTerminCounter)
			{
				break;
			}
		}
	}

	var addTerminArray = new Array();
	for(var d = 0; d < selDayArray.length; d++)
	{
		var date = selDayArray[d];
		var vonDate = new Date();
		vonDate.setTime(date.getTime());
		vonDate.setMilliseconds(0);
		vonDate.setSeconds(0);
		vonDate.setMinutes(serieUmMinuteValue);
		vonDate.setHours(serieUmStundeValue);

		var bisDate = new Date();
		bisDate.setTime(vonDate.getTime());
 
		if (serieDauerTageIT) {
			var serieDauerTageValue = serieDauerTageIT.value;
			if (serieDauerTageValue && serieDauerTageValue >= 0) {
				bisDate = DateHelper.addDays(bisDate, serieDauerTageValue);
			}
		}
		if (serieDauerStundeIT) {
			var serieDauerStundeValue = serieDauerStundeIT.value;
			if (serieDauerStundeValue && serieDauerStundeValue >= 0) {
				bisDate = DateHelper.addHours(bisDate, serieDauerStundeValue);
			}
		}
		if (serieDauerMinuteIT) {
			var serieDauerMinuteValue = serieDauerMinuteIT.value;
			if (serieDauerMinuteValue && serieDauerMinuteValue >= 0) {
				bisDate = DateHelper.addMinutes(bisDate, serieDauerMinuteValue);
			}
		}
		
		addTerminArray[addTerminArray.length] = vonDate;
		addTerminArray[addTerminArray.length] = bisDate;
	}	
	var terminArray = addTermineImpl(addTerminArray);	
	updateTermineListbox(terminArray);
}

function actionHinzuTerminEinzel()
{	
	var simpleDateFormat = new org_apache_myfaces_SimpleDateFormat(i18nCalendarDateFormat);

	// Termin auslesen.
	var einzelAmCalendar = $('einzelAmCalendar');
	var einzelUmStundeIT = $('einzelUmStunde');
	var einzelUmMinuteIT = $('einzelUmMinute');
	var einzelBisCalendar = $('einzelBisCalendar');
	var einzelBisStundeIT = $('einzelBisStunde');
	var einzelBisMinuteIT = $('einzelBisMinute');
//	var einzelDauerStundeIT = $('einzelDauerStunde');
//	var einzelDauerMinuteIT = $('einzelDauerMinute');
	var terminInputHiddenField = $('terminInputHidden');
	
	// Von-Datum
			
	var einzelUmStundeValue = einzelUmStundeIT.value;
	if(!einzelUmStundeValue || einzelUmStundeValue < 0 || einzelUmStundeValue > 23)
	{
		return;
	}
	
	var einzelUmMinuteValue = einzelUmMinuteIT.value;
	if(!einzelUmMinuteValue || einzelUmMinuteValue < 0 || einzelUmMinuteValue > 59)
	{
		return;
	}   
	
	var einzelAmDate = simpleDateFormat.parse(einzelAmCalendar.value);
	if(!einzelAmDate)
	{
		return;
	}

	einzelAmDate.setMilliseconds(0);
	einzelAmDate.setSeconds(0);
	einzelAmDate.setMinutes(einzelUmMinuteValue);
	einzelAmDate.setHours(einzelUmStundeValue);
	
	// Bis-Datum

//	var einzelBisDate = new Date();
//	einzelBisDate.setTime(einzelAmDate.getTime());
	
	var einzelBisDate = simpleDateFormat.parse(einzelBisCalendar.value);
	if(!einzelBisDate)
	{
		einzelBisDate = new Date(einzelAmDate.getTime());
	}
			
	var einzelBisStundeValue = einzelBisStundeIT.value;
	if(!einzelBisStundeValue || einzelBisStundeValue < 0 || einzelBisStundeValue > 23)
	{
		einzelBisStundeValue = einzelUmStundeValue;
	}
	
	var einzelBisMinuteValue = einzelBisMinuteIT.value;
	if(!einzelBisMinuteValue || einzelBisMinuteValue < 0 || einzelBisMinuteValue > 59)
	{
		einzelBisMinuteValue = einzelUmMinuteValue;
	}

	einzelBisDate.setMilliseconds(0);
	einzelBisDate.setSeconds(0);
	einzelBisDate.setMinutes(einzelBisMinuteValue);
	einzelBisDate.setHours(einzelBisStundeValue);
	
	// Bis-Datum muss größer gleich Von-Datum sein, wenn gefüllt.
	if (einzelBisDate.getTime() < einzelAmDate.getTime())
	{
		einzelBisDate = einzelAmDate;
		einzelBisCalendar.value = null;
		einzelBisStundeIT.value = null;
		einzelBisMinuteIT.value = null;
	}

//	if(einzelDauerStundeIT && einzelDauerMinuteIT)
//	{
//		var einzelDauerStundeValue = einzelDauerStundeIT.value;
//		if(einzelDauerStundeValue && einzelDauerStundeValue >= 0)
//		{
//			einzelBisDate = DateHelper.addHours(einzelBisDate, einzelDauerStundeValue);
//		}
//
//		var einzelDauerMinuteValue = einzelDauerMinuteIT.value;
//		if(einzelDauerMinuteValue && einzelDauerMinuteValue >= 0)
//		{
//			einzelBisDate = DateHelper.addMinutes(einzelBisDate, einzelDauerMinuteValue);
//		}
//	}

	var addTerminArray = new Array();
	addTerminArray[0] = einzelAmDate;
	addTerminArray[1] = einzelBisDate;
	var terminArray = addTermineImpl(addTerminArray);	
	updateTermineListbox(terminArray);
}
