/**
 * Return a form by it's id.
 *
 * @param id	form's id
 */

function getForm(id) {
	return document.getElementById(id);
}

/**
 * Init an fckeditor.
 *
 * @param name		id of textarea
 * @param width		widht of editor
 * @param height	height of editor
 * @param language	interface language
 */

function initFckEditor(name, width, height, language) {
	var oFCKeditor = new FCKeditor(name);
	oFCKeditor.Width = width;
	oFCKeditor.Height = height;
	oFCKeditor.BasePath = "/motherworld/docroot/FCKeditor/";
	oFCKeditor.ToolbarSet = "motherworld";
	oFCKeditor.Config["DefaultLanguage"] = language ;
	oFCKeditor.ReplaceTextarea();
}

/**
 * Return the absolute left position of an element
 * by adding the offset of its children.
 *
 * @param element	start here
 */

function absLeft(element) {
	if (element.offsetParent) {
		// The padding-left of #content results in wrong values in ie.
 		if (element.offsetParent.id == "content")
 			return element.offsetLeft + absLeft(element.offsetParent.offsetParent);
 		else
 			return element.offsetLeft+absLeft(element.offsetParent);
 	}
 	else
 		return element.offsetLeft;
}

/**
 * Return the absolute top position of an element
 * by adding the offset of its children.
 *
 * @param element	start here
 */
  
function absTop(element) {
  return (element.offsetParent)? 
  element.offsetTop+absTop(element.offsetParent) : element.offsetTop;
}

/**
 * Show a service translation box.
 *
 * @param translationName	key of this service translation
 * @param nodeId			id of nodeTitle if available
 */

function showServiceTranslation(translationType, translationName, nodeId) {
	var box = document.getElementById('serviceTranslationBox');
	var arrow = document.getElementById(translationType+'_'+translationName+'_arrow');	
	var form = document.getElementById('serviceTranslationForm');
	
	if (box.style.display != "block" || form.translationName.value != translationName) {
	
		// Check if the user switched between two arrows.
		if (form.translationName.value != translationName && form.translationName.value != "") {
			var previousArrow = document.getElementById(translationType+'_'+form.translationName.value+'_arrow');
			previousArrow.innerHTML = "&raquo;";
		}
		var translationElement = document.getElementById(translationType+'_'+translationName);
		var translation = translationElement.innerHTML;

		if (translationElement.className == "notTranslated")
			form.translation.value = "";
		else
			form.translation.value = translation;
			
		form.translationName.value = translationName;
		form.nodeId.value = nodeId;
	
		box.style.top = absTop(arrow)+'px';	
		box.style.left = absLeft(arrow)+'px';
		box.style.display = "block";
		arrow.innerHTML = "&laquo;";
	}
	else {
		box.style.display = "none";
		arrow.innerHTML = "&raquo;";
	}
}

/**
 * Show a mandatory field box.
 *
 * @param form			reference to the form
 * @param field			name of the input field
 * @param state			either true or false
 */

function showMandatory(formName, fieldName, state) {
	var box = document.getElementById('mandatoryBox');
	var arrow = document.getElementById('mandatory_' + formName + "_" + fieldName +'_arrow');	
	var mandatoryForm = document.getElementById('mandatoryForm');
	
	if (box.style.display != "block" || (mandatoryForm.formName.value != fieldName && mandatoryForm.fieldName.value != fieldName)) {

		// Check if the user switched between two arrows.
		if ((mandatoryForm.formName.value != formName && mandatoryForm.formName.value != "") || (mandatoryForm.fieldName.value != fieldName && mandatoryForm.fieldName.value != "")) {
			var previousArrow = document.getElementById('mandatory_'+mandatoryForm.formName.value + "_" + mandatoryForm.fieldName.value +'_arrow');
			previousArrow.innerHTML = "&raquo;";
		}
		
		mandatoryForm.mandatoryCheckbox.checked = state;
		mandatoryForm.mandatory.value = state;
		mandatoryForm.formName.value = formName;
		mandatoryForm.fieldName.value = fieldName;
	
		box.style.top = absTop(arrow)+'px';	
		box.style.left = absLeft(arrow)+'px';
		box.style.display = "block";
		arrow.innerHTML = "&laquo;";
	}
	else {
		box.style.display = "none";
		arrow.innerHTML = "&raquo;";
	}
}


/**
 * Show a message in the dialog box.
 */

var firstRun = true;
var defaultMessage = "";

function dialog(dialogId, preview) {
	var dialogBox = document.getElementById("dialogBox");
	if (! dialogBox)
		dialogBox = window.opener.document.getElementById("dialogBox");
	if (dialogBox && firstRun) {
		defaultMessage = dialogBox.innerHTML;
		firstRun = false;
	}
	
	if (dialogBox && (dialogId != "default" || preview == "true")) {
		var message = "";
		if (dialogId == "default")
			message = defaultMessage;
		else {
			message = document.getElementById(dialogId).innerHTML;
			if (message == "")
				message = defaultMessage;
		}
		dialogBox.innerHTML = message;
	}
}

/**
 * Display a careService row in the time table.
 */

