var startFlugDays = 1;
var startFlugDate = new Date();
startFlugDate.setTime(Math.floor(startFlugDate.getTime() + (1000 * 60 * 60 * 24 * startFlugDays)));
var startFlugDateString = createDateString(startFlugDate);

	function winOnLoad()
	{
		// überprüft das hinflugdatum auf gültigkeit
		// setzt im negativen fall den defaultwert

		if(checkDatePast(readDate('document.form1', 'date_from_dd', 'date_from_mmyy')))
		{
			writeDate('document.form1', 'date_from_dd', 'date_from_mmyy', startFlugDateString);
		}

		changeDays("from");
		return;
	}

	function changeDate(dir)
	{
		// hinflug- und rückflugdatum handler
		// überprüft hinflug- und rückflugdatum auf gültigkeit
		// setzt im negativen fall den defaultwert für hinflugdatum
		// und aktualisiert das rückflugdatum nach reisedauer (dir = "from")

		if(checkDatePast(readDate('document.form1', 'date_from_dd', 'date_from_mmyy')) || checkDatePast(readDate('document.form1', 'date_to_dd', 'date_to_mmyy')))
		{
			writeDate('document.form1', 'date_from_dd', 'date_from_mmyy', startFlugDateString);
			dir = "from";
		}

		// wurde das hinflugdatum verändert
		// wird das rückflugdatum nach reisedauer aktualisiert

		if(dir == "from")
		{
			changeDays("from");
			return;
		}

		// wurde das rückflugdatum verändert
		// wird die reisedauer und rückflugdatum wenn möglich aktualisiert (dir = "from")
		// im negativen fall wird die reisedauer und hinflugdatum (rückwirkend) aktualisiert (dir = "to")

		if(!setDaysFromDate('document.form1', 'travel_days', readDate('document.form1', 'date_from_dd', 'date_from_mmyy'), readDate('document.form1', 'date_to_dd', 'date_to_mmyy')))
		{
			changeDays("to");
			return;
		}
		else
		{
			changeDays("from");
			return;
		}
	}

	function changeDays(dir)
	{
		// reisedauer handler
		// wird auch nach Datumsänderung aufgerufen

		var days = readDays('document.form1', 'travel_days');

		// aktualisiert hinflug- (dir = "to") und rückflugdatum (dir = "from")

		if(dir == "from")
			success = setDateFromDays('document.form1', 'date_from_dd', 'date_from_mmyy', 'date_to_dd', 'date_to_mmyy', days);
		else
			success = setDateFromDays('document.form1', 'date_to_dd', 'date_to_mmyy', 'date_from_dd', 'date_from_mmyy', -days);

		// obere datumsgrenze
		// setzt im negativen fall das rückflugdatum = hinflugdatum
		// und aktualisiert das hinflugdatum nach rückflugdatum

		if(!success)
		{
			writeDate('document.form1', 'date_to_dd', 'date_to_mmyy', readDate('document.form1', 'date_from_dd', 'date_from_mmyy'));
			changeDate("to");
		}

		// überprüft hinflug- und rückflugdatum auf gültigkeit
		// im negativen fall das ganz nocheinmal

		if(checkDatePast(readDate('document.form1', 'date_from_dd', 'date_from_mmyy')) || checkDatePast(readDate('document.form1', 'date_to_dd', 'date_to_mmyy')))
		{
			changeDate(dir);
		}

		refreshHiddenDateField('document.form1', 'hidden_from_date', 'date_from_dd', 'date_from_mmyy');
		refreshHiddenDateField('document.form1', 'hidden_to_date', 'date_to_dd', 'date_to_mmyy');
	}


function get_vacancy(step)
{
	document.form1.step.value = step;
	if(popupWin && !popupWin.closed){popupWin.close();}
	document.form1.submit();
	window.setTimeout('wait()', 500);
}

function wait()
{
	RD_showLoader();
}

function waitBSAction()
{
	RD_showLoader();
}
function deleteBSAction()
{
	RD_showLoader();
}


