var activSpan;

function initEditor() 
{
	var doc = document.getElementById("doc")
	doc.contentEditable = "true";
	doc.focus();
}

function checkRange()
{
	doc.focus();
	if (document.selection.type == "None") document.selection.createRange();
	var r = document.selection.createRange();
	return r;
}

function formatText(s,bUserInterface,vValue) 
{
	if(txtView)
	{
		var r = checkRange();
		var el = r.parentElement();
		if(r.queryCommandValue(s) && (s=='JustifyLeft' || s=='JustifyCenter' || s=='JustifyRight')) document.execCommand('JustifyNone',false,null)
		else r.execCommand(s,bUserInterface,vValue);
		el = r.parentElement();
		//if(el.nodeName.toUpperCase()=='A') el.target = "_blank"
		if(s=='Outdent' && doc.childNodes(0).tagName=="P")oRemoved = doc.childNodes(0).removeNode(false);
	}
}

function copyItem()
{
	var r = checkRange()
	doc.innerHTML+= "<br>" + r.htmlText;
}


function doMailto() {
	if(txtView)
	{
		var r = checkRange();
		var el = r.parentElement();
		var strMail;
		if (el && el.nodeName == "A") 
		{
			r.moveToElementText(el);
			strMail = el.href.replace("mailto:","")
			strURL = window.prompt("Enter Mail address", strMail);
			if(strURL==null) return;
			else
			{
				if(strURL=="")
				{	
					document.execCommand('Unlink')
					return;
				}
				else document.execCommand('CreateLink',false,"mailto:" + strURL)
			}
		}
		else 
		{
			strURL = window.prompt("Enter Mailaddress", "");
			if(strURL==null) return;
			else
			{
				if(strURL!="")formatText('CreateLink',false,"mailto:" + strURL)
				else return;
			}
		}
	}
}

function swapBtn() 
{
	var el = window.event.srcElement;
	for(i=0;i<imgArr.length;i++)
	{
		if(imgArr[i].id==el.id)
		{
			if(imgArr[i].state==false)
			{
				el.src = "/img/rte/" + imgArr[i].srcOn;
				imgArr[i].state=true;
			}
			else
			{
				el.src = "/img/rte/" + imgArr[i].srcOff;
				imgArr[i].state=false;
			}
		}
	}
}

function insert(what)
{
  switch(what)
  {
  case "image":
		var imgWin = window.open("/admin/getimages.asp?openwin=rte","imgWin","width=700,height=600,scrollbars=yes,resizable=yes,");
    releaseDrop();
		break;
  }
}

function insertHtml(html)
{
	var r = checkRange();
   // don't try to insert HTML into a control selection (ie. image or table)
	if (document.selection.type == 'Control') {
		return;
	}
   r.pasteHTML(html);
}

function getBtnState() {
	if(txtView)
	{
		var r = checkRange();
		if(document.selection.type!='Control')
		{
			var el = r.parentElement();
			if(r.text!="")
			{
				for(i=0;i<imgArr.length;i++)
				{
					document.getElementById(imgArr[i].id).src = "/img/rte/" + imgArr[i].srcOff;
					imgArr[i].state=false;
				}
				if(document.queryCommandValue('Bold')==true) btnDown('btnBold');
				if(document.queryCommandValue('Italic')==true) btnDown('btnItalic');
				if(el.nodeName=="A")
				{
					if(el.href.indexOf("mailto:")==-1) btnDown('btnLink');
					else btnDown('btnMail');
				}
				if(document.queryCommandValue('JustifyLeft')==true) btnDown('btnALeft');
				if(document.queryCommandValue('JustifyCenter')==true) btnDown('btnACenter');
				if(document.queryCommandValue('JustifyRight')==true) btnDown('btnARight');
				if(document.queryCommandValue('InsertUnorderedList')==true) btnDown('btnBList');
				if(document.queryCommandValue('InsertOrderedList')==true) btnDown('btnNList');
				if(document.queryCommandValue('Outdent')==true) btnDown('btnDIndent');
				if(document.queryCommandValue('Indent')==true) btnDown('btnIIndent');
				if(isSpan(r))
				{
					//selValue("ctlFont", el.style.fontFamily);
					//selValue("ctlSize", getFontVal(el.style.fontSize));
					selValue("ctlStyle", getStyle());
				}
				else
				{
					//selValue("ctlFont", document.queryCommandValue('FontName'));
					//selValue("ctlSize", document.queryCommandValue('FontSize'));
					selValue("ctlStyle", getStyle());
				}
			}
		}
	}
}

