function contentPageTemplate()
{
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	Constructor
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		this.sectionOpen	= "";
		this.sectionClose	= "";
}

function contentPageTemplate_AllImprov()
{
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Inheritance: stlDhtmlxCommon, stlLanguageEnabledClass
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.inheritFrom_contentPageTemplate = contentPageTemplate;
	this.inheritFrom_contentPageTemplate();

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	Constructor
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		this.sectionOpen  = "";
		this.sectionOpen += "<div class=\"mainitemtitle\"></div>";
		this.sectionOpen +=  "<div class=\"mainitem\">";

		this.sectionClose  =  "";
		this.sectionClose +=  "</div>";
		this.sectionClose +=  "<div class=\"mainitemfooter\"></div>";
}

function contentPage_PageElementRegistration(idPageElement)
{
	var _idPageElement = idPageElement;

	this.getIdPageElement = function()
	{
		return idPageElement;
	}
}

function contentPage(idContainer)
{
	var that = this;

	var _countNewPageElements	= 0;
	var _pageElements			= new Array();
	var _pageElementsDeleted	= new Array();
	var _editMode				= false;
	var _template				= null;

	var _elCtrlLanguageSelector	= null;
	var _elDivLanguageNl		= null;
	var _elDivLanguageEn		= null;

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Inheritance: stlDhtmlxCommon, stlLanguageEnabledClass
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.inheritFrom_stlWebComponent = stlWebComponent;
	this.inheritFrom_stlWebComponent(idContainer);
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Language table
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.initLanguages = function()
	{
		this.lang.en.txtDutch						= "Dutch";
		this.lang.en.txtEnglish						= "English";
		this.lang.en.txtAddToTop					= "Add to top";
		this.lang.en.txtAddToBottom					= "Add to bottom";
		this.lang.en.txtSaveChanges					= "Save changes";
		this.lang.en.txtCancelChanges				= "Cancel changes";
		this.lang.en.txtCancelChangesAreYouSure		= "Are you sure you want to cancel? Any changes made will be discarded.";
		this.lang.en.txtDeletePageElementAreYouSure	= "Are you sure you want to delete this page element";

		this.lang.nl.txtDutch						= "Nederlands";
		this.lang.nl.txtEnglish						= "Engels";
		this.lang.nl.txtAddToTop					= "Boven toevoegen";
		this.lang.nl.txtAddToBottom					= "Onder toevoegen";
		this.lang.nl.txtSaveChanges					= "Wijzigingen bewaren";
		this.lang.nl.txtCancelChanges				= "Annuleren";
		this.lang.nl.txtCancelChangesAreYouSure		= "Weet je zeker dat je wilt annuleren? Eventuele wijzigingen worden ongedaan gemaakt.";
		
		this.lang.nl.txtDeletePageElementAreYouSure	= "Weet je zeker dat je dit paginaelement wilt verwijderen";
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getObjectId
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.setObjectId = function(idObject)
	{
		this.idObject = idObject;
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getObjectId
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getObjectId = function(idObject)
	{
		return this.idObject;
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	setEditMode
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.setEditMode = function(editMode)
	{
		_editMode = editMode;
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getEditMode
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getEditMode = function()
	{
		return _editMode;
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	setTemplate
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.setTemplate = function(template)
	{
		_template = template;
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getTemplate
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getTemplate = function()
	{
		return _template;
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getContentId()
	//
	// Description:	Constructs a ContentId. The ContentId is used in div's that contain one single PageElement. The parent of the content id
	//				is the div identified by a LanguageId. All ContentId's of a given language are in the same LanguageId. The children of
	//				the ContentId are the template sectionOpen and template sectionClose. TextareaId is between (or inside) the sectionOpen and
	//				sectionClose.
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getContentId = function(idPageElement)
	{
		return _subElementId + "_pageelement_" + idPageElement;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getTextareaId()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getTextareaId = function(idPageElement)
	{
		return _subElementId + "_pageelement_textarea_" + idPageElement;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getNewPageElementId()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getNewPageElementId = function()
	{
		_countNewPageElements++;
		return "new" + _countNewPageElements;
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	setCurrentEditingLanguage()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.setCurrentEditingLanguage = function(language)
	{
		switch(language)
		{
			case "en":
				if(_elDivLanguageNl.style.display == "")
					if(this.getEditMode())
						stlApp.library.tinymceHideToolbarsOfAlleditors();

				_elDivLanguageNl.style.display = "none";
				_elDivLanguageEn.style.display = "";
				break;

			case "nl":
			default:
				language = "nl";
				if(_elDivLanguageNl.style.display == "inline-block")
					if(this.getEditMode())
						stlApp.library.tinymceHideToolbarsOfAlleditors();

				_elDivLanguageNl.style.display = "";
				_elDivLanguageEn.style.display = "none";
				break;
		}
		
		if(_elCtrlLanguageSelector != undefined)
			_elCtrlLanguageSelector .value = language;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getCurrentEditingLanguage()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getCurrentEditingLanguage = function()
	{
		return _elCtrlLanguageSelector.value;
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getCurrentEditingLanguageDiv()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getCurrentEditingLanguageDiv = function()
	{
		switch(this.getCurrentEditingLanguage())
		{
			case "en":
				return _elDivLanguageEn;
			case "nl":
			default:
				return _elDivLanguageNl;
		}
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getTemplateSectionOpen()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getTemplateSectionOpen = function(idPageElement)
	{
		var htmlOpen	 = "";
		htmlOpen 		+= "<div class=\"contentPage_Content\" id=\"" + this.getContentId(idPageElement) + "\">";
		htmlOpen 		+= _template.sectionOpen;	
		if(this.getEditMode())
			htmlOpen 	+=  "<textarea id=\"" + this.getTextareaId(idPageElement) + "\" style=\"width: 100% ; min-height: 350px;\">";
		else
			htmlOpen	+=  "<div style=\"overflow: hidden;\">";
		return htmlOpen;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	getTemplateSectionClose()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.getTemplateSectionClose = function(idPageElement)
	{
		var htmlClose = "";
		if(this.getEditMode())
			htmlClose	+=  "</textarea>";
		else
			htmlClose	+=  "</div>";

		htmlClose		+= _template.sectionClose;
		htmlClose		+= "</div>";
		return htmlClose;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	moveAllElementsAbsolute
	//
	// Description:	Moves all Content Elements for a specific language down by a given delta Y
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.moveAllContentElementsDown = function(language, deltaY)
	{
		var index, el;
		for(index = _pageElements[language].length - 1; index >= 0; index--)
		{
			el				= document.getElementById(this.getContentId(_pageElements[language][index].getIdPageElement()));
			el.style.top	= parseInt(el.style.top, 10) + deltaY + "px";
		}
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	makeElementAbsolute
	//
	// Description:	Positions a given element absolute.
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.makeElementAbsolute = function(idElement)
	{
		var el		= document.getElementById(idElement);
		var orgTop	= stlApp.library.getElementTop(el);
		var orgLeft = stlApp.library.getElementLeft(el);

		el.style.position	= "absolute";
		el.style.top		= orgTop + "px";
		el.style.left		= orgLeft + "px";
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	makeAllElementsAbsolute
	//
	// Description:	Positions all content elements absolute.
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.makeAllElementsAbsolute = function(language)
	{
		var index;
		for(index = _pageElements[language].length - 1; index >= 0; index--)
			this.makeElementAbsolute(this.getContentId(_pageElements[language][index].getIdPageElement()));
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	loadPageElements()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.loadPageElements = function()
	{
		var d = new Date();
		var loader = this.getSync("Op=Get&ID=" + this.getObjectId() + "&Editmode=" + (this.getEditMode() ? "true" : "false") + "&Timestamp=" + d.getTime());
		if(loader === false)
			return false;

		var xmlPageElements = loader.getElementsByTagName("pageelement");

		var objId, objHtmlContent;
		var idContent;
		var index;
		var htmlResultNl = "";
		var htmlResultEn = "";
		var htmlPageElement;
		for(index = 0; index < xmlPageElements.length; index++)
		{
			objId			= xmlPageElements[index].getElementsByTagName("ID")[0].childNodes[0].nodeValue;
			objHtmlContent	= xmlPageElements[index].getElementsByTagName("htmlContent")[0].childNodes[0].nodeValue;
			objLanguage		= xmlPageElements[index].getElementsByTagName("LanguageName")[0].childNodes[0].nodeValue;

			htmlPageElement	 = this.getTemplateSectionOpen(objId);
			htmlPageElement	+= objHtmlContent;
			htmlPageElement	+= this.getTemplateSectionClose(objId);
			
			if(objLanguage == "nl")	htmlResultNl += htmlPageElement;
			else					htmlResultEn += htmlPageElement;
			
			this.pageElementAddRegistrationToBottom(objLanguage, objId);
		}

		var htmlResult = "";
		htmlResult += "<div id=\"" + _subElementId + ".language.nl\" style=\"\">";
		htmlResult += htmlResultNl;
		htmlResult += "</div>";
		htmlResult += "<div id=\"" + _subElementId + ".language.en\" style=\"\">";
		htmlResult += htmlResultEn;
		htmlResult += "</div>";
	
		this.elContainer.innerHTML = htmlResult;

		if(this.getEditMode())
		{
			this.makeAllElementsAbsolute("nl");
			this.makeAllElementsAbsolute("en");
		}

		_elDivLanguageNl = document.getElementById(_subElementId + ".language.nl");
		_elDivLanguageEn = document.getElementById(_subElementId + ".language.en");

		return true;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	init()
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.init = function()
	{
		var xmlPageElements;

		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
		// Check a template is present
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
		if(_template === null)
			return stlApp.messages.add("Application error: Template not set for contentPage " + this.idContainer + ".");

		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
		// Load elements
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
		if(this.loadPageElements() == false)
			return false;
		
		if(this.getEditMode())
			this.editorEnable();

		this.setCurrentEditingLanguage(this.getLanguage());
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementIsAtTop
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementIsAtTop = function(language, idPageElement)
	{
		return(_pageElements[language][0].getIdPageElement() == idPageElement);
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementIsAtBottom
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementIsAtBottom = function(language, idPageElement)
	{
		return(_pageElements[language][_pageElements[language].length - 1].getIdPageElement() == idPageElement);
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementGetIndex = function(language, idPageElement)
	{
		var index;
		for(index = 0; index < _pageElements[language].length; index++)
			if(_pageElements[language][index].getIdPageElement() == idPageElement)
				return index;
		return false;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementAddRegistrationToBottom
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementAddRegistrationToBottom = function(language, idPageElement)
	{
		_pageElements[language][_pageElements[language].length] = new contentPage_PageElementRegistration(idPageElement);
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementRemoveRegistration
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementRemoveRegistration = function(language, idPageElement)
	{
		var arrNew = new Array();

		var index, offset = 0;
		for(index = 0; index < _pageElements[language].length; index++)
			if(_pageElements[language][index].getIdPageElement() != idPageElement)
				arrNew[index + offset] = _pageElements[language][index];
			else
				offset--;
		_pageElements[language] = arrNew;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementAddRegistrationToTop
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementAddRegistrationToTop = function(language, idPageElement)
	{
		var arrNew = new Array();
		
		arrNew[0] = new contentPage_PageElementRegistration(idPageElement);

		var index;
		for(index = 0; index < _pageElements[language].length; index++)
			arrNew[index + 1] = _pageElements[language][index];
		
		_pageElements[language] = arrNew;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementGetLanguage
	//
	// Description:	Returns the language to which the Page Element belongs
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementGetLanguage = function(idPageElement)
	{
		var index;
		for(index = 0; index < _pageElements["nl"].length; index++)
			if(_pageElements["nl"][index].getIdPageElement() == idPageElement)
				return "nl";
		for(index = 0; index < _pageElements["en"].length; index++)
			if(_pageElements["en"][index].getIdPageElement() == idPageElement)
				return "en";
		return false;		
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementMoveDown = function(idPageElement)
	{
		var language = this.pageElementGetLanguage(idPageElement);
		if(this.pageElementIsAtBottom(language, idPageElement))
			return false;
		
		var indexTop = this.pageElementGetIndex(language, idPageElement);

		var idContentTop = this.getContentId(idPageElement);
		var idContentBot = this.getContentId(_pageElements[language][indexTop + 1].getIdPageElement());

		var mover = new stlFaderVerticalSwitch(idContentTop, idContentBot);
		mover.move();

		var t = _pageElements[language][indexTop];
		_pageElements[language][indexTop] = _pageElements[language][indexTop + 1];
		_pageElements[language][indexTop + 1] = t;

		return true;
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	
	//
	// Description:	
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementMoveUp = function(idPageElement)
	{
		var language = this.pageElementGetLanguage(idPageElement);
		if(this.pageElementIsAtTop(language, idPageElement))
			return false;

		return this.pageElementMoveDown(_pageElements[language][this.pageElementGetIndex(language, idPageElement) - 1].getIdPageElement());
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementInsertAtTop
	//
	// Description:	Inserts a new Page Element at the top of the page.
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementInsertAtTop = function()
	{
		var objId			= this.getNewPageElementId()
		var idContent		= this.getContentId(objId);
		var idTextArea		= this.getTextareaId(objId);
		
		var htmlPageElement;
		htmlPageElement	 	= this.getTemplateSectionOpen(objId);
		htmlPageElement	   += this.getTemplateSectionClose(objId);

		var elContent		= document.createElement("div");
		elContent.id		= idContent;
		elContent.innerHTML	= htmlPageElement;
		
		var elDivLanguage	= this.getCurrentEditingLanguageDiv();
		elDivLanguage.appendChild(elContent);
		this.makeElementAbsolute(idContent);
		
		var language		= this.getCurrentEditingLanguage();
		
		var mover = new stlGroupFaderMoveDelta();
		var index;
		for(index = 0; index < _pageElements[language].length; index++)
			mover.addElement(this.getContentId(_pageElements[language][index].getIdPageElement()));
		mover.move(elContent.offsetHeight);

		this.pageElementAddRegistrationToTop(language, objId);
		tinyMCE.execCommand('mceAddControl', false, idTextArea);
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementInsertAtBottom
	//
	// Description:	Inserts a new Page Element at the bottom of the page.
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementInsertAtBottom = function()
	{
		var objId			= this.getNewPageElementId()
		var idContent		= this.getContentId(objId);
		var idTextArea		= this.getTextareaId(objId);
		
		var htmlPageElement;
		htmlPageElement	 	= this.getTemplateSectionOpen(objId);
		htmlPageElement	   += this.getTemplateSectionClose(objId);

		var elContent		= document.createElement("div");
		elContent.id		= idContent;
		elContent.innerHTML	= htmlPageElement;
		
		var elDivLanguage	= this.getCurrentEditingLanguageDiv();
		elDivLanguage.appendChild(elContent);
		this.makeElementAbsolute(idContent);

		var language		= this.getCurrentEditingLanguage();

		elCurrenBottomContent	= document.getElementById(this.getContentId(_pageElements[language][_pageElements[language].length-1].getIdPageElement()));
		elContent.style.top		= parseInt(elCurrenBottomContent.style.top, 10) + elCurrenBottomContent.offsetHeight + "px";
		this.pageElementAddRegistrationToBottom(this.getCurrentEditingLanguage(), objId);
		tinyMCE.execCommand('mceAddControl', false, idTextArea);	
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	pageElementRemove
	//
	// Description:	Removes a Page Element altogether
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.pageElementRemove = function(idPageElement)
	{
		_pageElementsDeleted[_pageElementsDeleted.length] = idPageElement;
		
		tinyMCE.execCommand('mceRemoveControl', false, this.getTextareaId(idPageElement));	

		var language		= this.pageElementGetLanguage(idPageElement);
		elContent			= document.getElementById(this.getContentId(idPageElement));

		var indexContent	= this.pageElementGetIndex(language, idPageElement);
		var heightContent	= elContent.offsetHeight;

		elContent.parentNode.removeChild(elContent);
	
		this.pageElementRemoveRegistration(language, idPageElement);

		var mover = new stlGroupFaderMoveDelta();
		var index;
		for(index = indexContent; index < _pageElements[language].length; index++)
			mover.addElement(this.getContentId(_pageElements[language][index].getIdPageElement()));
		mover.move(-heightContent);
	}
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	editorEnable
	//
	// Description:	Enables the editor
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.editorEnable = function()
	{
		var htmlControl = "";
		htmlControl += "<div class=\"" + _cssClassRootName + "_ControlHandle\">";
		htmlControl += " D<br />R<br />A<br />G<br /><br />M<br />E";
		htmlControl += "</div>";
		htmlControl += "<div>";
		
		htmlControl	+=  "<div class=\"" + _cssClassRootName + "_ControlHeader\">";
		htmlControl +=   "<b>Page Editor Controls</b>";
		htmlControl +=  "</div>";
		
		htmlControl	+=  "<div class=\"" + _cssClassRootName + "_ControlMain\">";
		htmlControl +=   "<select id=\"" + _subElementId + ".ctrl.languageSelector\">";
		htmlControl +=   "<option value=\"nl\">" + this.lang.current.txtDutch + "</option>";
		htmlControl +=   "<option value=\"en\">" + this.lang.current.txtEnglish + "</option>";
		htmlControl +=   "</select>";
		htmlControl +=   "<button id=\"" + _subElementId + "_cmdAddToTop\">" + this.lang.current.txtAddToTop + "</button><button id=\"" + _subElementId + "_cmdAddToBottom\">" + this.lang.current.txtAddToBottom + "</button>";
		htmlControl +=  "</div>";

		htmlControl	+=  "<div class=\"" + _cssClassRootName + "_ControlFooter\">";
		htmlControl +=   "<button id=\"" + _subElementId + "_cmdCancel\">" + this.lang.current.txtCancelChanges + "</button>";
		htmlControl +=   "<button id=\"" + _subElementId + "_cmdSave\">" + this.lang.current.txtSaveChanges + "</button>";
		htmlControl +=  "</div>";
		
		htmlControl += "</div>";

		var windowWidth;
		if(window.innerWidth)			windowWidth = window.innerWidth;
		else							windowWidth = document.body.offsetWidth
		
		var controlWidth				= (this.getLanguage() == "nl" ? 358 : 294);
		
		var elControl					= document.createElement("div");
		elControl.className				= _cssClassRootName + "_Control";
		elControl.style.position		= "fixed";
		elControl.style.left			= (windowWidth - controlWidth - 30) + "px";
		elControl.style.top				= "30px";
		elControl.style.width			= controlWidth + "px";
		elControl.style.margin			= "0px";
		elControl.style.padding			= "0px";
		elControl.innerHTML				= htmlControl;

		document.body.insertBefore(elControl, document.body.firstChild);
		Drag.init(document.body.firstChild.firstChild, document.body.firstChild);
		
		_elCtrlLanguageSelector = document.getElementById(_subElementId + ".ctrl.languageSelector");
		_elCtrlLanguageSelector.onchange = function() { that.setCurrentEditingLanguage(this.value); } 
		
		document.getElementById(_subElementId + "_cmdCancel").onclick 		= function() { that.cmdCancel(); 		} 
		document.getElementById(_subElementId + "_cmdSave").onclick 		= function() { that.cmdSave(); 			} 
		document.getElementById(_subElementId + "_cmdAddToTop").onclick 	= function() { that.cmdAddToTop(); 		} 
		document.getElementById(_subElementId + "_cmdAddToBottom").onclick 	= function() { that.cmdAddToBottom();	} 

		tinyMCE.init({
			mode 								: "textareas",
			theme 								: "advanced",
			plugins 							: "allimprov,safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,youtube",
			theme_advanced_buttons1 			: "bold,italic,underline,strikethrough,|,outdent,indent,bullist,numlist,blockquote,|,image,media,youtube,emotions,link,unlink,|,justifyleft,justifycenter,justifyright,justifyfull,|,forecolor,backcolor,|,formatselect,fontselect,fontsizeselect",
			theme_advanced_buttons2 			: "undo,redo,|,pasteword,|,tablecontrols,|,cleanup,code,styleprops,attribs,|,charmap,fullscreen",
			theme_advanced_buttons3 			: "aiMoveSectionDown,aiMoveSectionUp,aiRemoveSection",
			theme_advanced_buttons4 			: "",
			theme_advanced_toolbar_location 	: "external",
			theme_advanced_toolbar_align 		: "left",
			theme_advanced_statusbar_location	: "none",
			object_resizing						: true,
			convert_fonts_to_spans				: true,
			font_size_classes					: "fontSize1,fontSize2,fontSize3,fontSize4,fontSize5,fontSize6,fontSize7",
			font_size_style_values				: "xx-small,x-small,small,medium,large,x-large,xx-large",
			force_hex_style_colors				: true,
			theme_advanced_blockformats			: "h1,h2,h3,p",
			verify_html							: true,
			verify_css_classes					: true,
			content_css 						: "/pages/common/templates/allimprov/content.css",
			language							: this.getLanguage()
		});
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	cmdSave
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.cmdSave = function()
	{
		stlApp.library.tinymceHideToolbarsOfAlleditors();


		var vars = "";

		var index;
		var idPageElement;
		for(index = 0; index < _pageElements["nl"].length; index++)
		{
			idPageElement = _pageElements["nl"][index].getIdPageElement();
			vars += "&PageElement_" + idPageElement + "=" + encodeURIComponent(tinyMCE.editors[this.getTextareaId(idPageElement)].getContent());
			vars += "&PageElementSortOrder_" + idPageElement + "=" + index;
			vars += "&PageElementLanguage_" + idPageElement + "=" + this.pageElementGetLanguage(idPageElement);
		}

		for(index = 0; index < _pageElements["en"].length; index++)
		{
			idPageElement = _pageElements["en"][index].getIdPageElement();
			vars += "&PageElement_" + idPageElement + "=" + encodeURIComponent(tinyMCE.editors[this.getTextareaId(idPageElement)].getContent());
			vars += "&PageElementSortOrder_" + idPageElement + "=" + index;
			vars += "&PageElementLanguage_" + idPageElement + "=" + this.pageElementGetLanguage(idPageElement);
		}

		for(index = 0; index < _pageElementsDeleted.length; index++)
			vars += "&PageElementDeleted_" + _pageElementsDeleted[index] + "=1";

		var d = new Date();
		if(this.postSync(vars.substr(1), "Op=Update&ID=" + this.getObjectId() + "&Timestamp=" + d.getTime()) == false)
			return false;
		
		if(this.onAfterSave !== null)
			this.onAfterSave();
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	cmdCancel
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.cmdCancel = function()
	{
		stlApp.library.tinymceHideToolbarsOfAlleditors();
		
		if(!confirm(this.lang.current.txtCancelChangesAreYouSure))
			return;
		
		if(this.onCancel !== null)
			this.onCancel();
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	cmdAddToTop
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.cmdAddToTop = function()
	{
		stlApp.library.tinymceHideToolbarsOfAlleditors();
		this.pageElementInsertAtTop();
	} 
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	cmdAddToBottom
	//
	// Description:	
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.cmdAddToBottom = function()
	{
		stlApp.library.tinymceHideToolbarsOfAlleditors();
		that.pageElementInsertAtBottom(); 
	} 

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	Constructor
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var _subElementId				= idContainer + ".contentPage";
		var _cssClassRootName			= "contentPage";

		this.setUriServerComponent(stlApp.getAppComponentsPath() + "contentPage/contentPage.php");

		this.initLanguages();

		this.onCancel					= null;
		
		_pageElements["nl"] = new Array();
		_pageElements["en"] = new Array();
}

