
	/*
	 * editable contents extension - requires jobad builder module
   */
      
	if (typeof(activateEditableMode) == "function") {
		var activateEditableModeBackup = activateEditableMode;
		activateEditableMode = function () {
			if (typeof(activateEditableModeBackup) == "function") {
				activateEditableModeBackup();
			}
			var modules = document.getElementById("modules_container");
			if (modules != null) {
				if (typeof(modules) == "object")
					checkReplaceableModules(modules, modules.getAttribute("name").substring(modules.getAttribute("name").indexOf("_")+1));

				var duplicateicon = document.getElementById("duplicateNodeLink");
				if (duplicateicon) {
					duplicateicon.style.display = "";
				}
				var workflowicon = document.getElementById("workflowButton");
				if (workflowicon) {
					workflowicon.style.display = "";
				}
				var switchicon = document.getElementById("editContent");
				if (switchicon) {
					var editableonclickevt = switchicon.onclick;
					switchicon.onclick = function () {
						if (typeof(editableonclickevt) == "function") {
							editableonclickevt();
						}
						
						var duplicateicon = document.getElementById("duplicateNodeLink");
						if (duplicateicon) {
							duplicateicon.style.display = "none";
						}
						var workflowicon = document.getElementById("workflowButton");
						if (workflowicon) {
							workflowicon.style.display = "none";
						}
						
						activateReplaceableModules(pageMode);
						var categories = document.getElementById("category-row");
						if (categories) {
							categories.style.display = "";
						}
						var headlines = document.getElementsByTagName("TR");
						if (headlines) {
							for (var i = 0; i < headlines.length; i++) {
								if (typeof(headlines[i].getAttribute("name")) == "string" && headlines[i].getAttribute("name") == "field_description") {
									headlines[i].style.display = "";
								}
							}
						}
					}
					var saveicon = document.getElementById("saveContent");
					var saveonclickevt = saveicon.onclick;
					saveicon.onclick = function () {
						if (typeof(saveonclickevt) == "function") {
							saveonclickevt();							
														
							var i = 0, spans = document.getElementsByTagName("SPAN");
																					
							for (i = 0; i < spans.length; i++) {
								if (spans[i].className.indexOf("headline") > -1 && spans[i].getAttribute("editable") == "true") {
									window.setTimeout("delayedUpdate(spans[" + i + "])", 500);
									break;
								}
							}
						}
						
						var duplicateicon = document.getElementById("duplicateNodeLink");
						if (duplicateicon) {
							duplicateicon.style.display = "";
						}
						var workflowicon = document.getElementById("workflowButton");
						if (workflowicon) {
							workflowicon.style.display = "";
						}
						
						var headlines = document.getElementsByTagName("TR");
						if (headlines) {
							for (var i = 0; i < headlines.length; i++) {
								if (typeof(headlines[i].getAttribute("name")) == "string" && headlines[i].getAttribute("name") == "field_description") {
									headlines[i].style.display = "none";
								}
							}
						}
						activateReplaceableModules(pageMode);
						var categories = document.getElementById("category-row");
						if (categories) {
							categories.style.display = "none";
							/*
							var categoriesdialog = document.getElementById("category-dialog");
							if (categoriesdialog && categoriesdialog.style.display != "none") {
								dialogStatus(categoriesdialog, dialogLink, dialogActive, dialogDeactive);
							}
							*/
						}
					}
				}
			}
		}
	} else {
		alert("can't create extension for editable contents");
	}
	
	function delayedUpdate ( span ) {
		var newnodename = span.innerHTML;
		
		if (newnodename != null) {
			if (newnodename.length > 30)
				newnodename = newnodename.substr(0, 30) + "...";

			var m_names = new Array("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez");

			var d = new Date();
			var curr_date = d.getDate();
			var curr_month = d.getMonth();
			var curr_year = d.getFullYear();

			newnodename = curr_date + "-" + m_names[curr_month] + "-" + curr_year + ", " + newnodename;			
			nodes.setName(id, newnodename); // id is a global var and will be set in scripts/layout.js
		}
	}
	
	var replaceableModules = {};
	
	function checkReplaceableModules ( container, node ) {
		for (var subcontainer = container.firstChild; subcontainer; subcontainer = subcontainer.nextSibling) {
			for (var childContainer = subcontainer.firstChild; childContainer; childContainer = childContainer.nextSibling) {
				if (childContainer.id) {
					if (childContainer.id.indexOf("module_node_") > -1) {
						grepReplaceableModules(childContainer, node);
					} else if (childContainer.id.indexOf("module_node_") == -1 && childContainer.childNodes.length > 0) {
						checkReplaceableModules(childContainer, node);
					}
				}
			}
		}
	}
	
	function grepReplaceableModules ( container, node ) {
		for (var childContainer = container.firstChild; childContainer; childContainer = childContainer.nextSibling) {
			var normal_id = childContainer.id.substring(childContainer.id.indexOf("_")+1, childContainer.id.length);
			var module_exists = document.getElementById(normal_id);
			if (module_exists && container.parentNode.childNodes.length > 1) {
				replaceableModules[normal_id] = {
					node : node,
					container : container,
					element : module_exists,
					reference : childContainer,
					original : childContainer,
					extension : null,
					extensionindexorg : 0,
					extensionindex : 0,
					type : "module"
				};
			}
		}
	}
	
	var queueExtension = new Array();
		
	function activateReplaceableModules ( pageMode ) {
		for (var id in replaceableModules) {
			var activeModule = replaceableModules[id];
			if (pageMode) {
				if (activeModule.extension == null) {
					var extensionDiv = document.createElement("DIV");
					extensionDiv.id = "extension_" + id;
					activeModule.element.onmouseover = function () {
						document.body.style.cursor = "default"
					};
					var extensionSelect = document.createElement("SELECT");
					extensionSelect.id = "select_" + id;
					extensionSelect.style.width = "100%";
					extensionSelect.style.display = "none";
					extensionSelect.onchange = function () {
						this.style.display = "none";
						var container = this.parentNode;
						var id = container.id.substring(container.id.indexOf("_")+1, container.id.length);
						var activeModule = replaceableModules[id];
						activeModule.element.className = activeModule.element.className.replace(/ disabled/, "");
						activeModule.reference = document.getElementById(this.options[this.selectedIndex].value);
						activeModule.element.innerHTML = activeModule.reference.innerHTML;
						activeModule.extensionindex = this.selectedIndex;
					}
					var index = 0;
					var found = false;
					for (var childelement = activeModule.container.parentNode.firstChild; childelement; childelement = childelement.nextSibling) {						
						var selectoption = document.createElement("OPTION");
						selectoption.value = childelement.firstChild.id;
						selectoption.text = childelement.getAttribute("name");
						extensionSelect.options.add(selectoption);
						if (!found) {
							if (selectoption.value.substring(selectoption.value.indexOf("_")+1, selectoption.value.length) == activeModule.element.id) {
								found = true;
								continue;
							}
							index++;						
						}
					}
					extensionSelect.selectedIndex = index;
					activeModule.extension = extensionSelect;
					activeModule.extensionindex = activeModule.extensionindexorg = index;
					extensionDiv.appendChild(extensionSelect);
					activeModule.element.parentNode.insertBefore(extensionDiv, activeModule.element);
				}
				activeModule.element.onclick = function ( ) {
					if (this.className.indexOf("disabled") == -1) {
						this.className += " disabled";
						replaceableModules[this.id].extension.style.display = "";
					}
				}
				activeModule.element.onmouseover = function () {
					document.body.style.cursor = "pointer";
				}
				activeModule.element.onmouseout = function () {
					document.body.style.cursor = "default";
				}
				activeModule.element.className += " replaceable-module";
				activeModule.element.style.width = "100%";
			} else {
				if (activeModule.reference.id != activeModule.original.id) {
					queueExtension.push(activeModule);
				}
				activeModule.element.className = activeModule.element.className.replace(/replaceable-module/, "");
				activeModule.element.className = activeModule.element.className.replace(/disabled/, "");
				activeModule.extension.style.display = "none";
				activeModule.element.onclick = null;
				activeModule.element.onmouseover = null;
				activeModule.element.onmouseout = null;
			}
		}
		if (!pageMode) {
			if (typeof(activetags) != "undefined") {
				for (var id in activetags) {
					var activeTag = activetags[id];
					if (typeof(activeTag.object) == "undefined") {
						activeTag.object = document.getElementById("activetag" + id);
					}
					if (activeTag.object.disabled) {
						activeTag.originalStatus = true;
						activeTag.status = false;
					}
					if (typeof(activeTag.originalStatus) != "undefined" && activeTag.originalStatus != activeTag.status) {
						queueExtension.push(activeTag);
					}
				}
			}
		}
		if (!pageMode && queueExtension.length != 0) {
			prepareQueueExtension();
			getAmountActiveTags();			
		}
	}
		
	var queueExtensionElement;
	
	function prepareQueueExtension () {
		if (queueExtension.length > 0) {
			queueExtensionElement = queueExtension[0];
			queueExtension.shift();
			try {
				if (queueExtensionElement.type == "module") {
					links.updateLink(queueExtensionElement.node, queueExtensionElement.original.parentNode.id.substring(queueExtensionElement.original.parentNode.id.lastIndexOf("_")+1), queueExtensionElement.reference.parentNode.id.substring(queueExtensionElement.reference.parentNode.id.lastIndexOf("_")+1),
					{
						callback : extensionCallback,
						timeout : queueElementTimeout,
						errorHandler : handleExtensionError
					});
				} else if (queueExtensionElement.type == "tag") {
					tags.updateTag(thisnode, queueExtensionElement.status, queueExtensionElement.id, queueExtensionElement.node,
					{
						callback : extensionCallback,
						timeout : queueElementTimeout,
						errorHandler : handleExtensionError
					});
				}
			} catch (error) {
				handleExtensionError(error.description ? error.description : error);
			}
		}
	}
	
	function resetModuleChange ( ) {
		if (queueExtensionElement.type == "module") {
			queueExtensionElement.element.innerHTML = (queueExtensionElement.reference = queueExtensionElement.original).innerHTML
			queueExtensionElement.extension.selectedIndex = queueExtensionElement.extensionindexorg;
		} else if (queueExtensionElement.type == "tag") {
			queueExtensionElement.object.checked = !queueExtensionElement.status;
		}
	}
	
	function extensionCallback ( result ) {
		if (queueExtensionElement.type == "module" && new Boolean(result) == true) {
			queueExtensionElement.original = queueExtensionElement.reference;
			queueExtensionElement.extensionindexorg = queueExtensionElement.extensionindex;
		} else if (queueExtensionElement.type == "tag" && !isNaN(result) && parseInt(result) > -1 ) {
			queueExtensionElement.previousStatus = queueExtensionElement.originalStatus = queueExtensionElement.status;
			queueExtensionElement.id = result;
		} else {
			resetModuleChange();
		}
		prepareQueueExtension();
	}
	
	function handleExtensionError ( error ) {
		alert(error);
		resetModuleChange();
		prepareQueueExtension();
	}
	
	var dialogActive = null;
	var dialogDeactive = null;
	var dialogLink = null;
	
	function dialogStatus ( element, hyperlink, active, deactive ) {
		if (dialogLink == null) {
			dialogLink = hyperlink;
		}
		if (dialogActive == null) {
			dialogActive = active;
		}
		if (dialogDeactive == null) {
			dialogDeactive = deactive;
		}
		element.style.display = element.style.display == "none" ? "" : "none";
		element.style.top = getY(hyperlink)+5;
		element.style.left = getX(hyperlink)-5;
		hyperlink.innerHTML = element.style.display == "none" ? active : deactive;
	}

	function extendDialog ( node, language, target, element, disable ) {
		if (layout == null) {
			layout = newDomDocument();
			layout.async = false;
			layout.resolveExternals = false;
			layout.load("../localstyles/jobad-builder/layout_categorydialog_client.xsl");	
		}
		extendDOM(node, language, target, element, layout, '&includeparameters=true');
		var lastinput = element.getElementsByTagName("input")[0];
		if (disable)
			disableCheckBoxes(lastinput, element.lastChild, lastinput.name);
	}

	function getAmountActiveTags () {
		var spanAmount = document.getElementById("amount-tags");
		if (spanAmount) {
			var amount = 0;
			for (var id in activetags) {
				var activeTag = activetags[id];
				if (activeTag.status) {
					amount++;
				}
			}
			spanAmount.innerHTML = amount;
		}
	}
	
	function setCategoryStatus ( element ) {
		if (typeof(activetags[element.value]) == "undefined") {
			activetags[element.value] = new Object();
			activetags[element.value].node = element.value;
			activetags[element.value].type = "tag";
			activetags[element.value].id = -1;
			activetags[element.value].originalStatus = !element.checked;
		}
		if (typeof(activetags[element.value].object) != "object") {
			activetags[element.value].object = element;
		}
		activetags[element.value].previousStatus = element.checked;
		activetags[element.value].status = element.checked;
	}