function showCareService(careService) {
	var table = document.getElementById("timeTable");
	var row = document.getElementById("careService_row_" + careService);
	var checkbox = document.getElementById("careService_" + careService);
	if (row) {
		for (i = 1; i < row.childNodes.length; i++) {
			if (checkbox.checked)
				row.childNodes[i].firstChild.style.visibility = "visible";
			else
				row.childNodes[i].firstChild.style.visibility = "hidden";
			
		}
		// Loop over the following rows to find cloned nodes.
		if (! checkbox.checked) {
			var rowClass = row.className;
			var startRowIndex = row.rowIndex  + 1
			for (k = startRowIndex; k < table.rows.length; k++) {
				// Delete rows of the same careService.
				if (table.rows[k].className == rowClass) {
					table.deleteRow(k);
					if (k > 1)
						k --;
				}
			}
		}
	}
}

/**
 *  Show or hide all careService rows.
 */
 
function initCareServices() {
	var careServices = ["nanny", "daymother", "babysitter", "nightbabysitter", "travelcare", "emergencymother", "pickup", "homework", "schoolholidays", "maternity"];
	for (j = 0; j < careServices.length; j++) {
		showCareService(careServices[j]);
	}
}

/**
 * Insert a new careService row in the time table and set attributes and values.
 */

function insertTimeRow(careService) {
	var row = document.getElementById("careService_row_" + careService);
	var table = document.getElementById("timeTable");
	
	// Index of new row within table.
	var rowIndex = -1;
	// Index of new row within careService.
	var serviceRowIndex = 0;
	// Pointer to the start of the careService.
	var rowClass = "";
	for (k = 0; k < table.rows.length; k++) {
		// Start of the careService rows.
		if (table.rows[k].id == row.id)
			rowClass = table.rows[k].className;
		// Next row within careService.
		if (rowClass != "")
			serviceRowIndex ++;
		// Insert row before the start of a new careService.
		if (rowClass != "" && rowClass != table.rows[k].className) {
			rowIndex = k;
			break;
		}
		// The last row of the table.
		if (table.rows.length == (k + 1))
			rowIndex = k + 1;
	}

	// Disable add row sign after 14 entries.
	if (serviceRowIndex > 7)
		document.getElementById("plus_careService_" + careService).style.display = "none";	

	// Insert row and set attributes.
	else if (rowIndex > -1) {
		var rowBefore = table.rows[rowIndex -1];
		var newRow = table.insertRow(rowIndex);
		
		// Clone table row nodes and set values according to the row before.
		// careService
		var careServiceTd = document.createElement("td");
		careServiceTd.appendChild(document.createTextNode(" "));
		newRow.appendChild(careServiceTd);
		
		// weekDay
		var weekDayTd = document.createElement("td");
		var weekDayDiv = document.createElement("div");
		var weekDayService = rowBefore.childNodes[1].firstChild.childNodes[0].cloneNode(true);
		var weekDay = rowBefore.childNodes[1].firstChild.childNodes[1].cloneNode(true);
		weekDay.name = "weekDay_careService_" + careService + "_" + serviceRowIndex;
		var rowBeforeWeekDay = rowBefore.childNodes[1].firstChild.childNodes[1].selectedIndex;
		if (rowBeforeWeekDay < 7)
			weekDay.selectedIndex = rowBeforeWeekDay + 1;
		else
			weekDay.selectedIndex = 1;
		weekDayDiv.appendChild(weekDayService);
		weekDayDiv.appendChild(weekDay);
		weekDayTd.appendChild(weekDayDiv);
		newRow.appendChild(weekDayTd);
		
		// startTime
		var startTimeTd = document.createElement("td");
		var startTimeDiv = document.createElement("div");
		var startTimeService = rowBefore.childNodes[2].firstChild.childNodes[0].cloneNode(true);
		var startTime = rowBefore.childNodes[2].firstChild.childNodes[1].cloneNode(true);
		startTime.name = "startTime_careService_" + careService + "_" + serviceRowIndex;
		startTime.selectedIndex = rowBefore.childNodes[2].firstChild.childNodes[1].selectedIndex;
		startTimeDiv.appendChild(startTimeService);
		startTimeDiv.appendChild(startTime);
		startTimeTd.appendChild(startTimeDiv);
		newRow.appendChild(startTimeTd);

		// endTime
		var endTimeTd = document.createElement("td");
		var endTimeDiv = document.createElement("div");
		var endTimeService = rowBefore.childNodes[3].firstChild.childNodes[0].cloneNode(true);
		var endTime = rowBefore.childNodes[3].firstChild.childNodes[1].cloneNode(true);
		endTime.name = "endTime_careService_" + careService + "_" + serviceRowIndex;
		endTime.selectedIndex = rowBefore.childNodes[3].firstChild.childNodes[1].selectedIndex;
		endTimeDiv.appendChild(endTimeService);
		endTimeDiv.appendChild(endTime);
		endTimeTd.appendChild(endTimeDiv);
		newRow.appendChild(endTimeTd);

		// plus
		var plusTd = document.createElement("td");
		plusTd.appendChild(document.createTextNode(" "));
		newRow.appendChild(plusTd);
		
		newRow.className = rowBefore.className;
	}
}

/**
 * Attach events to onload.
 */
 
function callOnLoad(init) {
	if (window.addEventListener) {
		window.addEventListener("load", init, false);
	}
	else if (window.attachEvent) {
		window.attachEvent("onload", init);
	}
	else {
		window.onload = init;
	}
}