/*
** Site24 CMS - www.site24.de
**
** CVS: $Id: javascript.js,v 1.6 2006/10/02 08:25:04 arne Exp $
*/


/* Constants */

var YEAR_STRING = "year";
var MONTH_STRING = "month";
var DAY_STRING = "day";

var PREF_FORMAT = 1;
var PREF_POINT = 2;


/* Set to true to activate debug mode: */

var debug = false;


/* Function checking if form elements for day, month and year exist */

function existDateElements(form, groupname, id) {
	var dayFound   = false;
	var monthFound = false;
	var yearFound  = false;
	for (var index = 0; index < form.elements.length; index++) {
		var name = form.elements[index].name;
		if (groupname + YEAR_STRING + id == name) {
			yearFound = true;
		} else if (groupname + MONTH_STRING + id == name) {
			monthFound = true;
		} else if (groupname + DAY_STRING + id == name) {
			dayFound = true;
		}
		if (dayFound && monthFound && yearFound) {
			return true;
		}
	}
	return false;
}


/* Function calculating days of months, especially february in leap-years */
function getMonthDays(year, month) {
	switch(Number(month)) {
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			if (Number(year) % 400 == 0) {
				return 29;
			} else if (Number(year) % 100 == 0) {
				return 28;
			} else if (Number(year) % 4 == 0) {
				return 29;
			} else {
				return 28;
			};	
		default:
			return 31;	
	}
}


/* Function formatting numbers to a defined minimum number of digits */
function formatNumber(number, digits) {
	number = number.toString();

	for (var numDigs = number.toString().length; numDigs < digits; numDigs++) {
		number = "0" + number;
	}

	return number;
}


/* Function updating days in a date selection in a form */

function updateDateDay(elementObject, prefs) {

	var prefsFormat = PREF_FORMAT & prefs;
	var prefsPoint  = PREF_POINT & prefs;

	var form = elementObject.form;
	var name = elementObject.name;
	var groupname;
	var id;

	if (name.search(/year/) != -1) {
		groupname = name.substring(0, name.search(/year/));
		id = name.substring(name.search(/year/) + 4, name.length);
	} else if (name.search(/month/) != -1) {
		groupname = name.substring(0, name.search(/month/));
		id = name.substring(name.search(/month/) + 5, name.length);
	} else {
		if (debug) {
			alert("an error occured: wrong function call");
		}
		return;
	}

	if (!existDateElements(form, groupname, id)) {
		if (debug) {
			alert("an error occured: not all necessary elements found");
		}
		return;
	}

	var yearElement = eval("form." + groupname + "year" + id);
	var yearValue = yearElement.options[yearElement.selectedIndex].value;

	var monthElement = eval("form." + groupname + "month" + id);
	var monthValue = monthElement.options[monthElement.selectedIndex].value;

	var maxDayValue = getMonthDays(yearValue, monthValue);
	var dayElement = eval("form." + groupname + "day" + id);

	if (dayElement.options.length != maxDayValue) {
		var selectedDayValue = dayElement.selectedIndex + 1;

		dayElement.options.length = maxDayValue;
				
		for (var index = 0; index < maxDayValue; index++) {
			dayElement.options[index].text
					= (prefsFormat?formatNumber(index + 1, 2) : index + 1)
					+ (prefsPoint? "." : "");
			dayElement.options[index].value = index + 1;		
		}

		if (selectedDayValue > maxDayValue) {
			selectedDayValue = maxDayValue;
		}

		dayElement.selectedIndex = selectedDayValue - 1;
	}
}


/* Function updating category/place menu of calendar */

function updateCategoryPlaces(categories, places, allPlaces) {
	for (index = 0; index < allPlaces[categories.selectedIndex].length; index++) {
		places.options[index] = new Option(allPlaces[categories.selectedIndex][index]);
	}
	places.length = allPlaces[categories.selectedIndex].length;
	places.selectedIndex = 0;
}


/* Functions for text formatting */

function insertTag(element, openTag, closeTag) {
	if (document.selection) {
		element.focus();
		var selection = document.selection.createRange();
		selection.text = openTag + selection.text + closeTag;
    } else if (element.selectionEnd) {
		var before = element.value.substring(0, element.selectionStart);
		var after = element.value.substring(element.selectionEnd, element.textLength);
		var selection = element.value.substring(element.selectionStart, element.selectionEnd);
		element.value = before + openTag + selection + closeTag + after;
	} else {
		element.value += openTag + closeTag;
	}
}

function insertLink(element) {
	var destination = "http://";
	while (destination == "" || destination == "http://") {
		destination = prompt("Linkziel:", "http://");
	}
	if (destination == null) {
		return;
	}
	var description = "";
	if ((document.selection && document.selection.createRange().text == "")
		|| (element.selectionEnd && element.selectionStart == element.selectionEnd)) {
		while (description == "") {
			description = prompt("Linkbeschreibung:", description);
		}
	}
	if (description == null) {
		return;
	}
	insertTag(element, "[" + destination + "|" + description, "]")
}