function getFontText(val) {
	switch(val) {
	case "1": val = "xx-small"; break;
	case "2": val = "x-small";	break;
	case "3": val = "small";	break;
	case "4": val = "medium";	break;
	case "5": val = "large";	break;
	case "6": val = "x-large";	break;
	case "7": val = "xx-large";	break;
	}
	return val;
}

function getFontVal(val) {
	switch(val.toLowerCase()) {
	case "xx-small": val = "1"; break;
	case "x-small": val = "2";	break;
	case "small": val = "3";	break;
	case "medium": val = "4";	break;
	case "large": val = "5";	break;
	case "x-large": val = "6";	break;
	case "xx-large": val = "7";	break;
	}
	return val;
}

function btnDown(btn){
	var obj = document.getElementById(btn) 
	for(i=0;i<imgArr.length;i++)
	{
		if(obj.id==imgArr[i].id)
		{
			obj.src = "/img/rte/" + imgArr[i].srcOn
			imgArr[i].state = true;
		}
	}
}

function sel(what)
{
   if(txtView)
	 {
   	var r = checkRange();
		var el = r.parentElement();
		var val = what[what.selectedIndex].value
		switch(what.id)
   	{
   	case "ctlFont":
			if(val=='none') removeFormat(r, "FontName");
			else document.execCommand('FontName', false, val); 
			break;
   	case "ctlSize":
			if(val=='none')removeFormat(r, "FontSize");
			else document.execCommand('FontSize', false, val);
     	break;
   	}
	}
}

function removeFormat(r, name)
{
	var cmd = [ "Bold", "Italic", "Underline", "Strikethrough", "FontName", "FontSize", "ForeColor", "BackColor"];
	var on = new Array(cmd.length);
	for (var i = 0; i < cmd.length; i++) {
		on[i] = name == cmd[i] ? null : r.queryCommandValue(cmd[i]);
	}
	r.execCommand('RemoveFormat');
	for (var i = 0; i < cmd.length; i++) {
		if (on[i]) r.execCommand(cmd[i], false, on[i]);
	}
}

function deleteFormat()
{
	//doc.innerHTML = removeHTML(doc.innerHTML)
	if(removeTags(doc))
	{
		removeAttributes(doc)
	}
}

function removeHTML( html )
{
	var re = /<[^>]*>/g;
		while(re.test(html)) 
		{
			html = html.replace(re,"");
		}
	return html;
}

function removeTags(obj)
{
 var re = /<[^>]*>/gi;
 arrTags = obj.innerHTML.match(re)
 if(arrTags!=null)
 {
  for(i=0;i<arrTags.length;i++)
  { 
   if(arrTags[i]!="<BR>" && arrTags[i].substr(0,3)!="<A " && arrTags[i].substr(0,4)!="</A>" && arrTags[i].substr(0,4)!="<IMG")
   {
    obj.innerHTML = obj.innerHTML.replace(arrTags[i],'')
   }
  }
 }
 return true;
}

function removeAttributes(obj)
{
	nodelist = obj.childNodes;
	var strHREF = "";
	for(i = 0; i < nodelist.length; i++)
	{
		if(nodelist[i].nodeName=="A")
		{
			strHREF = nodelist[i].attributes.getNamedItem("HREF").value;
			nodelist[i].clearAttributes()
			nodelist[i].href=strHREF;
			//nodelist[i].target="_blank";
		}
	}
}

function putStyle(what) 
{
	if(txtView)
	{
		doc.focus();
		var val = what[what.selectedIndex].value
   	var r = document.selection.createRange();
   	var s = r.htmlText;
		var el = r.parentElement();
		var tag = el.nodeName.toUpperCase();
		if(val== "" || val==null)return;
		if (s == " " || s == "&nbsp;")return;
		if (typeof(el.parentElement) != "undefined" && (tag == "SPAN" || tag == "FONT")) el.removeNode();
		if(val!='none') r.pasteHTML("<span class="+val+">" + r.text + "</span>")
	}
}

