function RTEditor(aID) {
	this.editArea = null;
	this.contentWindow = null;
	
	if (document.getElementById(aID).contentDocument)
		this.editArea = document.getElementById(aID).contentDocument;
	else // IE
		this.editArea = document.frames[aID].document;
		
	this.contentWindow = document.getElementById(aID).contentWindow;
		
	
  	if (!document.frames) {
		this.editArea.designMode = "On";
	}
	else {
		document.getElementById(aID).contentEditable = true;
	}
}

RTEditor.prototype.getSource = function () {
	var code = this.editArea.body.innerHTML;
	code = code.replace(/<(script)[^>]*>[^>]*<\/script>/gi, "");
	code = code.replace(/\r/gi, " ");
	code = code.replace(/\n/gi, " ");
	code = code.replace(/\\/gi, "&#92;");
	code = code.replace(/'/gi, "&acute;");
	code = code.replace(/“/gi, "&#8220;");
	code = code.replace(/”/gi, "&#8221;");
	code = code.replace(/’/gi, "&acute;");
	code = code.replace(/—/gi, "&#45;");
	code = code.replace(/\(/gi, "&#40;");
	code = code.replace(/\)/gi, "&#41;");
	code = code.replace(/–/gi, "&#45;");
	return code;
}

RTEditor.prototype.getCleanedSource = function () {
	var code = this.getSource();
	code = code.replace(/style\=\"font[^>]*\"/gi, "");
	code = code.replace(/<pre[^>]*>|<\/pre>/gi,"");
	code = code.replace(/mso([\-a-z]*):([ 0-9a-z]*)/gi,"");
	code = code.replace(/face\=([ \"a-z]*)|font-family:([ a-z]*)|font-family:([ \´a-z]*)\;/gi,"");
	code = code.replace(/text-align:([ \´a-z]*)\;|font-size:[ 0-9]*pt\;/gi,"");
	code = code.replace(/line-height:[ 0-9]*\%\;/gi,"");
	code = code.replace(/line-height:[ a-z]*\;|class\=\"Section[0-9]*\"|font-style:([ \´a-z]*)\;|font-variant:([ \´a-z]*)\;/gi,"");
	code = code.replace(/font-weight:([ \´a-z]*)\;|font-size-adjust:([ \´a-z]*)\;|font-stretch:([ \´a-z]*)\;/gi,"");
	code = code.replace(/<(H|\/H|o:p|\/o:p|\?xml)[^>]*>/gi, "");
	code = code.replace(/<(p class)[^>]*>|<(p style)[^>]*>/gi, "<P>");
	code = code.replace(/<(script)[^>]*>[^>]*<\/script>/gi, "");
	code = code.replace(/style\=\"\"/gi, "");
	code = code.replace(/font-size:([ 0-9a-z]*)/,"font-size: 12pt");
	code = code.replace(/<![^>]*>|<span([^>]*)>|<\/span>/gi, "");
	//Eliminates non standard tags
	code = code.replace(/<[\/]?(del|ins|[(a-zA-Z0-9)]*:\w+)[^>]*?>/gi, " ");
	return code;
}

RTEditor.prototype.setSource = function(aArg) {
	if (!document.frames) {
		this.editArea.designMode = "Off";
		this.editArea.body.innerHTML = aArg;
		this.editArea.designMode = "On";
	}
	else
		this.editArea.body.innerHTML = aArg;
}

RTEditor.prototype.doCommand = function(aName, aArg){
	if (!document.frames)
		this.editArea.execCommand('styleWithCSS',false, false);
	this.editArea.execCommand(aName,false, aArg);
	this.contentWindow.focus();
}

RTEditor.prototype.insertHTML = function(aArg) {
	this.contentWindow.focus();
	if (document.frames)
		this.editArea.selection.createRange().pasteHTML(aArg);
	else
		this.doCommand('inserthtml',aArg);
}

RTEditor.prototype.doLink = function(aArg) {
	if (document.frames)
		this.insertHTML("<a href="+aArg+" target=_blank >"+this.editArea.selection.createRange().text+"</a>");
	else
		this.insertHTML("<a href="+aArg+" target=_blank >"+this.editArea.getSelection()+"</a>");
}

RTEditor.prototype.createTable = function(rows, cols, footer, border, padding) {

    if ((rows > 0) && (cols > 0)) {
      var table = "<table border=0 cellspacing=0 cellpadding="+padding+">";

      for (i=0; i<rows; i++) {
        table += "<tr>";
        for (j=0; j<cols; j++) {
          table += "<td style='border: "+border+"px solid;'>&nbsp;</td>";
        }
        table += "</tr>";
      }
	  
      table += (footer!=""?"<tr><td colspan="+cols+">"+footer+"</td></tr>":"");
	  
	  table += "</table>";

	  this.insertHTML(table);
    }
}


RTEditor.prototype.hilite = function(aArg) {
	if (document.frames)
		this.doCommand('backcolor',aArg);
	else {
		this.editArea.execCommand('styleWithCSS',false, true);
		this.editArea.execCommand('hilitecolor',false, aArg);
		this.contentWindow.focus();
	}
}

// Open menu
function colorPalete(id) {
	if (document.getElementById(id+'Palete').style.visibility=="visible")
		document.getElementById(id+'Palete').style.visibility="hidden";
	else
		document.getElementById(id+'Palete').style.visibility="visible"
}

function fontSize(id) {
	if (document.getElementById(id+'FontSize').style.visibility=="visible")
		document.getElementById(id+'FontSize').style.visibility="hidden";
	else
		document.getElementById(id+'FontSize').style.visibility="visible"
}

function linkText(id) {
	if (document.getElementById(id+'HyperLink').style.visibility=="visible")
		document.getElementById(id+'HyperLink').style.visibility="hidden";
	else
		document.getElementById(id+'HyperLink').style.visibility="visible"
}

function table(id) {
	if (document.getElementById(id+'Table').style.visibility=="visible")
		document.getElementById(id+'Table').style.visibility="hidden";
	else
		document.getElementById(id+'Table').style.visibility="visible"
}

function fileManager(id, dir) {
	window.open("FileManager?id="+id+"&dir="+dir,"FileManager","height=300,width=330,directories=no,menubar=no,personalbar=no,toolbar=no,scrollbars=yes,status=no,resizable=no");
}

function email(id) {
	if (document.getElementById(id+'EmailLink').style.visibility=="visible")
		document.getElementById(id+'EmailLink').style.visibility="hidden";
	else
		document.getElementById(id+'EmailLink').style.visibility="visible"
}