function setWeekdays(frm, obj, selWeekdays)
{
	// set day select with weekdayarray

	ret = false;

	//empty select field

	for (var i=getfrmObj(frm, obj).length; i>=0; i--) {
		getfrmObj(frm, obj).options[i]	= null;
	}

	// fill with array

	for(var i = 0; i < selWeekdays.length; i++)
	{
		//alert(i +","+ selWeekdays[i]["value"] +","+ selWeekdays[i]["text"]);
		getfrmObj(frm, obj).options[i] = new Option(selWeekdays[i]["text"], selWeekdays[i]["value"]);
	}

	return (ret);
}

function getWeekdays(date)
{
	// create weekdayarray for given month

	var ret = false;
	var relTime = "";
	var weekdays = new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");

	var tmpDate = date.split(".");

	if (tmpDate.length == 3 && tmpDate[0] > 0 && tmpDate[1] > 0 && tmpDate[2] > 0)
	{
		var day = tmpDate[0];
		var month = tmpDate[1];
		var year =  20 + tmpDate[2];
	}

	// get number of days per month

	switch(month)
	{
		case "01":
		case "03":
		case "05":
		case "07":
		case "08":
		case "10":
		case "12":
			var numDays = 31;
			break;
		case "04":
		case "06":
		case "09":
		case "11":
			var numDays = 30;
			break;
		case "02":
			if( (year % 4 == 0) || ( year % 100 == 0 && year % 400 == 0 ) ) // setting no of days as 29 for Feb for a leap year condition
			{
				var numDays = 29;
			}
			else
			{
				var numDays = 28;
			}
			break;
	}

	var selWeekdays = new Array(numDays);
	var id = "";

	// create array

	for(var i = 0; i < numDays; i++)
	{
		id = i + 1;
		id = (id < 10) ? "0" + id : id;

		var relTime = createDateObj(id + "." + month + "." + year);

		selWeekdays[i] = new Array(2);
		
		tmp_weekday = (weekdays[relTime.getDay()] == NaN || weekdays[relTime.getDay()] == undefined) ?
			"" :
			weekdays[relTime.getDay()] + " ";
		
		selWeekdays[i]["value"] = id
		selWeekdays[i]["text"] = tmp_weekday + id;
	}

	return selWeekdays;
}


function checkDatePast(val)
{
	// checks if given date is in the past

	var now = new Date();
	now = now.getTime(); //NN3

	var splitCheckDate = val.split(".");

	var dateToCheck = new Date();
	dateToCheck.setFullYear("20"+splitCheckDate[2]);
	dateToCheck.setMonth(splitCheckDate[1]-1);
	dateToCheck.setDate(splitCheckDate[0]-startFlugDays);
	var checkDate = dateToCheck.getTime();

	var futureDate = (now < checkDate);
	var pastDate = (now > checkDate);

	return pastDate;
}

function calendarCallBack(frm, obj, val)
{

	// aktualisiert das textfeld und die selectfelder tag und monat
	// mit dem vom kalender zurückgegebene datum

	// berechnet die Differenz zwische Datum 1 und Datum 2
	// die Werte werden aus zwei Textfeldern ausgelesen und in ein weiteres geschrieben

	if(getfrmObj(frm, obj).name=="hidden_from_date")
	{
		writeDate(frm, "date_from_dd", "date_from_mmyy", val);
		changeDate('from');
	}
	else if(getfrmObj(frm, obj).name=="hidden_to_date")
	{
		writeDate(frm, "date_to_dd", "date_to_mmyy", val);
		changeDate('to');
	}
}

function openCal(frm, obj)
{
	// die Funktion öffnet den Kalender  in abhängigkeit vom hiddentextfield

	show_calendar(frm+"."+obj,null,null,null,null,'DD.MM.YY');

	return false;
}

function createDateString(time)
{
	// konvertiert dateobjekt nach datestring

	var day = time.getDate();
	var month = time.getMonth() + 1;
	var year = time.getFullYear() - 2000;

	if (day < 10 && day > 0) day = "0" + day;
	if (month < 10 && month > 0) month = "0" + month;
	if (year < 10 && year > 0) year = "0" + year;

	return day+"."+month+"."+year;
}

