//<14.05.2009/>

var my_year;
var my_month;
var from;
var visible;
var show_avail = false;

// Kalender anzeigen oder ausblenden
function show_calendar() {
	if (visible) {
		if (until_year != -1) {
			document.getElementById('from').style.fontWeight = 'normal';
			document.getElementById('until').style.fontWeight = 'normal';
		} else
			document.getElementById('date').style.fontWeight = 'normal';
		document.getElementById('calendar').style.display = 'none';
		visible = false;
	} else {
		visible = true;
		from = true;
		if (until_year != -1)
			document.getElementById('from').style.fontWeight = 'bold';
		else
			document.getElementById('date').style.fontWeight = 'bold';
		document.getElementById('calendar').style.display = 'inline';
		generate_calendar();
	}
}

function update_calendar() {
	from_day = document.getElementById('from_day').selectedIndex + 1;
	from_month = document.getElementById('from_month').selectedIndex;
	from_year = document.getElementById('from_year').selectedIndex + year_min;
	if (document.getElementById('until_day'))
		until_day = document.getElementById('until_day').selectedIndex + 1;
	else
		until_day = 0;
	until_month = document.getElementById('until_month').selectedIndex;
	until_year = document.getElementById('until_year').selectedIndex + year_min;
	if (visible)
		generate_calendar();
}

// Tag auswählen und nächsten Tag oder Kalender audblenden
function select_day(d) {
	if (from) {
		if (until_year != -1) {
			from = false;
			document.getElementById('from').style.fontWeight = 'normal';
			document.getElementById('until').style.fontWeight = 'bold';
		} else
			document.getElementById('date').style.fontWeight = 'normal';
		from_day = d;
		from_month = my_month;
		from_year = my_year;
		if (document.getElementById('from_day').options.length > 1)
			document.getElementById('from_day').selectedIndex = from_day - 1;
		if (document.getElementById('from_month').options.length > 1)
			document.getElementById('from_month').selectedIndex = from_month;
		if (document.getElementById('from_year').options.length > 1)
			document.getElementById('from_year').selectedIndex = from_year - year_min;
		if (until_year == -1) {
			visible = false;
			document.getElementById('calendar').style.display = 'none';
		}
		generate_calendar();
	} else {
		document.getElementById('from').style.fontWeight = 'normal';
		document.getElementById('until').style.fontWeight = 'normal';
		until_day = d;
		until_month = my_month;
		until_year = my_year;
		document.getElementById('calendar').style.display = 'none';
		if (document.getElementById('until_day').options.length > 1)
			document.getElementById('until_day').selectedIndex = d - 1;
		if (document.getElementById('until_month').options.length > 1)
			document.getElementById('until_month').selectedIndex = my_month;
		if (document.getElementById('until_year').options.length > 1)
			document.getElementById('until_year').selectedIndex = my_year - year_min;
		visible = false;
	}
}

// Auf Schaltjahr prüfen
function is_leap_year(y) {
        if (Math.round(y/4) == y/4){
                if (Math.round(y/100) == y/100){
                        if (Math.round(y/400) == y/400)
                                return true;
                        else
				return false;
                } else
			return true;
        }
        return false;
}

// Jahr vor/zurück
function change_year(y) {
        my_year += y;
        generate_calendar();
	if (show_avail)
		document.getElementById('avail_month').value = my_year;
}

// Monat vor/zurück
function change_month(m) {
	my_month += m;
	if (my_month > 11) {
		my_month = 0;
		my_year++;
	}
        if (my_month < 0) {
		my_month = 11;
		my_year--;
	}
	if (typeof(admin) != 'boolean') {
		if (my_year == year_min && my_month == month_min)
			document.getElementById('prev_year').style.display = 'none';
		else
			document.getElementById('prev_year').style.display = 'inline';
		if (my_year == year_max && my_month == 11)
			document.getElementById('next_year').style.display = 'none';
		else
			document.getElementById('next_year').style.display = 'inline';
	}
        generate_calendar();
	if (show_avail)
		document.getElementById('avail_month').value = my_month;
}

// Aktuellen Kalender anzeigen
function generate_calendar() {
	document.getElementById('month').firstChild.data = Months[my_month] + ' ' + my_year;
        for (i = 0;  i < 42;  i++) {
		d = i +2 - get_month_start_day(get_year_start_day(my_year), my_year, my_month);
                if (d >= 1  && d <= get_days_in_month(my_year, my_month)) {
                        document.getElementById('field' + i).firstChild.data = d;
			document.getElementById('field' + i).title = d;
			if (show_avail && my_month == avail_month && my_year == avail_year) {
				if (avail[d])
					document.getElementById('field' + i).className = 'available';
				else
					document.getElementById('field' + i).className = 'occupied';
			} else
				document.getElementById('field' + i).className = '';
			if (from_year &&
				(from_year < my_year || from_year == my_year && from_month < my_month || from_year == my_year && from_month == my_month && from_day <= d)  &&
				(!until_year || until_year && (until_year > my_year || until_year == my_year && until_month > my_month || until_year == my_year && until_month == my_month && until_day >= d))
				|| from_year == my_year && from_month == my_month && from_day == d && until_year == -1)

				document.getElementById('cell' + i).className = 'selected';
			else
				document.getElementById('cell' + i).className = 'calendar';
                } else {
			document.getElementById('field' + i).firstChild.data = '';
			document.getElementById('field' + i).title = '';
			document.getElementById('cell' + i).className = 'calendar';
		}
        }
}

// Tage des Monats ermitteln
function get_days_in_month(y, m) {
        if (m == 1){
                if (is_leap_year(y))
			return 29;
                else
			return 28;
        } else {
                days = new Array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		return days[m];
        }
}

// ERster Tag des Jahres berechnen
function get_year_start_day(y) {
        var leap_years = 0, years, d;
	for (start = 1995; start <= y; start++)
		if (is_leap_year(start))
			leap_years++;

	years = y -1995 + leap_years;
        d = Math.round(((years / 7 - Math.floor(years / 7)) * 7) + .1);

        if (is_leap_year(y))
		d--;
	if (d < 0)
		d = 6;
        if (d > 6)
		d = 0;
        return d;
}

// Starttag des Monats ermitteln
function get_month_start_day(year_start_day, y, m) {
        var MonthStartDay;

        add_days = new Array(12);
        add_days[0] = 0;
	add_days[1] = 3;
	add_days[2] = 3;
	add_days[3] = 6;
        add_days[4] = 1;
	add_days[5] = 4;
	add_days[6] = 6;
	add_days[7] = 2;
        add_days[8] = 5;
	add_days[9] = 0;
	add_days[10] = 3;
	add_days[11] = 5;

        month_start_day = year_start_day + add_days[m];
        if (is_leap_year(y) && m > 1)
		month_start_day++;

        if (month_start_day > 6)
		month_start_day -= 7;

        return month_start_day;
}

// Heutiges Datum ermitteln und Kalender initialisieren
var today = new Date();
var month = today.getMonth();
my_year = today.getFullYear();
my_month = today.getMonth();
var month_min = month;

