var Generator = 'Labyrint Editor ' + Version;
var IE_version = '';
var ed;
var frame_loaded=0;
var EditMode = "HTML";
var Mode="on";
var CurrentParent;
var CurrentTextRange;
var CurrentTagParent;
var myobj;
var TrangeStart;
var TrangeEnd;
var global_obj;
var obj_float;
var selected_absolute;
var SavedHtml;
var action_file;
var ypos;
var xpos;
var empty_cell = '<DIV>&nbsp;</DIV>';
var td_el;
var tr_el;
var table_el;
var td_start;
var td_end;
var re_color 	  =/^(TD|TR|TABLE|DIV|P|UL|OL|BODY|SPAN)$/i;
var re_block = /^(TD|TR|TABLE|DIV|P|LI|UL|OL|BODY)$/i;
var reinnerHTML = /^(FRAMESET|HTML|HEAD|TABLE|TBODY|TFOOT|THEAD|TITLE|TR)$/i;
var a_names = new Array;
var el_a = new Array;
var cut_text=" ";
var cut_text_length = cut_text.length;
var sec_saved;
var templateDada='';
var template_el;
var templateHTML;
var templateObject;
var textURL='';
var MenuBarLocation;
var stylesheet_el='';
var bm_img;
var re_DomainHttp = new RegExp(DomainHttp,"i");
var bmgif = IconDir + '/anchor.gif';
var bmgif_search = bmgif.replace(re_DomainHttp,'');
var hrgif = IconDir + '/solid_standaard.gif';
var hrgif_search = hrgif.replace(re_DomainHttp,'');
var selected_img;
var selected_input;
var selected_object;
var div_save;
var cell_rowspan;
var cell_attributes = new Array ('style.cssText','colSpan'); //cell attributes to copy
var row_attributes  = new Array ('style.cssText','valign'); //row attributes to copy
var attributes = new Array(cell_attributes.length);
var img_attributes = new Array ('marginBottom','marginTop','marginLeft','marginRight','border','align','alt'); //Image attributes
var fcolor;
var bcolor;
var cb_fcolor='#000000';
var cb_bcolor='#ffffff';
var initcolors=new Array('00','33','66','99','CC','FF');
var hide_string = "<verborgen item> ";
var sort_mode=0;
var fpaint_styles = new Array('fontSize','fontFamily','fontStyle','fontWeight','color','backgroundColor','textDecoration');
var pt_size = new Array('8','10','12','14','18','24','36','72');
var format_paint = new Array;
var fpaint_status=0;
var clipboard_table_text;
var reg_email = /^\s*(([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*\@[A-Za-z0-9]+(?:(?:\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)\s*$/;
var reg_www = /((www\.[\w\/\-\@\.]+\.[\w]{2,})(?:\s*<(.*?)>)?)/i;
var reg_format = /^\s*(?:class|klasse)\s*=\s*(\w[\w\s]+)$/;
var reg_hide = /\s*(?:class|klasse)\s*=\s*(hide|verberg)\s*/;
var tmp_table;
var table_clipboard = new Array();  //copied table from internal document
var BodyHeightOld=1000000;
var HideBlocks = new Array();
var align_table_active;
var default_img_dir;
var default_img_sort = 32; //default thumbnail view
var default_file_sort = 16; //default file view
var default_file_dir;
var default_media_dir;
var default_intern_page_dir;
var cut_copy_block = 0;
var check_frames_menu;
var check_frames_sub;
var meta_names = new Array('keywords','description','author','generator');
var XMLHttpTimer = 0;
var XMLHttpMessageTimeout;
var page_bookmarks = new Array; //bookmarks from internal page, initialized by XHttpRequest
if(!img_quality) img_quality='75';
if(!img_maxsize) img_maxsize='200';
if(!img_default_margin) img_default_margin = 5;
var main_menu;
var sub_menu_prefix;
var main_menu_prefix;
var global_menu_id ='';
var yellow_fontSize;
var yellow_fontFamily;
var embed_array;
var pasted_with_format_removed = false;
var last_command_used = '';
var restricted_html = false;
var cannot_show_script_code = 'script code kan niet worden getoond in de editor...';
var TidyActive = false;

var bug_fix_function='';
if(inpath != '') inpath = inpath + '/';
var MasterDomainInpath = MasterDomain + '/' + inpath;
var FilePath = MasterDomainInpath + inFileName.replace(/^\//,'');
var RealFileNameDir = MasterDomainInpath + inFileName.replace(/[^/]+$/,'');


// comments IE6.0:
// replacenode clears the undo list. Use outerHTML instead.
// first el=createElement(..) and then el.innerHTML or el.outerHTML clears the undo list also.
// Use el.outerHTML = el.outerHTML.replace(..) instead.
// After el.outerHTML=...  => el is not defined anymore.

// to make a TextRange on a specific tag:
//		TextRange.moveToElementText(obj);
//		TextRange.select();

//remove specific style attribute:
//.style.cssText.replace(...)
//DO NOT USE: obj.style.removeExpression('display');

var req;
var XMLHttpMessage;
var XMLtodo = '';

/*****************************************/
function PostQuestion(question) {
	XMLHttpTimer=0;
	XMLHttpMessage='';
	if (window.XMLHttpRequest) req = new XMLHttpRequest();
	else if (window.ActiveXObject) req = new ActiveXObject("Microsoft.XMLHTTP");
	else return; // fall on our sword
	//alert(ScriptName + '?' + question);
	var this_time = new Date().getTime();
	req.open("GET", ScriptName + '?domain=' + Domain  + '&' + question + '&time=' + this_time); //to prevent caching, add time stamp!
	req.onreadystatechange = ReceiveMessage;
	req.send();

	XMLHttpMessageReceived(); //wait for an answer...
}

/*****************************************/
function ReceiveMessage() {
	if (req.readyState != 4) return;
	if (req.status == 200) {
		XMLHttpMessage = req.responseText; //responseXML;
		//alert(XMLHttpMessage);
	} else {
			if (XMLHttpMessageTimeout) clearTimeout(XMLHttpMessageTimeout);
			alert("There was a problem retrieving the HttpRequest:\n" + req.statusText);
			be_patient(0);
	}
}


/*****************************************/
function admin()
{

	if(Administrator) {
			Administrator = 0;
			tagsline.style.display='none';
			remove_tagborder();
			tagsline.innerHTML='';
		}
		else {
			Administrator = 1;
			tagsline.style.display='inline';
			tagsline.innerHTML='tags:<br>&nbsp;';
		}
		edit_mode();
}

/*****************************************/
function photo_album()
{
/*
var photo_albums = new Object;

photo_albums.album1 = new Object;
photo_albums.album1.title = "vakantie";
photo_albums.album1.number = "1";
photo_albums.album1.thumbsize = "80";
photo_albums.album1.thumbmargin = "7";
photo_albums.album1.albumwidth = "675";
photo_albums.album1.thumbcolor = "#eeeeee";

photo_albums.album2 = new Object;
photo_albums.album2.title = "feest";
photo_albums.album2.number = "2";
photo_albums.album2.albumwidth = "800";
photo_albums.album2.thumbsize = "100";
photo_albums.album2.thumbmargin = "7";
photo_albums.album2.thumbcolor = "#eeeeee";
*/


	if(!photo_albums) {
		alert("de editor is nog niet geconfigureerd voor het gebruik van foto-albums.\nNeem contact op met de systeembeheerder.");
		return;
	}

	//search for photoalbum:
	var el_div = ed.all.tags("DIV");
	var my_el;
	for(i=0;i<el_div.length;i++)
		if(el_div[i].className.search(editphotoalbum) != -1) break;
	var photo_div = my_el = el_div[i];

	if(!my_el){
		CurrentTextRange.select();
		my_el = get_parent(/^(DIV|P)$/);
		//if(!my_el){
			//	alert('Plaats de cursor in een tekstblok of paragraaf!'); return;}
	};

	var current_album_width;
	if(my_el){
		var temp = my_el.style.width;
		my_el.style.width='100%';
		 current_album_width = my_el.clientWidth.toString().replace(/^(\d+)/,'$1');
		if(temp) my_el.style.width = temp;
		else my_el.style.width='';
	}

	arg = new Array(ed,photo_albums,current_album_width,photo_div);
	ReturnValue = showModalDialog(EditDir + "/photo_album.html",arg,"dialogWidth: 29; dialogHeight: 14; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];

	ed.focus();

	switch(action){
		case 'cancel':
			return;
		break;
		case 'delete':
			alert('delete: to be done');
		break;
		case 'remove':
			alert('remove: to be done');
		break;
		case 'insert':
			alert('insert: to be done');
		break;
		case 'change':
		case 'add':
			var this_album;

			if(action == 'add'){
				var album_present = new Array;
				var album_free = 1;

				for (e in photo_albums)
					if(photo_albums.hasOwnProperty(e) && photo_albums[e].number)
						album_present[photo_albums[e].number] = true;
				do{album_free++} while(album_present[album_free]);

				this_album = 'album' + album_free;
				photo_albums[this_album] = new Object;
				photo_albums[this_album].number = album_free;
			} else this_album = ReturnValue[1];

			photo_albums[this_album].title = ReturnValue[2];
			photo_albums[this_album].albumwidth = ReturnValue[3];
			photo_albums[this_album].thumbsize = ReturnValue[4];
			photo_albums[this_album].thumbmargin = ReturnValue[5];
			photo_albums[this_album].thumbcolor = ReturnValue[6];


			var FileContent="var photo_albums = new Object;\n";
			for (i in photo_albums){
				FileContent += '\nphoto_albums.' + i + ' = new Object;\n';
				if (photo_albums.hasOwnProperty(i) && photo_albums[i].title){
					for (j in photo_albums[i]){
			   		FileContent += 'photo_albums.' + i + '.' + j + ' = "' +  photo_albums[i][j] + '";\n';
			   	}
			  }
			}
			FileContent = escape(FileContent);
			PostQuestion("todo=XMLphotoalbum&action=" + action + "&par1=" + FileContent + "&par2=" + ReturnValue[2]);
			break;
	}
}


/*****************************************/
function insert_HTMLcode(code,colapse,test)
{
	var Trange = ed.selection.createRange();
	var parent_el = get_parent(/^(TD|P|DIV|LI)$/,Trange);
	var cleanup = true; //always cleanup??

	if(!parent_el || (test && !parent_el.isContentEditable) ){
		alert('Invoegen tags is hier niet toegestaan.\nZet de cursor eerst ergens in de tekst.');
		return false;
	}

	get_scroll_pos();

	var found = false;

	//google widget?
	if( code.search(/^(.*<SCRIPT\s+src=[\'\"]?http\:\/\/www.gmodules.com\/ig\/[\s\S]*&(?:amp;)?w=(\d+)[\s\S]*&(?:amp;)?h=(\d+)[\s\S]*<\/SCRIPT>.*)$/i) != -1){
		code = '<table onclick="parent.active_script_code_clicked(this);" class="' + edit_active_script_code + ' noedittable" cellpadding=0 cellspacing=0><tr>';
		code += '<td class=' + edit_active_script_code + ' style="text-align:center; background-color:#E5ECF9; border:solid 1px #ACC3DF; font-size:12px; color:red; font-style:italic; overflow:auto; width:' + RegExp.$2 + '; height:' + RegExp.$3 + '">';
		code += '<div>Google ' + cannot_show_script_code + '<!-- start_of_script_code -->' + RegExp.$1 + '<!-- end_of_script_code --></div></td></tr></table>';
		found = true;
	}
	else //script with iframe/script width and height?
	if(code.search(/^([\s\S]*?<SCRIPT\s+[\s\S]*?<(?:iframe|script)[\s\S]*?width[\=\:]\s*([^\s>,;]+)[^>]*?height[\=\:]\s*([^\s>,;]+)[\s\S]*)$/i) != -1){
			code = '<table onclick="parent.active_script_code_clicked(this);" class="' + edit_active_script_code + ' noedittable" cellpadding=0 cellspacing=0><tr>';
			code += '<td class=' + edit_active_script_code + ' style="width:' + RegExp.$2 + '; height:' + RegExp.$3 + '; text-align:center; background-color:#E5ECF9; border:solid 1px #ACC3DF; font-size:12px; color:red; font-style:italic;">';
			code += '<div>' + cannot_show_script_code + '<!-- start_of_script_code -->' + RegExp.$1 + '<!-- end_of_script_code --></div></td></tr></table>';
			found = true;
	}
	else //other script code:
	if(code.search(/^([\s\S]*?<SCRIPT\s+[\s\S]*?)$/i) != -1){
			code = '<table onclick="parent.active_script_code_clicked(this);" class="' + edit_active_script_code + ' noedittable" cellpadding=0 cellspacing=0><tr><td class=' + edit_active_script_code + ' style="text-align:center; background-color:#E5ECF9; border:solid 1px #ACC3DF; font-size:12px; color:red; font-style:italic;">';
			code += '<div>' + cannot_show_script_code + '<!-- start_of_script_code -->' + RegExp.$1 + '<!-- end_of_script_code --></div></td></tr></table>';
			found = true;
	}
	if(found) {
		code = code.replace(/(<\/?)SCRIPT(\s|>)/gi,'$1' + Script_editor + '$2');
		//alert(code);
	}


	if(colapse) Trange.collapse(true);

//insert_block_code(Trange,code,parent_el,'cleanup');
	var url = 'edit_please_remove_me' + (new Date()).getTime();
	ed.execCommand('InsertImage','', url);
	var img_col = parent_el.all.tags("IMG");
	var found_img;

	for(var i=img_col.length-1;i>=0;i--){
		if(img_col[i].src.search(/edit_please_remove_me/) != -1 ){
			if(img_col[i].src.search(url) != -1)
				found_img = img_col[i];
			else img_col[i].removeNode(false); //clean up old img tag
		}
	}

	var parent_col = new Array;
	var found_parent;
	var nr=0;

	if(found_img){
		found_parent = found_img;
		do{
			found_parent = found_parent.parentElement;
			parent_col[nr++] = found_parent;
		}while(found_parent && found_parent != parent_el && found_parent.tagName != 'BODY' && nr<50);
	}

	found_img.style.display = 'none';
	found_img.className = 'edit_please_remove_me_1';

	if(found_parent && found_parent.tagName != 'BODY' && nr<50){
		//close tags, insert code, open tags again:
		var el_start_tag = '';
		var el_end_tag = '';

		for(i=0;i<parent_col.length-1;i++){  //skip last element (parent_el)
		var re = new RegExp("^\\s*(<(" + parent_col[i].tagName + ")[^>]*>)","i");
			if(parent_col[i].tagName.search(/^(TABLE|TR|TD|TBODY|UL|LI)$/) == -1){
				parent_col[i].outerHTML.search(re);
				el_start_tag = RegExp.$1 + el_start_tag;
				el_end_tag = el_end_tag + '</' + RegExp.$2 + '>';
			}
		}

		//alert(code);

		el_start_tag = '%####end1####%' + el_start_tag;
		el_end_tag = el_end_tag + '%####start2####%';

		if(code.search(/^[^<]*<(P|DIV|LI)/i) != -1 &&
			//last element (parent_el) to parse:
			parent_el.outerHTML.search(/^\s*(<(P|DIV|LI)[^>]*>)/i) != -1 )
		{
			el_end_tag = el_end_tag + '</' + RegExp.$2 + '>';
			el_start_tag = RegExp.$1 + el_start_tag;
		}

		code = el_end_tag + code + el_start_tag;

		var code_new;
		if(parent_el.tagName == 'TD') code_new = parent_el.innerHTML;
		else code_new = parent_el.outerHTML;

		code_new = code_new.replace(/^(?:\s|\&nbsp;)*(<(?:P|DIV|TD|LI)[^>]*>)([\s\S]*)(<\/(?:P|DIV|TD|LI)[^>]*>)(?:\s|\&nbsp;)*$/i,'$1%####start1####%$2%####end2####%$3');
		code_new = code_new.replace(/<IMG[^>]+edit_please_remove_me_1[^>]*>/i,code);


		var start;
		var end;

		//remove empty tags:
		if(parent_el.outerHTML.search(/^([\s\S]*)<IMG[^>]+edit_please_remove_me_1[^>]*>/i) != -1) {
			start = RegExp.$1;
			start = start.replace(/(<[^>]*>|\&nbsp;|\s)/g,'');
			if(!start) code_new = code_new.replace(/%####start1####%([\s\S]*)%####start2####%/i,'');
		}
		if(parent_el.outerHTML.search(/<IMG[^>]+edit_please_remove_me_1[^>]*>([\s\S]*)$/i) != -1) {
			end = RegExp.$1;
			end = end.replace(/(<[^>]*>|\&nbsp;)|\s/g,'');
			if(!end) code_new = code_new.replace(/%####end1####%([\s\S]*)%####end2####%/i,'');
		}
		//alert('1:' + start + '-\n\n2:' + end + '-\n\n3:' + code_new);

		code_new = code_new.replace(/%####(end\d|start\d)####%/g,'');

		if(parent_el.tagName == 'TD') parent_el.innerHTML = code_new;
		else {
			//remove empty <P> or <DIV> tags:
			code_new = code_new.replace(/^\s*<p(\s[^>]*>|>)(\&nbsp;|\s)*<\/p>/gi,''); //at the start
			code_new = code_new.replace(/^\s*<div(\s[^>]*>|>)(\&nbsp;|\s)*<\/div>/gi,'');

			code_new = code_new.replace(/<p(\s[^>]*>|>)(\&nbsp;|\s)*<\/p>\s*$/gi,''); //at the end
			code_new = code_new.replace(/<div(\s[^>]*>|>)(\&nbsp;|\s)*<\/div>\s*$/gi,'');
			parent_el.outerHTML = code_new;
		}
	}

	edit.window.setTimeout(position1,100);
	//alert(code_new);

}


/*****************************************/
function page_properties()
{
	ReturnValue = showModalDialog(EditDir + "/page.html",ed,"dialogWidth: 25; dialogHeight: 28; dialogPosition:center; resizable: yes; help: no; scroll: no;");
	ed.focus();
}

/*****************************************/
function email()
{
	if(!online()) return;
	if(document_changed() && !confirm("Let op: De laatste wijzigingen zijn nog niet bewaard!\nAlleen de opgeslagen versie wordt per email verstuurd.\nDruk op Annuleren en sla het bestand eerst op.\nOf druk op OK om toch door te gaan.")) return;;

	arg = new Array(ed,Domain,DomainHttp + '/' + inpath + inFileName,reply_to,textURL,CgiFormAction);
	ReturnValue = showModalDialog(EditDir + "/email.html",arg,"dialogWidth: 30; dialogHeight: 19; dialogPosition:center; resizable: yes; help: no; scroll: no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];

	ed.focus();

//testen of de error message bevat: "can't fetch ... (not Found)". Dan
//wijzigen in:
//De opgegeven web pagina blablabla is niet aangetroffen.\nControleer of de URL juist is.

	if(action != 'cancel') alert(ReturnValue[1].replace(/<br>/gi,'\n'));

}


/*****************************************/
function online()
{
	if(!navigator.onLine) alert('Deze functie werkt alleen als je on-line bent.\nVerwijder hiertoe eerst het vinkje bij het menu: "Bestand - Off line werken"');
	else return 1;
}


/*****************************************/
function init()
{
	var error=0;

	if(!edit.document) error=1;
	else if(navigator.appVersion.search(/MSIE\s+(\d[\.\d]+)/i) == -1) error=1;
	else if(RegExp.lastParen < 6) error=2;
	else {
		var el_frameset = edit.document.all.tags("FRAMESET");
		if(el_frameset && el_frameset.length > 0) error=3;
	}

	if(RegExp.lastParen) IE_version = RegExp.lastParen;

	if(error == 1) alert('Voor de Editor dient Internet Explorer versie 6.0 of hoger gebruikt te worden.\nSurf naar www.microsoft.download.nl om de nieuwste versie van Internet Explorer te downloaden.');
	if(error == 2) alert('Voor de Editor wordt Internet Explorer versie 6.0 of hoger aanbevolen.\nJe gebruikt nu versie ' + IE_version + '\nSurf naar www.microsoft.download.nl om de nieuwste versie van Internet Explorer te downloaden.');
	if(error == 3) {
		var this_time = new Date().getTime();
		alert('Deze pagina met een frameset kan niet worden gewijzigd!');
		//location.replace(ScriptName + "?domain=" + Domain + "&todo=Edit&path=" + inpath + "&time=" + this_time);
	}

	if(!frame_loaded) {
	  alert('Frame kan niet worden geladen!\nNeem contact op met de systeembeheerder.');
		return;
	} else frame_loaded=0;

//	if(!inFileName){
//		var mywin = window.open(EditDir + "/popup.html","popup","width=200, height=200, toolbar=0");
//		if(mywin) mywin.blur();
//		if(!mywin) alert('Voor optimaal gebruik van de editor dient de popup-blokker te worden uitgeschakeld voor deze web site:\n\n-Open het menu "Extra" van Microsoft Internet Explorer \n-Kies "Pop-upblokkering"\n-Kies "Pop-ups voor deze website altijd toestaan"');
//		else mywin.close();
//	}
	editframe.style.visibility="visible";
	ed = edit.document;

	stylesheet_el = edit.document.createStyleSheet(StyleSheet);
	restricted_html_conversion('init');
	clean_source('init');
	edit_mode();
	init_once();
	check_main_menu();
	active_script_code_modify('start');


	ypos = Form1.ypos.value;  //restore scroll position
	default_file_dir = Form1.dfdir.value;  //restore last opened file dir
	default_img_dir = Form1.imgdir.value;  //restore last opened image dir
	default_media_dir = Form1.mediadir.value;  //restore last opened media dir
	default_intern_page_dir = Form1.interndir.value;  //restore last opened media dir

	if(document.Form1.cb_fcolor.value) cb_fcolor = document.Form1.cb_fcolor.value;
	if(document.Form1.cb_bcolor.value) cb_bcolor = document.Form1.cb_bcolor.value;

	if(cb_fcolor.search(/^[0-9,a-f]{6}$/i) != -1) cb_fcolor = '#' + cb_fcolor;
	if(cb_bcolor.search(/^[0-9,a-f]{6}$/i) != -1) cb_bcolor = '#' + cb_bcolor;

	colorclipboard.style.color = cb_fcolor.toString();
	colorclipboard.style.backgroundColor = cb_bcolor.toString();

	SavedHtml=ed.documentElement.outerHTML.replace(/<object[^>]*>[\s\S]*<\/object>/gi,'');

	edit.window.setTimeout(position1,100);
}

/*****************************************/
function init_once()
{
	bepatient.style.display="none";
	toolbar.style.display="inline";

	var save_but = document.getElementById('savebutton');

	if(save_but){
		if(!inFileName) save_but.disabled=true;
		else savebutton.disabled=false;
	}

	if(Administrator) {
			el_a = ed.all.tags("A");
			for(var i=0;i<el_a.length;i++)
				el_a[i].onclick = select_object;
	}


	check_meta_tags();
	menu_resize();
	bookmarks_relative();


	var el_span = ed.all.tags("SPAN");
	var el_div = ed.all.tags("DIV");
	var el_p = ed.all.tags("P");
	var el_comment = ed.all.tags("!");
	var el_font = ed.all.tags("FONT");
	var el_img = ed.all.tags("IMG");

	for(i=0;i<el_div.length;i++){

		if(!el_div[i].isContentEditable  && !Administrator)
			el_div[i].style.border = el_div[i].style.border;

		if(el_div[i].className.search(editstartsave) != -1) div_save = el_div[i];

		if(el_div[i].className.search(editshowme) != -1) el_div[i].style.display='block';

		if(!templateObject && el_div[i].className.search(/edit_object_template/) != -1){
				templateObject = el_div[i].innerHTML ;
				templateObject = templateObject.replace(/edittemplate\s*/i,'');
				templateObject = templateObject.replace(/<COMMENT>([\s\S]*?)<\/COMMENT>/ig,"<!-- $1 -->");
			}

	}

	for(i=0;i<el_span.length;i++)
		if(el_span[i].className.search(/edit_menu/) != -1)
				el_span[i].attachEvent("onkeyup",menu_resize);

	for(i=0;i<el_p.length;i++)
		if(!el_p[i].isContentEditable && !Administrator)
			el_p[i].style.border = el_p[i].style.border;

	for(i=0;i<el_font.length;i++) //changed <font size=...> into: <font style="font-size=...px">
			if(el_font[i].size == 1){
				el_font[i].style.fontSize = '10px';
				el_font[i].removeAttribute('size');
			}

	for(i=0;i<el_comment.length;i++) {//new style templates

		if(el_comment[i].text.search(re_templateString) != -1) {
				el_comment[i].text.match(/^<!--[^<]*([\s\S]*)-->$/);
				if(!RegExp.lastParen) continue;
				templateHTML =  RegExp.lastParen;
				templateHTML = templateHTML.replace(/edittemplate\s*/i,'');
				templateHTML = templateHTML.replace(/<COMMENT>([\s\S]*?)<\/COMMENT>/ig,"<!-- $1 -->");
			}
		if(el_comment[i].text.search(/fold_main_menu_v\d/) != -1) {  //insert fold_menu
				el_comment[i].text.match(/^<!--[^<]*([\s\S]*)-->$/);
				el_comment[i].insertAdjacentHTML("afterEnd",RegExp.lastParen);
		}
		if(el_comment[i].text.search(re_textVersion) != -1) {  //text version of a e.g. newsletter used by "send email", see function email()
				el_comment[i].text.match(/^<!--[^\"]*\"([\s\S]*)\"\s*-->$/);
				textURL =  RegExp.lastParen;
			}
		if(el_comment[i].text.search(re_menuBar) != -1) {  //template menu bar
				el_comment[i].text.match(/^<!--[^<]*([\s\S]*)-->$/);
				templateMenuBar =  RegExp.lastParen;
				menubarbutton.style.display="inline";
			}
	  if(el_comment[i].text.search(re_dada) != -1) {  //template dada
	    el_comment[i].text.match(/^<!--([^>]*)-->$/);
	    templateDada =  RegExp.lastParen;
	   }
	  if(!templateDada && DadaMailingList) 	templateDada =	DadaMailingList;
	  if(templateDada || available_dada_lists.length>0) dadabutton.style.display="inline";


		if(el_comment[i].text.search(re_editor_empty_cell) != -1)  //empty cell for newsletter
			empty_cell = RegExp.$1;

		if(el_comment[i].text.search(re_editor_template) != -1) { //template definition
			var inx = my_templates.length;
			my_templates.push(new Array);
			my_templates[inx][0] = RegExp.$1;
			my_templates[inx][1] = RegExp.$2;

			if(my_templates.length){
				id_templates.style.display = 'inline';
				var oOption = document.createElement("OPTION");
				id_templates.options.add(oOption);
				oOption.innerText = my_templates[inx][0];
			}
		}

		eval(CheckComment);
	}

	if(templateMenuBar || Domain.search(/^(test\.nl|synergie\.nu|tedwilson\.nl)$/i) != -1)
		menubarbutton.style.display="inline";

//	if(!templateHTML){ //old style templates
//		var re = new RegExp(edittemplate,"g");
//		for(i=0;i<ed.all.length;i++)
//			if(ed.all[i].className.search(edittemplate) != -1 ){
//			template_el = ed.all[i].cloneNode(true);
//			template_el.className = template_el.className.replace(/edittemplate\s*/i,'');
//			templateHTML=template_el.outerHTML;
//			break;
//		}
//	}

	//get link style:
//	var a_obj = ed.createElement("A");
//	a_obj.href = "style";
//	a_obj.style.display='none';
//	document_link_obj = ed.body.insertAdjacentElement('beforeEnd',a_obj);

	edit.attachEvent("onbeforeunload",unload);
	ed.body.attachEvent("onkeypress",key_get);
	document.body.attachEvent("onkeypress",key_get);
	ed.body.attachEvent("onkeydown",key_down);
	//ed.attachEvent("onselectionchange",selection_change);
	ed.body.attachEvent("onresizestart",resize);
	ed.body.attachEvent("onpaste",clipboard_remove_format);
	//ed.body.attachEvent("onbeforecopy",before_cut_copy);
	//ed.body.attachEvent("onbeforecut",before_cut_copy);
	ed.body.attachEvent("ondrop",clipboard_remove_format);
	ed.body.attachEvent("oncut",cut_intern);
	ed.body.attachEvent("oncopy",cut_intern);
	ed.body.attachEvent("ondragstart",cut_intern);
	ed.body.attachEvent("oncontrolselect",control_dialog);
	ed.body.attachEvent("onclick",clicked);
	ed.body.attachEvent("onresizeend",bodyfocus);
	ed.body.attachEvent("ondragend",bodyfocus);
	ed.body.attachEvent("onmouseup",mouseup);
	ed.body.attachEvent("oncontextmenu",click_context);
	this.document.body.attachEvent("onmouseup",mouseup);
}

/*****************************************/
function Change_Editmode()
{
	if(Mode == 'on') {
		Mode='off';
		//clean_source(); //undo will not work anymore...
	}	else Mode='on';

	edit_mode();
}

/*****************************************/
function edit_mode() {

	read_bookmarks();
	add_target_blank();

	if(Mode == "off" ) {
		menu_resize();
		get_scroll_pos();
		BodyHeightOld = ed.body.scrollHeight;
	}

	var el_span = ed.all.tags("SPAN");
	var el_div = ed.all.tags("DIV");
	var el_td = ed.all.tags("TD");
	var el_link = ed.all.tags("LINK");
	var el_img = ed.all.tags("IMG");

	if(Mode == "on" ){

		document.title = Version + ' - ' + inFileName +  (IE_version ? ' (IE=v' + IE_version + ')' : '');
		toolbar.style.display="inline";
		preview.style.display="none";
		ed.body.style.visibility = "hidden";

		stylesheet_el.disabled=false;

		for(i=0;i<el_span.length;i++){
			if(el_span[i].className.search(editblock) != -1) el_span[i].contentEditable=true;
		}

		for(i=0;i<el_div.length;i++){
			if(el_div[i].className.search(editblock) != -1) el_div[i].contentEditable=true;
			if(el_div[i].className.search(editnoblock) != -1) el_div[i].contentEditable=false;
			if(el_div[i].className.search(editshowme) != -1) el_div[i].style.display='block';
		}

		for(i=0;i<el_td.length;i++)
			if(el_td[i].isContentEditable || Administrator){
				if(el_td[i].className.search(/editborder/) == -1 ) el_td[i].className = editborder + " " + el_td[i].className;
			}
			else el_td[i].className = el_td[i].className.replace(/(\s*editborder|editborder\s*)/,'');

		for(i=0;i<el_img.length;i++)
			if(el_img[i].src.search(bmgif_search) != -1) {
				el_img[i].style.display='inline';
				if(el_img[i].parentElement.tagName != "A") el_img[i].outerHTML=el_img[i].innerHTML;
			}

		hide_items_check();
		correct_youtube_embed(true);
	}

	if(Mode == "off" ){
		document.title = ed.title;
		toolbar.style.display="none";
		preview.style.display="inline";


		for(i=0;i<el_span.length;i++){
			if(el_span[i].className.search(editblock) != -1) {
				el_span[i].contentEditable=false; el_span[i].removeAttribute('contentEditable');
			}
		}
		for(i=0;i<el_div.length;i++){
			if(el_div[i].className.search(editshowme) != -1) el_div[i].style.display='none';
			if(el_div[i].className.search(editblock) != -1) {
				el_div[i].contentEditable=false; el_div[i].removeAttribute('contentEditable');
			}
		}
		for(i=0;i<el_img.length;i++){
			//if(restricted_html && event && event.shiftKey) el_img[i].style.margin = '';
			if(el_img[i].src.search(bmgif_search) != -1) el_img[i].style.display='none';
			if(el_img[i].className == 'edit_hor_line') {
				if(el_img[i].parentElement.innerHTML.search(/(&nbsp;)+ ?(<IMG[^>]+class="?edit_hor_line)/i) != -1)
					el_img[i].parentElement.innerHTML = el_img[i].parentElement.innerHTML.replace(/(&nbsp;)+ ?(<IMG[^>]+class="?edit_hor_line)/gi,' $2');
			}
		}


		stylesheet_el.disabled=true;

		bookmarks_relative();

		correct_youtube_embed(false);
	}

	ed.execCommand('Unselect');
	ed.body.style.visibility = "visible";
	ed.body.focus();
	if(ypos) edit.window.setTimeout(position,50);
}


/*****************************************/
function save_dialog(choice){
	if(!online()) return;

//	if(event && event.altKey) {save_dialog1(choice); return; }

	var changed = document_changed();
	var arg = new Array;

	arg[0]= choice;
	arg[1]= htmldirs[1];
	arg[2]= inFileName;
	arg[4]= default_file_dir;
	arg[5]= changed;
	arg[9]= EditDir;
	arg[10] = MasterDomainInpath;
	arg[11] = default_file_sort;
	arg[13] = restricted_html ? true : TidyActive;

	if(choice == 'open'){
		MyDialogWidth = 57
		MyDialogHeight = 37;
	} else {
		MyDialogWidth = 25
		MyDialogHeight = 10;
	}

	//var this_time = new Date().getTime();
	ReturnValue = showModalDialog(EditDir + "/save_new.html",arg,"dialogWidth:" + MyDialogWidth + "; dialogHeight:" + MyDialogHeight + "; dialogPosition:center; resizable: yes; help: no; scroll: yes; ");
	if(ReturnValue) action_file = ReturnValue[0];
	else action_file = 'cancel';
	ed.focus();

	if(action_file == 'cancel') {action_file=''; return;}
	if(action_file == 'exit') {location.replace(MasterDomain); return;}

	if(ReturnValue[2] != "???") default_file_dir = ReturnValue[2] ? ReturnValue[2] : '/';
	if(ReturnValue[11]) default_file_sort = ReturnValue[11];
	if(!ReturnValue[1]) ReturnValue[1] = inFileName;
	TidyActive = ReturnValue[13];


	switch(action_file)
	{
		case 'refresh':
			refresh_dirs("htmldirs","save_dialog('" + ReturnValue[12] + "')");
			return;
		case 'delete':
			PostQuestion("todo=XMLDeleteFile&action=delete&par1=refresh_dirs('htmldirs','save_dialog(\"" + ReturnValue[12] + "\")')&par2=Het document&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[1]);
			return;
		case "edit":
			PostQuestion("todo=XMLRenameFile&action=edit&par1=refresh_dirs('htmldirs','save_dialog(\"" + ReturnValue[12] + "\")')&par2=Het document&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[1] + "&NewFile=" + ReturnValue[2] + ReturnValue[3]);
			return;
		case "edit_map":
			PostQuestion("todo=XMLRenameFile&action=edit&par1=refresh_dirs('alldirs','save_dialog(\"" + ReturnValue[12] + "\")')&par2=De map&path=" + inpath + "&FileName=" + ReturnValue[1] + "&NewFile=" + ReturnValue[3]);
			return;
		case "create_map":
			PostQuestion("todo=XMLCreateMap&action=refresh&par1=refresh_dirs('htmldirs','save_dialog(\"" + ReturnValue[12] + "\")')&par2=De map&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[3] + "&par3=" + ReturnValue[12]);
			return;
		case "delete_map":    //'delete' map: rename to backup map which will be removed automatically after 14 days...
				PostQuestion("todo=XMLDeleteMap&action=delete&par1=refresh_dirs('alldirs','save_dialog(\"" + ReturnValue[12] + "\")')&par2=De map&path=" + inpath + "&FileName=" + ReturnValue[1] + "&par3=" + ReturnValue[12]);
			return;
	}

	//document.Form1.ypos.value = ed.documentElement.scrollTop; //save scroll position
	get_scroll_pos();
	document.Form1.ypos.value = ypos;
	ed.body.style.visibility="visible";

	if(action_file == "save_new" || action_file == "open" || action_file == "save_as") document.Form1.NewFile.value = ReturnValue[2] + ReturnValue[1];
	if(action_file == "save") document.Form1.NewFile.value = inFileName;

	if(action_file.search(/save/) != -1) document.title = document.Form1.NewFile.value + ' opslaan...';
	if(action_file.search(/open/) != -1) document.title = document.Form1.NewFile.value + ' openen...';

	var file_info_request = action_file == "save_new" ? inFileName : document.Form1.NewFile.value;
	PostQuestion("todo=XMLFileInfoRequest&action=" + action_file + "&path=" + inpath + "&FileName=" + file_info_request);
}



/*****************************************/
function XMLHttpMessageReceived()
{
	be_patient(1);

	if(XMLHttpTimer > 150){ //after 15 seconds waiting, we have waited long enough...
		alert('De web server geeft momenteel geen antwoord.\nControleer de Internet verbinding en probeer het straks nog eens.\n');
		XMLHttpTimer=0;
		be_patient(0);
		if (XMLHttpMessageTimeout) clearTimeout(XMLHttpMessageTimeout);
		return;
	}

	if(!XMLHttpMessage) {
		XMLHttpTimer++;
		XMLHttpMessageTimeout = setTimeout(XMLHttpMessageReceived,100); //wait 0,1 seconds
		return;
	}

	var message;
	var fname;
	var new_name;
	var fsize;
	var action;
	var par1;
	var par2;
	var par3;
	var readonly;
	var fdate;
	var exist;
	var deleted;
	var renamed;

	if( XMLHttpMessage.search(/^\s*#([^#]*)/) 			!= -1)	message = RegExp.$1;
	if( XMLHttpMessage.search(/#fname=([^#]*)/) 		!= -1)	fname = RegExp.$1;
	if( XMLHttpMessage.search(/#new_name=([^#]*)/) 	!= -1)	new_name = RegExp.$1;
	if( XMLHttpMessage.search(/#fsize=([^#]*)/) 		!= -1)  fsize = RegExp.$1;
	if( XMLHttpMessage.search(/#action=([^#]*)/) 		!= -1)	action = RegExp.$1;
	if( XMLHttpMessage.search(/#par1=([^#]*)/) 			!= -1)	par1 = RegExp.$1;
	if( XMLHttpMessage.search(/#par2=([^#]*)/) 			!= -1)	par2 = RegExp.$1;
	if( XMLHttpMessage.search(/#par3=([^#]*)/) 			!= -1)	par3 = RegExp.$1;
	if( XMLHttpMessage.search(/#readonly=([^#]*)/)	!= -1)	readonly = RegExp.$1
	if( XMLHttpMessage.search(/#fdate=([^#]*)/) 		!= -1)	fdate = RegExp.$1;
	if( XMLHttpMessage.search(/#exist=([^#]*)/) 		!= -1)	exist = RegExp.$1;
	if( XMLHttpMessage.search(/#deleted=([^#]*)/) 	!= -1)	deleted = RegExp.$1;
	if( XMLHttpMessage.search(/#renamed=([^#]*)/) 	!= -1)	renamed = RegExp.$1;

	var fname_short = fname.replace(/^.*?([^\/]+)$/,'$1');

	//alert('action=' + action + ' message=' + message);

	switch(message)
	{
/********** case *************/
		case 'XMLphotoalbum':
			if(action == 'change') alert('Het album "' +  par2 + '" is gewijzigd.');
			else alert('Het album "' +  par2 + '" is aangemaakt.'); //add
			be_patient(0);
			return;
		case 'XMLFileInfoRequest':
			switch(action)
			{
				case 'open':
					if(exist=="no"){
						alert('Het document: /' + fname + '\nis niet aangetroffen op de server!');
						be_patient(0);
					}	else if(readonly=='yes' && !confirm('Het document: /' + fname + '\nis beveiligd tegen overschrijven (read only).\nToch openen?'))
						be_patient(0);
					else {
						var this_time = new Date().getTime();
						location.replace(ScriptName + "?domain=" + Domain + "&todo=Edit&path=" + inpath + "&FileName=" + fname + "&dfdir=" + default_file_dir + "&imgdir=" + default_img_dir + "&mediadir=" + default_media_dir+ "&interndir=" + default_intern_page_dir + "&time=" + this_time + "&cb_fcolor=" + cb_fcolor.replace(/^#+/,'') + "&cb_bcolor=" + cb_bcolor.replace(/^#+/,''));
					}
					break;
				case 'save':
				case 'save_as':
				case 'save_new':
				case 'save_exit':
					if(action != 'save_as' && exist=="no" && !confirm('Het document: /' + fname + '\nis door iemand anders verwijderd van de server. \nToch opslaan?'))
								be_patient(0);
					else if(readonly=='yes' && exist == 'yes'){
							 alert('Het document: /' + fname + '\nis beveiligd tegen overschrijven (read-only).\nBewaar het document onder een andere naam.');
								be_patient(0);}
					else if(fdate && document.Form1.mtime && parseInt(document.Form1.mtime.value) < parseInt(fdate) &&
							 !confirm('Het document: /' + fname + '\nis ondertussen door iemand anders gewijzigd!\nWeet je zeker dat je het bestand wilt overschrijven?\n\nTip: Klik op Annuleren en bewaar het document onder een nieuwe of andere naam!'))
								be_patient(0);
					else 	save();
					break;
				default: {alert('Onbekende fout!\nAction: ' + action + '\nXMLHttpMessage: ' + XMLHttpMessage); be_patient(0);}
			}
			break;
/********** case *************/
		case 'XMLCreateMapImg':
		case 'XMLCreateMap':
			if(exist == 'yes') {
				alert(par2 + ' bestaat al.');
				be_patient(0);
				if(message == 'XMLCreateMap') save_dialog(par3);
				if(message == 'XMLCreateMapImg') image_insert("","skip");
			}
			else {
				alert(par2 + ' is aangemaakt.');
				if(par1) eval(par1); //refresh_dirs(...);
			}
			break;
/********** case *************/	 // par2: document || image || media object
		case 'XMLDeleteFile':
		case 'XMLDeleteMap':
		case 'XMLDeleteMapImg':
			if(deleted != 'yes') {
				alert(par2 + ' kan om onbekende reden niet worden verwijdered. \nNeem eventueel contact op met de systeembeheerder.');
				be_patient(0);
				if(message == 'XMLDeleteMap') save_dialog(par3);
				if(message == 'XMLDeleteMapImg') image_insert("","skip");
			}
			else {
				if(par1) eval(par1); //refresh_dirs(...);
				alert(par2 + ' ' + fname_short + ' is verplaatst naar de prullenbak!\nEn zal over 14 dagen definitief worden verwijderd.');
			}
			break;
/********** case *************/
		case 'XMLRenameFile':
				if(readonly=='yes') alert('De bestandsnaam: ' + fname_short + '\nis beveiligd tegen overschrijven (read only)\nen kan daarom niet hernoemd worden.');
				else if(renamed == 'no') alert('De bestandsnaam ' + fname_short + ' kan niet hernoemd worden.\nMisschien is de naam al in gebruik?');
				else alert(par2 + ': ' + fname_short + '\nis gewijzigd in: ' + new_name.replace(/^.*?([^\/]+)$/,'$1'));
				if(par1) eval(par1); //refresh_dirs(...);
				break;
/********** case *************/
		default:
			if(message.search(/^XML.*(DirInfoRequest|BookmarkRequest)$/) != -1){
				if(XMLHttpMessage.search(/\s*((htmldirs|imgdirs|mediadirs|page_bookmarks)\[\d\][\s\S]*$)/) != -1) {
					eval(RegExp.$1);
				}
				be_patient(0);
				if(action == 'refresh' && par1) eval(par1);
			} else {alert('Onbekende fout!\nXMLHttpMessage: ' + XMLHttpMessage + '\nMessage: ' + message); be_patient(0);}
	}  //end switch(message)
}

/*****************************************/
function save()
{
//	if(document.Form1.mtime &&
//	   parseInt(document.Form1.mtime.value) < parseInt(XMLHttpMessage))
//	 {
//		if(!confirm("Het document " + inFileName + " is ondertussen door iemand anders gewijzigd!\nWeet je zeker dat je het bestand wilt overschrijven?\n\nTip: Klik op Annuleren en bewaar het document onder een nieuwe of andere naam!\n"))
//			{	be_patient(0); return; }
//	}


	req.abort();

	if (EditMode == "TEXT") { ed.body.innerHTML = ed.body.innerText; EditMode = "HTML";}

	if(!check_dada_fields()) {be_patient(0); return;}
	remove_anchors();
	add_target_blank();
	hide_items_check();
	check_main_menu('saving');
	clean_source('save');
	active_script_code_modify('save');

	var el_player = ed.getElementById("player_image_rotator");
	if(el_player) el_player.innerHTML='';

	var doc_type =	ed.all[0].text;

	if(restricted_html) restricted_html_conversion('clean');
	bookmarks_relative(); //do not make changes after this, or bookmarks will not be relative anymore!

	SavedHtml = ed.documentElement.outerHTML;

	if(div_save) document.Form1.EditorHTML.value = div_save.outerHTML;
	else document.Form1.EditorHTML.value = SavedHtml;

	if(check_frames_menu) document.Form1.EditorHTML.value = document.Form1.EditorHTML.value.replace(/check_frames\('menu\d+','sub\d+'/i,"check_frames('menu" + check_frames_menu + "','sub" + check_frames_sub + "'");

	//convert special characters to HTML (ASCII 128 (euro), 192-255 ==> &#nummer; )
	document.Form1.EditorHTML.value = document.Form1.EditorHTML.value.replace(/([\‘\’\“\”\—\–\xC0-\xFF€])/g,
											function (mychar){
												if (mychar=='€') return '&euro;';
												if (mychar=='&') return '&';
												if (mychar=='–' || mychar=='—') return '-';
												if (mychar=='‘' || mychar=='’') return '\'';
												if (mychar=='“' || mychar=='“') return '"';
												else return '\&\#' + mychar.charCodeAt(0).toString(10).toUpperCase() + ';';
											});

	//alert(document.Form1.EditorHTML.value);

	document.Form1.doctype.value=doc_type ? doc_type : '';
	document.Form1.todo.value=action_file;
	document.Form1.dfdir.value=default_file_dir;
	document.Form1.imgdir.value=default_img_dir;
	document.Form1.mediadir.value=default_media_dir;
	document.Form1.interndir.value=default_intern_page_dir;
	document.Form1.cb_fcolor.value=cb_fcolor.replace(/^#+/,'');
	document.Form1.cb_bcolor.value=cb_bcolor.replace(/^#+/,'');
	document.Form1.tidy.value=TidyActive?1:0;

	document.Form1.submit();
}


/*****************************************/
function be_patient(mode,bericht)
{
	if(mode==1){
		toolbar.style.display="none";
		bepatient.style.display="inline";
		message.innerHTML= bericht? bericht : '&nbsp;&nbsp;Even geduld a.u.b.&nbsp;&nbsp;';
	}else {
		toolbar.style.display="inline";
		bepatient.style.display="none";
	}
}

/*****************************************/
function clean_source(todo)
{

	font_beautifier('remove');

	//remove editborder from <TD>:
	var el_td = ed.all.tags("TD");
	for(i=0;i<el_td.length;i++)
		el_td[i].className = el_td[i].className.replace(/(\s*editborder|editborder\s*)/,'');

	//remove id=%#####%, , used for internal stuff...
	var myobj = ed.getElementById('%#####%');
	if(myobj) myobj.removeNode(false);

  //remove strike tags, used for internal stuff...
	var coll_strike = ed.all.tags("STRIKE");
	for(i=0;i<coll_strike.length;i++)
		if(coll_strike[i].id == '#####') coll_strike[i].removeNode(false);

	//remove <span class=skype...>
	var coll_span = ed.all.tags("SPAN");
	for(i=coll_span.length-1; i>=0; i--){
		if(coll_span[i].className.search(/^skype/i) != -1)
			if(coll_span[i].className.search(/^skype_pnh_text_span/i) != -1) coll_span[i].outerHTML = coll_span[i].innerHTML;
			else coll_span[i].removeNode(false);
	}

	//remove empty span tags
	var coll_span = ed.all.tags("SPAN");
	for(i=coll_span.length-1; i>=0; i--)
		if(coll_span[i].innerText.search(/^\s*$/) != -1)
			if(coll_span[i].innerHTML.search(/^\s*$/) != -1)
				coll_span[i].removeNode(false);

	//Images
	var el_img = ed.all.tags("IMG");
	for(i=el_img.length-1; i>=0; i--){
		//remove timestamp
		el_img[i].src = el_img[i].src.replace(/(\?\d+)+$/,'');
		//remove image
		if(el_img[i].className.search(/(edit_please_remove_me|template_insert)/i) != -1) {
			el_img[i].removeNode(false);
			continue;
		}
		//correct horizontal line:
		if(el_img[i].className == 'edit_hor_line') {
			el_img[i].style.width = '';
			el_img[i].outerHTML = el_img[i].outerHTML.replace(/<IMG/i,'<IMG WIDTH="100%"');
			if(el_img[i].parentElement.innerHTML.search(/(&nbsp;)+ (<IMG[^>]+class="?edit_hor_line)/i) != -1)
				el_img[i].parentElement.innerHTML = el_img[i].parentElement.innerHTML.replace(/(&nbsp;)+ (<IMG[^>]+class="?edit_hor_line)/gi,' $2');
		}	else {
			//add/correct width/height attributes:
			if(el_img[i].style.width) el_img[i].width = el_img[i].style.width.replace(/^(\d+).*?$/,'$1');
			else {
				el_img[i].width = el_img[i].width;
				el_img[i].style.width = el_img[i].width;
			}
			if(el_img[i].style.height) el_img[i].height = el_img[i].style.height.replace(/^(\d+).*?$/,'$1');
			else {
				el_img[i].height = el_img[i].height;
				el_img[i].style.height = el_img[i].height;
			}
		}
		//copy alt attribute to title attribute:
		if(el_img[i].alt) el_img[i].title = el_img[i].alt;
	}

	//remove empty strong tags
	var coll_strong = ed.all.tags("STRONG");
	for(i=coll_strong.length-1; i>=0; i--)
		if(coll_strong[i].innerText.search(/^\s*$/) != -1)
			coll_strong[i].removeNode(false);

	//remove P.dir = left to right
	var coll_p = ed.all.tags("P");
	for(i=coll_p.length-1;i>=0;i--)
		if(coll_p[i].dir == 'ltr') coll_p[i].removeAttribute('dir');

	//remove INPUT.title = ...zonealarm...
	var coll_input = ed.all.tags("INPUT");
	for(i=0;i<coll_input.length;i++)
		if(coll_input[i].title.search(/(ZoneLabs|ZoneAlarm|Google)/i) != -1) coll_input[i].removeAttribute('title');

	//remove empty meta tags
	var col_meta = ed.all.tags('META');
	for(i=col_meta.length-1; i>=0; i--){
		if(!col_meta[i].content) col_meta[i].removeNode(false);
	}

	//youtube embed video's
	correct_youtube_embed(false);

	var coll_div = ed.all.tags("DIV");
	for(i=coll_div.length-1; i>=0; i--){
		if(coll_div[i].className.search(editshowme) != -1) coll_div[i].style.display='none';

		//remove empty div tags under certain conditions...
		if(!coll_div[i].innerHTML && !coll_div[i].innerText){
			var parent_el = coll_div[i].parentElement;
			if(parent_el.tagName.search(/^(TD|BODY)$/) == -1 &&
			   parent_el.className.search(editblock) == -1 &&
				 coll_div[i].className.search(editblock) == -1)
				 	coll_div[i].removeNode(false);
		}
	}

	var el_pdiv  = ed.getElementById("edit_mark_block_copied_to");
	if(el_pdiv) el_pdiv.removeAttribute('id');

}


/*****************************************/
function correct_youtube_embed(mode)
{
	var el_iframe = ed.all.tags("IFRAME");
	for(i=0;i<el_iframe.length;i++) //correct youtube embed video's
		if(el_iframe[i].src.search(/www\.youtube\.com\/embed\//i) != -1)
			if(mode){
				el_iframe[i].allowTransparency = true;
				el_iframe[i].setAttribute('scrolling','no');
				el_iframe[i].style.paddingTop = '8px';
				el_iframe[i].style.backgroundColor = '#888888';
			} else {
				el_iframe[i].removeAttribute('style')
				el_iframe[i].removeAttribute('allowTransparency');
				el_iframe[i].removeAttribute('scrolling');
			}
}


/*****************************************/
function active_script_code_modify(mode)
{
  //modify google widgets
	var coll_table = ed.all.tags("TABLE");
	for(i=0;i<coll_table.length;i++){
		if(coll_table[i].className.search(/edit_active_script_code/i) != -1){
			var script_code = coll_table[i].rows(0).cells(0).innerHTML;
			if(script_code.search(/(<\!\-\- start_of_script_code \-\->[\s\S]+<\!\-\- end_of_script_code \-\->)/i) != -1){

				if(mode == 'save'){
					var w = coll_table[i].rows(0).cells(0).style.width;
					var h = coll_table[i].rows(0).cells(0).style.height;

					coll_table[i].rows(0).cells(0).innerHTML = '<DIV class=editnoblock><span style="font-size:1px;">' + edit_active_script_code + '</span>' + RegExp.$1 + '</DIV>';

					// Keep width and height if present...
					coll_table[i].rows(0).cells(0).removeAttribute('style');
					if(w && h) {
						coll_table[i].rows(0).cells(0).style.width = w;
						coll_table[i].rows(0).cells(0).style.height = h;
					}
				}

				if(mode == 'start'){
					coll_table[i].rows(0).cells(0).style.backgroundColor = '#E5ECF9';
					coll_table[i].rows(0).cells(0).innerHTML = '<DIV class=editnoblock><span style="font-size:12px; color:red; font-style:italic;">' + cannot_show_script_code + '</span>' + RegExp.$1 + '</DIV>';
				}

			}
		}
	}
}

/*****************************************/
//Usage: <img  onclick="parent.remove_object(this.parentElement,\'deze agenda\');" style="position:absolute;">
function remove_object(obj,obj_name)
{
	if(confirm('Wil je ' + obj_name + ' verwijderen?'))
		obj.outerHTML = '';
}


/*****************************************/
function active_script_code_clicked(table_obj)
{
 //alert('Het is niet mogelijk om de tekst hier te wijzigen.');
 var CurrentTextRange = ed.selection.createRange();
	move_cursor_to_object(CurrentTextRange,table_obj);
 	edit.event.returnValue=false;
}

/*****************************************/
function check_meta_tags()
{
	var col_meta = ed.all.tags('META');

	for(j=0;j<meta_names.length;j++){
		for(var i=col_meta.length-1; i>=0;i--)
			if(meta_names[j] == col_meta[i].name.toLowerCase()) break;
		if(i<0) create_head_tag("META",meta_names[j],'');
	}

	col_meta = ed.all.tags('META');
	for(i=0;i<col_meta.length;i++)
		if(col_meta[i].name.toLowerCase() == 'generator') col_meta[i].content = Generator;
}

/*****************************************/
function create_head_tag(tag,name,content)
{
	global_obj = ed.createElement(tag);
	if(name) global_obj.setAttribute('NAME',name);
	if(name) global_obj.setAttribute('name',name);
	if(content) global_obj.setAttribute('content',content);
	return ed.all.tags('HEAD')[0].insertAdjacentElement('afterBegin',global_obj);
}

/*****************************************/
function bookmarks_relative()
{
	var el_a = ed.all.tags("A");

	var str = FilePath;
	str = str.replace(/([^\d\w])/g,'\\$1'); 			//backslash all non-word characters!
	var re_rel = new RegExp("\^" + str + "(\\.copy\\.html)?(\\?(time=)?\\d+)?#","i");

	for(i=0;i<el_a.length;i++){
		if(el_a[i].href.search(re_rel) != -1) //make link to bookmarks relative
		el_a[i].href = '#' + RegExp.rightContext;
		else if(!el_a[i].href && el_a[i].name && el_a[i].className.search(/bookmark/) == -1)
			el_a[i].className +=  ' bookmark';
	}
}

/*****************************************/
function remove_anchors()
{
	var a_found = new Array;
	var removeme = new Array;
	var r=0;
	var names='';

	read_bookmarks();
	var str = FilePath;
	str = str.replace(/([^\d\w])/g,'\\$1'); 			//backslash all non-word characters!
	var re_rel = new RegExp("\^(?:" + str + "(?:\\.copy\\.html\\?time=\\d+)?)?#(\\w+)$","i");

	for(i=0;i<el_a.length;i++){
		var myhref =  el_a[i].href.replace(/%20/g,' ');
		if(myhref.search(re_rel) == -1) continue;

		skip=false;
		for(j=0;j<a_names.length;j++)
			if(myhref.replace(re_rel,RegExp.$1) == a_names[j].name)
				{skip=true; a_found.push(a_names[j].name); break;}
		if(!skip && el_a[i].isContentEditable){
			 removeme[r++] = el_a[i];
			 names += '\n\t=> ' + RegExp.lastParen;
		}
	}

	if(removeme.length && confirm('Wil je onderstaande hyperlink(s) zonder bookmark verwijderen?\n' + names + '\n\nOK=verwijderen, Annuleren=laten staan'))
		for(i=0;i<removeme.length;i++) removeme[i].removeNode(false);

	removeme = new Array; r=0; names='';
	for(j=0;j<a_names.length;j++){
		skip = false;
		for(i=0;i<a_found.length;i++) if(a_names[j].name ==  a_found[i]){skip=true; break;}
		if(!skip && a_names[j].isContentEditable) {
				removeme[r++] = a_names[j];
				names += '\n\t=> ' + a_names[j].name;
		}
	}

	if(removeme.length && confirm('Wil je onderstaande bookmark(s) zonder hyperlink verwijderen?\n' + names + '\n\nOK=verwijderen, Annuleren=laten staan'))
		for(i=0;i<removeme.length;i++) removeme[i].removeNode(false);

	el_img = ed.all.tags("IMG");
	var remove = new Array;

	for(i=0;i<el_img.length;i++)
		if(el_img[i].src.search(bmgif_search) != -1) remove.push(el_img[i]);
//alert(bmgif_search + '\n' + remove.length);
	for(i=0;i<remove.length;i++)
		remove[i].removeNode();
}

/*****************************************/
function add_target_blank()
{
	//add target=_blank if text = www.xx or http://xx
	var el_a = ed.all.tags("A");
	for(i=0;i<el_a.length;i++){
		var www = el_a[i].innerText.match(/www\.[^\s]{2,}$|http:\/\/[^\s]{2,}$/i);
		if(!el_a[i].target && !el_a[i].name && el_a[i].href.search(/#[^\/]*$/) == -1)
			if(el_a[i].href.search(www) != -1) el_a[i].target="_blank";
	}
}

/*****************************************/
function hide_item()
{
	var hide_el = get_parent(/^(LI|P|DIV)$/i);

		if(hide_el && hide_el.isContentEditable && hide_el.style.visibility == "hidden" ) {
			re = new RegExp(hide_string,"g");
			hide_el.innerText = hide_el.innerText.replace(re,"");
			hide_el.style.visibility = "visible";
			hide_el.style.color = "";
		}
		else if(hide_el && hide_el.isContentEditable && hide_el.tagName == "LI"){
			hide_el.innerText = hide_string + hide_el.innerText;
			hide_el.style.visibility = "hidden";
			hide_el.style.color = "#FF8888";
		} else alert("'Verberg Item' is hier niet van toepassing...");
		hide_items_check();
}

/*****************************************/
function hide_items_check()
{
	re = new RegExp(hide_string,"g");
	var el_p = ed.all.tags("P");
	for(i=0;i<el_p.length;i++)
		if(el_p[i].isContentEditable && el_p[i].style.visibility == "hidden")
			if(el_p[i].innerText.search(re) == -1) el_p[i].innerText = hide_string + el_p[i].innerText;
}



/*****************************************/
function clicked(){
	selected_img = selected_object = obj_float = selected_input = selected_absolute = 0;
	var obj=edit.event.srcElement;

	if(Administrator && EditMode == "HTML") {
		show_tags();
		edit.event.returnValue=false;
		return;
	}

	if(obj.className.search(/editnoclick/) != -1) {
		bodyfocus(); //put focus somewhere else!
		return;
	}

	do{
		if(obj.tagName.search(/^A$/i)!= -1) break;
		obj = obj.parentElement;  //get next parent element
	} while(obj);

	//if(obj && !obj.isContentEditable && obj.tagName == 'A' && obj.href && obj.href.search(/(^javascript|[^\/]*#\w+$)/i) == -1 ){
	if(obj && !obj.isContentEditable && obj.tagName == 'A' && obj.href && obj.href.search(/(^javascript|^#\w+$)/i) == -1 ){
		edit.event.returnValue=false;
		if(obj.href.search(/#$/) == -1 && Mode == "off" ) //do not open for: history.back();
			new_win = window.open(obj.href,"","width=500,height=400,scrollbars=1,toolbar=1,resizable=1,titlebar=1,personalbar=1,menubar=1,status=1,location=0");
		else alert('Deze link kan binnen de editor niet geopend worden!');
	}
}


/*****************************************/
function page_info()
{
	arg = new Array(ed);
	ReturnValue = showModalDialog(EditDir + "/meta.html",arg,"dialogWidth: 35; dialogHeight:19; dialogPosition:center; resizable:yes; help:no; scroll:no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action=='cancel') return;
}


/*****************************************/
function link()
{
	add_target_blank();
	var TextRange=CurrentTextRange;

	if (el_a=get_parent(/^A$/i)) {
		TextRange.moveToElementText(el_a); //extend text selection to parent anchor tag
		TextRange.select();
	}

	if(!el_a){
		if(selected_img) {TextRange.moveToElementText(selected_img);TextRange.select();}
		else if(obj_float) {TextRange.moveToElementText(obj_float);TextRange.select();}
		//else if(selected_object) {TextRange.moveToElementText(selected_object);TextRange.select();}
	}

	var el_edit = search_class(editblock,TextRange);

	if( !el_edit || el_edit.getAttribute('className').search(noeditlink) != -1)
		{alert('Wijzigen of invoegen link is hier niet toegestaan...'); return; }

	if((TextRange.text == "" &&
			TextRange.htmlText.search(/<img(.|\s)*>/i) == -1) &&
		 !selected_img && !obj_float) {alert('Selecteer eerst tekst of een plaatje voor de link!'); return; }
	if (el_a && el_a.name) {alert('Link aanbrengen of wijzigen niet mogelijk:\ner staat hier al een bookmark!'); return;}


	var bookmarks = new Array;
	read_bookmarks();
	for(i=0;i<a_names.length;i++)
		bookmarks.push(a_names[i].name);

	htmldirs[0]=ed;
	//htmldirs[1]=document_link_obj;
	htmldirs[2]=DomainHttp;
	htmldirs[3]=inFileName;
	htmldirs[4]=bookmarks;
	htmldirs[5]=MasterDomainInpath;
	htmldirs[6]=mediadirs[1];
	htmldirs[7]=default_media_dir;
	htmldirs[8]=default_intern_page_dir;
	htmldirs[9]=page_bookmarks;
	htmldirs[10]=PostQuestion;
	htmldirs[11]=inpath;
	htmldirs[12]=selected_img;

	bookmarks_relative();
	ReturnValue = showModalDialog(EditDir + "/link.html",htmldirs,"dialogWidth: 25; dialogHeight: 12; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action != "cancel") {

		default_media_dir = ReturnValue[7];
		default_intern_page_dir = ReturnValue[8];

		var menu = search_id('main_menu_v\\d+',CurrentTextRange.parentElement());
		if(menu) check_specific_main_menu(menu);

		selected_img = obj_float = 0;
		trange_select(TextRange,0);
	}

}

/*****************************************/
function menu_dialog()
{
	if(search_id('(main|sub)_menu_v\\d+',CurrentParent) )
		table_dialog();
	else alert("Plaats de cursor eerst in een menu.");
}


/*****************************************/
function check_main_menu(saving)
{
	//reload main menu objects, loop through menus:
	var i=0;
	do{
		var main_menu = ed.getElementById('main_menu_v' + i);
		if(main_menu)
			if(saving){
				var fold_obj = ed.getElementById('fold_' + main_menu.id);
				if(fold_obj) fold_obj.removeNode(true);
			} else {
				menubutton.style.display="inline";
				check_specific_main_menu(main_menu);
			}
	} while(i++<=10);
}

/*****************************************/
function check_specific_main_menu(main_menu)
{

	var col_comment = main_menu.getElementsByTagName("!");

	for(var m=0;m<col_comment.length;m++){
		if(col_comment[m].text.search(/default_sub_item[\s\n\r]+([\s\S]*?)(-->)?$/) != -1)
			sub_menu_prefix = RegExp.$1;
		if(col_comment[m].text.search(/default_main_menu[\s\n\r]+([\s\S]*?)(-->)?$/) != -1)
			main_menu_prefix = RegExp.$1;
	}

	switch(main_menu.id)
	{
		case 'main_menu_v1':
		case 'main_menu_v3':

			for(i=0;i<main_menu.rows.length;i++){

				var td_el = main_menu.rows[i].cells[0];

				td_el.className = 'editborder main_nhl';

				if(main_menu.id == 'main_menu_v1') {
					if(td_el.innerHTML == empty_cell && main_menu_prefix)
						td_el.innerHTML = main_menu_prefix;
				}

				if(main_menu.id == 'main_menu_v3') {
					if(td_el.innerHTML == empty_cell && main_menu_prefix)
						td_el.innerHTML = main_menu_prefix;
				  td_el.getElementsByTagName("DIV")[0].className = 'editblock edit_shift_enter main_nhl';
				  td_el.getElementsByTagName("DIV")[0].contentEditable=true;
				}

				var sub_table = td_el.getElementsByTagName("TABLE")[0];

				if(sub_table) {

					sub_table.style.borderCollapse='';

					if(!sub_menu_prefix) sub_menu_prefix = sub_table.rows[0].cells[0].innerHTML;

					for(j=0;j<sub_table.rows.length;j++){
						var td_sub = sub_table.rows[j].cells[0];

						if(td_sub.innerHTML == empty_cell) {
							td_sub.innerHTML = sub_menu_prefix;
						}

						if(main_menu.id == 'main_menu_v1') {
							sub_table.className = 'table_sub_menu';
							sub_table.rows[j].className = 'sub_nhl';
							sub_table.rows[j].cells[1].style.width='95%';
						}

						if(main_menu.id == 'main_menu_v3'){
							sub_table.className = 'sub_menu_v3';
							td_sub.className = 'sub_nhl';
							td_sub.getElementsByTagName("DIV")[0].className="editblock edit_shift_enter";
							td_sub.getElementsByTagName("DIV")[0].contentEditable=true;
						}

						var a_col = sub_table.rows[j].getElementsByTagName("A");
						for(k=0;k<a_col.length;k++)
							a_col[k].className = 'sub_nhl';
						}
				}

				var a_col = td_el.getElementsByTagName("A");
				for(var k=0;k<a_col.length;k++)
					if(!a_col[k].className) a_col[k].className = 'main_nhl';
			}

			if(main_menu.id == 'main_menu_v1') {
				var col_div = main_menu.getElementsByTagName("DIV");
				for(i=col_div.length-1;i>=0;i--)
					col_div[i].removeNode();
			}

			break;

		case 'main_menu_v2':

			if(!sub_menu_prefix) sub_menu_prefix = main_menu.rows[0].cells[0].innerHTML;

			for(i=0;i<main_menu.rows.length;i++){
				main_menu.rows[i].cells[0].className = 'editborder main_nhl';
				if(main_menu.rows[i].cells[0].innerHTML == empty_cell) main_menu.rows[i].cells[0].innerHTML = sub_menu_prefix;
			}

			var col_div = main_menu.getElementsByTagName("DIV");
			for(i=col_div.length-1;i>=0;i--)
				col_div[i].removeNode();

			break;


		case 'main_menu_v4':
			for(i=0;i<main_menu.rows[0].cells.length;i++){
				var td_el = main_menu.rows[0].cells[i];
				td_el.style.position = 'relative';

				if(td_el.innerHTML == empty_cell && main_menu_prefix) td_el.innerHTML = main_menu_prefix;
				td_el.getElementsByTagName("DIV")[0].contentEditable = true;

				var sub_table = td_el.getElementsByTagName("TABLE")[0];

				var fold = ed.getElementById('fold_main_menu_v4');
				if(fold) fold.style.display = 'inline';

				if(sub_table) {

					for(var j=0;j<sub_table.rows.length;j++){
						if(sub_table.rows[j].cells[0].innerHTML == empty_cell && sub_menu_prefix) sub_table.rows[j].cells[0].innerHTML = sub_menu_prefix;
						sub_table.rows[j].cells[0].getElementsByTagName("DIV")[0].contentEditable=true;
					}

					sub_table.style.position = 'absolute';
					if(td_el.offsetWidth) sub_table.style.width = td_el.offsetWidth;
					var div_el = sub_table.getElementsByTagName("DIV")[0];
					div_el.className = 'sub_nhl editblock noeditenter';
					div_el.contenteditable = true;
					sub_table.style.display = (fold && fold.innerHTML.search(/uitklappen/i) != -1) ? 'none' : 'inline';
				}
			}
			break;
	}
}

/*****************************************/
function fold_menu(obj,main_menu_id,mode)
{
	main_menu = ed.getElementById(main_menu_id);

	var collapsed = obj.innerHTML.search(/uitklappen/i) != -1 ? true : false;
	if(mode){
		if(mode == 'inklappen') collapsed = false;
		if(mode == 'uitklappen') collapsed = true;
	}

	switch(main_menu_id)
	{
		case 'main_menu_v4':
			var show = '';
			if(!collapsed) {
				obj.innerHTML = '<font size=1>menu uitklappen</font>';
				show = 'none';
			}
			else obj.innerHTML = '<font size=1>menu inklappen</font>';

			var i;
			for(i=0;i<main_menu.rows[0].cells.length;i++){
				var td_el = main_menu.rows[0].cells[i];
				var sub_table = td_el.getElementsByTagName("TABLE")[0];
				if(sub_table) sub_table.style.display = show;
			}
		break;
	}
}

/*****************************************/
function show_tags()
{
	get_scroll_pos();

	remove_tagborder();

	if(!ed.selection.createRange()) return;
	var str='';

	CurrentTextRange = ed.selection.createRange();
	if(CurrentTextRange.parentElement) CurrentTagParent = CurrentTextRange.parentElement();
	else return;

	myobj=CurrentTagParent;
	var ChildCol = myobj.children;
	if(myobj.className.search(/tagborder/) == -1 ) myobj.className =  myobj.className + ' ' + tagborder;

	do{
		var id = '"' + CurrentTagParent.uniqueID + '"';
		var tagname = CurrentTagParent.tagName;
		if(!CurrentTagParent.isContentEditable) tagname = '<b>' + tagname + '</b>';
		str = " <A href='#' onclick='tag_dialog(" + id + ",1);'>&lt;" + tagname + "</A><A href='#' onclick='tag_dialog(" + id + ",0);'>&gt;</A>&nbsp;" + str;
		if(CurrentTagParent.tagName.search(/^BODY$/i)!= -1)  break;
		CurrentTagParent = CurrentTagParent.parentElement;  //get next parent element
	} while(CurrentTagParent);

	str = 'Parents:&nbsp;' + str + '<br>Children: ';

	for(i=0;i<ChildCol.length;i++)
	{
		var tagname = ChildCol[i].tagName;
		if(!ChildCol[i].isContentEditable) tagname = '<b>' + tagname + '</b>';
		var id = '"' + ChildCol[i].uniqueID + '"';
		str = str + "&nbsp;<A href='#' onclick='tag_dialog(" + id + ",1);'>&lt;" + tagname + "</A><A href='#' onclick='tag_dialog(" + id + ",0);'>&gt;</A>&nbsp;";
	}

	tagsline.innerHTML = str;
	position1();
}


/*****************************************/
function tag_dialog(id,mode)
{

	get_scroll_pos();

	remove_tagborder();

	myobj = ed.getElementById(id);
	if(!select_object(myobj))
		if(!mode) tagsline.innerHTML ='Parents:';
	if(myobj.className.search(/tagborder/) == -1 ) myobj.className =  myobj.className + ' ' + tagborder;

	position1();

	if(mode){

		var clone_obj = myobj.cloneNode();
		parms = new Array(clone_obj,myobj.isContentEditable);
		remove_tagborder();

		ReturnValue = showModalDialog(EditDir + "/tags.html",parms,"dialogWidth: 30; dialogHeight: 11; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no;");
		var action = 'cancel';
		if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
		ed.focus();

		var newHTML = ReturnValue[1];
		var inoutside = ReturnValue[2];

		switch(action)
		{
			case 'cancel':
				return;
			case 'class':
				cleanup_childs(myobj);
				myobj.contentEditable=true;
				myobj.className = myobj.className + ' editblock';
				break;
				source();source();
				return;
			case 'div':
			case 'span':
				var my_el = ed.createElement(action);
				if(!myobj.isContentEditable) {
					my_el.className = 'editblock';
					my_el.contentEditable=true;
					cleanup_childs(myobj);
				}
				myobj.applyElement(my_el,inoutside);
				select_object(my_el);
				source();source();
				return;
			case 'remove':
				myobj.className = myobj.className.replace(/(\s*editblock|editblock\s*)/gi,'');
				myobj.contentEditable='inherit';
				break;
			case 'delete':
				myobj.removeNode();
				break;
			case 'modify':
				var str = myobj.outerHTML.replace(/^([\n\r\s]*<.*?>)(.*)/,'$2');
				if(myobj.tagName.search(/^(TD|TR|TABLE)$/) == -1) {
					myobj.removeNode();
					CurrentTextRange.pasteHTML(newHTML + str);
				} else alert('Cannot change object yet...');
				break;
			default: alert('feature not available yet');
			}
			show_tags();
	}
}

/*****************************************/
function cleanup_childs(myobj)
{
	var ChildCol = myobj.children; //remove contentEditable from myobj and its childs
	myobj.contentEditable='inherit';
	myobj.className = myobj.className.replace(/(\s*editblock|editblock\s*)/gi,'');

	for(i=0;i<ChildCol.length;i++){
		ChildCol[i].className = ChildCol[i].className.replace(/(\s*editblock|editblock\s*)/gi,'');
		ChildCol[i].contentEditable='inherit';
	}
}

/*****************************************/
function remove_tagborder()
{
	if(myobj) myobj.className = myobj.className.replace(/(\s?tagborder|tagborder\s?)/gi,'');
}

/*****************************************/
function show_format(obj,mode)
{
  var	MyTextRange = ed.selection.createRange();
  if(MyTextRange.text == undefined) return;

	var count = MyTextRange.text.search(/\S/);
	if(count>=0) MyTextRange.moveStart('character',count+1);
	MyTextRange.collapse(true);


	var MyParent=MyTextRange.parentElement();
	var col_options = obj.options;

	if(MyParent && col_options)
		switch(mode)
		{
			case 'fontSize':
				var font_size = MyParent.currentStyle.fontSize;
				if(font_size.search(/(\d+)px/) != -1)
					for(var i=0; i<col_options.length;i++)
						if(col_options[i].value == RegExp.$1) {
							yellow_fontSize = col_options[i];
							yellow_fontSize.style.backgroundColor = 'yellow';
							break;
						}
			break;
			case 'fontFamily':
				var font_name = MyParent.currentStyle.fontFamily;
				font_name = font_name.replace(/^\s*([^\,\W]+).*$/,'$1'); //yellow_fontFamily
				re_font_name = new RegExp(font_name,"i");

				for(var i=0; i<col_options.length;i++)
					if(col_options[i].value.search(re_font_name) != -1){
						yellow_fontFamily = col_options[i];
						yellow_fontFamily.style.backgroundColor = 'yellow';
						break;
					}
			break;
		}
}

/*****************************************/
function select_object(obj)
{
	if(!obj) obj = edit.event.srcElement;
	if(!CurrentTextRange) CurrentTextRange = ed.selection.createRange();
	if(CurrentTextRange && obj.tagName != '!'){
		if(CurrentTextRange.moveToElementText) {
			CurrentTextRange.moveToElementText(obj);
			CurrentTextRange.select();
		}
		else return 0;
	}
	return 1;
}

/*****************************************/
function move_cursor_to_object(Trange,obj)
{
 if(Trange.moveToElementText && obj && obj.parentElement){
	 Trange.moveToElementText(obj.parentElement);
	 Trange.collapse(false);
	 Trange.select();
	}
}

/*****************************************/
function high_light()
{
	var TextRange=CurrentTextRange;
	if(TextRange.text == "") {alert('Selecteer eerst te markeren tekst!'); return;}
	var sColor=callColorDlg('FFFF00');
	exec_command('BackColor', false, sColor);
	trange_select(TextRange,0)
}

/*****************************************/
function callColorDlg(sInitColor){
	if (sInitColor == null)
		var sColor = dlgHelper.ChooseColorDlg();
	else
		var sColor = dlgHelper.ChooseColorDlg(sInitColor);
	return convert_colorvalue(sColor);
}

/*****************************************/
function convert_colorvalue(sColor)
{
	if(sColor == undefined) return '';
	sColor = sColor.toString(16);
	if (sColor.length < 6) {
		var sTempString = "000000".substring(0,6-sColor.length);
		sColor = sTempString.concat(sColor);
	}
	return sColor;
}


/*****************************************/
function remove_format()
{
	ed.execCommand('RemoveFormat');
	var parent_el = get_parent(re_color);
	var block_el = get_parent(re_block);

	parent_el.innerText.search(/^\s*((?:[\n\r]|.)*?)\s*$/);

	if(CurrentTextRange.text==RegExp.lastParen) {
			parent_el.style.color="";
			parent_el.style.backgroundColor="";

			if(block_el){
				if(block_el.align && block_el.isContentEditable) block_el.align='';
				if(block_el.valign && block_el.isContentEditable) block_el.valign='';
				if(block_el.style.textAlign) block_el.style.textAlign='';
				if(block_el.style.verticalAlign) block_el.style.verticalAlign='';
			}

// remove format also from all children of block_el
			var coll = block_el.children;
			for(var i=0; i<coll.length; i++){
				if(coll[i].style.color) coll[i].style.color='';
				if(coll[i].style.backgroundColor) coll[i].style.backgroundColor='';
				if(coll[i].align && coll[i].isContentEditable) coll[i].align='';
				if(coll[i].valign && coll[i].isContentEditable) coll[i].valign='';
				if(coll[i].style.textAlign) coll[i].style.textAlign='';
				if(coll[i].style.verticalAlign) coll[i].style.verticalAlign='';
			}
	}
	ed.focus();
	trange_select(CurrentTextRange);
}



/*****************************************/
function block_format() {
	var Trange = CurrentTextRange;

	var parent_el = CurrentParent;
	do {
		tag = parent_el.tagName;
		if(!parent_el.isContentEditable) return;
		if(tag == "DIV" && parent_el.className.search(editblock) == -1 || tag == "P" || tag=="TD") break;
		parent_el = parent_el.parentElement;
	}while(parent_el) //get next parent element

		switch(tag){
			case 'DIV':
				if(restricted_html && (parent_el.all.tags("TABLE").length || parent_el.all.tags("HR").length)){
					alert('Bij een nieuwsbrief-document is een tabel of horizontale lijn niet toegstaan binnen een paragraaf.\nDit tekstblok kan daarom momenteel niet worden gewijzigd in een paragraaf.');
					break;
				}
				//mergeAttributes(parent_el); //resets undo buffer...so:
				parent_el.outerHTML.search(/^\s*<DIV([^>]*>)/i); //get attributes
				parent_el.outerHTML = '<P' + RegExp.lastParen + parent_el.innerHTML + '</P>';
			break;
			case 'P':
				parent_el.outerHTML.search(/^\s*<P([^>]*>)/i); //get attributes
				parent_el.outerHTML = '<DIV' + RegExp.lastParen + parent_el.innerHTML + '</DIV>';
				break;
			default:
				if(CurrentTextRange.text && Administrator)
							CurrentTextRange.pasteHTML('<div>' + CurrentTextRange.htmlText + '</div>');
		}
		trange_select(Trange,0);
}

/*****************************************/
function trange_select(TextRange,count)
{
		TextRange.move('character',count);
		TextRange.select();
}

/*****************************************/
function helpme() {
	//alert(ed.body.innerHTML); return;
	//edit.so.addVariable('file','test.xml'); edit.play_image_rotator(); return;
	window.open(EditDir + "/help/edit_help.html","","width=700,height=540,scrollbars=1,toolbar=0,directories=0,resizable=1,dependent=0,titlebar=0,personalbar=0,menubar=0,status=0,location=0");
}

/*****************************************/
function section()
{
	if(!templateHTML) {alert('Er is geen template in het document gevonden.\nDaarom is deze functie niet beschikbaar!'); return;}
	var sel = search_class(editsection);
	var remove_allowed = templateHTML.search(/class=[^>]*template_allow_removal[ \"\']/);
	var no_scroll = templateHTML.search(/class=[^>]*template_noscroll[ \"\']/);

//	if(sel) {
//		if(remove_allowed == -1){
//		alert('Plaats eerst de cursor in een rubriek!'); return;}
//	}
//	else
	{
		var parent = get_parent(/^(DIV|P|TD)$/);
		if(!parent || !parent.isContentEditable){
			alert('Plaats eerst de cursor in een rubriek of paragraaf!'); return;}
	}

	arg = new Array(ed,sec_saved,sel);
	ReturnValue = showModalDialog(EditDir + "/section.html",arg,"dialogWidth: 12; dialogHeight: 15; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action == "cancel") return;
	Value1 = ReturnValue[1];

	get_scroll_pos();

	if(!sel) sel = parent;

	switch(action)
	{
	 case "insert_section":
		if(Value1 == "above") {
			sel.insertAdjacentHTML("beforeBegin",templateHTML);

			if(no_scroll == -1) {
				sel.scrollIntoView(true);
				edit.scrollBy(0,-100);
			}
		}
		if(Value1 == "below") {
			sel.insertAdjacentHTML("afterEnd",templateHTML);

			if(no_scroll == -1) {
				sel.scrollIntoView(false);
				edit.scrollBy(0,100);
			}
		}
		break;
	 case "cut_section": parent_el = sel.parentElement;
		sec_saved = sel.outerHTML; sel.outerHTML="";
		var found = false;
		if(parent_el.hasChildNodes()){
			for(i=0;i<parent_el.childNodes.length;i++) if(parent_el.childNodes[i].className.search(editsection)  != -1) {found=true; break;}
		}
		if(!found && remove_allowed == -1) parent_el.insertAdjacentHTML("afterBegin",templateHTML);
		position1();
		break;
	 case "copy_section": sec_saved = sel.outerHTML;
		position1();
		break;
	 case "paste_section":
		if(Value1 == "above") if(sec_saved) {sel.insertAdjacentHTML("beforeBegin",sec_saved); sel.scrollIntoView(true);edit.scrollBy(0,-100);}
		if(Value1 == "below") if(sec_saved) {sel.insertAdjacentHTML("afterEnd",sec_saved); sel.scrollIntoView(false);edit.scrollBy(0,100);}
	if(!sec_saved) alert('Kopieer of knip eerst een rubriek om te kunnen plakken.');
		sec_saved=null;
		break;
	}
	ypos=0; edit_mode();
}

/*****************************************/
function bookmark()
{
	var TextRange=CurrentTextRange;
	TextRange.collapse();
	var el_edit = search_class(editblock,TextRange);
	oldmark="";

	if(selected_img) {
		TextRange.moveToElementText(selected_img);
		TextRange.select();
	}

	el = get_parent(/^A$/i,TextRange);
	if(el) if(el.name) oldmark=el.name; else {alert('Bookmark aanbrengen of wijzigen niet mogelijk:\ner staat hier al een link!'); return;}
	if(!el && ed.selection.createRange().text == "" && !selected_img) {alert('Selecteer eerst tekst voor de bookmark!'); return; }
	selected_img=0;
	if(!(el || el_edit.isContentEditable) || (el_edit && el_edit.className.search(noeditlink) != -1)) {alert('Bookmark aanbrengen of wijzigen is hier niet toegestaan!'); return;}
	arg = new Array(ed,oldmark,a_names);
	ReturnValue = showModalDialog(EditDir + "/bookmark.html",arg,"dialogWidth: 21; dialogHeight: 7; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];

	Value1 = ReturnValue[1];
	ed.focus();

	switch (action)
	{
		case "ok":
			ed.execCommand('CreateBookmark','',Value1);
			break;
		case "remove": if(!el.isContentEditable){alert('Verwijderen boormark is hiet niet toegestaan.\nWijzigen mag wel.'); bookmark(); return;}
			if(el.hasChildNodes()) {
				el_img = el.childNodes("IMG",0);
				if(el_img && el_img.src && el_img.src.search(bmgif_search) != -1) el_img.outerHTML=el_img.innerHTML;}
				ed.execCommand('UnBookmark'); //el.outerHTML=el.innerHTML;
			break;
	}
	read_bookmarks();
	if(action != "cancel") trange_select(TextRange,0);
}

/*****************************************/
function read_bookmarks()
{
	el_img = ed.all.tags("IMG");
	el_a = ed.all.tags("A");

	bm_img = ed.createElement("IMG");
	bm_img.src = bmgif;
	bm_img.style.border = 0;
//	bm_img.style.position = 'absolute';
//	bm_img.style.left = '10px';

	j=a_names.length=0;
	for(i=0;i<el_a.length;i++)
		if(el_a[i].name) {
			el_a[i].name=el_a[i].name.toLowerCase();
			a_names[j++]=el_a[i];
			if(el_a[i].className.search(editborder) == -1) el_a[i].className = "editborder " + el_a[i].className;
			if(el_a[i].hasChildNodes()) el=el_a[i].childNodes("IMG",0); else el=false;
			if(!el || !el.src || el.src.search(bmgif_search) == -1){
				bm_img.alt=el_a[i].name;
				el_a[i].insertAdjacentHTML('afterBegin',bm_img.outerHTML);
			} else if(el.src.search(bmgif_search) != -1) el.alt=el_a[i].name;
		}
	sort_mode=2; a_names.sort(sort_Abc);
}

/*****************************************/
function find_table_elements(parent_el) //(be sure td_el and tr_el are child elements of table_el!!)
{
	td_el=tr_el=table_el=action=undefined;
	var re=/^(TD|TR|TABLE)$/i

	do{
		if(parent_el.tagName.search(re)!= -1) {
				if(parent_el.tagName.search(/^TD$/) != -1) {td_el=parent_el; re=/^(TR|TABLE)$/i;}
				if(parent_el.tagName.search(/^TR$/) != -1) {tr_el=parent_el; re=/^TABLE$/i;}
				if(parent_el.tagName.search(/^TABLE$/) != -1) {table_el=parent_el; break;}
			}
			parent_el = parent_el.parentElement;  //get next parent element
	} while(parent_el)

	if(td_el) cell_get_attributes(td_el);

	TrangeStart = CurrentTextRange;
	TrangeEnd = TrangeStart.duplicate();

	TrangeStart.collapse(true);
	td_start = get_parent(/^TD$/i,TrangeStart);
	tr_start = get_parent(/^TR$/i,TrangeStart);

	TrangeEnd.collapse(false);
	td_end = get_parent(/^TD$/i,TrangeEnd);
	tr_end = get_parent(/^TR$/i,TrangeEnd);
}

/*****************************************/
function table_dialog(){
// find table elements (be sure td_el and tr_el are child elements of table_el!!)

	var parent_el = CurrentParent;
	find_table_elements(parent_el);

	var el = search_class(editblock);
	//if(!el || el.className.search(noeditenter) != -1 ) {alert("Tabel functies zijn hier niet toegestaan.\nPlaats de cursor eerst in een tabel."); return;}
	if(!el) {alert("Tabel functies zijn hier niet toegestaan.\nPlaats de cursor eerst in een tabel."); return;}

	if(tr_el && tr_el.cells.length>1) choice="merge"; else choice="";
	if(td_el && td_el.colSpan > 1) choice += 'split';
	if(!td_el || !tr_el) choice='no_col';
	if(!tr_el) choice='only_table';
	if(!tr_el && table_el && table_el.rows(tr_start.rowIndex) == tr_start && table_el.rows(tr_end.rowIndex) == tr_end) choice='only_rows';

	if(!table_el || table_el.className.search(noedittable) != -1 || !table_el.isContentEditable){
		choice = 'noedit_table';
		if(tr_el && tr_el.className.search(editsplit) != -1 && parent_el.tagName != "LI"){
			if(td_el && td_el.colSpan > 1) choice = 'noedit_table_split';
			if(!td_el || tr_el.cells.length>1) choice = 'noedit_table_merge';
		}
		var parent_el = CurrentParent;  //get parent element from text range
		if(!parent_el || !parent_el.isContentEditable) {alert("Tabel functies zijn hier niet toegestaan..."); return;}
	}

	if(table_el && table_el.id.search(/(main|sub)_menu_v\d+/i) != -1){
		choice = global_menu_id = table_el.id;
		var fold = ed.getElementById('fold_' + table_el.id);
		if(fold) fold_menu(fold,table_el.id,'uitklappen');
	} else
	if(table_el && table_el.className.search(/table_sub_menu/) != -1) {
		choice = 'table_sub_menu';
		var menu_obj = search_id('main_menu_v\\d+',table_el);
		if(menu_obj) global_menu_id = menu_obj.id;
	} else
		global_menu_id = '';

	get_scroll_pos();

	var Trange = ed.selection.createRange();
	var params = new Array(td_start,tr_start,td_el,table_el,choice,cb_fcolor,cb_bcolor);
	ReturnValue = showModalDialog(EditDir + "/table.html?t=1",params,"dialogWidth: 48; dialogHeight: 16; dialogTop: 100; resizable: yes; help: no;  scroll: no; ");
	ed.focus();

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];

	if(action == 'cancel') return;  //canceled...

	var block_parent = get_parent(re_block);
	var p2div=false;
	if(restricted_html && block_parent.tagName == "P" && (action == 'table_insert' || action == 'table_new') )
 		if(confirm('Bij een nieuwsbrief-document is het invoegen van een tabel niet toegstaan binnen een paragraaf. \nDe paragraaf wijzigen in een tekstblok?')){
 			p2div = block_parent.id = 'p_' + new Date().getTime();
 		} else return;

	eval(action + '(ReturnValue[1],ReturnValue[2],ReturnValue[3]);');

	if(p2div){
		var p_obj = ed.getElementById(p2div);
		if(p_obj){
			p_obj.removeAttribute('id');
			p_obj.outerHTML.search(/^\s*<P([^>]*>)/i); //get attributes
			p_obj.outerHTML = '<DIV' + RegExp.lastParen + p_obj.innerHTML + '</DIV>';
		}
	}

	if(global_menu_id) edit.window.setTimeout(final_menu_update,1);
	edit.window.setTimeout(position1,100);


	CurrentTextRange = ed.selection.createRange();

	if(CurrentTextRange) {
		CurrentTextRange.move('character',-1);
		CurrentTextRange.select();
	}
}

/*****************************************/
function final_menu_update()
{
	var menu_obj = 	ed.getElementById(global_menu_id);
	if(menu_obj) var menu = search_id('main_menu_v\\d+',menu_obj);
	if(menu) check_specific_main_menu(menu);
	global_menu_id = '';
}


/*****************************************/
function table_copy()
{
	tr_start = table_el.rows(0);
	tr_end = table_el.rows(table_el.rows.length-1);
	row_copy();
}

/*****************************************/
function row_copy()
{
	var max_col=0;
	for(c=0;c<tr_start.cells.length;c++) max_col += tr_start.cells(c).colSpan;

	var col_num,cell;
	var clip_text='';

	table_clipboard = table_el.cloneNode(true);
	for(i=table_el.rows.length-1; i>tr_end.rowIndex;i--)  table_clipboard.deleteRow(i);
	for(i=tr_start.rowIndex-1;i>=0;i--) table_clipboard.deleteRow(i);

	for(var r=tr_start.rowIndex;r<=tr_end.rowIndex;r++){
		var col_old=-1;

		for(var c=0;c<max_col;c++){
			col_num = col_get(r,c);
			if(col_num != col_old) {
				clip_text += table_el.rows(r).cells(col_num).innerText.replace(/[\n\r]/g,' ') + '\t'; //save text cells onto clipboard for external programs like Excel
			} 	else clip_text += '\t';
			col_old = col_num;
		}
		clip_text = clip_text.replace(/\t$/,'\n');
	}
	clipboardData.setData("Text",clip_text);
	clipboard_table_text = clip_text;
}

/*****************************************/
function table_insert()
{
	var Trange = ed.selection.createRange();
	var parentElement = get_parent(re_block,Trange);

	if(	!table_clipboard || !table_clipboard.outerHTML ||
			!clipboardData.getData("Text") ||
			 clipboardData.getData("Text").search(/\n/) == -1){
				alert('Er is geen tabel gevonden op het klembord.\nProbeer de tabel of de rijen opnieuw te kopieren.'); return;}

	//insert_block_code(CurrentTextRange,table_clipboard.outerHTML,parentElement);
	insert_HTMLcode(table_clipboard.outerHTML);

	//CurrentTextRange.pasteHTML(table_clipboard.outerHTML);
}


/*****************************************/
function table_paste(mode)
{
	if(!clipboardData.getData("Text") || clipboardData.getData("Text").search(/\n/) == -1)
		{alert('Er is geen tabel gevonden op het klembord.\nProbeer de tabel of de rijen opnieuw te kopieren.'); return;}

	//put table from clipboard into array
	var table = new Array();
	var internal_copy=0;
	var status_row_format=0;
	var status_col_format=0;
	var clipboard = clipboardData.getData("Text");
	var format_row = new Array;
	var format_column = new Array;
	var table_index =table_el.sourceIndex;


	if(mode=="replace") {tr_el=table_el.rows(0); td_el=tr_el.cells(0);}
	clone_table('go');
	 table_el = tmp_table;

	if(clipboard_table_text == clipboard) internal_copy=1; //table copied from internal table?
	table = clipboard.replace(/(\r)/mg,'').split("\n");
	if(!table[table.length-1]) table.pop();

	var hide=false;
	if(table[0].search(reg_hide) != -1) hide=true;

	var max_col_clipboard=0;
	var cont=false;
	for(i=0;i<table.length;i++){
		table[i]=(table[i].split("\t")); //split into array
		//check integrity
		if(table[i][0].search(reg_format) != -1) {
			status_row_format=1;
			if(table[i][0].search(reg_hide) != -1)  {table.splice(i,1); i--; continue;}
		}
		if(max_col_clipboard && table[i].length != max_col_clipboard && !cont)
			if(confirm('Het aantal kolommen is niet consistent!\nDe bewerking afbreken?\n(Ok=afbreken, Annuleren=doorgaan)')) return;
			else cont=true;
		if(table[i].length>max_col_clipboard) max_col_clipboard = table[i].length; //number of columns on clipboard
	}

	if(!internal_copy && table[0][0]=='<html>') status_row_format=status_col_format=1;

	for(i=0;i<table.length;i++){ //fill up empty cells
			for(j=table[i].length;j<max_col_clipboard;j++) table[i][j] = '';
			if(status_row_format)  format_row[i]=table[i].shift(); //strip off row format
		}

	if(status_col_format && hide) {
		for(i=table.length-1;i>=0;i--) //remove hided columns
				for(j=table[i].length-1; j>=0; j--)
					if(table[0][j].search(reg_hide) == 0) {
						table[i].splice(j,1);
						if(i==0) max_col_clipboard--;
					}
	}

	if(status_col_format) {
		format_column = table.shift();
		format_row.shift();
	}
	if(status_row_format) max_col_clipboard--;

	if(mode=="replace")
		if(!confirm("Weet je zeker dat je de hele tabel wilt vervangen?")) return;
		else {
			tr_el = table_el.rows(0);
			td_el = tr_el.cells(0);
		}


	var paste_text,text;
	var tr_num = tr_el.rowIndex;
	var td_num = 0;
	var expand_row=0;
	var expand_col=0;

	if(mode=='overwrite') td_num = cellindex_get();
	if(mode=="below") tr_num++;

	var max_col=0; // number of columns table_el in document
	for(c=td_num;c<tr_start.cells.length;c++) max_col += tr_start.cells(c).colSpan;

	var diff_col = max_col_clipboard - max_col;
	if(mode!='replace') { // expand columns?
		if(diff_col==1) if(confirm("Om de tabel op het klembord te kunnen invoegen, is 1 extra kolom nodig.\n1 extra kolom toevoegen? (ja=OK, nee=Annuleren)")) expand_col=1;
		if(diff_col>1)  if(confirm("Om de tabel op het klembord te kunnen invoegen, zijn " + diff_col + " extra kolommen nodig.\n" + diff_col + " extra kolommen toevoegen? (ja=OK, nee=Annuleren)")) expand_col=1;
	}

	var diff_row = table.length + tr_num - table_el.rows.length;
	if(mode=='overwrite') { // expand rows?
		if(diff_row==1) if(confirm("Om de tabel van het klembord te kunnen invoegen, is 1 extra rij nodig.\n1 extra rij toevoegen? (ja=OK, nee=Annuleren)")) expand_row=1;
		if(diff_row>1)  if(confirm("Om de tabel van het klembord te kunnen invoegen, zijn " + diff_row + " extra rijen nodig.\n" + diff_row + " extra rijen toevoegen? (ja=OK, nee=Annuleren)")) expand_row=1;
	}

	if(mode=="replace")
	{
		for(i=table_el.rows.length-1; i >= table.length; i--) table_el.deleteRow(i); //remove rows
		if(diff_col < 0){ // remove columns
			td_end=tr_el.cells(tr_el.cells.length-1);
			td_start = tr_el.cells(col_get(tr_el.rowIndex,max_col_clipboard));
			col_delete("noconfirm");
		}
		if(diff_row > 0) expand_row=1; //add rows
		if(diff_col>0) expand_col=1;//add columns
	}

	//insert columns/rows
	if(mode=="above") {row_insert("above",table.length,'not_clone'); expand_row=0;}
	if(mode=="below") {row_insert("below",table.length,'not_clone'); expand_row=0;}
	if(expand_row) {tr_el = table_el.rows(table_el.rows.length-1); row_insert("below",diff_row,'not_clone'); }
	if(expand_col) {td_el = tr_el.cells(tr_el.cells.length-1); col_insert("right",diff_col,empty_cell,'not_clone'); }


	//copy internal table table_clipboard
	if(internal_copy){
		for(r=tr_num;r<tr_num + table.length;r++){
			var tmp_tr = table_clipboard.rows(r-tr_num).cloneNode(true);
			row_copy_attributes(table_el.rows(r),table_clipboard.rows(r-tr_num));
			for(c=max_col_clipboard+td_num-1; c>=td_num; c--){
				col_num=col_get(r,c);
				var tmp = table_clipboard.rows(r-tr_num).cells(col_num-td_num).cloneNode(true);
				table_el.rows(r).cells(col_num).replaceNode(tmp);
			}
		}
		 ed.all(table_index).outerHTML = table_el.outerHTML;
		 return;
	}

	var contents;
	for(r=tr_num;r<tr_num + table.length;r++){  //scan rows
		col_old=-1; tr_el = table_el.rows(r);

		for(c=td_num;c<max_col_clipboard+td_num;c++){  //scan cells
			contents='';
			col_num=col_get(r,c);
			td_el = table_el.rows(r).cells(col_num);
			paste_text = table[r-tr_num][c-td_num];

			if(status_col_format) //format cell
				if(format_column[c-td_num].search(reg_format) != -1)
					td_el.className=  editborder + ' ' + RegExp.lastParen;
				else td_el.className=editborder; //clear existing class names!

			if(status_row_format) //format row
				if(format_row[r-tr_num].search(reg_format) != -1)
					td_el.className= editborder + ' ' + RegExp.lastParen;
				else td_el.className=editborder; //clear existing class names!

			if(col_num != col_old)  contents = paste_text; //replace cell content
			else contents += paste_text; //add content to merged cell
			col_old = col_num;

			if(!status_col_format) {
				contents=contents.replace(/</mg,'&lt;');
				contents=contents.replace(/>/mg,'&gt;');
			}

			//convert email addresses to href=mailto:...
			var count=0;
			while(paste_text.match(reg_email)) {
				paste_text = paste_text.replace(RegExp.$1,'');
				if(RegExp.$3 && status_col_format) contents = contents.replace(RegExp.$1,'<a href="mailto:' + RegExp.$2 + '">' + RegExp.$3 + '</a>');
				else contents = contents.replace(RegExp.$2,'<a href="mailto:' + RegExp.$2 + '">' + RegExp.$2 + '</a>');
				if(count++ > 10) break;
			}
			//convert urls to href=...
			count=0;

			while(paste_text.match(reg_www)) {
				paste_text = paste_text.replace(RegExp.$1,'');
				if(RegExp.$3 && status_col_format) contents = contents.replace(RegExp.$1,'<a target=_blank href="http://' + RegExp.$2 + '">' + RegExp.$3 + '</a>');
				else contents = contents.replace(RegExp.$2,'<a target=_blank href="http://' + RegExp.$2 + '">' + RegExp.$2 + '</a>');
				if(count++ > 10) break;
			}
			td_el.innerHTML=contents;
		}
	}
	ed.all(table_index).outerHTML = table_el.outerHTML;
}


/*****************************************/
function color_find(parent_el)
{
	if(!parent_el) parent_el = CurrentParent;  //get parent element from text range
	fcolor = bcolor = '';
	var recolor = /^(transparent|)$/i;

	do{
		if(!fcolor && parent_el.color && parent_el.color.search(recolor) == -1)
			fcolor = parent_el.color;
		if(!fcolor && parent_el.currentStyle.color && parent_el.currentStyle.color.search(recolor) == -1)
			fcolor = parent_el.currentStyle.color;
		if(!bcolor && parent_el.bgColor && parent_el.bgColor.search(recolor) == -1)
			bcolor = parent_el.bgColor;
		if(!bcolor && parent_el.currentStyle.backgroundColor && parent_el.currentStyle.backgroundColor.search(recolor) == -1)
			bcolor = parent_el.currentStyle.backgroundColor;
		parent_el = parent_el.parentElement;  //get next parent element
	} while(!(fcolor && bcolor) && parent_el)
}

/*****************************************/
function color_set(blockselect)
{
	var parent_el = get_parent(re_color);

//	if(blockselect && parent_el) {
//		//fcolor = parent_el.currentStyle.color; bcolor = parent_el.currentStyle.backgroundColor;
//		color_find(parent_el);
//	} else color_find();
	color_find();

	if(parent_el.tagName.search(/^(TR|TABLE)$/) != -1 && blockselect){alert("Gebruik de knop 'tabel' om de kleur te wijzigen van een rij of tabel.");
		table_dialog(); return;}
	var fwipe = bwipe = fbput =  false;
	if(parent_el && parent_el.isContentEditable)
	{
		fbput = true;
		if(blockselect=="block"){
			if(parent_el.style.color || parent_el.color) fwipe = true;
			if(parent_el.style.backgroundColor || parent_el.bgColor) bwipe = true;
		}else
		{
			if(!CurrentTextRange.text) fbput=false;
			if(CurrentTextRange.htmlText.search(/<FONT[^>]*\scolor[^>]*>/i) != -1) fwipe = true;
			if(CurrentTextRange.htmlText.search(/<FONT[^>]*background\-color[^>]*>/i) != -1) bwipe = true;
		}
	}


	var params = new Array(blockselect,fcolor,bcolor,fbput,fwipe,bwipe,cb_fcolor,cb_bcolor);
	ReturnValue = showModalDialog(EditDir + "/color.html",params,"dialogWidth: 32; dialogHeight: 15; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no;  scroll: no; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action=="cancel") return;

	if(blockselect=="block") parent_el=undo_table(parent_el);

	put_color(action,ReturnValue[1],ReturnValue[2],blockselect,parent_el);

	if(!blockselect) trange_select(CurrentTextRange); else {
		CurrentTextRange.collapse();
		trange_select(CurrentTextRange);
	}
}

/*****************************************/
function undo_table(parent_el)
{
		var parent_el_index = parent_el.sourceIndex;
		 if(parent_el.tagName.search(/^(TD|TR)$/i) != -1) var el = get_parent(/^TABLE$/i,CurrentTextRange);
		else var el = parent_el;
		get_scroll_pos();
		el.outerHTML = el.outerHTML;
		edit.window.setTimeout(position1,50);
		return ed.all(parent_el_index);
}

/*****************************************/
function colorclipboard_show()
{
	colorclipboard.selected=true;
	colorclipboard.style.color = cb_fcolor;
	colorclipboard.style.backgroundColor = cb_bcolor;
}

/*****************************************/
function put_color(action,style,cbfcolor,blockselect,parent_el)
{
	if(style == "style.color") var foreground=true; else var foreground=false;
	if(action.search(/\_both/i) != -1)
	{
		var action = RegExp.leftContext;
		put_color(action,"style.color","cb_fcolor",blockselect,parent_el);
		put_color(action,"style.backgroundColor","cb_bcolor",blockselect,parent_el);
	}
	else
		switch(action)
		{
			case "add":
				var color = callColorDlg(fcolor);
				if(!color) return;
				if(blockselect=="block"){
					eval('parent_el.' + style + '= "#" + color');
					eval(cbfcolor + '=parent_el.' + style);
				}else
					if(foreground) {
						ed.execCommand('ForeColor',false,color);
						eval(cbfcolor + '= color');}
					else {
						ed.execCommand('BackColor',false,color);
						eval(cbfcolor + '= color');}
				break;
			case "remove":
				if(blockselect=="block") eval('parent_el.' + style + '=""');
				if(!blockselect || blockselect == "text")
				{
					if(foreground) ed.execCommand('ForeColor',false,'');
					else ed.execCommand('BackColor',false,'');
				}
				break;
			case "copy":
					if(foreground) eval(cbfcolor + '= fcolor'); else eval(cbfcolor + '= bcolor');
			break;
			case "paste":
				if(blockselect=="block") eval('parent_el.' + style + '=' + cbfcolor);
				if(!blockselect || blockselect == "text")
					if(foreground) ed.execCommand('ForeColor',false,cb_fcolor);
					else ed.execCommand('BackColor',false,cb_bcolor);
				break;
		}
	colorclipboard_show();
}

/*****************************************/
function insert_background_picture(el)
{
	switch(el)
	{
		case "table": image_insert(table_el);
			break;
		case "cell": image_insert(td_start);
			break;
	}
}

/*****************************************/
function color_table(el,choice,fbcolor,run)
{
	if(!run) run = 0;

	var color='';

	switch(choice)
	{
		case "add":  color= callColorDlg(fcolor);
			break;
		case "remove_both": color_table(el,'remove','style.backgroundColor',1); run=2; fbcolor='style.color';
			break;
		case "clipboard_paste_both": color_table(el,'clipboard_paste','style.backgroundColor',1); run=2; fbcolor='style.color';
			break;
	}

	if(choice.search(/clipboard_paste/i) != -1)
		if(fbcolor.search(/backgroundColor/i) != -1) color = cb_bcolor;
		else color=cb_fcolor;

	if(color){ //change clipboard color
		color = color.replace(/\#/,'');
		if(fbcolor.search(/backgroundColor/i) != -1) cb_bcolor = color;
		else  cb_fcolor = color;
		colorclipboard_show();
	}

	if(run <= 1) clone_table(); //undo point

	switch (el)
	{
		case "cell":
			for(var i=td_start.cellIndex;i<=td_end.cellIndex;i++)
				eval('tr_el.cells(i).' + fbcolor + '= color');
			break;
		case "col":
			var ci=cellindex_get(); //get cellindex to insert, regardless colSpan
			for(var i=0;i<tmp_table.rows.length;i++) {
				j=col_get(i,ci); //get actual cellindex to insert
				if(tmp_table.rows(i).cells(j).colSpan <= 1) eval('tmp_table.rows(i).cells(j).' + fbcolor + '= color');
			}
			break;
		case "row":
			for(j=tr_start.rowIndex;j<=tr_end.rowIndex;j++){
				eval('tmp_table.rows(j).' + fbcolor + '= color');
				if(!color)
					for(var i=0;i<tmp_table.rows(j).cells.length;i++)
						eval('tmp_table.rows(j).cells(i).' + fbcolor + '= color');
			}
			break;
		case "table":
			eval('tmp_table.' + fbcolor + '= color');
			if(!color)
				for(var i=0;i<tmp_table.rows.length;i++){
					eval('tmp_table.rows(i).' + fbcolor + '= color');
					for(var j=0;j<tmp_table.rows(i).cells.length;j++)
						eval('tmp_table.rows(i).cells(j).' + fbcolor + '= color');
				}
			break;
	}

	if(!run || run==2) restore_table();
	//TrangeStart.select();
}

/*****************************************/
function color_copy(el,choice)
{
	switch(choice)
	{
		case "fground": var fbcolor=".style.color"; var clipboard = "cb_fcolor";
			break;
		case "bground": var fbcolor=".style.backgroundColor"; var clipboard = "cb_bcolor";
			break;
		case "both": color_copy(el,"fground"); color_copy(el,"bground"); return;
			break;
	}
	eval(clipboard + '=' + el + fbcolor);
	colorclipboard_show();
}

/*****************************************/
function color_init(el)
{
	var init_color = fcolor;
	if(!init_color) init_color=0xFFFFFF;
	return callColorDlg(init_color);
}

/*****************************************/
function color_show()
{
	for(var i=0;i<webcolors.length;i++)
		document.writeln('<OPTION style="background-color:' + webcolors[i] + '">' + webcolors[i]);
	for(var r=initcolors.length-1; r>=0; r--)
		for(var g=initcolors.length-1; g>=0; g--)
			for(var b=initcolors.length-1; b>=0; b--){
				color = initcolors[r] + initcolors[g] + initcolors[b];
				if(color.search(/(ffffff)/i) == -1) document.write('<OPTION style="background-color:#' + color + '">' + color);
			}
}

/*****************************************/
function color_select(object)
{
	if(CurrentTextRange.htmlText != undefined){
	cb_fcolor = object[object.selectedIndex].text.replace(/\#/,'');
	exec_command('ForeColor',false,cb_fcolor);
		CurrentTextRange.collapse();
		CurrentTextRange.select();
	}
	object.selectedIndex=0;
}

/*****************************************/
function menu_new_sub_table(id)
{
	switch(id){
		case 'main_menu_v3':
			var col_comment = table_el.getElementsByTagName("!");
			for(i=0;i<col_comment.length;i++)
				if(col_comment[i].text.search(/default_sub_menu[\s\n\r]+([\s\S]*?)(-->)?$/) != -1)
				td_el.innerHTML = td_el.innerHTML + RegExp.$1;
		break;
		case 'main_menu_v4':
			clone_table();
			var col_comment = table_el.getElementsByTagName("!");
			for(i=0;i<col_comment.length;i++)
				if(col_comment[i].text.search(/default_sub_menu[\s\n\r]+([\s\S]*?)(-->)?$/) != -1)
				td_el.innerHTML = td_el.innerHTML + RegExp.$1;
				restore_table();
//				var fold = ed.getElementById('fold_main_menu_v4');
//				if(fold) fold_menu(fold,id,'uitklappen');
		break;
	}
}

/*****************************************/
function table_new(arg){
 table_new_change(arg);
}

/*****************************************/
function table_new_change(arg){

	//var table_specs = new Array('mode','rows','cols','border','height','width','spacing','cel_border_color');
	var i=0;
	var mode 	= arg[i++];
	var rows 	= arg[i++];
	var cols 	= arg[i++];
	var cel_border	= arg[i++];
	var cel_border_color 	= arg[i++];
	var height = arg[i++];
	var height_unit	= arg[i++];
	var width = arg[i++];
	var width_unit	= arg[i++];
	var spacing = arg[i++];
	var fixed_columns = arg[i++];
	var padding = arg[i++];
	var table_border 	= arg[i++];
	var table_border_color 	= arg[i++];

	var column_width;
	var width_left = width;

	var parent_el = CurrentParent;  //get parent element from text range

	//probably superfluous...
	if(!cel_border_color && cel_border>0) cel_border_color = td_start.currentStyle.borderColor;
	if(!table_border_color && table_border>0) table_border_color = table_el.currentStyle.borderColor;

	if(mode == 'new'){
		if(	parent_el &&
				parent_el.tagName.search(/^(LI|TR|TABLE|TBODY)$/) == -1 &&
				parent_el.isContentEditable &&
				!search_class(/edit_menu/)) {

			var collapse='';
			if(!spacing || spacing == '0') collapse = 'style="border-collapse:collapse;" ';

			if(cel_border>0) cel_border = 'border:solid ' + cel_border + 'px ' + cel_border_color + ' '; else cel_border='';
			if(table_border>0) table_border = 'border:solid ' + table_border + 'px ' + table_border_color + ' '; else table_border='';

			var html= '<table';
			if(fixed_columns) html += ' class="edit_fixed_cols"';

			html += ' style="';
			if(width)  html += 'width:' + width + width_unit + ';';
			if(height) html += 'height:' + height + height_unit + ';';
			html += table_border;
			html += '"';

			html += ' cellpadding="' + padding + '" cellspacing="' + spacing + '" ' + collapse + 'contentEditable=true>';
			for(i=1;i<=rows;i++){
				html += '<tr valign="top">';
				for(j=0;j<cols;j++){
					html += '<td';
					if(fixed_columns) {
						column_width=Math.round(width_left/(cols-j));
						width_left-=column_width;
						html += ' width=' + column_width + width_unit;
					}
					//html += ' class=editborder style="text-align:left;' + cel_border + '"><div>kolom' + (j+1) + '</div></td>';
					html += ' class=editborder style="text-align:left;' + cel_border + '">' + empty_cell + '</td>';
				}
				html += '</tr>';
			}
			html += '</table>';

			//insert_block_code(CurrentTextRange,html,parent_el);
			insert_HTMLcode(html);

		} else alert("Invoegen tabel is hier niet toegestaan...");
	}

	if(mode=='change'){
		clone_table('go');

		tmp_table.className = tmp_table.className.replace(/edit_fixed_cols\s*/gi,'');
		if(fixed_columns) tmp_table.className += ' edit_fixed_cols';

		if(width)  tmp_table.style.width  = width  + width_unit;  else tmp_table.style.width  = '';
		if(height) tmp_table.style.height = height + height_unit; else tmp_table.style.height = '';

		tmp_table.cellSpacing  = spacing;
		tmp_table.cellPadding = padding;

		tmp_table.style.border = table_border + 'px solid ' + table_border_color;

		if(!tmp_table.currentStyle.borderCollapse){
			if(spacing>0) tmp_table.style.borderCollapse = 'separate';
			else  tmp_table.style.borderCollapse = 'collapse';
		}

		if(cel_border>0) cel_border = 'solid ' + cel_border + 'px'; else cel_border=cel_border_color='';
		if(cel_border_color) cel_border+= ' ' + cel_border_color;

		for(i=0;i<tmp_table.rows.length;i++){
			width_left=width;
			for(j=0;j<tmp_table.rows(i).cells.length;j++){
				cols = col_get_length(tmp_table.rows(i));
				if(cel_border) tmp_table.rows(i).cells(j).style.border = cel_border;
				else {
					tmp_table.rows(i).cells(j).style.border = 'none';
					tmp_table.rows(i).cells(j).style.cssText = tmp_table.rows(i).cells(j).style.cssText.replace(/BORDER\-(LEFT|RIGHT|TOP|BOTTOM)\:\s*medium\s+none\;?/gi,'');
				}
				if(fixed_columns){
						column_width=Math.round(width_left/(cols-j));
						width_left-=column_width;
						var cspan = tmp_table.rows(i).cells(j).colSpan;
						if(!cspan || cspan < 2)
							tmp_table.rows(i).cells(j).width = column_width + width_unit;
				}
				else tmp_table.rows(i).cells(j).removeAttribute('width');
			}
		}

		restore_table('go');  //set restore point
	}

	CurrentTextRange = ed.selection.createRange();
	if(CurrentTextRange) {
		CurrentTextRange.move('character',-1);
		CurrentTextRange.select();
	}
}



/*****************************************/
function cols_fixed_width(tmp_table)
{
	if(tmp_table && tmp_table.className.search(/edit_fixed_cols/i) != -1 &&
		tmp_table.style.width.search(/^(\d+)(px|%|em)$/i) != -1){

		var width = RegExp.$1;
		var width_unit = RegExp.$2;

		for(i=0;i<tmp_table.rows.length;i++){
			var width_left=width;

			for(j=0;j<tmp_table.rows(i).cells.length;j++){
				cols = col_get_length(tmp_table.rows(i));
				column_width=Math.round(width_left/(cols-j));
				width_left-=column_width;
				var cspan = tmp_table.rows(i).cells(j).colSpan;
				if(!cspan || cspan < 2)
					tmp_table.rows(i).cells(j).width = column_width + width_unit;
			}
		}
	}
}


/*****************************************/
function table_delete(){

  var sub_menu = false;
  if(table_el.id && table_el.id.search(/sub_menu_v\d+/) != -1) sub_menu = true;

    if (table_el && (table_el.isContentEditable || sub_menu )) {
        if(sub_menu || confirm('Weet je zeker dat je de hele tabel wilt verwijderen?'))
            tr_start = table_el.rows(0);
            tr_end = table_el.rows(table_el.rows.length-1);
            row_copy();
            table_el.outerHTML ="";
        }
    else alert("Er kan hier geen tabel verwijderd worden...");
}

/*****************************************/
function row_delete(){
	var start = tr_start.rowIndex;
	var end = tr_end.rowIndex;
	row_copy();  //copy row to Clipboard!
	clone_table();

	var main_menu = false;
  if(table_el.id && table_el.id.search(/main_menu_v\d+/) != -1) var main_menu = true;

  if(main_menu && tmp_table.rows.length == 1) {
  	alert("Laatste menu rij mag niet verwijderd worden"); return;
  }

	if(end == start && tr_start.className.search(/editnodeleterow/i) != -1){
		alert('Deze rij mag niet verwijderd worden.');
		return;
	}

	var row_protect=0;
	for(i=end; i >= start; i--)
		if(tmp_table.rows(i).className.search(/editnodeleterow/i) == -1)
			tmp_table.rows(i).removeNode(true);
		else row_protect=1;
	restore_table();
	if(row_protect) alert('Niet alle rijen konden verwijderd worden.');
}

/*****************************************/
function row_height(cellh,unit)
{
	clone_table();

	if(tr_start){
		var start = tr_start.rowIndex;
		var end = tr_end.rowIndex;

		for(i=start;i<=end;i++)
			if(cellh) tmp_table.rows(i).style.height=cellh + unit;
			else tmp_table.rows(i).style.height = '';
	}
	restore_table();
}

/*****************************************/
function row_insert(where,num,not_clone){

	if(!not_clone) clone_table();
	if(!num) num=1;

	if(where == "below") var pos = 1; else var pos = 0;

	var tr_style = tmp_table.rows(tr_el.rowIndex);

	for(n=0;n<num;n++){
		tr = tmp_table.insertRow(tr_el.rowIndex+pos);
		row_copy_attributes(tr,tr_style);

		for(var i=0;i<tr_el.cells.length;i++) {
			td = tr.insertCell();
			cell_copy_attributes(td,tr_el.cells(i));
			td.innerHTML = empty_cell;
		}
	}
	if(!not_clone) restore_table();
}

/*****************************************/
function col_width(cellw,unit)
{
	clone_table();
	if(tr_el && td_el) {
		var ci=cellindex_get();
		for(var i=0;i<tmp_table.rows.length;i++)
			if(tmp_table.rows(i).cells(col_get(i,ci)).colSpan < 2)  //no width when colSpan > 1 !!
				{if(cellw) tmp_table.rows(i).cells(col_get(i,ci)).style.width=cellw + unit;
				else tmp_table.rows(i).cells(col_get(i,ci)).style.width='';}
	}	else alert("Instellen kolombreedte is niet mogelijk...");
	restore_table();
}


/*****************************************/
function col_delete(noconfirm){
	td_el=td_start;
	clone_table();
	var start = td_start.cellIndex;
	var end = td_end.cellIndex;

	var main_menu = false;
  if(table_el.id && table_el.id.search(/main_menu_v\d+/) != -1) var main_menu = true;

  if(main_menu && tmp_table.rows[0].cells.length == 1) {
  	alert("Laatste menuknop mag niet verwijderd worden"); return;
  }

	if(start == end || noconfirm || confirm('Weet je zeker dat je meerdere kolommen wilt verwijderen?')){
		for(var index=end; index >= start; index--){
			td_el = tr_el.cells(index);
			var ci=cellindex_get(); //get cellindex to delete
			for(var i=0;i<table_el.rows.length;i++){
				j=col_get(i,ci);
				if(tmp_table.rows(i).cells(j).colSpan >1) tmp_table.rows(i).cells(j).colSpan -= 1;
				else tmp_table.rows(i).deleteCell(j);
			}
		}
	}

	restore_table();
}


/*****************************************/
function col_insert(where,num,code,not_clone){
	if(!not_clone) clone_table();
	if(!num) num=1;
	for(n=0;n<num;n++){
		var ci=cellindex_get(); //get cellindex to insert, regardsless colSpan
		if(where == "right") ci += tr_el.cells(td_el.cellIndex).colSpan-1;

		for(var i=0;i<tmp_table.rows.length;i++) {
			var j=col_get(i,ci); //get actual cellindex to insert

			if(tmp_table.rows(i).cells(j).colSpan >1) tmp_table.rows(i).cells(j).colSpan += 1;
			else{
				cell_get_attributes(tmp_table.rows(i).cells(j));
				if(where == "right") j++;
				td = tmp_table.rows(i).insertCell(j);
				cell_copy_attributes(td);
				if(code) td.innerHTML = code;
				//else if(i==0) td.innerHTML = empty_cell;
				else td.innerHTML = empty_cell;
			}
		}
	}

	if(!not_clone) restore_table();
}

/*****************************************/
function clone_table(go)
{
	if(action!='table_paste' || go) {

		if(table_el.getElementsByTagName("EMBED").length != 0) tmp_table = table_el;
		else tmp_table = table_el.cloneNode(true);  //clone table_el and replace it later on to have only 1 undo action!

		if(tr_el) tr_el = tmp_table.rows(tr_el.rowIndex);
		if(td_el) td_el = tmp_table.rows(tr_el.rowIndex).cells(td_el.cellIndex);
		if(td_start && tr_start) td_start = tmp_table.rows(tr_start.rowIndex).cells(td_start.cellIndex);
		if(td_end && tr_end) td_end = tmp_table.rows(tr_end.rowIndex).cells(td_end.cellIndex);
	}
}

/*****************************************/
function restore_table(go)
{
	if(tmp_table && tmp_table.rows.length > 0)
		cols_fixed_width(tmp_table);

	if(action!='table_paste' || go)  {
		if(table_el.getElementsByTagName("EMBED").length == 0){
			if(tmp_table.rows.length == 0 ) //last row removed?
				table_el.outerHTML = '';   //remove table
			else table_el.outerHTML = tmp_table.outerHTML;
		}
	}
}

/*****************************************/
function align(el,par)
{
	clone_table();

	var vert=0;
	if(par.search(/^(top|middle|bottom)$/i) != -1) vert=1;

	switch(el)
	{
		case "row": if(tr_el) {
				col = tr_el.children.tags("TD");
				for(var i=0;i<col.length;i++)
					if(vert) col[i].style.verticalAlign=par;
					else {
						col[i].style.textAlign=par;
						align_remove(col[i]); //remove textAlign from <p> and <DIV> tags
					}
			}	else alert("Uitlijnen van meerdere rijen is niet mogelijk...");
			break;
		case "col": if(tr_el && td_el) {
				var ci=cellindex_get();
				for(var i=0;i<tmp_table.rows.length;i++)
					if(vert) tmp_table.rows(i).cells(col_get(i,ci)).style.verticalAlign=par;
					else  {
						tmp_table.rows(i).cells(col_get(i,ci)).style.textAlign=par;
						align_remove(tmp_table.rows(i).cells(col_get(i,ci))); //remove textAlign from <p> and <DIV> tags
					}
			}	else alert("Uitlijnen van meerdere kolommen is niet mogelijk...");
			break;
		case "table": if(tmp_table) {
				for(i=0;i<tmp_table.rows.length;i++)
					for(j=0;j<tmp_table.rows(i).cells.length;j++)
						if(vert) tmp_table.rows(i).cells(j).style.verticalAlign=par;
						else {
							tmp_table.rows(i).cells(j).style.textAlign=par;
							align_remove(tmp_table.rows(i).cells(j)); //remove textAlign from <p> and <DIV> tags
						}
			}	else alert("Uitlijnen van meerdere kolommen is niet mogelijk...");
			break
	}
	restore_table();
}

/*****************************************/
function align_remove(cell)
{
	//remove alignment of <div> and <p> tags:
	var p_col = cell.children.tags("P");
	var div_col = cell.children.tags("DIV");

	for(var k=0; k<p_col.length; k++)
		p_col[k].removeAttribute('align');
	for(var k=0; k<div_col.length; k++)
		div_col[k].removeAttribute('align');
}

/*****************************************/
function cell_split()
{
	var colspan = td_el.colSpan;

	clone_table();

	if(colspan>1){
		td_el.colSpan = 1;
		for(var i=1; i<colspan; i++){
			td = tr_el.insertCell(td_el.cellIndex+1);
			cell_copy_attributes(td);
			td.colSpan=1;
			//if(table_el.className.search(noedittable) != -1) td.innerHTML = '<p>' + empty_cell + '</p>';
			//else td.innerHTML = empty_cell;
			td.innerHTML = empty_cell;
		}
	}
	else  alert('De cel kan niet gesplits worden.');

	restore_table();
}

/*****************************************/
function cells_merge()
{
	clone_table();

	if(td_start && td_end){
		var colspan=0; var text=''; var merge_text;
		if(confirm('Moet de tekst uit de cellen ook samengevoegd worden?'))  merge_text=true; else merge_text=false;
		var index = td_start.cellIndex;
		if(td_start == td_end && tr_el.cells.length>1) //merge adjacent cell?
			if(index >= tr_el.cells.length-1) td_start = tr_el.cells(index-1);
			else td_end = tr_el.cells(index+1);
		for(i=td_end.cellIndex;i>td_start.cellIndex;i--){
			colspan += tr_el.cells(i).colSpan;
			//if(merge_text && tr_el.cells(i).innerHTML.search(/<(P|DIV)\s/i) != -1) text = tr_el.cells(i).innerHTML + text;
			//else text = '<div>' + tr_el.cells(i).innerHTML + '</div>' + text;
			if(merge_text) text =  tr_el.cells(i).innerHTML + text;
			tr_el.deleteCell(i);
		}
		td_start.colSpan += colspan;
		td_start.style.width = '';
		td_start.innerHTML += text;
		td_start.innerHTML = td_start.innerHTML.replace(/^(&nbsp;|\s)*<br>/i,'');
		td_start.innerHTML = td_start.innerHTML.replace(/<br>\s*(<div>|<p>)/gi,'$1'); //remove <br> outside <div> or <p>
		//td_start.innerHTML = td_start.innerHTML.replace(/(<div>&nbsp;<\/div>|<p>&nbsp;<\/p>)$/i,''); //remove trailing and empty <p> or <div>
	} else alert('De geselecteerde tekst valt buiten de cellen.');

	restore_table();
}


/*****************************************/
function cellindex_get()
{
	var cell_index=0;
	for(var i=0;i<=td_el.cellIndex;i++){
		if(i<td_el.cellIndex) cell_index += tr_el.cells(i).colSpan; //get cellindex
	}
	return cell_index;
}

/*****************************************/
function col_get(r,cell_index)
{
	var ci_row=-1;
	for(var j=0; j<table_el.rows(r).cells.length;j++){
		ci_row += table_el.rows(r).cells(j).colSpan;
		if(ci_row >= cell_index) break;
	}
	return j;
}

/*****************************************/
function col_get_length(row)
{
	var nr=0;
	for(var k=0; k<row.cells.length;k++){
		var cspan = row.cells(k).colSpan;

		if(cspan && cspan >= 2) nr += cspan;
		else nr++;
	}
	return nr;
}

/*****************************************/
function cell_get_attributes(td)
{
	for(var i=0;i<cell_attributes.length;i++)
		attributes[i] = eval('td.' + cell_attributes[i])
}

/*****************************************/
function cell_copy_attributes(td1,td2,noeditborder)
{
	if(td2)
		for(var i=0;i<cell_attributes.length;i++) eval('td1.' + cell_attributes[i] + '= td2.' + cell_attributes[i]);
	else
		for(var i=0;i<cell_attributes.length;i++) eval('td1.' + cell_attributes[i] + '=\'' + attributes[i] +'\'');
	if(!noeditborder) td1.className = "editborder";
	td1.style.width = ''; // remove style.width...
}

/*****************************************/
function row_copy_attributes(tr1,tr2)
{
		for(var i=0;i<row_attributes.length;i++)
		{
			eval('if (tr2.' + row_attributes[i] + ') tr1.' + row_attributes[i] + '= tr2.' + row_attributes[i]);
			if(tr2.className.search(edit_copy_classes) != -1) tr1.className = tr2.className;
		}
}

/*****************************************/
function get_parent(re,Trange,el)
{
	var found=false;
	var parent_el;

	if(el) parent_el = el;
	else if(Trange) parent_el=Trange.parentElement(); //get parent element from text range
			 else parent_el = ed.selection.createRange().parentElement();

	do{
		if(parent_el.tagName.search(re)!= -1) {found=true; break;}
		parent_el = parent_el.parentElement;  //get next parent element
	} while(parent_el)
	if(!found) return null
	else return parent_el;
}

/*****************************************/
function search_class(className,Trange,edit_el)
{

	if(Trange) edit_el=Trange.parentElement();
	else if(!edit_el) edit_el = ed.selection.createRange().parentElement();

	do{
		if(edit_el.className.search(className) != -1) return edit_el;
	} while(edit_el = edit_el.parentElement); //get next parent element
	return false;
}

/*****************************************/
function search_id(id_name,edit_el)
{
	do{
		if(edit_el.id && edit_el.id.search(id_name)	!= -1) return edit_el;
	} while(edit_el = edit_el.parentElement); //get next parent element
	return false;
}

/*****************************************/
function source() {
	if(Administrator) tagsline.innerHTML = 'tags:<br>&nbsp;';
	if (EditMode == "HTML") {
		ed.body.innerText = ed.body.innerHTML;
		EditMode = "TEXT";
		ed.body.contentEditable=true;
	} else {
		ed.body.innerHTML = ed.body.innerText
		EditMode = "HTML";
		ed.body.contentEditable=false;
	}
}


/*****************************************/
function bpress(func,par1,par2,par3)
{
	if(selected_img && !selected_img.parentElement) selected_img=0;
	selected_absolute = 0;

	if(Administrator){
		 remove_tagborder();
		 tagsline.innerHTML='tags:<br>&nbsp;';
	}

	if(obj_float && func=='Command' && par1.search(/Justify(Right|Left)/) != -1) {
		if(par1 == 'JustifyRight') obj_float.style.styleFloat = 'right';
		else obj_float.style.styleFloat = 'left';
		return;
	}

	if(ed.selection.type.search(/^control$/i) != -1) bodyfocus();

	//get_CurrentTextRange(func);
	CurrentTextRange = ed.selection.createRange();
	CurrentParent = CurrentTextRange.parentElement();

	if(func && (!CurrentParent.isContentEditable ||
	   func.search(/(code_insert|table_dialog|menu_(main_)?dialog|page_info|section|media_insert|image_insert|paint|save_dialog)/i) == -1))
		if(!par1 || par1.search(/^(block|paste|justify.*)$/i) == -1 ) Trange_bug_fix(func,CurrentTextRange);

	eval(func + '(par1,par2,par3)');
}

/*****************************************/
function clipboard_remove_format(){

	var txt;
	var tmp;

	if(edit.event.type == "paste"){ //alert(ed.selection.createRange().parentElement().childNodes[0].innerHTML);
		tmp = clipboardData.getData("Text"); // .replace(/[\n\r]/g,'');

		if(tmp) txt = tmp.replace(/[ \n\r]/g,'');
		if(!edit.event.altKey && //do not remove formatting when ALT key is pressed...
			(txt && cut_text && (cut_text_length != txt.length || cut_text != txt))) {
			clipboardData.setData("Text",tmp);

			cut_text = txt;
			cut_text_length=cut_text.length;

			var top = 0; //screenTop-50;
			var left = screenLeft;
			var new_win = window.open("","","width=250,height=150,top=" + top + ",left=" + left + '",true');
			new_win.close();
		}
		else {
			var parent_el;
			var found = false;

			//get DIV parent element as long as it is not TD|TR|TABLE|P|BODY
			parent_el =  ed.selection.createRange().parentElement();
			do{
				if(parent_el && parent_el.tagName.search(/^DIV$/) != -1)  {found=true; break;}
				parent_el = parent_el.parentElement;  //get next parent element
			} while (parent_el && parent_el.tagName.search(/^(TD|TR|TABLE|P|BODY$)/) == -1);

			if(found && parent_el.id=='' && parent_el.isContentEditable && parent_el.className.search(/^\s*(tagborder|editborder)?\s*$/i) != -1){
				parent_el.id="edit_mark_block_copied_to";
				setTimeout(remove_nested_blocks,150);  //restore nested <div> or <p> tags
			}
		}
	}
	else
	{
		txt = edit.event.dataTransfer.getData("Text");
		if(txt) txt = txt.replace(/[\n\r ]/g,'');
		if(cut_text && (cut_text_length != txt.length || cut_text != txt)) {
			txt=""; edit.event.returnValue=false;
			alert("Slepen vanuit een ander document niet toegestaan.\nGebruik 'knippen en plakken'.")
		}
	}

	if(!cut_text) {cut_text=" "; cut_text_length=cut_text.length;}
}

/*****************************************/
//function clipboard_remove_format1(){
//
//	var txt;
//	var tmp;
//
//	if(pasted_with_format_removed) {  //paste clipboard bug workaround
//		pasted_with_format_removed = false;
//		return;
//	}
//
//	if(edit.event.type == "paste"){
//
//		tmp = clipboardData.getData("Text");
//
//
//		if(tmp) txt = tmp.replace(/[ \n\r]/g,'');
//		if(txt && !edit.event.altKey && //do not remove formatting when ALT key is pressed...
//			(cut_text && (cut_text_length != txt.length || cut_text != txt))) {
//			clipboardData.setData("Text",tmp);  //remove format
//			cut_text = txt;
//			cut_text_length=cut_text.length;
//			pasted_with_format_removed = true;
//			edit.event.returnValue=false;
//			setTimeout("ed.execCommand('paste')",10);  //paste clipboard bug workaround
//
////			var top = 0; //screenTop-50;
////			var left = screenLeft;
////			var new_win = window.open("","","width=250,height=150,top=" + top + ",left=" + left + '",true'); //paste bug workaround
////			new_win.close();
//		}
//		else {
//			var parent_el;
//
//			//get DIV parent element as long as it is not TD|TR|TABLE|P|BODY
//			parent_el =  ed.selection.createRange().parentElement();
//			do{
//				if(parent_el.tagName.search(/^DIV$/) != -1)  break;
//				parent_el = parent_el.parentElement;  //get next parent element
//			} while (parent_el && parent_el.tagName.search(/^(TD|TR|TABLE|P|BODY$)/) == -1);
//
//			if(parent_el && parent_el.id=='' && parent_el.isContentEditable && parent_el.className.search(/^\s*(tagborder|editborder)?\s*$/i) != -1){
//				parent_el.id="edit_mark_block_copied_to";
//				setTimeout(remove_nested_blocks,150);  //restore nested <div> or <p> tags
//			}
//			if(tmp){
//				pasted_with_format_removed = true;
//				edit.event.returnValue=false;
//				setTimeout("ed.execCommand('paste')",10);  //paste clipboard bug workaround
//			}
//		}
//	}
//	else
//	{
//		txt = edit.event.dataTransfer.getData("Text");
//		if(txt) txt = txt.replace(/[\n\r ]/g,'');
//		if(cut_text && (cut_text_length != txt.length || cut_text != txt)) {
//			txt=""; edit.event.returnValue=false;
//			alert("Slepen vanuit een ander document niet toegestaan.\nGebruik 'knippen en plakken'.")
//		}
//	}
//
//	if(!cut_text) {cut_text=" "; cut_text_length=cut_text.length;}
//}

/*****************************************/
function remove_nested_blocks()
{
		var parent_el = 0;
		var el_pdiv;
		var i=0;

		el_pdiv = ed.getElementById("edit_mark_block_copied_to");

		if(el_pdiv) {

			el_pdiv.removeAttribute('id');

			if(el_pdiv.innerHTML.search(/<DIV[^>]*float:/i) == -1) //do not remove float objects

				//inner <DIV> tag:
				if(el_pdiv.outerHTML.search(/(<DIV[^>]*>)([\s\S]*?)(<DIV[^>]*>[\s\S]*<\/DIV[^>]*>)([\s\S]*?)(<\/DIV[^>]*>)$/i) != -1)
				{
					var str_start = RegExp.$1 + RegExp.$2;
					var inner_str = RegExp.$3;
					var str_end = RegExp.$4 + RegExp.$5;
					inner_str = inner_str.replace(/<DIV[^>]*>([\s\S]*?)<\/DIV[^>]*>/gi,'</DIV><DIV>$1');
					if(!RegExp.$2) inner_str=inner_str.replace(/<\/DIV><DIV>/i,'');
					el_pdiv.outerHTML = str_start + inner_str  + str_end;
				}

				//inner <P> tag:
				if(el_pdiv.outerHTML.search(/(<DIV[^>]*>)([\s\S]*?)(<P[^>]*>[\s\S]*<\/P[^>]*>)([\s\S]*?)(<\/DIV[^>]*>)$/i) != -1)
				{
					//alert(el_pdiv.outerHTML);
					//alert('0' + el_pdiv.outerHTML + '\n1' + RegExp.$1 + '\n2' + RegExp.$2 + '\n3' + RegExp.$3 + '\n4' + RegExp.$4 + '\n5' + RegExp.$5 );

					var str_start1 = RegExp.$1;
					var str_start2 = RegExp.$2;
					var inner_str = RegExp.$3;
					var str_end1 = RegExp.$4;
					var str_end2 = RegExp.$5;

					inner_str = inner_str.replace(/<P[^>]*>([\s\S]*?)<\/P[^>]*>/gi,'</P><P>$1');
					if(!RegExp.$2) inner_str=inner_str.replace(/<\/P><P>/i,'');
					el_pdiv.outerHTML = str_start1.replace(/<DIV/i,'<P') + str_start2 + inner_str  + str_end1 + str_end2.replace(/<\/DIV/i,'</P');
				}

		}
}

/*****************************************/
function remove_nested_div_block()
{
	CurrentTextRange = ed.selection.createRange();
	var block_el = get_parent(/^(DIV)$/,CurrentTextRange);
	var parent_el = get_parent(/^(DIV)$/,CurrentTextRange,block_el.parentElement);

	if(parent_el && parent_el.id=='' && parent_el.isContentEditable && parent_el.className.search(/^\s*(tagborder|editborder)?\s*$/i) != -1){
		if(confirm('Kader tekstblok verwijderen?'))
		{
			parent_el.id="edit_mark_block_copied_to";
			remove_nested_blocks();
		}
	}
}

/*****************************************/
function before_cut_copy()
{
	return;
}

/*****************************************/
function cut_intern(){ //alert('start:'+ed.selection.createRange().htmlText+'end');
	if(ed.selection.createRange().text)
			cut_text = ed.selection.createRange().text.replace(/[\n\r ]/g,'');
	else cut_text='';
	cut_text_length=cut_text.length;
}

/*****************************************/
function bodyfocus()
{
	ed.body.focus();
	if(global_obj && global_obj.tagName=='IMG') {
		CurrentTextRange = ed.selection.createRange();
		move_cursor_to_object(CurrentTextRange,global_obj);
	}
	global_obj='';
}

/*****************************************/
function resize(){
	global_obj=edit.event.srcElement;

	edit.event.returnValue = false;

	switch(global_obj.tagName)
	{
		case 'IMG':
			if(edit.event.ctrlKey &&
			   global_obj.src.search(bmgif_search) == -1  &&
			   global_obj.src.search(hrgif_search) == -1)
			{
				edit.event.returnValue = true;
				return;
			}
			if(global_obj.src.search(bmgif_search) == -1 &&
				 global_obj.src.search(hrgif_search) == -1 &&
				 global_obj.className != 'edit_hor_line' &&
				 global_obj.className != 'edit_please_remove_me'
				)
				image_change(global_obj);
		break;

		case 'SELECT':
			form_dialog(global_obj);
		break;

		case 'OBJECT':
			if(confirm('Automatisch starten bij laden pagina?\n\nOK = ja\nCancel = nee')){
				var temp =  selected_object.outerHTML.replace(/name=['"]?AutoStart['"]?\s+value=['"]?false['"]?/,'name="AutoStart" value="true"');
				temp = temp.replace(/autostart=['"]?0['"]?/,'autostart="1"');
				var new_obj = ed.createElement('IMG');
				selected_object.replaceNode(new_obj);
				new_obj.outerHTML = temp;
			} else
			{
				var temp =  selected_object.outerHTML.replace(/name=['"]?AutoStart['"]?\s+value=['"]?true['"]?/,'name="AutoStart" value="false"');
				temp = temp.replace(/autostart=['"]?1['"]?/,'autostart="0"');
				var new_obj = ed.createElement('IMG');
				selected_object.replaceNode(new_obj);
				new_obj.outerHTML = temp;
			}
		break;
	}

}

/*****************************************/
function control_dialog(){

	global_obj=edit.event.srcElement;
	edit.event.returnValue = false;
	obj_float = selected_img = selected_input = selected_absolute = 0;
	CurrentTextRange = ed.selection.createRange();

	if(Administrator){
		remove_tagborder();
		tagsline.innerHTML='tags:<br>&nbsp;';
	}


		if(global_obj.style.styleFloat)
		{
			edit.event.returnValue = true;
			obj_float = global_obj;
			CurrentTextRange.moveToElementText(global_obj);
			//CurrentTextRange.select();
		}
		else
			switch(global_obj.tagName)
			{
				case 'IMG':
 					if(global_obj.style.position == 'absolute') {
 						selected_absolute = global_obj;
 					}
 					else selected_absolute = 0;

					if(global_obj.src.search(bmgif_search) == -1 && global_obj.contentEditable && global_obj.className != 'template_insert')
					{
						edit.event.returnValue = true;
						selected_img = global_obj;
					}
				break;

				case 'OBJECT':
					selected_object = global_obj;
					edit.event.returnValue = true;
				break;

				case 'SELECT':
					edit.event.returnValue = true;
				break;

				case 'INPUT':
					selected_input = global_obj;
					edit.event.returnValue = true;
				break;

				case 'HR':
					edit.event.returnValue = true;
				break;

				default: ed.body.focus();
			}
}

/*****************************************/
function document_changed()
{
	var str1 = ed.documentElement.outerHTML.replace(/<object[^>]*>[\s\S]*<\/object>/gi,'');

	//do not compare <style> tags without "edit_enable_style" (e.g. inserted from skype):
	str1 =          str1.replace(/<style(\s+type=["']?text\/css["']?)?>[\s\S]*?<\/style>[\n\r]*/gi,'');
	var str2 = SavedHtml.replace(/<style(\s+type=["']?text\/css["']?)?>[\s\S]*?<\/style>[\n\r]*/gi,'');

	if( str1 != str2 )	return true;
	else return false;
}


/*****************************************/
function unload()
{
	if(Debug || Administrator || Domain=='test.nl') return;
	if(!action_file && document_changed() )
		edit.event.returnValue = 'De laatste wijzigingen zijn nog niet bewaard!';
}

/*****************************************/
function form_dialog(obj)
{
	var arg = new Array(edit,obj.cloneNode(true));
	ReturnValue = showModalDialog(EditDir + "/form.html",arg,"dialogWidth: 50; dialogHeight:12; dialogPosition:center; resizable: yes; help: no; scroll: no; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action=='cancel')  return;
	var changed_obj = ReturnValue[1];

	switch(obj.tagName)
	{
		case 'SELECT':
			if(action == 'save') obj.replaceNode(changed_obj);
		break;
	}
}


/*****************************************/
function image_change(img_el)
{
	arg = new Array(edit,img_el,EditDir);
	ReturnValue = showModalDialog(EditDir + "/img.html",arg,"dialogWidth: 14; dialogHeight:31; dialogPosition:center; resizable: yes; help: no; scroll: no; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];

	ed.focus();

	selected_img = selected_input = selected_object = selected_absolute = 0;

	if(action=='cancel') {global_obj=img_el; bodyfocus(); return;}

	if(action=='change_mouse_effect') {
		on_mouse_over = ReturnValue[1];
		//on_mouse_out = ReturnValue[2];
		//if(on_mouse_over) img_el.onmouseover = new Function ('this.src = "' + on_mouse_over + '"');//dynamic
		img_el_clone = img_el.cloneNode();

		if(on_mouse_over) {

			if(img_el.onmouseover && img_el.onmouseover.toString().search(/this\.src\s*\=/) == -1)
				img_el_clone.onmouseover = on_mouse_over;
			else {
				img_el_clone.onmouseout = "this.src='" + img_el.src + "'"; //static
				img_el_clone.onmouseover="this.src='" + on_mouse_over + "'"; //static
			}

		} else {
			img_el_clone.onmouseout = img_el_clone.onmouseover = null;
		}
		img_el.outerHTML = img_el_clone.outerHTML;
		return;
	}

	img_el.removeAttribute('border');
	for(var i=0; i<img_attributes.length;i++)
		if(i<5) eval('img_el.style.' + img_attributes[i] + '="' + ReturnValue[i] + '"');
		else eval('img_el.' + img_attributes[i] + '="' + ReturnValue[i] + '"');


	//set size:
	var size = ReturnValue[i];
	if(size != ''){
		img_el.removeAttribute('width'); img_el.removeAttribute('height');
		img_el.style.width=img_el.style.height='';
		if(size != 0) {
			var width = img_el.width + img_el.width * size/100;
			var height = img_el.height + img_el.height * size/100;
			img_el.style.width = width;		img_el.style.height = height;
			img_el.width = width;		img_el.height = height;
		}
	}
	global_obj=img_el;
	bodyfocus();
}

/*****************************************/
function media_insert(skip)
{
	if(!online()) return;

	var Trange = CurrentTextRange;
	var media_icon='';

	//if(TextRange.htmlText.search(/<img(.|\s)*>/i) != -1))/text or image selected?

	if((selected_img && selected_img.parentElement.tagName == 'A') || Trange.htmlText.search(/^(<a(.|\s)*)+<img(.|\s)*>/i) != -1 )
	{
		alert('Er bevindt zich hier al een (multimedia)link!\nJe kunt nu de link wijzigen of verwijderen indien gewenst.');
		link(); return;
	}

//	if(selected_object){
//		alert('Wijzigen paneel nog niet mogelijk...');
//		return;
//		CurrentTextRange.moveToElementText(selected_object);
//		CurrentTextRange.select();
//		selected_object=0;
//	}
	var arg = new Array;


	if (!Trange.parentElement().isContentEditable){
		arg[6]='disabled';
		if(!skip) alert('Invoegen mediabestand is hier niet toegestaan!');
	}	else  arg[6]='';
	var tmp = Trange;
	arg[0]=ed; //arg[1..3] is initialized through editor.pl!!
	arg[1] = mediadirs[1];
	arg[2] = mediadirs[2];
	arg[3] = mediadirs[3];
	arg[4] = default_media_dir;
	if(templateObject) arg[5] = 1;
	arg[6] = CgiFormAction;

	ReturnValue = showModalDialog(EditDir + "/insert_media.html",arg,"dialogWidth: 14; dialogHeight:16; dialogPosition:center; resizable: yes; help: no; scroll: no; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action == 'cancel') return;
	default_media_dir = ReturnValue[2] ? ReturnValue[2] : '/';

	if(action.search(/^(error|upload)$/i) != -1) alert(ReturnValue[4].replace(/<br>/gi,'\n'));
	if(ReturnValue[1].toLowerCase().search(/\.(mp3|wma|wmv|avi|mpg|mpeg|doc|txt|pdf|xls|ppt)\s*$/) != -1)
		media_icon = IconDir + '/' + RegExp.lastParen + ReturnValue[3] + '.gif';
	else media_icon = IconDir + '/txt'+ ReturnValue[3] + '.gif';

	var media_file;

	switch(action)
	{
	 case "http":
	 case "insert":
	  if(action == 'http') media_file = ReturnValue[1];
	  else media_file = MasterDomainInpath + ReturnValue[2] + ReturnValue[1];

		Trange.collapse(); Trange.select();
		ed.execCommand('InsertImage','',media_icon);
		var el_img = tmp.parentElement();
		el_img.style.border=0;
		if(ReturnValue[3] == 'panel') {
			el_img.outerHTML = templateObject.replace(/ObjectFileName/gi,media_file);
			alert('Paneel ingevoegd!');  //needed to wait for img being completed
		}
		else  {
			alert('Icoon ingevoegd!');  //needed to wait for img being completed
			el_img.outerHTML = '<A href="' + media_file + '" >' + el_img.outerHTML + '</A>';
		}
		selected_img=0;
		trange_select(Trange);
		break;
	 case "upload":
	 case "zip":
	 case "refresh":
		refresh_dirs('mediadirs','media_insert("skip")');
		break;
	 case "delete":    //'delete' file: rename to backup file which will be removed automatically after 14 days...
		PostQuestion("todo=XMLDeleteFile&action=delete&par1=refresh_dirs('mediadirs')&par2=Het bestand&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[1]);
		break;
	}
}

/*****************************************/
function image_insert(background_el,skip)
{
	if(!online() || !CurrentTextRange) return;
	var Trange = CurrentTextRange;

	if (!Trange.parentElement().isContentEditable && !(selected_input && selected_input.isContentEditable)) {
		imgdirs[6]='disabled';
		if(!skip) alert('Invoegen plaatje is hier niet toegestaan!');
	} else imgdirs[6] = '';

	var tmp = Trange;
	var arg = new Array;
	arg[0] = imgdirs[0];  //imgdirs[0] = ed; //imgdirs[1..3] is initialized through editor.pl!!
	arg[1] = imgdirs[1];
	arg[2] = imgdirs[2];
	arg[3] = imgdirs[3];
	arg[4] = default_img_dir;
	arg[5] = background_el;
	arg[7] = img_quality;
	arg[8] = img_maxsize;
	arg[9] = EditDir;
	arg[10] = MasterDomainInpath;
	arg[11] = default_img_sort;
	arg[12] = CgiFormAction;
	arg[13] = MasterDomain;
	arg[14] = Domain;

	ReturnValue = showModalDialog(EditDir + "/insert_img.html",arg,"dialogWidth:57; dialogHeight:38; dialogPosition:center; resizable: yes; help: no; scroll: yes; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action == 'cancel') return;
	if(ReturnValue[2]) default_img_dir = ReturnValue[2];
	if(ReturnValue[11]) default_img_sort = ReturnValue[11];
	var url = MasterDomainInpath + ReturnValue[2] + ReturnValue[1];

	switch(action)
	{
	case "insert":
		if((selected_img || (selected_input && selected_input.type=='image'))){// && confirm("Wil je het geselecteerde plaatje vervangen?")){
			var obj = selected_img ? selected_img : selected_input;
			var mouse_out;

			//remove original width and height:
			if(obj.style.width) obj.style.width = '';
			if(obj.style.height) obj.style.height = '';
			obj.removeAttribute('width');
			obj.removeAttribute('height');

			if(selected_img && obj.onmouseout) {
				mouse_out = obj.onmouseout.toString().replace(/^[\s\S]*this\.src\s*=\s*(\'[^\']+\'|\"[^\"]*\"|[^\'\"]\S*)[\s\S]*?$/,'$1');
				mouse_out = mouse_out.replace(/^[\'\"]?(.*?)[\'\"]?$/,'$1');
				if(mouse_out == obj.src) {
					var img_el_clone = obj.cloneNode();
					img_el_clone.onmouseout = "this.src='" + url + "'";
					img_el_clone.src = url;
					obj.outerHTML = img_el_clone.outerHTML;
				}
			} else obj.src = url;
			selected_img = selected_input = 0;
		}
		else {
			Trange.collapse(); Trange.select();
			ed.execCommand('InsertImage','',url);
			var el_img = tmp.parentElement();
			el_img.removeAttribute('border');
			el_img.style.border='';

			if(el_img.parentElement.innerText.search(/^(\s|\&nbsp\;)*$/i) == -1) //imsert image in empty P or DIV tag?
				el_img.align='left';

			//margin 5 by default:
			for(i=0;i<img_attributes.length;i++)
				if(img_attributes[i].search(/^margin/) != -1) eval('el_img.style.' + img_attributes[i] + '=' + img_default_margin);
		}
		trange_select(Trange);
		break;
	case 'background_image':
		if(ReturnValue[2] + ReturnValue[1]) background_el.style.backgroundImage = 'url("' + url + '")';
		background_el.style.backgroundPosition =  ReturnValue[4];
		background_el.style.backgroundRepeat = ReturnValue[5];
	break;
	case "background_image_remove":
		if(background_el)
			background_el.style.backgroundImage = background_el.style.backgroundPosition = background_el.style.backgroundRepeat = '';
		break;
	case 'refresh':
	case "zip":
			url='';
	case "zip":
	case "upload":
	case 'refresh':
	case 'at_least_one_file_uploaded':
		if(action == 'upload'){
			img_quality = ReturnValue[7];
			img_maxsize = ReturnValue[8];
		}
		refresh_dirs('imgdirs','image_insert("","skip")',url);
		if(ReturnValue[3]) alert(ReturnValue[3].replace(/<br>/gi,'\n'));
		break;
	case 'at_least_one_file_uploaded_cancel':
			refresh_dirs('imgdirs','',url);
		break;
	case "edit":
		var url_new = MasterDomainInpath + ReturnValue[2] + ReturnValue[3];
		//alert("todo=XMLRenameFile&action=edit&par1=refresh_dirs('imgdirs','image_insert(\"\",\"skip\")','" + url + "')&par2=Het plaatje&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[1] + "NewFile=" + ReturnValue[2] + ReturnValue[3]);
		PostQuestion("todo=XMLRenameFile&action=edit&par1=refresh_dirs('imgdirs','image_insert(\"\",\"skip\")','" + url + "','" + url_new + "')&par2=Het plaatje&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[1] + "&NewFile=" + ReturnValue[2] + ReturnValue[3]);
		break;
	case "delete":    //'delete' file: rename to backup file which will be removed automatically after 14 days...
		PostQuestion("todo=XMLDeleteFile&action=delete&par1=refresh_dirs('imgdirs','image_insert(\"\",\"skip\")','" + url + "')&par2=Het plaatje&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[1]);
		break;
	case "create_map":
		PostQuestion("todo=XMLCreateMapImg&action=refresh&par1=refresh_dirs('imgdirs','image_insert(\"\",\"skip\")','" + MasterDomainInpath + ReturnValue[2] + ReturnValue[3] + "')&par2=De map&path=" + inpath + "&FileName=" + ReturnValue[2] + ReturnValue[3]);
		break;
	case "edit_map":
		PostQuestion("todo=XMLRenameFile&action=edit&par1=refresh_dirs('alldirs','image_insert(\"\",\"skip\")','" + MasterDomainInpath  + ReturnValue[2] + "')&par2=De map&path=" + inpath + "&FileName=" + ReturnValue[1] + "&NewFile=" + ReturnValue[3]);
		break;
	case "delete_map":    //'delete' map: rename to backup map which will be removed automatically after 14 days...
		PostQuestion("todo=XMLDeleteMapImg&action=delete&par1=refresh_dirs('alldirs','image_insert(\"\",\"skip\")','" + MasterDomainInpath + ReturnValue[1] + "')&par2=De map&path=" + inpath + "&FileName=" + ReturnValue[1]);
		break;
	case 'error':
		alert(ReturnValue[3].replace(/<br>/gi,'\n'));
	 	break;
	default: alert("ERROR plaatje invoegen: neem contact op met de systeembeheerder!");
	}
}

/*****************************************/
function refresh_dirs(dir_array,parm1,url,url_new)
{
	switch(dir_array)
	{
		case 'htmldirs':
			PostQuestion("todo=XMLHtmlDirInfoRequest&action=refresh&path=" + inpath + "&par1=" +parm1);
			break;
		case 'imgdirs':
			reload_images(url,url_new);
			PostQuestion("todo=XMLImageDirInfoRequest&action=refresh&path=" + inpath + "&par1=" +parm1);
			break;
		case 'mediadirs':
			PostQuestion("todo=XMLMediaDirInfoRequest&action=refresh&path=" + inpath + "&par1=" +parm1);
			break;
		case 'alldirs':
			reload_images(url);
			PostQuestion("todo=XMLDirInfoRequest&action=refresh&path=" + inpath + "&par1=" +parm1);
			break;
	}
}

/*****************************************/
function reload_images(url,url_new)
{
	//alert(url + '\n' + url_new);
	if(url) url = url.replace(/([^\d\w])/g,'\\$1'); 			//backslash all non-word characters!
	var	img_all = ed.all.tags("IMG");
	var timestamp="?"+(new Date()).getTime();
	for(i=0;i<img_all.length;i++)
		if( (!url || img_all[i].src.search(url) != -1) ||
		    (url_new && img_all[i].src.search(url_new) != -1)	)
					{
						el_img[i].src = el_img[i].src.replace(/(\?\d+)+$/,''); //remove old timestamp
						img_all[i].src +=  timestamp;
					}
}

/*****************************************/
function sort_Abc(a, b) {
	if(!sort_mode) {aa = a.toLowerCase(); bb=b.toLowerCase();}
	else if (sort_mode==1) {aa = a[0].toLowerCase(); bb=b[0].toLowerCase();}
	else if (sort_mode==2) {aa = a.name.toLowerCase(); bb=b.name.toLowerCase();}
	if (aa < bb)  return -1;
	if (aa > bb)  return 1;
	return 0;
}

/*****************************************/
function paint()
{
 CurrentTextRange.moveEnd('character',-1);
 CurrentParent = CurrentTextRange.parentElement();

 for(var i=0;i<fpaint_styles.length;i++){
	format_paint[i] = eval('CurrentParent.currentStyle.' + fpaint_styles[i]);

	if(fpaint_styles[i] == 'backgroundColor'){  //background color transparent? search for next parent...
		var parent_obj = CurrentParent;
		while(parent_obj && parent_obj.currentStyle.backgroundColor == 'transparent')
		{
			parent_obj = parent_obj.parentElement;
		}
		if(parent_obj) format_paint[i] = parent_obj.currentStyle.backgroundColor;
	}
 }

 if(format_paint[0].search(/^(\d+)$/) != -1) format_paint[0] = pt_size[RegExp.lastParen] + 'px';
 CurrentTextRange.collapse();
 CurrentTextRange.select();
 fpaint_active(1);
}

/*****************************************/
function mouseup()  // format painting
{
	if(!edit.event) return;

	if(fpaint_status || (edit.event && edit.event.altKey)) {
	CurrentTextRange = ed.selection.createRange();
	CurrentParent = CurrentTextRange.parentElement();

		if(!edit.event.altKey) fpaint_active(0);  //do not clear format painting when ALY key is pressed

		if(!CurrentParent.isContentEditable) {alert('Opmaak tekst mag hier niet gewijzigd worden!'); return;}

		ed.execCommand('RemoveFormat');
		ed.execCommand('BackColor',false,'transparent');

		var el_font = ed.all.tags("FONT");

		for(i=el_font.length-1;i>=0;i--){
			if(el_font[i].style.backgroundColor =='transparent')
				for(j=0;j<format_paint.length;j++){
					eval('select_style = el_font[i].currentStyle.' + fpaint_styles[j]);
					if(select_style == 'line-through') select_style='none';
					if(select_style != format_paint[j])  //copy only different styles!
						eval('el_font[i].style.' + fpaint_styles[j] + '= format_paint[j]');
				}
			if(el_font[i].outerHTML.search(/^<\s*\/?FONT\s+style="?BACKGROUND-COLOR:\s+transparent"?\s*>/i) != -1) //no styles?
				el_font[i].id='this_font_tag_can_be_removed';
			if(el_font[i].style.backgroundColor == 'transparent') el_font[i].style.backgroundColor = '';
		}
		CurrentTextRange.collapse(); CurrentTextRange.select();
	}
}

/*****************************************/
function fpaint_active(mode)
{
	fpaint_status=mode;
	if(mode) paint_icon.src= IconDir + '/paint_active.gif';
	else paint_icon.src= IconDir + '/paint.gif';
}

/*****************************************/
function font_size(size)
{
	if(!CurrentParent.isContentEditable) {alert('Opmaak tekst mag hier niet gewijzigd worden!'); return;}
	ed.execCommand('FontSize',false,'1');

	var coll_font = ed.all.tags("FONT");

	for(i=coll_font.length-1;i>=0;i--)
		if(coll_font[i].size==1){

			coll_font[i].removeAttribute('size');

			var child_fonts = coll_font[i].all.tags("FONT");
			var found=false;

			for(j=0;j<child_fonts.length;j++) //check font size from child font tags
				if(child_fonts[j].style.fontSize && child_fonts[j].currentStyle.fontSize != size)
					found=true;

				if(found){ //undo list will be cleared...
				cloned_font = coll_font[i].cloneNode(true);
				child_fonts = cloned_font.all.tags("FONT");

				for(j=0;j<child_fonts.length;j++){ //remove font size from child font tags
					if(child_fonts[j].style.fontSize)
						child_fonts[j].style.fontSize = '';
					if(child_fonts[j].outerHTML.search(/^<FONT\s*>/i) != -1)
						child_fonts[j].id='this_font_tag_can_be_removed';
				}

				cloned_font.style.fontSize = size;
				coll_font[i].outerHTML = cloned_font.outerHTML;
			}
			else coll_font[i].style.fontSize = size;
		}

	CurrentTextRange.select();
}

/*****************************************/
function selection_change()
{
	alert('selection_change');

}

/*****************************************/
function key_down()
{

	if(edit.event.ctrlKey && edit.event.keyCode == 86) {
		edit.event.returnValue = false;
		bpress('Command','paste');	 //do not use CTRL+V, but simulate "paste" button instead
	};

	if(edit.event.keyCode >= 37 && edit.event.keyCode <=40){  //LEFT,UP,RIGHT,DOWN arrow keys

		if(selected_absolute) {  //move absolute object with arrow keys
			selected_absolute.style.top.search(/([\+\-]?\d*)/);
			var top = parseInt(RegExp.$1);
			selected_absolute.style.left.search(/([\+\-]?\d*)/);
			var left = parseInt(RegExp.$1);
			var offset = edit.event.shiftKey?10:1;
			switch(edit.event.keyCode)
			{
				case 37: selected_absolute.style.left = left-offset;
					break;
				case 38: selected_absolute.style.top = top-offset;
					break;
				case 39: selected_absolute.style.left = left+offset;
					break;
				case 40: selected_absolute.style.top = top+offset;
					break;
			}
			edit.event.returnValue = false;
			return;
		}
		selected_img = selected_input = selected_object = selected_absolute = 0;
	};
}
/*****************************************/
function key_get()
{
if(edit.event){

	if(edit.event.keyCode == 13){ //ENTER-key

		if(selected_img) return;

		var el = search_class(editblock);

		if(el && el.className.search(noeditenter) != -1) {
			alert('Invoegen nieuwe regel is hier niet toegestaan...'); edit.event.returnValue = false; return;
		}

		var form_el = get_parent(/^FORM$/);

		if(form_el && form_el.className == 'dada_form') {
			//insert div/p outside form!!
			CurrentTextRange = ed.selection.createRange();
			var parent_el = get_parent(/^(DIV|P)$/,CurrentTextRange,form_el);
			if(parent_el && parent_el.isContentEditable){
				edit.event.returnValue = false;
				parent_el.insertAdjacentHTML("afterEnd",'<DIV>&nbsp;</DIV>');
				ed.body.focus();
				return;
			}
		}

		parent_el = get_parent(/^(TD|TR|TABLE|DIV|P|UL|OL|BODY|SPAN)$/);

		if(parent_el.className.search(/edit_shift_enter/) != -1 && !edit.event.shiftKey) {
			alert('druk op SHIFT+ENTER om hier een regel in te voegen.'); edit.event.returnValue = false; ed.focus(); return;}

		if(main_menu && main_menu.contains(parent_el) && !edit.event.shiftKey) {
			alert('druk op SHIFT+ENTER om een nieuwe regel in het menu toe te voegen.'); edit.event.returnValue = false; ed.focus(); return;}

	}

//escape key pressed in edit.document?
if(edit.event.keyCode == 27) {fpaint_active(0);template_insert(0);}
	if(edit.event.keyCode == 20) remove_nested_div_block();  //Ctrl + T
}

//escape key pressed in editor?
if(event && event.keyCode == 27) {fpaint_active(0);template_insert(0);}

ed.focus();
}

/*****************************************/
function click_context()
{
	CurrentParent = edit.event.srcElement;
	CurrentTextRange = ed.selection.createRange();
	if(!selected_img) CurrentTextRange.moveToElementText(CurrentParent);

	if(CurrentParent.isContentEditable && edit.event.ctrlKey) { //Ctrl+Right click: select parent element
		CurrentTextRange.select();
		edit.event.returnValue = false;
	}
}

/*****************************************/
function php_change_parms(form_field,parm_name,search_string,end_string)
{
	if(!edit.php_get_parameters) {alert('Deze functie is niet beschikbaar op deze pagina!'); return; }

	var search_str = search_string.replace(/([^\d\w])/g,'\\$1'); 	//backslash all non-word characters!
	var php_vars = new Array;
	var php_vars = edit.php_get_parameters();
	var el_comment = ed.all.tags("!");
	var re = new RegExp(search_str);

	for(i=0;i<el_comment.length;i++)
		if(el_comment[i].text.search(re) != -1) break;

	if(i<el_comment.length) var comment_el = el_comment[i];
	else { alert('Deze functie is niet beschikbaar op deze pagina!'); return; }

	var arg = new Array(form_field,parm_name,comment_el,php_vars);
	ReturnValue = showModalDialog(EditDir + "/php.html",arg,"dialogWidth: 18; dialogHeight: 12; dialogPosition:center; resizable: yes; help: no; scroll: no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action == 'cancel') return;

	var parms = ReturnValue[1];
	var str = '';

	for(i=0;i<parms.length;i++)
		str += parm_name + "[]=" + parms[i] + "&"
	comment_el.text = search_string + str.substring(0,str.length-1)+end_string; //remove last '&'
	alert("Deze wijziging zal pas zichtbaar zijn nadat de pagina is opgeslagen.");
}

/*****************************************/
function Trange_bug_fix(func,Trange)
{
	if(selected_img) {
		CurrentTextRange.moveToElementText(selected_img);
		CurrentTextRange.select();
		selected_img = 0;
	}

	CurrentTextRange = Trange ? Trange : ed.selection.createRange();
	var count;

	switch(func)
	{
	case 'templates':
		if(CurrentTextRange) CurrentParent = CurrentTextRange.parentElement();
		return CurrentParent;
		break;

	default:
		if(CurrentTextRange.htmlText != undefined){

			if(func == 'link' && get_parent(/^A$/i) ) return;

			if(CurrentTextRange.text.length == 0){
			var prev_text;
			do{
				prev_text = CurrentTextRange.text;
				count = CurrentTextRange.moveEnd('character',1);
			}
			while(count && prev_text != CurrentTextRange.text && CurrentTextRange.text.search(/[\xC0-\xFF\w]+$/) != -1);
			CurrentTextRange.moveEnd('character',-1);

			do{
				prev_text = CurrentTextRange.text;
				count = CurrentTextRange.moveStart('character',-1);
			}
			while(count && prev_text != CurrentTextRange.text && CurrentTextRange.text.search(/^[\xC0-\xFF\w]+/) != -1);
			CurrentTextRange.moveStart('character',1);

			}
			else if(!event || !event.shiftKey)  //do not remove spaces when SHFIT key is active
			{

//alert('a' + CurrentTextRange.htmlText + 'b');
				var txt = CurrentTextRange.text.replace(/^\s*([\s\S]+?)\s*$/,'$1');
				CurrentTextRange.findText(txt,0,4);
//alert('a' + CurrentTextRange.text + 'b');
			}
		}
		CurrentTextRange.select();
	}  //end switch statement
}

/*****************************************/
function templates(nr,CurrentParent)
{
	if(nr) {
		nr--;
		if(my_templates[nr][1] == 'eval') {
			eval(my_templates[nr][2]);
			return;
		}
		var parent_el='';
		var template_el='';

		CurrentParent = get_parent(/^(DIV|P)$/,'',CurrentParent);

		if(CurrentParent) template_el = search_class(edittemplateblock,'',CurrentParent);

		if((!CurrentParent || !CurrentParent.isContentEditable) && !template_el) {
			alert('Template kan hier niet worden ingevoegd of worden verwijderd.');
			return;
		}

		//template can also be inserted above currrent table?
		var ParentBlock = false;
		var ParentTable = get_parent(/^(TABLE)$/,'',CurrentParent);
		if(ParentTable && ParentTable.isContentEditable) {
			ParentBlock = get_parent(/^(DIV|P)$/,'',ParentTable.parentElement);
			var ParentBlockParent = get_parent(/^(DIV|P)$/,'',ParentBlock.parentElement);

			if(!ParentBlockParent ||
				 !ParentBlockParent.isContentEditable ||
				  //ParentBlockParent.className.search(/editblock/i) != -1 ||
				  //ParentBlockParent.id ||
				 !ParentBlock ||
			   !ParentBlock.isContentEditable ||
			    ParentBlock.id ||
			    ParentBlock.className.search(/editblock/i) != -1
			   ) ParentBlock = false;
		}

		arg = new Array(ed,my_templates[nr],template_el);
		ReturnValue = showModalDialog(EditDir + "/template.html",arg,"dialogWidth: 18; dialogHeight: 11; dialogPosition:center; resizable: yes; help: no; scroll: no;");

		var action = 'cancel';
		if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
		ed.focus();

		var Trange = ed.selection.createRange();
		if(Trange) {Trange.collapse(); Trange.select(); }

		if(action == 'cancel') return;
    var par1 = ReturnValue[1];

		if(my_templates[nr][2]){
			my_templates[nr][1].search(my_templates[nr][2]);
			template_code = RegExp.$1 + par1 + RegExp.$3;
		} else template_code = my_templates[nr][1];



		switch(action)
		{
			case 'marker':
				var marker = '<IMG class=template_insert onclick="parent.template_insert(this);" style="display:block;" src="' + IconDir + '/template.png">';
				CurrentParent.insertAdjacentHTML('beforeBegin',marker);
				CurrentParent.insertAdjacentHTML('afterEnd',marker);
				if(ParentBlock){
					ParentBlock.insertAdjacentHTML('beforeBegin',marker);
					ParentBlock.insertAdjacentHTML('afterEnd',marker);
				}

				//check iscontenteditable
				var el_img = ed.all.tags("IMG");
				for(i=el_img.length-1;i>=0;i--)
					if(!el_img[i].isContentEditable)
						el_img[i].removeNode(false);

				be_patient(1,'klik op een van de rode markeringen om de template daar in te voegen.<br>Of druk op ESC om te annuleren.');
				return;
			case 'above':
					CurrentParent.insertAdjacentHTML('beforeBegin',template_code);
					CurrentParent.scrollIntoView(true);edit.scrollBy(0,-100);
				break;
			case 'below':
					CurrentParent.insertAdjacentHTML('afterEnd',template_code);
					CurrentParent.scrollIntoView(false);edit.scrollBy(0,100);
				break;
			case 'cut':
				if(template_el) template_el.outerHTML = ''; //remove template
				break;
		}
	}
}


/*****************************************/
function template_insert(obj)
{
	be_patient(0);
	//if(obj && template_code) obj.outerHTML = template_code;
	if(obj && template_code) obj.insertAdjacentHTML('beforeBegin',template_code);
	var el_img = ed.all.tags("IMG");
	for(i=el_img.length-1;i>=0;i--)
		if(el_img[i].className.search(/template_insert/i) != -1){
			//el_img[i].removeNode(false);
			el_img[i].className = 'edit_please_remove_me';
			el_img[i].style.width = el_img[i].style.height = '0px';
		}
}

/*****************************************/
function check_dada_form_script()
{
		var col_form = ed.all.tags("FORM");
		var found = false;
		for(i=0;i<col_form.length;i++)
			if(col_form[i].className.search(/dada_form/) != -1) {found=true; break;}

		if(found){
			found = false;
			var col_script = ed.all.tags(Script_editor);
			for(var i=0;i<col_script.length;i++)
				if(col_script[i].src && col_script[i].src.search(/dada_form\.js$/) != -1){found=true; break;}

			if(!found){
				var script_el = ed.createElement(Script_editor);
				script_el.src = EditDir + '/dada_form.js';
				script_el.type="text/javascript";
				//script_el.className = "edit_enable_script"; //do not use this!!
				ed.all.tags('HEAD')[0].insertAdjacentElement('beforeEnd',script_el);
			}

		}
}

/*****************************************/
function menu_main_dialog(el)
{
	CurrentTextRange = ed.selection.createRange();
	if(!selected_img) CurrentTextRange.moveToElementText(CurrentParent);

	var el=search_class('( |^)(edit_left_menu\\d+)','',CurrentParent)
	if(el && el.className.search(/edit_left_menu(\d+)/) != -1)
	{
		menu_left_dialog(el,RegExp.$1);
		return;
	}

	find_table_elements(CurrentParent);

	var el_comment = ed.all.tags("!");
	for(var i=0;i<el_comment.length;i++)
		if(el_comment[i].text.search(re_menuLocation) != -1)  //menu bar location
			MenuBarLocation = el_comment[i];

	arg = new Array;
	if(table_el && table_el.className.search(/edit_menu(\d+)\.(left|center|right)\.(left|right|none|both)\.(\d+)(?:\_(\d+))?/i) != -1)
	{
		arg[0] = RegExp.$4; //spacing
		arg[1] = RegExp.$2; //justify
		arg[2] = RegExp.$3; //alignment
		arg[3] = table_el.rows(0).cells.length;
		arg[4] = RegExp.$1; //highlighted menu
		max_width = RegExp.$5; //max_width
		if(RegExp.$1 > arg[3]) arg[3] = -1;	//max number of menus
		arg[5] = true;
	}
	arg[6] = templateMenuBar && MenuBarLocation;

	if(!arg[5] && !arg[6]) {alert('Geen menudefinitie gevonden.'); return; }

	ReturnValue = showModalDialog(EditDir + "/menu.html",arg,"dialogWidth: 19; dialogHeight: 32; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no;");
	ed.focus();

	var choice   = ReturnValue[0]; 	if(choice == 'cancel') return;
	var where    = ReturnValue[1];
	var align    = ReturnValue[2];
	var indent   = ReturnValue[3];
	var spacing  = ReturnValue[4];
	var menu_nr  = ReturnValue[5];


	switch(choice)
	{
		case 'insert':
			if(where == "right") td = table_el.rows(tr_el.rowIndex).insertCell(td_el.cellIndex+1);
			else td = table_el.rows(tr_el.rowIndex).insertCell(td_el.cellIndex);
			td.mergeAttributes(td_el);
			td.innerHTML = td_el.firstChild.outerHTML;
			//td.firstChild.innerText = "Menu?";
			td.firstChild.attachEvent("onkeyup",menu_resize);
			break;
		case 'remove':
			if(tr_el.cells.length <=1) { alert('Het laatste menu-item mag niet verwijderd worden!'); return;}
			table_el.rows(tr_el.rowIndex).deleteCell(td_el.cellIndex);
			break;
		case 'change':
			break;
		case 'insert_menubar':
			MenuBarLocation.outerHTML = templateMenuBar + MenuBarLocation.outerHTML;
			menu_resize();
			return;
		case 'remove_menubar':
			if(confirm('Weet je zeker dat je het hele menu wilt verwijderen?\n(dit kan niet meer teruggedraaid worden)'))
			table_el.outerHTML='';
			return;
	}

	if(max_width) max_width = '_'+max_width;
	table_el.className = table_el.className.replace(/(edit_menu\d+)(\.[\w\d]+){3}/i,'edit_menu' + menu_nr + '.' + align + '.' + indent + '.' + spacing + max_width);
	menu_resize();
	if(edit.check_menus) edit.check_menus();
}



/*****************************************/
function menu_left_dialog(el,nr)
{
	re_virtual = include_virtual_temp.replace(/([^\d\w])/g,'\\$1'); //backslash all non-word characters
	re_virtual = new RegExp(re_virtual + '[\'\"\ ]*(.*?)(\\d+)[\'\"\ ]*-->$',"i");
	re_ssi_save = new RegExp('(' + edit_ssi_save + '|' + edit_ssi_change + ')',"i");

	var col_comment = el.getElementsByTagName("!");
	var el_ssi_save;
	var el_ssi_virtual;

	for(i=0;i<col_comment.length;i++)
		if(col_comment[i].text.search(re_ssi_save) != -1)
			el_ssi_save = col_comment[i];
		else if(col_comment[i].text.search(re_virtual) != -1) {
			el_ssi_virtual = col_comment[i];
			var file_name = RegExp.$1;
			var file_nr = RegExp.$2;
		}

	if(el_ssi_save && el_ssi_virtual)
	{
//		var col_table = ed.all.tags("TABLE");
//		for(i=0;i<col_table.length;i++)
//			if(col_table[i].className.search(/edit_menu(\d+)\.(left|center|right)\.(left|right|none|both)\.(\d+)/i) != -1) break;
//		var max_menus =  col_table[i].rows(0).cells.length;
//		var nr_menus = file_nr;
//		if(nr_menus > max_menus) nr_menus = max_menus;
//		arg = new Array(ed,nr_menus,max_menus);

		arg = new Array(ed,file_nr,9);
		ReturnValue = showModalDialog(EditDir + "/menu_left.html",arg,"dialogWidth: 22; dialogHeight: 9; dialogPosition:center; resizable: yes; help: no; scroll: no;");

		var action = 'cancel';
		if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
		ed.focus();
		if(action == 'cancel') return;

		var new_nr = action;

		if(nr != new_nr && confirm('Weet je zeker dat je het linker menu wilt wijzigen?\n\nNB: Het nieuwe menu wordt pas zichtbaar \nnadat je het bestand hebt opgeslagen!')) {

			el_ssi_save.text = edit_ssi_change;

			re_file_name = file_name.replace(/([^\d\w])/g,'\\$1'); //backslash all non-word characters
			re_file_name = new RegExp(re_file_name + file_nr,"i");

			el_ssi_virtual.text = el_ssi_virtual.text.replace(re_file_name,file_name + new_nr);
			el.className = el.className.replace(/(edit_left_menu)\d+/,'$1' + new_nr);
		}
	}
	selected_img = 0;
}

/*****************************************/
function menu_resize()
{
	if(edit.event) edit.event.returnValue = false;
	if(align_table_active) return;
	align_table_active =1;

	var el_table = ed.all.tags("TABLE");

	for(var i=0;i<el_table.length;i++){
		if(el_table[i].className.search(/(edit_menu\d+)\.(left|center|right)\.(left|right|none|both)\.(\d+)(?:\_(\d+))?/i) != -1) {
			table_el = el_table[i];
			tr_el = el_table[i].rows(0);
			td_el = el_table[i].rows(0).cells(0);
			align_table(RegExp.$2,RegExp.$3,RegExp.$4,RegExp.$5);
		}
	}
	align_table_active =0;
}


/*****************************************/
function align_table(align,indent,spacing,max_width)
{
	CurrentTextRange = ed.selection.createRange();
	//alert(align + indent + spacing)
	if(!spacing) spacing=0;
	spacing = parseInt(spacing);

	var text_width=0;
	var padding=0;
	var padding_start=0;
	var padding_end=0;
	var nr_cells = tr_el.cells.length;
	var total_width;

	for(var i=0;i<nr_cells;i++){
		tr_el.cells(i).style.paddingLeft = tr_el.cells(i).style.paddingRight = 0 + 'px';
		if(tr_el.cells(i).firstChild.innerText.search(/^\s*$/) != -1) {
			tr_el.cells(i).firstChild.innerText = '??';
			alert('Om een menu item te verwijderen,\nklik met de rechtermuis op het item en kies "Verwijderen"');
		}

		var innerHTML =  tr_el.cells(i).firstChild.innerHTML;
		var innerText =  tr_el.cells(i).firstChild.innerText;

		//put text and spaces into <a> link
		var a_el = tr_el.cells(i).firstChild.getElementsByTagName("A")[0];

		if(a_el) {
			if(a_el.className.search(editborder) == -1) a_el.className = "editborder " + a_el.className;
			var a_el_text = a_el.innerText.replace(/ /g,'&nbsp;');

			var mytext = innerHTML.replace(/<[^>]+?>/gi,'');
			var myHTML = innerHTML.replace(/>([^<]+)</gi,'><');
			myHTML = myHTML.replace(/(^[^<]*|[^>]*$)/gi,'');

			if(innerHTML.search(/<a[^>]+>(.+?)<\/a/i) != -1){
				if(RegExp.$1.replace(/<[^>]+?>/gi,'') != mytext){
					tr_el.cells(i).firstChild.innerHTML = myHTML.replace(/(<a[^>]*>).*(<\/a)/i,'$1' + mytext + '$2');
					if(mytext.substr(mytext.length-a_el_text.length) == a_el_text){
						CurrentTextRange.collapse();
						trange_select(CurrentTextRange,1)
					}
				}
			}
		}
		else { //change last soft space into hard space
			innerText = innerText.replace(/^\s*(.*?)\s*$/,'$1');
			innerText = innerText.replace(/([^\w\d\s])/g,'\\$1');

			var re = new RegExp(innerText + '(&nbsp;)* ','i')
			if(innerHTML.search(re)!= -1)	{
				tr_el.cells(i).firstChild.innerText = tr_el.cells(i).firstChild.innerText.replace(/ $/gi,'%#####%');
				tr_el.cells(i).firstChild.innerHTML=innerHTML.replace(/%#####%/gi,'&nbsp;');
			}
		}
	}

	table_el.style.width=0 + 'px';
	text_width = table_el.clientWidth;

	if(!max_width)	table_el.style.width='100%';
	else table_el.style.width=max_width;

	total_width=table_el.clientWidth;

	var space_left = total_width - text_width;

	//alert('nr_cells:' + nr_cells + ' mw: ' + max_width + ' tw: ' + text_width + ' sl: ' + space_left);

	switch(align)
	{
		case 'center':
			switch(indent)
			{
				case 'none':
					padding = 0.5 * space_left/(nr_cells-1);
					break;
				case 'both':
					padding_start = padding_end = space_left/(nr_cells+1);
					padding = 0.5 * padding_start;
					break;
				case 'right':
					padding_end = spacing;
					padding = (space_left-spacing)/(2*(nr_cells-1));
					//total_width = text_width + spacing + 2 * padding * (nr_cells-1);
					break;
				case 'left':
					padding_start = spacing;
					padding = (space_left-spacing)/(2*(nr_cells-1));
					//total_width = text_width + spacing + 2 * padding * (nr_cells-1);
					break;
			}
			break;

		case 'left':
			switch(indent)
			{
				case 'none':
					padding =  Math.min (0.5 * spacing, 0.5 * space_left/(nr_cells-1));
					total_width = text_width + 2 * padding * (nr_cells-1);
					break;
				case 'left':
					padding_start = Math.min (spacing, space_left/(nr_cells));
					padding = 0.5 * padding_start;
					total_width = text_width + padding_start * nr_cells;
					break;
			}
			break;

		case 'right':
			switch(indent)
			{
				case 'none':
					padding =  Math.min (0.5 * spacing, 0.5 * space_left/(nr_cells-1));
					padding_start = space_left - 2 * padding * (nr_cells-1);
					total_width = text_width + 2 * padding * (nr_cells-1) + padding_start;
					break;
				case 'right':
					padding_end = Math.min (spacing, space_left/(nr_cells));
					padding = 0.5 * padding_end;
					padding_start = space_left - 2* padding * (nr_cells-1) - padding_end;
					total_width = text_width + 2 * padding * (nr_cells) + padding_start;
					break;
			}
			break;
	}

	padding = padding<0 ? 0 : Math.floor(padding);
	padding_start = padding_start<0 ? 0 : Math.floor(padding_start);
	padding_end = padding_end<0 ? 0 : Math.floor(padding_end);

	//alert('nr_cells:' + nr_cells + ' max_width:' + max_width + ' text_width:' + text_width + ' pds:' + padding_start + ' pd:' + padding + ' pdl:' + padding_end);

	for(var i=0;i<nr_cells;i++){
		tr_el.cells(i).style.paddingLeft =  tr_el.cells(i).style.paddingRight = padding + 'px';
	}

	tr_el.cells(0).style.paddingLeft = padding_start + 'px';
	tr_el.cells(nr_cells-1).style.paddingRight = padding_end + 'px';

	if(max_width){
			//total_width = Math.ceil(Math.min(total_width,max_width));
			max_width = '_'+max_width;
	}

	table_el.style.width= total_width + 'px';
	table_el.className = table_el.className.replace(/(edit_menu\d+)(\.[\w\d]+){4}/i,'$1' + align + '.' + indent + '.' + spacing + max_width);
}

/*****************************************/
function check_menu_dialog()
{
if(!check_frames_sub) {alert('Geen menu aangetroffen.'); return; }
	arg = new Array(ed,check_frames_menu,check_frames_sub);
	ReturnValue = showModalDialog(EditDir + "/check_menu.html",arg,"dialogWidth: 22; dialogHeight: 13; dialogPosition:center; resizable: yes; help: no; scroll: no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();
	if(action == 'cancel') return;

	check_frames_menu = ReturnValue[1];
	check_frames_sub = ReturnValue[2];
}


/*****************************************/
function key_up()
{
	alert(edit.event.keyCode);
//	if(edit.event.keyCode == 13){
//		test_position();
//	}
}

/*****************************************/
function test_position()
{
 var parent = get_parent(/^(DIV|P|TD)$/);
 if(parent && parent.innerHTML.search(/(<p|<div).*?>&nbsp;<\/(p|div)>$/i) != -1){
	var el = parent.all(parent.all.length-1);
	if(el){
	Trange = ed.selection.createRange();
	Trange.moveToElementText(el);
	Trange.select();
	}
 }
}

/*****************************************/
function position()
{
 var BodyHeightNew = ed.body.scrollHeight;
 var offset = (BodyHeightNew - BodyHeightOld) * ypos/BodyHeightOld;
 edit.window.scrollTo(xpos,ypos+offset);
}

/*****************************************/
function position1()
{
	if(ypos) edit.window.scrollTo(xpos,ypos);
}

/*****************************************/
function exec_command(par1,par2,par3)
{
//	if(obj_float) {
//			Trange = ed.selection.createRange();
//			Trange.moveToElementText(obj_float.parentElement);
//			Trange.select();
//			obj_float = 0;
//	}

	if (ed.selection.createRange().parentElement().isContentEditable || par1.search(/^(Unselect|Undo|Redo)$/i) != -1)
		{ed.execCommand(par1,par2,par3); ed.body.focus();}
	else alert('Opmaak tekst mag hier niet gewijzigd worden!');
}


/*****************************************/
function Command(cmd,block)
{
	last_command_used = cmd;

	if(block){
		if(ed.selection.type.search(/control/i) == 0) {
			exec_command(cmd);
			ed.focus();
			return;
		}
		var parent_el = get_parent(re_block,CurrentTextRange);

		//search for a menu definition
		var main_menu = false;

		if( search_id('main_menu_v\\d+',parent_el) )
			main_menu = true;

		tag = parent_el.tagName;

		//cancel command if selected multiple cells
		if(tag.search(/^(TABLE|TBODY)$/) != -1 || parent_el.children.tags("TD").length > 1) {alert('Deze functie kan niet worden uitgevoerd op meerdere cellen.\nGebruik hiervoor de tabelfuncties.'); return;}

		if(tag!="TD" && !main_menu && (tag != "LI" || cmd.search(/justify/i)== -1)) {

			var parent_empty = selected_img ? selected_img.parentElement.innerText.search(/^(\s|\&nbsp\;)*$/i)  : ''; //parent block empty?

			if(selected_img && (parent_empty == -1) ){ // && selected_img.parentElement.innerText.search(/^(\s|\&nbsp\;)*$/i) == -1){ //parent block empty?
			//alignment of pictures:
				CurrentTextRange.moveToElementText(selected_img);
				CurrentTextRange.select();

				var img_align = selected_img.align;

				if(cmd == 'JustifyLeft') selected_img.align='left';
				if(cmd == 'JustifyRight') selected_img.align ='right';
				if(cmd == 'JustifyCenter')selected_img.align = 'bottom';
				if(cmd == 'JustifyFull')selected_img.align = 'bottom';

				if( (img_align != "center" && selected_img.align != "center") ||
						 (img_align != "left" && selected_img.align != "left") )
				{
					var temp = selected_img.style.marginLeft; //swap left-right margin
					selected_img.style.marginLeft = selected_img.style.marginRight;
					selected_img.style.marginRight = temp;
				}
				return;

			}	else {
					if(parent_empty != -1 && selected_img.parentElement) {
						CurrentTextRange.moveToElementText(selected_img.parentElement);
						CurrentTextRange.select();
					}
					parent_el = get_parent(/^SPAN$/,CurrentTextRange);
				  if(parent_el && parent_el.className.search(/edit_span_img_align/i) != -1){
				  	parent_el.style.display='inline';
				 		exec_command(cmd);
				  	parent_el.style.display='block';
				  }else exec_command(cmd);
			}

			if(el_li = get_parent(/^LI$/i,CurrentTextRange)){ //remove <div> and <p> tags from <li>
				// copy align and other attributes!!
				if(el = el_li.children.tags("DIV")[0]) el.outerHTML = el.innerHTML;
				if(el = el_li.children.tags("P")[0])   el.outerHTML = el.innerHTML;
			}
		} else //use align attribute for alignment of cells
			if( (tag=="TD" || main_menu) && cmd.search(/justify/i) != -1 ){
				switch (cmd)
				{
					case "JustifyLeft": parent_el.style.textAlign="left"; break;
					case "JustifyCenter": parent_el.style.textAlign="center"; break;
					case "JustifyRight": parent_el.style.textAlign="right"; break;
				}
			} else alert('Deze functie wordt hier niet toegestaan.');
	}else exec_command(cmd);
	if(CurrentTextRange && (block || CurrentTextRange.text=='' || cmd.search(/^(Unselect)$/i) != -1) ) trange_select(CurrentTextRange);
}


/*****************************************/
function font_beautifier(remove)
{
	if(restricted_html) return;

	var coll_font = ed.all.tags("FONT");
	var count = 0;

	for(i=0; i<coll_font.length; i++){
		var font_txt = coll_font[i].innerText;

		if(coll_font[i].style.fontFamily) coll_font[i].style.fontFamily = coll_font[i].style.fontFamily.replace(/verdana,arial,geneva,sans\-serif/i,'Verdana,Arial,Geneva,Sans-serif');
		if(coll_font[i].face) coll_font[i].face = coll_font[i].face.replace(/verdana,arial,geneva,sans\-serif/i,'Verdana,Arial,Geneva,Sans-serif');

		if(coll_font[i].size == '+0')	coll_font[i].removeAttribute('size');

		if(coll_font[i].style.fontSize == coll_font[i].parentElement.currentStyle.fontSize)
			coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)fontFamily:\s*[^"'; ]+?(;| |$)/i,'$1$2');
		if(coll_font[i].style.color == coll_font[i].parentElement.currentStyle.color)
			coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)COLOR:\s*[^"'; ]+?(;| |$)/i,'$1$2');
		if(coll_font[i].color == coll_font[i].parentElement.currentStyle.color)
			coll_font[i].removeAttribute('color',0);
		if(coll_font[i].style.backgroundColor == coll_font[i].parentElement.currentStyle.backgroundColor)
			coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)BACKGROUND\-COLOR:\s*[^"'; ]+?(;| |$)/i,'$1$2');
		if(coll_font[i].face == coll_font[i].parentElement.currentStyle.fontFamily){
			coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)fontFamily:\s*[^"'; ]+?(;| |$)/i,'$1$2');
			coll_font[i].removeAttribute('face',0);
		}

		font_children = coll_font[i].all.tags('FONT');

		for(j=0; j<font_children.length; j++){

			if(!coll_font[i].style.fontSize && !coll_font[i].color && !coll_font[i].style.backgroundColor && !coll_font[i].style.fontFamily)
				break;

			if(font_children[j].innerText == font_txt){
				//fontSize
				if(coll_font[i].style.fontSize && font_children[j].style.fontSize){
					coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)fontSize:\s*[^"'; ]+?(;| |$)/i,'$1$2');
				}
				//color
				if(coll_font[i].color && font_children[j].color){
					coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)COLOR:\s*[^"'; ]+?(;| |$)/i,'$1$2');
				}
				//backgroundColor
				if(coll_font[i].style.backgroundColor && font_children[j].style.backgroundColor){
					coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)BACKGROUND\-COLOR:\s*[^"'; ]+?(;| |$)/i,'$1$2');			coll_font[i].style.removeExpression('fontFamily');
				}
				//fontFamily
				if(coll_font[i].style.fontFamily && font_children[j].style.fontFamily){
					coll_font[i].style.cssText = coll_font[i].style.cssText.replace(/( |^)fontFamily:\s*[^"'; ]+?(;| |$)/i,'$1$2');
					coll_font[i].removeAttribute('face',0);
				}
			}
		}

		if(coll_font[i].outerHTML.search(/^<FONT\s*>/i) != -1){
			coll_font[i].id='this_font_tag_can_be_removed';
			count++;
		}
	}

	//remove empty font tags
	if(remove)
		for(i=coll_font.length-1; i>=0; i--)
			if(coll_font[i].id=='this_font_tag_can_be_removed' || coll_font[i].innerText.search(/^\s*$/) != -1)
				coll_font[i].removeNode(false);

}

/*****************************************/
function code_insert()
{
	if(!CurrentParent.isContentEditable) {
		alert('Invoegen HTML code is hier niet toegestaan.');
		return;
	}

	var ShowCode;
	var code='';
	if(selected_img) CurrentParent = selected_img;
	if(event && event.shiftKey){
		ShowCode = get_parent(/^(DIV|P|TD|TABLE)$/,'',CurrentParent);
		if(ShowCode.className && ShowCode.className.search(/(editblock|contenteditable)/i) != -1)
			code = ShowCode.innerHTML;
		else if(ShowCode.tagName.search(/^(TD)$/i) != -1)
			code = ShowCode.innerHTML;
		else
			code = ShowCode.outerHTML;

		CurrentTextRange.moveToElementText(ShowCode);
		CurrentTextRange.select();
	}

	var ALTkey = false;
	if(event && event.altKey) ALTkey = true;

	arg = new Array(ed,code);
	ReturnValue = showModalDialog(EditDir + "/insert_code.html",arg,"dialogWidth: 25; dialogHeight:15; dialogPosition:center; resizable: yes; help: no; scroll: yes; ");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();

	if(action == 'cancel') return;

	var code = ReturnValue[1];
	if(action == 'cancel' || !code) return;

	code = code.replace(/(<\/?)OBJECT(\s|>)/gi,'$1OBJECT_EDITOR$2');
	code = code.replace(/(<\/?)PARAM(\s|>)/gi,'$1PARAM_EDITOR$2');

	//insert image to avoid strange code corruption by IE specially <object> and <param> tags...
	if(code.search(/^[^<]*<(P|DIV|LI)/i) == -1 )
	code = '<img class=edit_please_remove_me width=0 height=0>' + code;

	insert_HTMLcode(code,false);
}


/*****************************************/
function dada_mail()
{
	var mylist='';
	if( templateDada.search(/list\="([^"]+)"/) != -1)
	mylist = RegExp.$1;

	arg = new Array(mylist,available_dada_lists,CgiFormAction,available_dada_fields,dada_subscribe_form[0]);
	ReturnValue = showModalDialog(EditDir + "/dada.html",arg,"dialogWidth: 30; dialogHeight: 10; dialogPosition:center; resizable: yes; help: no; scroll: no;");

	var action = 'cancel';
	if(ReturnValue && ReturnValue[0]) action = ReturnValue[0];
	ed.focus();
	if(action == 'cancel') return;

	if(action == 'send'){

		if(!online()) return;
		if(document_changed() && !confirm("Let op: De laatste wijzigingen zijn nog niet bewaard!\nAlleen de opgeslagen versie wordt per email verstuurd.\nDruk op Annuleren en sla het bestand eerst op.\nOf druk op OK om toch door te gaan.")) return;

		var my_url = DomainHttp + '/' + inpath + inFileName;
		var dada_url = DadaDomainHttp + '/cgi-bin/dada/mail.cgi?f=login&admin_password='+ReturnValue[1]+'&auth_state=1&admin_list='+ReturnValue[2]+'&admin_option1=f=send_url_email&admin_option2=url='+my_url;
		new_win = window.open(dada_url,"","width=800,height=600,scrollbars=1,toolbar=1,resizable=1,titlebar=1,personalbar=1,menubar=1,status=1,location=0");

	} else if(action == 'field'){
			var code = '<span class="noeditblock edit_dada_field_tag" contentEditable=false>[subscriber.' + ReturnValue[1] + ']</span>';
			insert_HTMLcode(code,true,true);
	} else if(action == 'form'){
			var code = dada_subscribe_form[ReturnValue[2]].replace(/%%listname%%/g,ReturnValue[1]);
			var col_form = ed.all.tags("FORM");
			for(i=0;i<col_form.length;i++)
				if(col_form[i].className.search(/dada_form/) != -1 &&
				   col_form[i].name == 'dada_form_' + ReturnValue[1])
				{alert('Er is al een formulier voor de lijst "' + ReturnValue[1] + '" aanwezig op deze pagina.\nHet is helaas niet mogelijk om 2 formulieren voor dezelfde llijst op 1 pagina te zetten.'); return; }

			//get_scroll_pos();
			insert_HTMLcode(code,true,true);
			check_dada_form_script();
			//edit.window.setTimeout(position1,100);

	} else if(action == 'link'){
			Trange_bug_fix('dada_link');
			if((CurrentTextRange.text == "" &&  CurrentTextRange.htmlText.search(/<img(.|\s)*>/i) == -1) &&  !selected_img && !obj_float)
			{alert('Selecteer eerst tekst of een plaatje voor de link!'); return; }
			ed.execCommand('Unlink');
			ed.execCommand('CreateLink','',DadaDomainHttp + '/cgi-bin/dada/mail.cgi/list/' + ReturnValue[1] + '/');
	}
}


/*****************************************/
function check_dada_fields()
{
	var coll_span = ed.all.tags("SPAN");
	var not_found_text='';

	for(i=0; i<coll_span.length; i++){
		if(coll_span[i].className.search(/edit_dada_field_tag/i) != -1){
			var found = false;
			for(j=0;j<available_dada_fields.length;j++)
				if('[subscriber.' + available_dada_fields[j][0] + ']' == coll_span[i].innerText) {
					found=true; break;
				}

			if(!found) not_found_text  += '\n  ' + coll_span[i].innerText;
		}
	}

		if(not_found_text){
			if(confirm('Let op, onderstaande dada tags zijn onbekend. Toch het bestand opslaan?\n' + not_found_text + '\n\nOK=opslaan, Annuleren=niet opslaan')) return true;
			else return false;
		} else return true;


}

/*****************************************/
function insert_hor_line()
{
	CurrentTextRange = ed.selection.createRange();

//	var hr_colors = new Array('standaard','red','green','blue','aqua','black','fuchsia','gray','lime','maroon','navy','olive','purple','teal','yellow');
//	var arg = new Array(ed,IconDir,hr_colors);
//
//	ReturnValue = showModalDialog(EditDir + "/horline.html",arg,"dialogWidth: 29; dialogHeight: 14; dialogLeft: 100; dialogTop: 100; resizable: yes; help: no; scroll: no;");
//	var action = ReturnValue[0];
//	var selected_color = ReturnValue[1];
//	ed.focus();
//
//	if(action == 'cancel') return;
//
//	var line_img = ReturnValue[1];

	var tmp = CurrentTextRange;
	var CurrentTagParent;

	CurrentTextRange.collapse();
	CurrentTextRange.select();

	var empty_block = false;
	if(CurrentTextRange.parentElement){
		CurrentTagParent = CurrentTextRange.parentElement();
		if(CurrentTagParent.innerHTML == '') empty_block = true;
	}

	CurrentTagParent = get_parent(re_block,CurrentTextRange);

	if(restricted_html) {
		if(CurrentTagParent.tagName == 'P'){
			if(confirm('Bij een nieuwsbrief-document is het invoegen van een horizontale lijn niet toegstaan binnen een paragraaf.\nDe paragraaf wijzigen in een tekstblok?')){
				ed.execCommand('InsertHorizontalRule','');
				CurrentTagParent.outerHTML.search(/^\s*<P([^>]*>)/i); //get attributes
				CurrentTagParent.outerHTML = '<DIV' + RegExp.lastParen + CurrentTagParent.innerHTML + '</DIV>';
			}
			return;
		}
	}

	ed.execCommand('InsertImage','',hrgif);
	var el_img = tmp.parentElement();

	el_img.style.width = '100%'; //will be changed into width attribute by clean_code
	el_img.height = '12';
	el_img.className = 'edit_hor_line';

	if(!empty_block)  el_img.outerHTML = '<br>' + el_img.outerHTML;
}

/*****************************************/
function restricted_html_conversion(mode)
{
	switch(mode)
	{
		case 'init':
			var el_comment = ed.all.tags("!");
			for(i=0;i<el_comment.length;i++)
				if(el_comment[i].text.search(re_editor_config) != -1) { //restricted HTML for newsletter
					restricted_html = RegExp.$1; break;
				}
			if(restricted_html) restricted_html_conversion('clean');
		break;

		case 'clean':
		//looks like these checkings are superfluous, however <IMG class=edit_hor_line> could be copied from other sources so just in case...
			var el_img = ed.all.tags("IMG");
			for(i=el_img.length-1;i>=0;i--){
				if(el_img[i].className == 'edit_hor_line'){
					var new_obj = ed.createElement('HR');
					el_img[i].replaceNode(new_obj);
				}
			}
		//replace <P> tag conataining <TABLE> or <HR> into <DIV>
			var coll_p = ed.all.tags("P");
			for(i=coll_p.length-1;i>=0;i--){
				var hr_found = coll_p[i].all.tags("HR").length;
				var table_found = coll_p[i].all.tags("TABLE").length;
				if(hr_found || table_found) { 
					coll_p[i].outerHTML.search(/^\s*<P([^>]*>)/i); //get attributes
					coll_p[i].outerHTML = (hr_found ? empty_cell : '') + '<DIV' + RegExp.lastParen + coll_p[i].innerHTML + '</DIV>' + (hr_found ? empty_cell : '');
				}
			}
		break;

		default: alert("functie restricted html: onbekende mode!");
	}//end case
}
/*****************************************/
function get_scroll_pos()
{
	ypos = xpos = 0;

	if (ed.documentElement && typeof(ed.documentElement.scrollTop) != 'undefined'){
		ypos = ed.documentElement.scrollTop;
		xpos = ed.documentElement.scrollLeft;
	}

	if (ypos == 0 && ed.body && typeof(ed.body.scrollTop) != 'undefined'){
		ypos = ed.body.scrollTop;
		xpos = ed.body.scrollLeft;
	}
}