function createDateObj(dateStr)
{
	// erzeugt dateobjekt

	if(dateStr == "") return new Date;
	var dateArr = dateStr.split(".");

	var day = dateArr[0];
	var month = dateArr[1] - 1;
	
	if (dateArr[2].length == 2) {
		var year = 20 + dateArr[2];
	} else {
		var year = dateArr[2];		
	}

	if (dateArr.length == 3 && dateArr[0] > 0 && dateArr[1] > 0 && dateArr[2] > 0)
		return new Date(year, month, day);

	return false;
}

function setDateFromDays(frm, obj1Day, obj1Month, obj2Day, obj2Month, days)
{
	// brechnet und setzt rückflugdatum und hinflugdatum nach datum + reisedauer

	var ret = false;
	var startTime = createDateObj(readDate(frm, obj1Day, obj1Month));
	var endTime = createDateObj("");

	var startTimeStamp = Math.floor(startTime.getTime() + (1000 * 60 * 60 * 24 * days + 1 * 3600000));
	endTime.setTime(startTimeStamp);

	var startDateStr = createDateString(startTime);
	var endDateStr = createDateString(endTime);

	return (writeDate(frm, obj1Day, obj1Month, startDateStr) && writeDate(frm, obj2Day, obj2Month, endDateStr))
}

function setDaysFromDate(frm, obj, date1, date2)
{
	// berechnet den unterschied zw date1 & date2
	// und setzt die Reisedauer

	var diff = calculateDays(date1, date2);
	if (diff <= 0)
		return false;

	return writeDays(frm, obj, diff);
}

function calculateDays(date1, date2)
{
	// berechnet den Datumsunterschied in Tagen

	var time1 = createDateObj(date1);
	var time2 = createDateObj(date2);

	var diff =  time2.getTime()- time1.getTime(); //difference between today's date and early reg date.
	var days = Math.floor(diff / (1000 * 60 * 60 * 24));

	return parseInt(days);
}

function refreshHiddenDateField(frm, obj, objDay, objMonth)
{
	// setzt den wert für das hiddentextfield für den kalenderaufruf

	if(writeTextField(frm, obj, readDate(frm, objDay, objMonth)))
		return true;

	return false;
}

function readDays(frm, obj)
{
	// liest den Datumswert von Reisedauer

	if(days = readSelect(frm, obj))
		return days;

	return false;
}

function writeDays(frm, obj, val)
{
	// schreibt den Datumswert von Reisedauer

	if(writeSelect(frm, obj, val))
		return true

	return false;
}

function readDate(frm, objDay, objMonth)
{
	// liest den Datumswert von Hin oder Rückdatum

	var days = readSelect(frm, objDay);
	var selMonth = readSelect(frm, objMonth);
	var month = selMonth.substr(0,2)
	var year = selMonth.substr(2,2)

	if(days && month)
		return days + "." + month + "." + year;

	return false;
}

function writeDate(frm, objDay, objMonth, val)
{
	// schreibt den Datumswert nach Hin oder Rückdatum

	setWeekdays(frm, objDay, getWeekdays(val));

	var tmpDate = val.split(".");

	if (tmpDate.length == 3 && tmpDate[0] > 0 && tmpDate[1] > 0 && tmpDate[2] > 0)
	{
		var day = tmpDate[0];
		//var month = tmpDate[1] + "." + tmpDate[2];
		var month = tmpDate[1] + tmpDate[2];
	}

	if(writeSelect(frm, objDay, day) && writeSelect(frm, objMonth, month))
		return true;

	return false;
}

function getfrmObj(frm, obj)
{
	// gibt ein frmularobjakt zurück

	return eval(frm+"."+obj);
}

function readSelect(frm, obj)
{
	// liest den Wert eines selects

	return getfrmObj(frm, obj).options[getfrmObj(frm, obj).selectedIndex].value;
}

function writeSelect(frm, obj, val)
{
	// setzt den Wert eines selects

	ret = false;

	for(var i = 0; i < getfrmObj(frm, obj).length; i++)
	{
		if(getfrmObj(frm, obj).options[i].value == val)
		{
			getfrmObj(frm, obj).options[i].selected = true;
			ret = true;
		}
	}

	return (ret);
}

function readTextField(frm, obj, val)
{
	// liest den wert für ein textfeld

	return getfrmObj(frm, obj).value;
}

function writeTextField(frm, obj, val)
{
	// setzt den wert für ein textfeld

	return getfrmObj(frm, obj).value = val;
}