// $Id: editor.js 684 2004-03-09 16:31:59Z remco $

function initialiseer(cssfile,htmlwaarde)
{
	richedit.document.open();
	richedit.document.write("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>")
	richedit.document.write("<html>")
	richedit.document.write("<head>")
	//richedit.document.write('<link href="'+cssfile+'" rel="stylesheet" type="text/css">')
	richedit.document.write("<meta content='text/html; charset=unicode' http-equiv=Content-Type>")
	richedit.document.write("</head>")
	richedit.document.write("<body class=editor>")
	richedit.document.write(htmlwaarde);
	richedit.document.write("</body>")
	richedit.document.write("</html>")
	richedit.document.close();
	richedit.close();
	richedit.document.designMode = 'On';
	nr_images=0;
}

function extractStyles(str)
{
	var p1=str.match(/style=(['"])([^\1]+)\1/i);
	var p3=new Array();
	if (!p1||!p1[2]) return p3;
	var p2=p1[2].split(/;[ ]*/);
	for (id in p2)
	{
		var val=p2[id].split(/:[ ]*/);
		p3[val[0].toLowerCase()]=val[1];
	}
	return p3;
}

function insertStyles(arr)
{
	var p1="";
	for (id in arr)
	{
		if (arr[id]!==null)
			p1+=id+":"+arr[id]+"; ";
	}
	p1=p1.replace(/"/g,"'");
	return p1;
}



function zoekParentElement(elm,elem)
{
   var ret=elm;
   while ((ret.tagName != elem && ret.tagName != "BODY"))
      ret = ret.parentElement;
   if (ret.tagName == "BODY")
    return null;
   return ret;
}

function zoekElement(elem)
{
   if (richedit.document.selection.type == "Control")
   	return null;
   var ret=richedit.document.selection.createRange().parentElement();
   while ((ret.tagName != elem && ret.tagName != "BODY"))
      ret = ret.parentElement;
   if (ret.tagName == "BODY")
    return null;
   return ret;
}

function zoekElementBuitenControl(elem)
{
   if (richedit.document.selection.type == "Control")
   {
   	if (!sel||!sel.element.parentElement) return null;
		var ret=sel.element.parentElement;
		while ((ret.tagName != elem && ret.tagName != "BODY"))
			ret = ret.parentElement;
		if (ret.tagName == "BODY")
		 return null;
   
   }
   else
   {
		var ret=richedit.document.selection.createRange().parentElement();
		while ((ret.tagName != elem && ret.tagName != "BODY"))
			ret = ret.parentElement;
		if (ret.tagName == "BODY")
		 return null;
	}
   return ret;
}

function zoekElementen()
{
   if (richedit.document.selection.type == "Control")
   	return null;
   var ret=richedit.document.selection.createRange().parentElement();
   while ((ret.tagName != "A" && ret.tagName != "TABLE" && ret.tagName != "TD" && ret.tagName != "BODY"))
   {
      ret = ret.parentElement;
   }
   if (ret.tagName == "BODY")
    return null;
   return ret;
}

function checkLinkInsertable()
{
   return (richedit.document.selection.type != "Control" || !sel || (sel.type!="TABLE"&&sel.type!="HR"));
}			
function checkCharInsertable()
{
  	return (sel == null || sel.type == "TD");
}			
function checkImageInsertable()
{
	//if (sel&&sel.type!="IMG")
	//	alert (richedit.document.selection.type);
	if (!imagePerm) return false;
  	return (sel == null || sel.type == "IMG" || sel.type == "TD");
}			
function checkTableInsertable(outsideControl)
{
	if (!tablePerm) return false;
	if (outsideControl && sel != null) return true;
  	return (sel == null || sel.type == "TABLE" || sel.type == "TD");
}

function cssIdToJs(id)
{
	var ret=id.toLowerCase();
	if (!ret.match(/-/))
		return ret;
	var spl=ret.split(/-/);
	ln=spl.length;
	if (ln<2)
		return ret;
	for (i=1;i<ln;i++)
	{
		spl[i]=spl[i].substr(0,1).toUpperCase()+spl[i].substr(1);
	}
	ret=spl.join('');
	return ret;
}

function jsIdToCss(id)
{
	var ret=id;
	if (!ret.match(/[A-Z]/))
		return ret;
	ret=ret.replace(/([A-Z])/g,'-$1');
	ret=ret.toLowerCase();
	return ret;
}

function cleanTD(td)
{
//haal wordcode eruit
	innerHTM=td.innerHTML;

		var tdHTMLArr = td.outerHTML.match(/<td[^>]*>/i);
		var tdHTML=tdHTMLArr[0];
		var inlineStyles = extractStyles(tdHTML);
		for (id in inlineStyles)
		{
			idsafe=cssIdToJs(id);
			idterug=jsIdToCss(idsafe);
			//alert(id+" wordt:"+idsafe+", terug:"+idterug+".");
			if (idsafe) switch(idsafe)
			{
				case 'backgroundColor':
				case 'width':
				case 'height':
					//alert('Doe niets met: '+id);
					break;
				
				default:
					//alert('default');
					//alert ('Verwijder '+idsafe);
					//delete inlineStyles[id];
					td.style[idsafe]='';
					if (idsafe.match(/border[A-Z]/))
					{
					//ook Color, Style, Width weghalen
						td.style[idsafe+'Color, ']='';
						td.style[idsafe+'Style']='';
						td.style[idsafe+'Width']='';
					}
					break;
			
			}
			//alert('if gehad');
		}
		td.vAlign='';
		td.align='';
		if (!td.style.width&&td.width)
			td.style.width=parseInt(td.width)+'px';
		if (!td.style.height&&td.height)
			td.style.height=parseInt(td.height)+'px';
		if (!td.style.backgroundColor&&td.bgColor)
			td.style.backgroundColor=td.bgColor;
		td.width='';
		td.height='';
		td.bgColor='';
		schoneInnerHTM=innerHTM.replace(/<\/?P[^>]*>/gi,'');
		schoneInnerHTM=schoneInnerHTM.replace(/<\/?O:[^>]*>/gi,'');
		schoneInnerHTM=schoneInnerHTM.replace(/<\/?FONT[^>]*>/gi,'');
		schoneInnerHTM=schoneInnerHTM.replace(/<\?[^>]*>/gi,'');
		//alert("opgeschoonde innerHTML: "+schoneInnerHTM);
		//nieuweTD='<td style="'+insertStyles(inlineStyles)+'">'+schoneInnerHTM+'</td>';
		//alert(schoneInnerHTM);
		td.innerHTML =schoneInnerHTM;
}

function insertTable(outsideControl)
{
	if (!tablePerm) return false;
	argumenten=new Array();
	argumenten["baseUri"]=baseUri;
	if (huiskleuren) argumenten.huiskleuren=huiskleuren;
  if (!checkTableInsertable(outsideControl)) return;
  if (outsideControl)
  {
  //bv als je dubbelklikt op een plaatje in een tabel en 'de tabel' kiest
  	if (tbl = zoekElementBuitenControl("TABLE"))
  	{
  		sel=new selObject(tbl.tagName,tbl);
  	}
  	else return;
  }
  if (sel && sel.type == "TD")
  {
  		tbl=zoekElement("TABLE");
  		sel=new selObject(tbl.tagName,tbl);
  }
  if (sel != null && sel.type == "TABLE")
  {
		var tableHTMLArr = sel.element.outerHTML.match(/<table[^>]*>/i);
		var tableHTML=tableHTMLArr[0];
		var tableStyle = tableHTML.match(/class=['"]([^'"]+)['"]/i);
		if (tableStyle == null)
		tableStyle = tableHTML.match(/class=([^ ">]+)/i);
		argumenten.inlineStyles = extractStyles(tableHTML);
		if (!argumenten.inlineStyles)
			argumenten.inlineStyles=new Array();
		argumenten.edit = 1;
		argumenten.rows = sel.element.rows.length;
		argumenten.cols = sel.element.rows[0].cells.length;
		if (argumenten.inlineStyles['mso-border-alt']||argumenten.inlineStyles['mso-padding-alt'])
			argumenten.mswordtabel=1;
		else if (sel.element.border)
			argumenten.externtabel=1;
		var borderColor=false, borderWidth=false;
		if (!argumenten.inlineStyles.width&&sel.element.width)
			argumenten.inlineStyles.width=parseInt(sel.element.width)+'px';
		if (!argumenten.inlineStyles.height&&sel.element.height)
			argumenten.inlineStyles.height=parseInt(sel.element.height)+'px';
		if (!argumenten.inlineStyles['background-color']&&sel.element.bgColor)
			argumenten.inlineStyles['background-color']=sel.element.bgColor;
		if (!argumenten.inlineStyles['border']&&sel.element.borderColor)
			borderColor=sel.element.borderColor;
		if (!argumenten.inlineStyles['border']&&sel.element.border)
			borderWidth=2*parseInt(sel.element.border);
		if (borderColor||borderWidth)
		{
			if (!borderColor) borderColor='#000000';
			if (!borderWidth) borderWidth=1;
			argumenten.inlineStyles['border']='solid '+borderWidth+'px '+borderColor;
		}
		if (tableStyle)
			argumenten.style = tableStyle[1];
  }
  else
  {
    argumenten.edit = 0;
    argumenten.rows = 3;
    argumenten.cols = 4;
    argumenten.style = "tabel2";
  }

  tabel= showModalDialog(baseUri+"choosetable.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:400px; dialogHeight:550px;");
  if (tabel != null)
  {
  		if (tabel.tableStyle!='word'&&tabel.tableStyle!='extern')
  			tabelClass=' class="'+tabel.tableStyle+'"';
  		else
  			tabelClass='';
		if (tabel.inlineStyles)
		{
			var inlineStyle=' style="'+insertStyles(tabel.inlineStyles)+'"';
			//alert (inlineStyle);
		}
			else inlineStyle="";
		if (sel != null)
		{
		var tableHtml = '<table'+tabelClass+inlineStyle+'>' + sel.element.innerHTML + "</table>";
		sel.element.outerHTML = tableHtml;
		sel = null;
		}
		else
		{
		var cr=richedit.document.selection.createRange();
		 var tableHtml = '<table'+tabelClass+inlineStyle+'>'
  		//alert(tableHtml);
		for(var i=0;i<tabel.rows;i++)
		{
		  tableHtml+="<tr>";
		  for(var j=0;j<tabel.cols;j++)
		  {
			 tableHtml += "<td></td>";
		  }
		  tableHtml += "</tr>";
		}
		tableHtml += "</table>";
		cr.pasteHTML(tableHtml);
		}
		}

}

function editCell(outsideControl)
{
	if (!tablePerm) return false;
	argumenten=new Array();
	argumenten["baseUri"]=baseUri;
	if (huiskleuren) argumenten.huiskleuren=huiskleuren;
  if (!checkTableInsertable(outsideControl)) return;
  if (sel && sel.type != "TD")
  {
  		ztd=zoekElementBuitenControl("TD");
  		if (ztd)
  			sel=new selObject(ztd.tagName,ztd);
  }
  if (sel != null && sel.type == "TD")
  {
		var tdHTMLArr = sel.element.outerHTML.match(/<td[^>]*>/i);
		var tdHTML=tdHTMLArr[0];
		argumenten.inlineStyles = extractStyles(tdHTML);
		argumenten.edit = 1;
		//nu tabeleigenschappen:
  		tbl=zoekElement("TABLE");
  		if (tbl&&tbl.tagName=="TABLE")
		{
			argumenten.tabel=new Array();
			var tableHTMLArr = tbl.outerHTML.match(/<table[^>]*>/i);
			var tableHTML=tableHTMLArr[0];
			var tableStyle = tableHTML.match(/class=['"]([^'"]+)['"]/i);
			if (tableStyle == null)
				tableStyle = tableHTML.match(/class=([^ ">]+)/i);
			argumenten.tabel.inlineStyles = extractStyles(tableHTML);
			argumenten.tabel.rows = tbl.rows.length;
			argumenten.tabel.cols = tbl.rows[0].cells.length;
			if (tableStyle)
				argumenten.tabel.style = tableStyle[1];
		}
		else
			argumenten.tabel=null;
  }
  else return;

  tdval= showModalDialog(baseUri+"editcell.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:420px; dialogHeight:550px;");
  if (tdval != null)
  {
		if (tdval.inlineStyles&&sel != null&&sel.type == "TD")
		{
			if (tdval.allCells)
			{
				if (outsideControl)
					tbl=zoekElementBuitenControl("TABLE");
				else
					tbl=zoekElement("TABLE");
				if (tbl&&tbl.tagName=="TABLE")
				{
					var cells=tbl.cells;
					var cellcontent=new Array();
					for (cid in cells)
					{
						cl=cells[cid];
						if (cl&&cl.style) for (id in tdval.inlineStyles)
						{
							if (tdval.inlineStyles[id]||id=="background-color"||id=="color")
							{
								idsafe=cssIdToJs(id);
								if (tdval.inlineStyles[id])
									cl.style[idsafe]=tdval.inlineStyles[id];
								else
									cl.style[idsafe]="";
							}

						}
					}
				}
			}
			else
			{
				for (id in tdval.inlineStyles)
				{
					//alert(id+": "+tdval.inlineStyles[id]);
					if (tdval.inlineStyles[id]||id=="background-color"||id=="color")
					{
						idsafe=cssIdToJs(id);
						if (tdval.inlineStyles[id])
							sel.element.style[idsafe]=tdval.inlineStyles[id];
						else
							sel.element.style[idsafe]="";
					}

				}
			}
		}
		if (sel != null)
		{	//evt innerHTML veranderen...
			//var tdHtml = '<td'+inlineStyle+'>' + sel.element.innerHTML + "</td>";
			//alert (tdHtml);
			//sel.element.outerHTML = tdHtml;
			sel = null;
		}
		else
			return;
	}

}

function justifyCell(cmd)
{
	ztd=zoekElementBuitenControl("TD");
	if (ztd)
		sel=new selObject(ztd.tagName,ztd);
	if (sel == null || sel.type != "TD") return;
	var tdHTMLArr = sel.element.outerHTML.match(/<td[^>]*>/i);
	var tdHTML=tdHTMLArr[0];
	tdval=new Array();
	tdval.inlineStyles = extractStyles(tdHTML);
	
	switch (cmd)
	{
		case 'JustifyLeft':
			tdval.inlineStyles['text-align']="left";
			break;
		case 'JustifyRight':
			tdval.inlineStyles['text-align']="right";
			break;
		case 'JustifyCenter':
			tdval.inlineStyles['text-align']="center";
			break;
	}
	for (id in tdval.inlineStyles)
	{
		if (tdval.inlineStyles[id]||id=="background-color"||id=="color")
		{
			idsafe=cssIdToJs(id);
			if (tdval.inlineStyles[id])
				sel.element.style[idsafe]=tdval.inlineStyles[id];
			else
				sel.element.style[idsafe]="";
		}

	}
}



function insertImage()
{
	if (!imagePerm) return false;
	var argumenten=new Array();
	if (!checkImageInsertable()) return;
	if (sel != null && sel.type == "IMG")
	{
		var imageHtmlArr = sel.element.outerHTML.match(/<img[^>]*>/i);
		imageHtml=imageHtmlArr[0];
		var imageSrc = imageHtml.match(/src=['"]{1}([^'"]+)['"]{1}/i);
		var imageAlt = imageHtml.match(/alt=['"]{1}([^"']+)['"]{1}/i);
		if (imageAlt == null)
			imageAlt = imageHtml.match(/alt=([^ "]+)/i);
		//var imageHeight = imageHtml.match(/height=['"]*(\d+)['"]*/i);
		//var imageWidth = imageHtml.match(/width=['"]*(\d+)['"]*/i);
		var imageBorder = imageHtml.match(/border=['"]*(\d+)['"]*/i);
		argumenten["src"] =(imageSrc != null?imageSrc[1]:"");
		argumenten["alt"] = (imageAlt != null?imageAlt[1]:"");
		//argumenten["height"] = (imageHeight != null?imageHeight[1]:"");
		//argumenten["width"] =(imageWidth != null?imageWidth[1]:"");
		argumenten["border"] =(imageBorder != null?imageBorder[1]:0);
		argumenten.inlineStyles = extractStyles(imageHtml);
	}
	argumenten.baseUri=baseUri;
	
	imageUploadLoop=true;
	while (imageUploadLoop)
	{
		var imgvalue=showModalDialog(baseUri+"chooseimage.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:400px; dialogHeight:550px;" );
		if (!imgvalue||!imgvalue.uploaden)
			imageUploadLoop=false;
		else
			argumenten=imgvalue;
	}
	
	if (imgvalue && imgvalue.src.length)
	{
			if (imgvalue.inlineStyles)
			{
				var inlineStyle=' style="'+insertStyles(imgvalue.inlineStyles)+'"';
				//alert (inlineStyle);
			}
			else inlineStyle="";
			var nieuweHTML = "<img src=\"" + imgvalue.src + "\""+ inlineStyle + " border=\""+ imgvalue.border + "\" alt=\""+ imgvalue.descr + "\">";
			var cr = richedit.document.selection.createRange();
			if (sel && sel.type== "IMG")
			{
				sel.element.outerHTML = nieuweHTML;
				sel = null;
			}
			else
			{
				cr.pasteHTML(nieuweHTML);
			}
			
		//doc.execCommand("InsertImage","",imgvalue.src);
	}
}

function insertChar()
{
	if (!checkCharInsertable()) return;
	val=showModalDialog(baseUri+"choosechar.php",null,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:420px; dialogHeight:410px;" );
	if (val&&val.char)
	{
			var nieuweHTML = "&#"+val.char+";";
			var cr = richedit.document.selection.createRange();
			cr.pasteHTML(nieuweHTML);
	}

}

function insertLink()
{
	range=richedit.document.selection.createRange();
   if (!checkLinkInsertable())
   	return null;
	argumenten=new Array();
	rememberLinktekst = "";
	oldLinktekst = false;
	argumenten["baseUri"]=baseUri;
	if (sel && sel.type!="TD" && sel.type!="TR" && sel.type!="TABLE")
	{
		if (sel.element.parentElement.tagName=="A")
		{
			sel=new selObject(sel.element.parentElement.tagName,sel.element.parentElement)
		}
		if (sel.type== "A")
		{
			var linkHtmlArr = sel.element.outerHTML.match(/<a([^>]*>)(.*)(<\/a>)/i);
			linkHtml=linkHtmlArr[1];
			var linkHref = linkHtml.match(/href=['"]{1}([^'"]+)['"]{1}/i);
			var linkTarget = linkHtml.match(/target=['"]{1}([^"']+)['"]{1}/i);
			if (linkTarget == null)
				linkTarget = linkHtml.match(/target=([^ ">]+)/i);
			argumenten["linktekst"] =linkHtmlArr[2];
			if (argumenten["linktekst"]!="") 
			{
				oldLinktekst = true;
				rememberLinktekst = argumenten["linktekst"];
			}
			argumenten["href"] = (linkHref != null?linkHref[1]:"");
			argumenten["target"] = (linkTarget != null?linkTarget[1]:"");
			//return;
		}
		else
			argumenten.linktekst=sel.element.outerHTML;
	}
	else if (range)
	{
		if (sel && (sel.type=="TD" || sel.type=="TR" || sel.type=="TABLE"))
			sel=null;
		sl=zoekElement("A");
		if (sl && sl.tagName=="A")
		{
			sel=new selObject(sl.tagName,sl);
			var linkHtmlArr = sel.element.outerHTML.match(/<a([^>]*>)(.*)(<\/a>)/i);
			linkHtml=linkHtmlArr[1];
			var linkHref = linkHtml.match(/href=['"]{1}([^'"]+)['"]{1}/i);
			var linkTarget = linkHtml.match(/target=['"]{1}([^"']+)['"]{1}/i);
			if (linkTarget == null)
				linkTarget = linkHtml.match(/target=([^ ">]+)/i);
			argumenten["linktekst"] =linkHtmlArr[2];
			if (argumenten["linktekst"]!="") 
			{
				oldLinktekst = true;
				rememberLinktekst = argumenten["linktekst"];
			}
				
			argumenten["href"] = (linkHref != null?linkHref[1]:"");
			argumenten["target"] = (linkTarget != null?linkTarget[1]:"");
		}
		else
		{
			argumenten.linktekst=range.htmlText;
			if (argumenten["linktekst"]!="") 
			{
				oldLinktekst = true;
				rememberLinktekst = argumenten["linktekst"];
			}
			
		}
		rangeSelected=true;
	}
	else rangeSelected=false;
	
	fileUploadLoop=true;
	while (fileUploadLoop)
	{
		var linkval=showModalDialog(baseUri+"chooselink.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:400px; dialogHeight:550px;");
		if (!linkval||!linkval.uploaden)
			fileUploadLoop=false;
		else
		{
			argumenten=linkval;
			if (oldLinktekst) 
			{
			//dit is nodig, anders krijg je dubbele escapes na uploaden in linkdialoog
				argumenten["linktekst"] = rememberLinktekst;
			}
		}
	}
	if (linkval)
	{
		blank=(linkval.blank==true)?" target='_blank'":"";
		var nieuweHTML = "<a class=linkstijl href=\"" + linkval.href + "\""+blank+">";
		var cr = richedit.document.selection.createRange();
		if (sel)
		{
			if (sel.type=='A')
				oldval=sel.element.innerHTML;//niet nog een link...
			else
				oldval=sel.element.outerHTML;
			sel.element.outerHTML = nieuweHTML+oldval+"</a>";
			sel = null;
		}
		else
		{
			//alert("Linktekst: "+link.linktekst+" Link: "+link.href);
			linktekst=linkval.linktekst;
			if (!linktekst) linktekst=linkval.href;
			if (oldLinktekst) linktekst = rememberLinktekst;
			cr.pasteHTML(nieuweHTML+linktekst+"</a>");
		}
	}

}

function askOptions(askText,optionArray,width,height)
{
	argumenten=new Array();
	if (!width) width=200;
	if (!height) height=300;
	argumenten.askText=askText;
	argumenten.optionArray=optionArray;
	val=showModalDialog(baseUri+"chooseoption.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:"+width+"px; dialogHeight:"+height+"px;" );
	if (val)
		return val.answer;
	else
		return null;
}

function processDblclick()
{
	if (sel == null)
	{
		sl=zoekElementen();
		if (sl)
			sel=new selObject(sl.tagName,sl);
	}
	if (!sel)
		return;
  	switch(sel.type)
  	{
  	case "TD":
  	case "TABLE":
  		if (!tablePerm) return false;
  		opt=askOptions("Wat wilt u bewerken?",["De tabel","Deze cel"],180,120);
  		switch(opt)
  		{
  			case "De tabel":
  				insertTable();
  				break;
  			case "Deze cel":
  				editCell();
  				break;
  		}
  		break;
  	case "IMG":
  		if (zoekElementBuitenControl("TD")!==null)
  		{
  			//de afbeelding staat dus in een TD
  			editOpt=new Array();
  			optCnt=0;
  			if (imagePerm) editOpt[optCnt++]="De afbeelding";
  			if (tablePerm) 
  			{
  				editOpt[optCnt++]="De tabel";
  				editOpt[optCnt++]="Deze cel";
			}  				
			if (optCnt)
			{
				if (sel.element.parentElement.tagName=="A")
				{
					editOpt[optCnt++]="De link";
					opt=askOptions("Wat wilt u bewerken?",editOpt,180,60+optCnt*30);
				}
				else if (optCnt>1)
					opt=askOptions("Wat wilt u bewerken?",editOpt,180,60+optCnt*30);
				else
					opt="De afbeelding";
			}
			else
			{
				if (sel.element.parentElement.tagName=="A")
					opt="De link";
				else
					return;
			}
			switch(opt)
			{
				case "De afbeelding":
					insertImage();
					break;
				case "De link":
					insertLink();
					break;
				case "De tabel":
					insertTable(true);
					break;
				case "Deze cel":
					editCell(true);
					break;
			}
  		}
  		else
		{
			if (sel.element.parentElement.tagName=="A")
			{
				if (!imagePerm)
					opt="De link";
				else
					opt=askOptions("Wat wilt u bewerken?",["De afbeelding","De link"],180,120);
				switch(opt)
				{
					case "De afbeelding":
						insertImage();
						break;
					case "De link":
						insertLink();
						break;
				}
			}
			else
				insertImage();
		}
  		break;
  	case "A":
		if (zoekElementBuitenControl("TD")!==null)
		{
  			if (tablePerm) 
  			{
				opt=askOptions("Wat wilt u bewerken?",["De link","De tabel","Deze cel"],180,150);
			}  	
			else
				opt="De link";
			switch(opt)
			{
				case "De link":
					insertLink();
					break;
				case "De tabel":
					insertTable(true);
					break;
				case "Deze cel":
					editCell(true);
					break;
			}
		}
		else
			insertLink();
  		break;
  	}
	richedit.focus();
	checkSelection();

}

function ContextMenuItems()
{
	this.items=new Array();
}

function addContextMenuItem(item)
{
	this.items[this.items.length]=item;
}

ContextMenuItems.prototype.add=addContextMenuItem;

function contextmenu(evt)
{
	//debugObjectFull(evt);
	if (!contextmenuOn)
		return true;
	if (1||sel == null)
	{
		sl=zoekElementen();
		if (sl)
			sel=new selObject(sl.tagName,sl);
	}
	var argumenten=new Array();
	var x=evt.screenX;
	var y=evt.screenY;
	var changeCell=false;
	var changeTable=false;
	var changeLink=false;
	var changeImage=false;
	var originalFormat=false;
	var inv=0,inv2=0;
	outsideControl=false;
  	if (sel) switch(sel.type)
  	{
  	case "TD":
  		if (tablePerm) changeCell=true;
  	case "TABLE":
  		if (tablePerm) 
  		{
  			changeTable=true;
  			inv++;
  		}
  		break;
  	case "IMG":
		if (sel.element.parentElement.tagName=="A")
		{
	  		changeLink=true;
  			inv++;
	  	}
	  	if (imagePerm) 
	  	{
			changeImage=true;
			outsideControl=true;
			originalFormat=true;
  			inv++;
		}
		if (tablePerm) 
		{
	  		if (zoekElementBuitenControl("TABLE"))
	  			changeTable=true;
	  		if (zoekElementBuitenControl("TD"))
	  			changeCell=true;
	  		outsideControl=true;
  			inv++;
	  	}
  		break;
  	case "A":
  		changeLink=true;
		if (tablePerm) 
		{
			if (zoekElement("<TABLE>"))
				changeTable=true;
			if (zoekElement("<TD>"))
				changeCell=true;
  		}
  		inv++;
  		break;
  	}



	CM=new ContextMenuItems();
	CM.add('Knippen');
	CM.add('Kopiëren');
	CM.add('Plakken');
	CM.add('hr');
	if (checkLinkInsertable()&&!changeLink)
	{
		if ((sel && sel.type != "TD" && sel.type != "TABLE") || richedit.document.selection.createRange().htmlText)
			CM.add('Link van maken');
		else
			CM.add('Link invoegen');
  		inv2++;
	}
	if (checkCharInsertable())
	{
		CM.add('Teken invoegen');
  		inv2++;
	}
	if (checkImageInsertable()&&!changeImage&&imagePerm)
	{
		CM.add('Afbeelding invoegen');
  		inv2++;
	}
	if (checkTableInsertable()&&tablePerm)
	{
		if (changeTable)
		{
			if (sel&&sel.type!="TABLE")
			{
				CM.add('Nieuwe tabel invoegen');
	  			inv2++;
			}
		}
		else
		{
			CM.add('Tabel invoegen');
  			inv2++;
  		}
	}
	if (inv&&inv2) CM.add('hr');
	if (changeCell) CM.add('Cel bewerken');
	//if (changeCell) CM.add('Cel opschonen');
	if (changeTable) CM.add('Tabel bewerken');
	if (changeLink) CM.add('Link bewerken');
	if (changeImage) CM.add('Afbeelding bewerken');
	if (originalFormat) CM.add('Oorspronkelijk formaat');
	if (debugAllowed&&sel) 
	{
		CM.add('hr');
		CM.add('Debug');
	}
	dialoogHoogte=20*CM.items.length+40;
	//debugObject(CM);
	argumenten.CM=CM;
	res=showModalDialog(baseUri+"contextmenu.php",argumenten,"status: no; help: no;  dialogWidth:200px; dialogHeight:"+dialoogHoogte+"px; dialogLeft:"+x+"px; dialogTop:"+y+"px;");
	if (res) switch (res.actie)
	{
	case "Knippen":
		exec('Cut');
		break;
	case "Kopiëren":
		exec('Copy');
		break;
	case "Plakken":
		exec('Paste');
		break;
  	case "Cel bewerken":
  		editCell(outsideControl);
  		break;
  	case "Cel opschonen":
	  if (sel && sel.type != "TD")
	  {
			ztd=zoekElement("TD");
			if (ztd)
				sel=new selObject(ztd.tagName,ztd);
	  }
	  if (sel != null && sel.type == "TD")
	  {
	  		cleanTD(sel.element);
	  }
  		break;
	case "Nieuwe tabel invoegen":
		if (sel && (sel.type=='TD' || sel.type == 'TABLE')) sel=null;
	case "Tabel invoegen":
  	case "Tabel bewerken":
  		insertTable(outsideControl);
  		break;
	case "Afbeelding invoegen":
  	case "Afbeelding bewerken":
  		insertImage();
  		break;
  	case "Oorspronkelijk formaat":
  		imgSrc=sel.element.src;
  		dummyImage=new Image();
  		dummyImage.src=imgSrc;
  		//alert("Ware grootte:"+dummyImage.width+"x"+dummyImage.height);
  		sel.element.style.width=dummyImage.width;
  		sel.element.style.height=dummyImage.height;
  		delete dummyImage;
  		break;
	case "Link van maken":
	case "Link invoegen":
  	case "Link bewerken":
  		insertLink();
  		break;
	case "Teken invoegen":
		insertChar();
  		break;
	case "Debug":
		if (sel)
			debugObjectFull(sel.element);
  		break;
	}
	richedit.focus();
	checkSelection();
	return false;
}

function exec(cmd,extra)
{
	switch (cmd)
	{
		case 'TableBorders':
			if (!tablePerm) return;
			if (richedit.document.styleSheets.length)
			{
				stsheet=richedit.document.styleSheets[0];
				if (stsheet)
				{
					if (!showBorders)
					{
					/*
					table.tabel6 td {vertical-align:top; padding: 10px; border-left: 2px solid #000000; border-right: 2px solid #000000; border-top: none; border-bottom: none;}
					
					table.tabel7 {border-collapse:collapse;}
					table.tabel7 td {vertical-align:top; padding: 10px; border-left: none; border-right: none; border-top: 2px solid #000000; border-bottom: 2px solid #000000;}
*/
						stsheet.addRule("table.tabel1"," border-collapse: collapse;");
						stsheet.addRule("table.tabel6 td"," border-top: 1px dashed #000000; border-bottom: 1px dashed #000000;");
						stsheet.addRule("table.tabel7 td"," border-left: 1px dashed #000000; border-right: 1px dashed #000000;");
						stsheet.addRule("td","border: 1px dashed #000000;",0);
					}
					else
					{
						stsheet.removeRule(stsheet.rules.length-1);
						stsheet.removeRule(stsheet.rules.length-1);
						stsheet.removeRule(stsheet.rules.length-1);
						stsheet.removeRule(0);
					}
					showBorders=!showBorders;
				}
				//debugObjectFull2(richedit.document.styleSheets);
			}
			//alert
			break;
		case 'BackColor':
		case 'ForeColor':
			if (!colorPerm) return;
			var huidige=richedit.document.queryCommandValue(cmd);
			//alert(huidige);
			argumenten=new Array();
			argumenten.kleur=huidige;
			if (huiskleuren) argumenten.huiskleuren=huiskleuren;
			kleur=showModalDialog(baseUri+"choosecolor.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:330px; dialogHeight:"+kleurenDialoogHoogte+"px;" );
			if (kleur&&kleur!="transparent")
				richedit.document.execCommand(cmd,"",kleur);
			break;
		case 'BackColorAll':
			if (!colorPerm) return;
			huidige=richedit.document.body.style.backgroundColor;
			//alert(huidige);
			if (!huidige) huidige="#FFFFFF";
			argumenten=new Array();
			argumenten.kleur=huidige;
			if (huiskleuren) 
			{
				argumenten.huiskleuren=huiskleuren;
			}
			kleur=showModalDialog(baseUri+"choosecolor.php",argumenten,"font-family:Arial; font-size:12px; status: no; help: no; dialogWidth:330px; dialogHeight:"+kleurenDialoogHoogte+"px;" );
			if (kleur)
			{
					if (kleur=='transparent')
						richedit.document.body.style.backgroundColor='#FFFFFF';
					else
						richedit.document.body.style.backgroundColor=kleur;

			}
			break;
		case 'Char':
			insertChar();
			break;
		case 'CreateLink':
			insertLink();
			break;
		case 'InsertImage':
			if (!imagePerm) return;
			insertImage();
	     	break;
		case 'InsertTable':
			if (!tablePerm) return;
			insertTable();
			break;
		case 'JustifyLeft':
		case 'JustifyRight':
		case 'JustifyCenter':
			if (!alignPerm) return;

			if (zoekElementBuitenControl("TD"))
			{
				justifyCell(cmd);
				break;
			}
		case 'Indent':
		case 'Outdent':
			if (!alignPerm) return;
		default:
			richedit.document.execCommand(cmd,'',extra);
	}
	richedit.focus();
	checkSelection();
}

function selObject(tag,elm)
{
	this.type = tag;
	this.element = elm;
}

function debugObject(object)
{
	alertTekst='';
	for (id in object)
		alertTekst+=id+": "+object[id]+"\n";
	alert(alertTekst);
}
function debugObjectFull(object)
{
	argumenten=new Array();
	obj=new Object();
	for (id in object)
		obj[id]=object[id];
	argumenten.obj=obj;
	showModelessDialog("/test/debugtreeobject.htm",argumenten,"font-family:Courier; font-size:12px; status: no; help: no; dialogWidth:600px; dialogHeight:500px;" );
}
function debugObjectFull2(object)
{
	argumenten=new Array();
	obj=new Object();
	for (id in object)
		obj[id]=object[id];
	argumenten.obj=obj;
	showModelessDialog("/test/debugobject.htm",argumenten,"font-family:Courier; font-size:12px; status: no; help: no; dialogWidth:600px; dialogHeight:500px;" );
}
function checkMouseUp()
{
	if (richedit.event.button==2)
	{
		return false;
	}
	else
		checkSelection();
}
function checkSelection()
{
	if (sel&&(sel.type=="IMG"||sel.type=="TABLE")&&
		richedit.event&&richedit.event.srcElement!=sel.element&&richedit.document.selection.type == "Control")
	{
		//debugObjectFull2(richedit.document.selection);
	}
	 if (richedit.event)
	 {
		 if (richedit.document.selection.type == "Control")
		 {
				sel = new selObject(richedit.event.srcElement.tagName,richedit.event.srcElement);
		 }
		 else
				sel = null;
	}			
	checkButtons();

}

function checkToolbarButtons1(toolbar)
{
	if (!toolbar||!toolbar.children)
		return;
	for (id in toolbar.children)
	{
		current=toolbar.children[id];
		if (current.tagName=="SPAN")
		{
			if (current.id)
			{
				if (richedit.document.queryCommandEnabled(current.id))
					current.style.filter = "alpha(opacity=100)";
				else
					current.style.filter = "alpha(opacity=30)";
				if (richedit.document.queryCommandState(current.id))
				{
					current.style.border="1px inset buttonhighlight";
					current.buttonDown=true;
				}
				else
				{
					current.style.border="none";
					current.buttonDown=false;
				}
			}
		}
	}
}
function checkToolbarButtons2(toolbar)
{
	if (!toolbar||!toolbar.children)
		return;
	for (id in toolbar.children)
	{
		current=toolbar.children[id];
		if (current.tagName=="SPAN")
		{
			if (current.id)
			{
				switch (current.id)
				{
					case 'hr':
					case 'char':
						var enabled=checkCharInsertable();
						break;
					case 'image':
						var enabled=checkImageInsertable();
						break;
					case 'table':
						var enabled=checkTableInsertable();
						break;
					case 'link':
						var enabled=checkLinkInsertable();
						break;
					case 'tableborders':
						var enabled=true;
						if (showBorders)
						{
							current.style.border="1px inset buttonhighlight";
							current.buttonDown=true;
						}
						else
						{
							current.style.border="none";
							current.buttonDown=false;
						}
						break;
				}
				if (enabled)
					current.style.filter = "alpha(opacity=100)";
				else
					current.style.filter = "alpha(opacity=30)";
			}
		}
	}
}

function checkButtons()
{
	toolbar1=document.getElementById('bar1');
	toolbar2=document.getElementById('bar2');
	checkToolbarButtons1(toolbar1);
	checkToolbarButtons2(toolbar2);
	if (!headingPerm) return;
	fHeading = document.getElementById('fontHeading');
	currentTagName = richedit.document.queryCommandValue("FormatBlock");
	if (currentTagName.toString().substr(0,3).toLowerCase() == "kop")
	{
		currentHSize = currentTagName.toString().substr(4,1);
		currentTagType = "H" + currentHSize;
	}
	else
	if (currentTagName.toString().substr(0,7).toLowerCase() == "heading")
	{
		currentHSize = currentTagName.toString().substr(8,1);
		currentTagType = "H" + currentHSize;	
	}
	else
		currentTagType = "P";
	elemp = zoekElement(currentTagType); 
	if (elemp)
	{
		if (currentTagType == 'P')
		{
			if (!elemp.className)
				fHeading.value = 'standaard';
			else
				fHeading.value = elemp.className;
		}
		else
		{
			fHeading.value = 'kop' + currentHSize;
		}
	}
	else
		fHeading.value = 'standaard';
}

function setFormat(param)
{
	if (!headingPerm) return;
	var val = param;
	if (val) 
	{
		if (val.substr(0,3).toLowerCase() == "kop")
			zoekType = "H" + val.substr(3,1);
		else
			zoekType = "P";
		formatType = "<" + zoekType + ">";
		exec("FormatBlock", formatType);
		elem = zoekElement(zoekType); 
		if (formatType == "<P>" && val != 'standaard')
		{
			if (elem) 
				elem.className = val;
		}
		else
			if (elem) 
				elem.removeAttribute('className');
	}
	fHeading = document.getElementById('fontHeading');
	fHeading.value = val;
}