function getStyle() 
{
	var r = checkRange();
	var el = r.parentElement();
	if(typeof(el.parentElement) != "undefined")
	{
		var tag = el.nodeName.toUpperCase();
		switch (tag)
		{
			case "SPAN" :
			var elclass = el.className; 
			return elclass;
		}
	}
	else return false;
}

function isSpan(r) 
{
	var el = r.parentElement();
	if(typeof(el.parentElement) != "undefined")
	{
		if(el.nodeName.toUpperCase()=='SPAN') return true;
		else return false;
	}
	else return false;
}

function selValue(el, str)
{
	var objSel = document.getElementById(el)
	if (txtView)
	{
	 	for (var i = 0; i < objSel.length; i++) {
			if(objSel[i].value==str)
			{
				objSel.selectedIndex = i;
				return;
			}
		}
   	objSel.selectedIndex = 0;
	}
}

function addTag(obj) {

   if (!txtView) return;      // Disabled in View Source mode

   // Determine the type of element we are dealing with.
   // TYPE 0 IS NORMAL-TAG, 1 IS CLASS, 2 IS SUBCLASS, 3 = Format Block command
   var value = obj[obj.selectedIndex].value;
   if (!value) {                        // Format Block
      sel(obj);
      return;
   }

   var type = 0;                        // TAG

   if (value.indexOf(".") == 0) {            // .className
      type = 1;
   } else if (value.indexOf(".") != -1) {      // TAG.className
      type = 2;
   }
   doc.focus();

   // Pick up the highlighted text
   var r = document.selection.createRange();
   r.select();
   var s = r.htmlText;

   // If we have some selected text, then ignore silly selections
   if (s == " " || s == "&nbsp;") {
      return;
   }

   // How we apply formatting is based upon the type of formitting being
   // done.
   switch(type)
   {
   case 1:
      // class: Wrap the selected text with a span of the specified
      // class name
      value = value.substring(1,value.length);
      r.pasteHTML("<span class="+value+">" + r.htmlText + "</span>")
      break;

   case 2:
      // subclass: split the value into tag + class
      value = value.split(".");
      r.pasteHTML('<' + value[0] + ' class="' + value[1] +'">'
               + r.htmlText
               + '</' + value[0] + '>'
            );
      break;

   default:
      // TAG: wrap up the highlighted text with the specified tag
      r.pasteHTML("<"+value+">"+r.htmlText+"</"+value+">")
      break;
   }
}

// ************************* Extended Chars **************************
var chars = ["!","&quot;","#","$","%","&","'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","ƒ","„","…","†","‡","ˆ","\‰","Š","‹","Œ","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","•","&ndash;","&mdash;","˜","™","š","›","œ","Ÿ","&iexcl;","&cent;","&pound;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","­","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;","&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;","&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;","&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;"]

function tab(w,h) {
	var strtab = ["<table border='1' cellspacing='0' cellpadding='0' bordercolor='#dcdcdc' bgcolor='#A9CADB' id='charTab' style='display:none;'>"]
	var k = 0;
	for(var i = 0; i < w; i++) {
		strtab[strtab.length] = "<tr>";
		for(var j = 0; j < h; j++) {
			strtab[strtab.length] = "<td width='14' align='center' onClick='getchar(this)' onMouseOver='hover(this,true)' onMouseOut='hover(this,false)' style='cursor: hand;'>"+(chars[k]||'')+"</td>";
			k++;
		}
		strtab[strtab.length]="</tr>";
	}
	strtab[strtab.length] = "</table>";
	return strtab.join("\n");
}

function hover(obj,val) {
	if (!obj.innerHTML) {
		obj.style.cursor = "default";
		return;
	}
	obj.style.border = val ? "1px solid black" : "1px solid #dcdcdc";
	//obj.style.backgroundColor = val ? "black" : "#C0C0C0"
	//obj.style.color = val ? "white" : "black";
}

function getchar(obj) 
{
	if(!obj.innerHTML) return;
	var charcode = obj.innerHTML || "";
	doc.focus();
	r=checkRange()
	r.text = charcode;
}
// ************************************************************************

function insertChar() 
{
	if(document.getElementById("charTab").style.display =="none")
	{
		document.getElementById("charTab").style.display = "block";
		document.getElementById("btnChar").src = "/img/rte/char_on.gif"
	}
	else
	{
		document.getElementById("charTab").style.display = "none";
		document.getElementById("btnChar").src = "/img/rte/char_off.gif"
	}
	doc.focus();
}

