if (typeof _editor_url == "string")
{
_editor_url = _editor_url.replace(/\x2f*$/, '/');
}
else
{
alert("WARNING: _editor_url is not set!  You should set this variable to the editor files path; it should preferably be an absolute path, like in '/htmlarea/', but it can be relative if you prefer.  Further we will try to load the editor files correctly but we'll probably fail.");
_editor_url = '';
}
if (typeof _editor_lang == "string")
{
_editor_lang = _editor_lang.toLowerCase();
}
else
{
_editor_lang = "en";
}
if (typeof _editor_backend != "string")
{
var _editor_backend = _editor_url + "/backends/backend.php";
}
var __htmlareas = [ ];
HTMLArea._object = null;
HTMLArea.uniq_count = 0;
HTMLArea._blockTags = " body form textarea fieldset ul ol dl li div " +
"p h1 h2 h3 h4 h5 h6 quote pre table thead " +
"tbody tfoot tr td th iframe address blockquote";
HTMLArea._paraContainerTags = " body td th caption fieldset div";
HTMLArea._closingTags = " head script style div span tr td tbody table em strong b i code cite dfn abbr acronym font a title ";
HTMLArea.agt = navigator.userAgent.toLowerCase();
HTMLArea.is_ie	= ((HTMLArea.agt.indexOf("msie") != -1) && (HTMLArea.agt.indexOf("opera") == -1));
HTMLArea.is_opera  = (HTMLArea.agt.indexOf("opera") != -1);
HTMLArea.is_mac	= (HTMLArea.agt.indexOf("mac") != -1);
HTMLArea.is_mac_ie = (HTMLArea.is_ie && HTMLArea.is_mac);
HTMLArea.is_win_ie = (HTMLArea.is_ie && !HTMLArea.is_mac);
HTMLArea.is_gecko  = (navigator.product == "Gecko");
HTMLArea.RE_tagName = /(<\/|<)\s*([^ \t\n>]+)/ig;
HTMLArea.RE_doctype = /(<!doctype((.|\n)*?)>)\n?/i;
HTMLArea.RE_head    = /<head>((.|\n)*?)<\/head>/i;
HTMLArea.RE_body    = /<body[^>]*>((.|\n)*?)<\/body>/i;
HTMLArea.RE_Specials = /([\/\^$*+?.()|{}[\]])/g;
HTMLArea.RE_email    = /[a-z0-9_]{3,}@[a-z0-9_-]{2,}(\.[a-z0-9_-]{2,})+/i;
HTMLArea.RE_url      = /(https?:\/\/)?(([a-z0-9_]+:[a-z0-9_]+@)?[a-z0-9_-]{2,}(\.[a-z0-9_-]{2,}){2,}(:[0-9]+)?(\/\S+)*)/i;
HTMLArea.onload = function(){};
HTMLArea._scripts = [];
HTMLArea.plugin_loadattempts = [];
HTMLArea.maxloadattempts = 10;
HTMLArea._ddt = function( file, line, msg )
{
}
function IniEditor(field, level){
var indobj = field.substr(field.length - 3, 3);
try{
document.getElementById("fRAEdit_" + indobj).style.display = "block";
document.getElementById(field).style.height = "170px";
}catch(e){
HTMLArea.init();
var areaedit_plugins_minimal = [];
areaedit_editors = [ field ];
areaedit_config = new HTMLArea.Config(field, level);
areaedit_editors = HTMLArea.makeEditors(areaedit_editors, areaedit_config, areaedit_plugins_minimal);
HTMLArea.startEditors(areaedit_editors);
}
}
HTMLArea.Config = function (field, level)
{
var cfg = this;
this.version = "3.0";
this.idtextarea = field;
this.indobj = this.idtextarea.substr(this.idtextarea.length - 3, 3);
if (typeof level != "undefined")
this._level = level;
else
this._level = 1;
width = document.getElementById(field).style.width;
cols = 0;
if (typeof width == 'undefined' || width == null || width == ""){
cols = document.getElementById(field).cols;
if (cols != "0"){
width = cols * 9;
if (width < 160)
width = 160;
width = width + "px";
}else
width = "toolbar";
}
if (HTMLArea.is_ie & cols == 20)
width = "toolbar";
this.width = width;
this.height = "auto";
this.lang = "it";
this.lcBackend = "";
this.statusBar = false;
this.htmlareaPaste = false;
this.mozParaHandler = 'best';
this.undoSteps = 5;
this.undoTimeout = 500;	this.sizeIncludesToolbar = true;
this.fullPage = false;
this.pageStyle = "";
this.pageStyleSheets = [ ];
this.linkReplacementMode = 'fullyqualified';
this.baseHref  = null;
this.stripBaseHref = true;
this.stripSelfNamedAnchors = true;
this.specialReplacements = { };
this.killWordOnPaste = true;
this.makeLinkShowsTarget = true;
this.baseURL = document.baseURI || document.URL;
if (this.baseURL && this.baseURL.match(/(.*)\/([^\/]+)/))
this.baseURL = RegExp.$1 + "/";
this.charSet = HTMLArea.is_gecko ? document.characterSet : document.charset;
this.imgURL = "images/";
this.popupURL = "popups/";
this.helpURL  = _editor_url + "reference.html";
this.htmlRemoveTags = null;
if (a_utente == 'superuser')
var paradd = "htmlmode";
else
var paradd = "space";
if (this._level == '1'){
this.toolbar =
[	["bold","italic","underline","separator"],
["insertorderedlist","insertunorderedlist","separator"],
["fralinkin","fralinkout","fraarchivi","separator"],
["fraincolla","killword","frazoom",paradd]
];
}else if (this._level == '2'){
this.toolbar =
[	["bold","italic","underline","separator"],
["insertorderedlist","insertunorderedlist","separator"],
["fraincolla","killword","frazoom",paradd]
];
}else if (this._level == '3'){
this.toolbar =
[	["bold","italic","underline","separator"],
["fraincolla","killword",paradd]
];
}else if (this._level == '4'){
this.toolbar =
[	["bold","italic","separator"],
["insertorderedlist","insertunorderedlist","separator"],
["killword",paradd]
];
}else if (this._level == '5'){
this.toolbar =
[	["bold","italic","separator"],
["insertorderedlist","insertunorderedlist","separator"],
["insertvaruser","insertlinkpagdesc","separator"],
["killword",paradd]
];
}
this.panel_dimensions =
{
left:   '200px',
right:  '200px',
top:    '100px',
bottom: '100px'
};
this.fontname =
{
"&mdash; font &mdash;":         '',
"Arial":	'arial,helvetica,sans-serif',
"Courier New":	'courier new,courier,monospace',
"Georgia":	'georgia,times new roman,times,serif',
"Tahoma":	'tahoma,arial,helvetica,sans-serif',
"Times New Roman": 'times new roman,times,serif',
"Verdana":	'verdana,arial,helvetica,sans-serif',
"impact":	'impact',
"WingDings":	'wingdings'
};
this.fontsize =
{
"&mdash; size &mdash;"  : "",
"1 (8 pt)" : "1",
"2 (10 pt)": "2",
"3 (12 pt)": "3",
"4 (14 pt)": "4",
"5 (18 pt)": "5",
"6 (24 pt)": "6",
"7 (36 pt)": "7"
};
this.formatblock =
{
"&mdash; format &mdash;"  : "",
"Heading 1": "h1",
"Heading 2": "h2",
"Heading 3": "h3",
"Heading 4": "h4",
"Heading 5": "h5",
"Heading 6": "h6",
"Normal"   : "p",
"Address"  : "address",
"Formatted": "pre"
};
this.customSelects = {};
function cut_copy_paste(e, cmd, obj)
{
e.execCommand(cmd);
};
this.debug = true;
this.URIs =
{
"blank": "popups/blank.html",
"link": "link.html",
"insert_image": "insert_image.html",
"insert_table": "insert_table.html",
"select_color": "select_color.html",
"fullscreen": "fullscreen.html",
"about": "about.html",
"mozilla_security": "http://mozilla.org/editor/midasdemo/securityprefs.html"
};
this.btnList =
{
bold:          [ "Grassetto",   "ed_format_bold.gif", false, function(e) {e.execCommand("bold");} ],
italic:        [ "Italico", "ed_format_italic.gif", false, function(e) {e.execCommand("italic");} ],
underline:     [ "Evidenziato", "ed_evidenziato.gif", false, function(e) {e.execCommand("underline");} ],
strikethrough: [ "Strikethrough", ["ed_buttons_main.gif",3,0], false, function(e) {e.execCommand("strikethrough");} ],
subscript:     [ "Pedice", ["ed_buttons_main.gif",3,1], false, function(e) {e.execCommand("subscript");} ],
superscript:   [ "Apice", ["ed_buttons_main.gif",2,1], false, function(e) {e.execCommand("superscript");} ],
justifyleft:   [ "Justify Left", ["ed_buttons_main.gif",0,0], false, function(e) {e.execCommand("justifyleft");} ],
justifycenter: [ "Justify Center", ["ed_buttons_main.gif",1,1], false, function(e){e.execCommand("justifycenter");}],
justifyright: [ "Justify Right", ["ed_buttons_main.gif",1,0], false, function(e) {e.execCommand("justifyright");} ],
justifyfull: [ "Justify Full", ["ed_buttons_main.gif",0,1], false, function(e) {e.execCommand("justifyfull");} ],
fralinkin: [ "Link Interno", "ed_link.gif", false, function(e) {e.execCommand("fralinkin");} ],
fralinkout: [ "Link Esterno", "ed_linkout.gif", false, function(e) {e.execCommand("fralinkout");} ],
fraarchivi: [ "Link Archivi", "ed_archivio.gif", false, function(e) {e.execCommand("fraarchivi");} ],
frazoom: [ "Ingrandire l'area", "zoom.gif", false, function(e) {e.execCommand("frazoom");} ],
fraclear: [ "Elimina la Struttura dell'intero testo", "ed_align_justify.gif", false, function(e) {e.execCommand("fraclear");} ],
fraincolla: [ "Incolla Deformattando", "ed_clearfonts.gif", false, function(e) {e.execCommand("fraincolla");} ],
fraclose: [ "Chiudi il mini editor", "ed_delete.gif", false, function(e) {e.execCommand("fraclose");} ],
insertorderedlist: [ "Lista Ordinata", "ed_list_num.gif", false, function(e) {e.execCommand("insertorderedlist");} ],
insertunorderedlist: [ "Lista Puntata", "ed_list_bullet.gif", false, function(e) {e.execCommand("insertunorderedlist");} ],
outdent: [ "Decrease Indent", ["ed_buttons_main.gif",1,2], false, function(e) {e.execCommand("outdent");} ],
indent: [ "Increase Indent",["ed_buttons_main.gif",0,2], false, function(e) {e.execCommand("indent");} ],
forecolor: [ "Font Color", ["ed_buttons_main.gif",3,3], false, function(e) {e.execCommand("forecolor");} ],
hilitecolor: [ "Background Color", ["ed_buttons_main.gif",2,3], false, function(e) {e.execCommand("hilitecolor");} ],
undo: [ "Undoes your last action", ["ed_buttons_main.gif",4,2], false, function(e) {e.execCommand("undo");} ],
redo: [ "Redoes your last action", ["ed_buttons_main.gif",5,2], false, function(e) {e.execCommand("redo");} ],
cut: [ "Cut selection", ["ed_buttons_main.gif",5,0], false, cut_copy_paste ],
copy: [ "Copy selection", ["ed_buttons_main.gif",4,0], false, cut_copy_paste ],
paste: [ "Paste from clipboard", ["ed_buttons_main.gif",4,1], false, cut_copy_paste ],
inserthorizontalrule: [ "Horizontal Rule", ["ed_buttons_main.gif",6,0], false, function(e) {e.execCommand("inserthorizontalrule");} ],
createlink: [ "Insert Web Link", ["ed_buttons_main.gif",6,1], false, function(e) {e._createLink();} ],
insertimage: [ "Insert/Modify Image", ["ed_buttons_main.gif",6,3], false, function(e) {e.execCommand("insertimage");} ],
inserttable: [ "Insert Table", ["ed_buttons_main.gif",6,2], false, function(e) {e.execCommand("inserttable");} ],
htmlmode: [ "xHTML/Source", "ed_html.gif", true, function(e) {e.execCommand("htmlmode");} ],
toggleborders: [ "Toggle Borders", ["ed_buttons_main.gif",7,2], false, function(e) { e._toggleBorders() } ],
print:         [ "Print document", ["ed_buttons_main.gif",8,1], false, function(e) {e._iframe.contentWindow.print();} ],
popupeditor: [ "Enlarge Editor", "fullscreen_maximize.gif", true,
function(e, objname, obj)
{
e.execCommand("popupeditor");
} ],
about: [ "About this editor", ["ed_buttons_main.gif",8,2], true, function(e) {e.execCommand("about");} ],
showhelp: [ "Help using editor", ["ed_buttons_main.gif",9,2], true, function(e) {e.execCommand("showhelp");} ],
splitblock:    [ "Split Block", "ed_splitblock.gif", false, function(e) {e._splitBlock();} ],
lefttoright: [ "Direction left to right", ["ed_buttons_main.gif",0,4], false, function(e) {e.execCommand("lefttoright");} ],
righttoleft: [ "Direction right to left", ["ed_buttons_main.gif",1,4], false, function(e) {e.execCommand("righttoleft");} ],
wordclean:     [ "MS Word Cleaner", ["ed_buttons_main.gif",5,3], false, function(e) {e._wordClean();} ],
clearfonts:    [ "Clear Inline Font Specifications", ["ed_buttons_main.gif",5,4], false, function(e) {e._clearFonts();} ],
removeformat:  [ "Rimuovi Formattazione", ["ed_buttons_main.gif",4,4], false, function(e) {e.execCommand("removeformat");} ],
killword:      [ "Pulisci Codice MSOffice", "ed_rmformat.gif", false, function(e) {e.execCommand("killword");} ],
insertvaruser: [ "Utente", "user.gif", false, function(e) {e.execCommand("insertvaruser");} ],
insertlinkpagdesc: [ "Pagina Descrizione Utente", "linkpg.gif", false, function(e) {e.execCommand("insertlinkpagdesc");} ]
};
for (var i in this.btnList)
{
var btn = this.btnList[i];
if(typeof btn[1] != 'string')
{
btn[1][0] = _editor_url + this.imgURL + btn[1][0];
}
else
{
btn[1] = _editor_url + this.imgURL + btn[1];
}
btn[0] = HTMLArea._lc(btn[0]);
}
};
HTMLArea.Config.prototype.registerButton = function(id, tooltip, image, textMode, action, context)
{
var the_id;
if (typeof id == "string")
{
the_id = id;
}
else if (typeof id == "object")
{
the_id = id.id;
}
else
{
alert("ERROR [HTMLArea.Config::registerButton]:\ninvalid arguments");
return false;
}
if (typeof this.customSelects[the_id] != "undefined")
{
}
if (typeof this.btnList[the_id] != "undefined")
{
}
switch (typeof id)
{
case "string": this.btnList[id] = [ tooltip, image, textMode, action, context ]; break;
case "object": this.btnList[id.id] = [ id.tooltip, id.image, id.textMode, id.action, id.context ]; break;
}
return true;
};
HTMLArea.Config.prototype.registerDropdown = function(object)
{
if (typeof this.customSelects[object.id] != "undefined")
{
}
if (typeof this.btnList[object.id] != "undefined")
{
}
this.customSelects[object.id] = object;
};
HTMLArea.Config.prototype.hideSomeButtons = function(remove)
{
var toolbar = this.toolbar;
for (var i = toolbar.length; --i >= 0;)
{
var line = toolbar[i];
for (var j = line.length; --j >= 0; )
{
if (remove.indexOf(" " + line[j] + " ") >= 0)
{
var len = 1;
if (/separator|space/.test(line[j + 1]))
{
len = 2;
}
line.splice(j, len);
}
}
}
};
HTMLArea.loadScript = function(url, plugin)
{
if (plugin)
{
url = HTMLArea.getPluginDir(plugin) + '/' + url;
}
this._scripts.push(url);
};
HTMLArea.loadScript(_editor_url + "dialog.js");
HTMLArea.loadScript(_editor_url + "inline-dialog.js");
HTMLArea.loadScript(_editor_url + "popupwin.js");
HTMLArea.init = function()
{
var head = document.getElementsByTagName("head")[0];
var current = 0;
var savetitle = document.title;
var evt = HTMLArea.is_ie ? "onreadystatechange" : "onload";
function loadNextScript()
{
if (current > 0 && HTMLArea.is_ie &&
!/loaded|complete/.test(window.event.srcElement.readyState))
{
return;
}
if (current < HTMLArea._scripts.length)
{
var url = HTMLArea._scripts[current++];
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
script[evt] = loadNextScript;
head.appendChild(script);
}
else
{
document.title = savetitle;
HTMLArea.onload();
}
};
loadNextScript();
};
HTMLArea.replaceAll = function(config)
{
var tas = document.getElementsByTagName("textarea");
for (var i = tas.length; i > 0; (new HTMLArea(tas[--i], config)).generate());
};
HTMLArea.replace = function(id, config)
{
var ta = HTMLArea.getElementById("textarea", id);
if (ta)
{
var taobj = new HTMLArea(ta, config);
taobj.generate();
return taobj;
}
return null;
};
var use_clone_img = false;
HTMLArea.makeBtnImg = function(imgDef, doc)
{
if(!doc) doc = document;
if (!doc._htmlareaImgCache)
{
doc._htmlareaImgCache = { };
}
var i_contain = null;
if(HTMLArea.is_ie && ((!doc.compatMode) || (doc.compatMode && doc.compatMode == "BackCompat")))
{
i_contain = doc.createElement('span');
}
else
{
i_contain = doc.createElement('div');
}
i_contain.style.overflow = 'hidden';
i_contain.style.width = "18px";
i_contain.style.height = "18px";
var img = null;
if(typeof imgDef == 'string')
{
if(doc._htmlareaImgCache[imgDef])
{
img = doc._htmlareaImgCache[imgDef].cloneNode();
}
else
{
img = doc.createElement("img");
img.src = imgDef;
img.style.width = "18px";
img.style.height = "18px";
if(use_clone_img)
doc._htmlareaImgCache[imgDef] = img.cloneNode();
}
}
else
{
if(doc._htmlareaImgCache[imgDef[0]])
{
img = doc._htmlareaImgCache[imgDef[0]].cloneNode();
}
else
{
img = doc.createElement("img");
img.src = imgDef[0];
if(use_clone_img)
doc._htmlareaImgCache[imgDef[0]] = img.cloneNode();
}
img.style.top  = imgDef[2] ? ('-' + (18 * (imgDef[2] + 1)) + 'px') : '-18px';
img.style.left = imgDef[1] ? ('-' + (18 * (imgDef[1] + 1)) + 'px') : '-18px';
}
i_contain.appendChild(img);
return i_contain;
}
HTMLArea.getPluginDir = function(pluginName)
{
return _editor_url + "plugins/" + pluginName;
};
HTMLArea.loadPlugin = function(pluginName, callback)
{
if ( eval('typeof ' + pluginName) != 'undefined' )
{
if (callback)
{
callback();
}
return;
}
var dir = this.getPluginDir(pluginName);
var plugin = pluginName.replace(/([a-z])([A-Z])([a-z])/g,
function (str, l1, l2, l3)
{
return l1 + "-" + l2.toLowerCase() + l3;
}).toLowerCase() + ".js";
var plugin_file = dir + "/" + plugin;
if ( typeof HTMLArea.plugin_loadattempts[ pluginName ] == 'undefined' )
{
HTMLArea.plugin_loadattempts[ pluginName ] = 1;
}
else
{
HTMLArea.plugin_loadattempts[ pluginName ]++;
}
if ( HTMLArea.plugin_loadattempts[ pluginName ] > HTMLArea.maxloadattempts )
{
alert( "ERROR unsuccessfully attempted to load plugin '" + pluginName + "' '" + HTMLArea.maxloadattempts + "' times. It probably contains an error. Please check your javascript console for details" );
return false;
}
if ( callback )
{
HTMLArea._loadback(plugin_file, callback);
}
else
{
document.write("<script type='text/javascript' src='" + plugin_file + "'></script>");
}
return true;
}
HTMLArea.loadPlugins = function(plugins, callbackIfNotReady)
{
var nuPlugins = HTMLArea.cloneObject(plugins);
while(nuPlugins.length)
{
if ( eval('typeof ' + nuPlugins[nuPlugins.length-1]) != 'undefined' )
{
var poppedPlugin = nuPlugins.pop();
}
else
{
break;
}
}
if( !nuPlugins.length )
{
return true;
}
HTMLArea.loadPlugin( nuPlugins.pop(),
function()
{
if(HTMLArea.loadPlugins(nuPlugins, callbackIfNotReady))
{
if(typeof callbackIfNotReady == 'function')
{
callbackIfNotReady();
}
}
}
);
return false;
}
HTMLArea.refreshPlugin = function(plugin)
{
if (typeof plugin.onGenerate == "function")
{
plugin.onGenerate();
}
if (typeof plugin.onGenerateOnce == "function")
{
plugin.onGenerateOnce();
plugin.onGenerateOnce = null;
}
};
HTMLArea.loadStyle = function(style, plugin)
{
var url = _editor_url || '';
if (typeof plugin != "undefined")
{
url += "plugins/" + plugin + "/";
}
url += style;
if (/^\//.test(style))
url = style;
var head = document.getElementsByTagName("head")[0];
var link = document.createElement("link");
link.rel = "stylesheet";
link.href = url;
head.appendChild(link);
};
HTMLArea.loadStyle(typeof _editor_css == "string" ? _editor_css : "htmlarea.css");
HTMLArea.objectProperties = function(obj)
{
var props = [ ];
for(var x in obj)
{
props[props.length] = x;
}
return props;
}
HTMLArea.getInnerText = function(el)
{
var txt = '', i;
for (i = el.firstChild; i; i = i.nextSibling)
{
if (i.nodeType == 3)
txt += i.data;
else if (i.nodeType == 1)
txt += HTMLArea.getInnerText(i);
}
return txt;
};
HTMLArea.cloneObject = function(obj)
{
if (!obj) return null;
var newObj = new Object;
if (obj.constructor.toString().indexOf("function Array(") != -1)
{
newObj = obj.constructor();
}
if (obj.constructor.toString().indexOf("function Function(") != -1)
{
newObj = obj;
}
else
{
for (var n in obj)
{
var node = obj[n];
if (typeof node == 'object')
{
newObj[n] = HTMLArea.cloneObject(node);
}
else
{
newObj[n] = node;
}
}
}
return newObj;
};
HTMLArea.checkSupportedBrowser = function()
{
if (HTMLArea.is_gecko)
{
if (navigator.productSub < 20021201)
{
alert("You need at least Mozilla-1.3 Alpha.\n" +
"Sorry, your Gecko is not supported.");
return false;
}
if (navigator.productSub < 20030210)
{
alert("Mozilla < 1.3 Beta is not supported!\n" +
"I'll try, though, but it might not work.");
}
}
return HTMLArea.is_gecko || HTMLArea.is_ie;
};
HTMLArea.getElementById = function(tag, id)
{
var el, i, objs = document.getElementsByTagName(tag);
for (i = objs.length; --i >= 0 && (el = objs[i]);)
if (el.id == id)
return el;
return null;
};
HTMLArea._postback = function(url, data, handler)
{
var req = null;
if(HTMLArea.is_ie)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
req = new XMLHttpRequest();
}
var content = '';
for(var i in data)
{
content += (content.length ? '&' : '') + i + '=' + encodeURIComponent(data[i]);
}
function callBack()
{
if(req.readyState == 4)
{
if(req.status == 200)
{
if(typeof handler == 'function')
handler(req.responseText, req);
}
else
{
alert('An error has occurred: ' + req.statusText);
}
}
}
req.onreadystatechange = callBack;
req.open('POST', url, true);
req.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' );
req.send(content);
}
HTMLArea._getback = function(url, handler)
{
var req = null;
if(HTMLArea.is_ie)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
req = new XMLHttpRequest();
}
function callBack()
{
try
{
if(req.readyState == 4)
{
if(req.status == 200)
{
handler(req.responseText, req);
}
else
{
alert('An error has occurred: ' + req.statusText);
}
}
}
catch(e)
{
}
}	req.onreadystatechange = callBack;
req.open('GET', url, true);
req.send(null);
}
HTMLArea._geturlcontent = function(url)
{
var req = null;
if(HTMLArea.is_ie)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
req = new XMLHttpRequest();
}
req.open('GET', url, false);
req.send(null);
if(req.status == 200)
{
return req.responseText;
}
else
{
return '';
}
}
HTMLArea.arrayContainsArray = function(a1, a2)
{
var all_found = true;
for(var x = 0; x < a2.length; x++)
{
var found = false;
for(var i = 0; i < a1.length; i++)
{
if(a1[i] == a2[x])
{
found = true;
break;
}
}
if(!found)
{
all_found = false;
break;
}
}
return all_found;
}
HTMLArea.arrayFilter = function(a1, filterfn)
{
var new_a = [ ];
for(var x = 0; x < a1.length; x++)
{
if(filterfn(a1[x]))
new_a[new_a.length] = a1[x];
}
return new_a;
}
HTMLArea.uniq = function(prefix)
{
return prefix + HTMLArea.uniq_count++;
}
HTMLArea._loadlang = function(context)
{
var url;
if(typeof _editor_lcbackend == "string")
{
url = _editor_lcbackend;
url = url.replace(/%lang%/, _editor_lang);
url = url.replace(/%context%/, context);
}
else
{
if(context != 'HTMLArea')
{
url = _editor_url+"/plugins/"+context+"/lang/"+_editor_lang+".js";
}
else
{
url = _editor_url+"/lang/"+_editor_lang+".js";
}
}
var lang;
var langData = HTMLArea._geturlcontent(url);
if(langData != "")
{
try
{
eval('lang = ' + langData);
}
catch(Error)
{
alert('Error reading Language-File ('+url+'):\n'+Error.toString());
lang = { }
}
}
else
{
lang = { };
}
return lang;
}
HTMLArea._lc = function(string, context)
{
if(_editor_lang == "en")
{
return string;
}
if(typeof HTMLArea._lc_catalog == 'undefined')
{
HTMLArea._lc_catalog = [ ];
}
if(typeof context == 'undefined')
{
context = 'HTMLArea';
}
if(typeof HTMLArea._lc_catalog[context] == 'undefined')
{
HTMLArea._lc_catalog[context] = HTMLArea._loadlang(context);
}
if(typeof HTMLArea._lc_catalog[context][string] == 'undefined')
{
return string;
}
else
{
return HTMLArea._lc_catalog[context][string];
}
}
HTMLArea.hasDisplayedChildren = function(el)
{
var children = el.childNodes;
for(var i =0; i < children.length;i++)
{
if(children[i].tagName)
{
if(children[i].style.display != 'none')
{
return true;
}
}
}
return false;
}
HTMLArea._loadback = function(src, callback)
{
var head = document.getElementsByTagName("head")[0];
var evt = HTMLArea.is_ie ? "onreadystatechange" : "onload";
var script = document.createElement("script");
script.type = "text/javascript";
script.src = src;
script[evt] = function()
{
if(HTMLArea.is_ie && !/loaded|complete/.test(window.event.srcElement.readyState))  return;
callback();
}
head.appendChild(script);
};
HTMLArea.collectionToArray = function(collection)
{
var array = [ ];
for(var i = 0; i < collection.length; i++)
{
array.push(collection.item(i));
}
return array;
}
HTMLArea.makeEditors = function(editor_names, default_config, plugin_names)
{
if ( typeof default_config == 'function')
{
default_config = default_config();
}
var editors = { };
for(var x = 0; x < editor_names.length; x++)
{
editors[editor_names[x]] = new HTMLArea(editor_names[x], HTMLArea.cloneObject(default_config));
if ( plugin_names )
{
for(var i = 0; i < plugin_names.length; i++)
{
editors[editor_names[x]].registerPlugin(eval(plugin_names[i]));
}
}
}
return editors;
}
HTMLArea.startEditors = function(editors)
{
for(var i in editors)
{
if(editors[i].generate) editors[i].generate();
}
}
HTMLArea._makeColor = function(v)
{
if (typeof v != "number")
{
return v;
}
var r = v & 0xFF;
var g = (v >> 8) & 0xFF;
var b = (v >> 16) & 0xFF;
return "rgb(" + r + "," + g + "," + b + ")";
};
HTMLArea._colorToRgb = function(v)
{
if (!v)
return '';
var r;
var g;
var b;
function hex(d)
{
return (d < 16) ? ("0" + d.toString(16)) : d.toString(16);
};
if (typeof v == "number")
{
r = v & 0xFF;
g = (v >> 8) & 0xFF;
b = (v >> 16) & 0xFF;
return "#" + hex(r) + hex(g) + hex(b);
}
if (v.substr(0, 3) == "rgb")
{
var re = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/;
if (v.match(re))
{
r = parseInt(RegExp.$1);
g = parseInt(RegExp.$2);
b = parseInt(RegExp.$3);
return "#" + hex(r) + hex(g) + hex(b);
}
return null;
}
if (v.substr(0, 1) == "#")
{
return v;
}
return null;
};
HTMLArea.isBlockElement = function(el)
{
return el && el.nodeType == 1 && (HTMLArea._blockTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
};
HTMLArea.isParaContainer = function(el)
{
return el && el.nodeType == 1 && (HTMLArea._paraContainerTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
}
HTMLArea.needsClosingTag = function(el)
{
return el && el.nodeType == 1 && (HTMLArea._closingTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
};
HTMLArea.htmlEncode = function(str)
{
if(typeof str.replace == 'undefined') str = str.toString();
str = str.replace(/&/ig, "&amp;");
str = str.replace(/</ig, "&lt;");
str = str.replace(/>/ig, "&gt;");
str = str.replace(/\xA0/g, "&nbsp;");
str = str.replace(/\x22/g, "&quot;");
return str;
};
HTMLArea.getHTML = function(root, outputRoot, editor)
{
try
{
return HTMLArea.getHTMLWrapper(root,outputRoot,editor);
}
catch(e)
{
alert('Your Document is not well formed. Check JavaScript console for details.');
return editor._iframe.contentWindow.document.body.innerHTML;
}
}
HTMLArea.getHTMLWrapper = function(root, outputRoot, editor)
{
var html = "";
switch (root.nodeType)
{
case 10:// Node.DOCUMENT_TYPE_NODE
case 6:
case 12:// Node.NOTATION_NODE
break;
case 2:
break;
case 4:
html += '<![CDATA[' + root.data + ']]>';
break;
case 5:
html += '&' + root.nodeValue + ';';
break;
case 7:
html += '<?' + root.target + ' ' + root.data + ' ?>';
break;
case 1:
case 11:
case 9:
{
var closed;
var i;
var root_tag = (root.nodeType == 1) ? root.tagName.toLowerCase() : '';
if (outputRoot)
{
outputRoot = !(editor.config.htmlRemoveTags && editor.config.htmlRemoveTags.test(root_tag));
}
if (HTMLArea.is_ie && root_tag == "head")
{
if (outputRoot)
{
html += "<head>";
}
var save_multiline = RegExp.multiline;
RegExp.multiline = true;
var txt = root.innerHTML.replace(HTMLArea.RE_tagName,
function(str, p1, p2)
{
return p1 + p2.toLowerCase();
});
RegExp.multiline = save_multiline;
html += txt;
if (outputRoot)
{
html += "</head>";
}
break;
}
else if (outputRoot)
{
closed = (!(root.hasChildNodes() || HTMLArea.needsClosingTag(root)));
html = "<" + root.tagName.toLowerCase();
var attrs = root.attributes;
for (i = 0; i < attrs.length; ++i)
{
var a = attrs.item(i);
if (!a.specified)
{
continue;
}
var name = a.nodeName.toLowerCase();
if (/_moz_editor_bogus_node/.test(name))
{
html = "";
break;
}
if (/(_moz)|(contenteditable)|(_msh)/.test(name))
{
continue;
}
var value;
if (name != "style")
{
if (typeof root[a.nodeName] != "undefined" && name != "href" && name != "src" && !/^on/.test(name))
{
value = root[a.nodeName];
}
else
{
value = a.nodeValue;
if (HTMLArea.is_ie && (name == "href" || name == "src"))
{
value = editor.stripBaseURL(value);
}
}
}
else
{
value = root.style.cssText;
}
if (/^(_moz)?$/.test(value))
{
continue;
}
html += " " + name + '="' + HTMLArea.htmlEncode(value) + '"';
}
if (html != "")
{
html += closed ? " />" : ">";
}
}
for (i = root.firstChild; i; i = i.nextSibling)
{
html += HTMLArea.getHTMLWrapper(i, true, editor);
}
if (outputRoot && !closed)
{
html += "</" + root.tagName.toLowerCase() + ">";
}
break;
}
case 3:
html = /^script|style$/i.test(root.parentNode.tagName) ? root.data : HTMLArea.htmlEncode(root.data);
break;
case 8:
html = "";
break;	}
return html;
};
HTMLArea.addClasses = function(el, classes)
{
if(el != null)
{
var thiers = el.className.trim().split(' ');
var ours   = classes.split(' ');
for(var x = 0; x < ours.length; x++)
{
var exists = false;
for(var i = 0; exists == false && i < thiers.length; i++)
{
if(thiers[i] == ours[x])
{
exists = true;
}
}
if(exists == false)
{
thiers[thiers.length] = ours[x];
}
}
el.className = thiers.join(' ').trim();
}
}
HTMLArea.removeClasses = function(el, classes)
{
var existing    = el.className.trim().split();
var new_classes = [ ];
var remove      = classes.trim().split();
for(var i = 0; i < existing.length; i++)
{
var found = false;
for(var x = 0; x < remove.length && !found; x++)
{
if(existing[i] == remove[x])
{
found = true;
}
}
if(!found)
{
new_classes[new_classes.length] = existing[i];
}
}
return new_classes.join(' ');
}
HTMLArea._addClass = function(el, className)
{
HTMLArea._removeClass(el, className);
el.className += " " + className;
};
HTMLArea._hasClass = function(el, className)
{
if (!(el && el.className))
{
return false;
}
var cls = el.className.split(" ");
for (var i = cls.length; i > 0;)
{
if (cls[--i] == className)
{
return true;
}
}
return false;
};
HTMLArea._removeClass = function(el, className)
{
if (!(el && el.className))
{
return;
}
var cls = el.className.split(" ");
var ar = new Array();
for (var i = cls.length; i > 0;)
{
if (cls[--i] != className)
{
ar[ar.length] = cls[i];
}
}
el.className = ar.join(" ");
};
HTMLArea.addClass       = HTMLArea._addClass;
HTMLArea.removeClass    = HTMLArea._removeClass;
HTMLArea._addClasses    = HTMLArea.addClasses;
HTMLArea._removeClasses = HTMLArea.removeClasses;
HTMLArea._addEvent = function(el, evname, func)
{
if (HTMLArea.is_ie)
{
el.attachEvent("on" + evname, func);
}
else
{
el.addEventListener(evname, func, true);
}
};
HTMLArea._addEvents = function(el, evs, func)
{
for (var i = evs.length; --i >= 0;)
{
HTMLArea._addEvent(el, evs[i], func);
}
};
HTMLArea._removeEvent = function(el, evname, func)
{
if (HTMLArea.is_ie)
{
el.detachEvent("on" + evname, func);
}
else
{
el.removeEventListener(evname, func, true);
}
};
HTMLArea._removeEvents = function(el, evs, func)
{
for (var i = evs.length; --i >= 0;)
{
HTMLArea._removeEvent(el, evs[i], func);
}
};
HTMLArea._stopEvent = function(ev)
{
if (HTMLArea.is_ie)
{
ev.cancelBubble = true;
ev.returnValue = false;
}
else
{
ev.preventDefault();
ev.stopPropagation();
}
};
function HTMLArea(textarea, config)
{
if (HTMLArea.checkSupportedBrowser())
{
if (typeof config == "undefined")
{
this.config = new HTMLArea.Config();
}
else
{
this.config = config;
}
this._htmlArea = null;
this._textArea = textarea;
this._editMode = "wysiwyg";
this.plugins = {};
this._timerToolbar = null;
this._timerUndo = null;
this._undoQueue = new Array(this.config.undoSteps);
this._undoPos = -1;
this._customUndo = true;
this._mdoc = document;
this.doctype = '';
this.__htmlarea_id_num = __htmlareas.length;
__htmlareas[this.__htmlarea_id_num] = this;
this._notifyListeners = { };
var panels = this._panels =
{
right:
{
on: true,
div:    document.createElement('div'),
panels: [ ]
},
left:
{
on: true,
div:    document.createElement('div'),
panels: [ ]
},
top:
{
on: true,
div:    document.createElement('div'),
panels: [ ]
},
bottom:
{
on: true,
div:    document.createElement('div'),
panels: [ ]
}
};
for(var i in panels)
{
panels[i].div.className = 'panels ' + i;
}
}
};
HTMLArea.prototype._createToolbar = function ()
{
var editor = this;	var toolbar = document.createElement("div");
this._toolbar = toolbar;
toolbar.className = "toolbar";
toolbar.unselectable = "1";
toolbar.id = "fRATool_" + this.config.indobj;
var tb_row = null;
var tb_objects = new Object();
this._toolbarObjects = tb_objects;
this._createToolbar1(editor, toolbar, tb_objects);
this._htmlArea.appendChild(toolbar);
}
HTMLArea.prototype.registerPanel = function(side, object)
{
if(!side) side = 'right';
var panel = this.addPanel(side);
if(object)
{
object.drawPanelIn(panel);
}
}
HTMLArea.prototype._setConfig = function(config)
{
this.config = config;
}
HTMLArea.prototype._addToolbar = function()
{
this._createToolbar1(this, this._toolbar, this._toolbarObjects);
}
var tb_row;
HTMLArea.prototype._createToolbar1 = function (editor, toolbar, tb_objects)
{
function newLine( editor )
{
var table = document.createElement("table");
table.border = "0px";
table.cellSpacing = "0px";
table.cellPadding = "0px";
toolbar.appendChild(table);
var tb_body = document.createElement("tbody");
table.appendChild(tb_body);
tb_row = document.createElement("tr");
tb_body.appendChild(tb_row);
};
newLine( this );
function setButtonStatus(id, newval )
{
var oldval = this[id];
var el = this.element;
if (oldval != newval)
{
switch (id)
{
case "enabled":
if (newval)
{
HTMLArea._removeClass(el, "buttonDisabled");
el.disabled = false;
}
else
{
HTMLArea._addClass(el, "buttonDisabled");
el.disabled = true;
}
break;
case "active":
if (newval)
{
HTMLArea._addClass(el, "buttonPressed");
}
else
{
HTMLArea._removeClass(el, "buttonPressed");
}
break;
}
this[id] = newval;
}
};
function createSelect(txt)
{
var options = null;
var el = null;
var cmd = null;
var customSelects = editor.config.customSelects;
var context = null;
var tooltip = "";
switch (txt)
{
case "fontsize":
case "fontname":
case "formatblock":
options = editor.config[txt];
cmd = txt;
break;
default:
cmd = txt;
var dropdown = customSelects[cmd];
if (typeof dropdown != "undefined")
{
options = dropdown.options;
context = dropdown.context;
if (typeof dropdown.tooltip != "undefined")
{
tooltip = dropdown.tooltip;
}
}
else
{
alert("ERROR [createSelect]:\nCan't find the requested dropdown definition");
}
break;
}
if (options)
{
el = document.createElement("select");
el.title = tooltip;
var obj =
{
name	: txt,
element : el,	enabled : true,
text	: false,
cmd	: cmd,
state	: setButtonStatus,
context : context
};
tb_objects[txt] = obj;
for (var i in options)
{
var op = document.createElement("option");
op.innerHTML = i;
op.value = options[i];
el.appendChild(op);
}
HTMLArea._addEvent(el, "change",
function ()
{
editor._comboSelected(el, txt);
});
}
return el;
};
function createButton(txt, editor )
{
var el = null;
var btn = null;
var obj = null;
switch (txt)
{
case "separator":
el = document.createElement("div");
el.className = "separator";
break;
case "space":
el = document.createElement("div");
el.className = "space";
break;
case "linebreak":
newLine( editor );
return false;
case "textindicator":
el = document.createElement("div");
el.appendChild(document.createTextNode("A"));
el.className = "indicator";
el.title = HTMLArea._lc("Current style");
obj =
{
name	: txt,
element : el,
enabled : true,
active	: false,
text	: false,
cmd	: "textindicator",
state	: setButtonStatus
};
tb_objects[txt] = obj;
break;
default:
btn = editor.config.btnList[txt];
}
if (!el && btn)
{
el = document.createElement("a");
el.style.display = 'block';
el.href = 'javascript:void(0)';
el.style.textDecoration = 'none';
el.title = btn[0];
el.className = "button";
obj =
{
name	: txt,
element : el,
enabled : true,
active	: false,
text	: btn[2],
cmd	: btn[3],
state	: setButtonStatus,
context : btn[4] || null
};
tb_objects[txt] = obj;
HTMLArea._addEvent(el, "mouseout",
function ()
{
if (obj.enabled)
{
HTMLArea._removeClass(el, "buttonActive");
(obj.active) && HTMLArea._addClass(el, "buttonPressed");
}
});
HTMLArea._addEvent(el, "mousedown",
function (ev)
{
if (obj.enabled)
{
HTMLArea._addClass(el, "buttonActive");
HTMLArea._removeClass(el, "buttonPressed");
HTMLArea._stopEvent(HTMLArea.is_ie ? window.event : ev);
}
});
HTMLArea._addEvent(el, "click",
function (ev)
{
if (obj.enabled)
{
HTMLArea._removeClass(el, "buttonActive");

if ( HTMLArea.is_gecko )
{
editor.activateEditor();
}
obj.cmd(editor, obj.name, obj);
HTMLArea._stopEvent(HTMLArea.is_ie ? window.event : ev);
}
});
var i_contain = HTMLArea.makeBtnImg(btn[1]);
var img = i_contain.firstChild;
el.appendChild(i_contain);
obj.imgel = img;
obj.swapImage = function(newimg)
{
if(typeof newimg != 'string')
{
img.src = newimg[0];
img.style.top  = newimg[2] ? ('-' + (18 * (newimg[2] + 1)) + 'px') : '-18px';
img.style.left = newimg[1] ? ('-' + (18 * (newimg[1] + 1)) + 'px') : '-18px';
}
else
{
obj.imgel.src = newimg;
img.style.top = '0px';
img.style.left = '0px';
}
}	}
else if (!el)
{
el = createSelect(txt);
}
if (el)
{
var tb_cell = document.createElement("td");
tb_row.appendChild(tb_cell);
tb_cell.appendChild(el);
}
else
{
alert("FIXME: Unknown toolbar item: " + txt);
}
return el;
};
var first = true;
for (var i = 0; i < this.config.toolbar.length; ++i)
{
if (!first)
{
}
else
{
first = false;
}
if (this.config.toolbar[i] == null)
this.config.toolbar[i] = ['separator'];
var group = this.config.toolbar[i];
for (var j = 0; j < group.length; ++j)
{
var code = group[j];
if (/^([IT])\[(.*?)\]/.test(code))
{
var l7ed = RegExp.$1 == "I";
var label = RegExp.$2;
if (l7ed)
{
label = HTMLArea._lc(label);
}
var tb_cell = document.createElement("td");
tb_row.appendChild(tb_cell);
tb_cell.className = "label";
tb_cell.innerHTML = label;
}
else if(typeof code != 'function')
{
createButton(code, this);
}
}
}
};
HTMLArea.prototype._createStatusBar = function()
{
var statusbar = document.createElement("div");
statusbar.className = "statusBar";
this._htmlArea.appendChild(statusbar);
this._statusBar = statusbar;
var div = document.createElement("span");
div.className = "statusBarTree";
div.innerHTML = HTMLArea._lc("Path") + ": ";
this._statusBarTree = div;
this._statusBar.appendChild(div);
if (!this.config.statusBar)
{
statusbar.style.display = "none";
}
};	HTMLArea.prototype.generate = function()
{
var editor = this;	if (HTMLArea.is_gecko)
{
switch(editor.config.mozParaHandler)
{
case 'best':
case 'dirty'   :
case 'built-in':
default        :
{
}
break;
}
}
var textarea = this._textArea;
if (typeof textarea == "string")
{
this._textArea = textarea = HTMLArea.getElementById("textarea", textarea);
}
this._ta_size =
{
w: textarea.offsetWidth,
h: textarea.offsetHeight
};
var htmlarea = document.createElement("div");
htmlarea.className = "htmlarea";
htmlarea.id = "fRAEdit_" + this.config.indobj;
this._htmlArea = htmlarea;
if ( this.config.width != 'auto' && this.config.width != 'toolbar' )
{
htmlarea.style.width = this.config.width;
}
textarea.parentNode.insertBefore(htmlarea, textarea);
this._createToolbar();
var innerEditor = document.createElement('div');
htmlarea.appendChild(innerEditor);
this.innerEditor = innerEditor;
textarea.parentNode.removeChild(textarea);
innerEditor.appendChild(textarea);
var iframe = document.createElement("iframe");
innerEditor.appendChild(iframe);
this._iframe = iframe;
this._iframe.id = "fRAif_" + this.config.indobj;
for(var i in this._panels)
{
innerEditor.appendChild(this._panels[i].div);
}
this._createStatusBar();
if (textarea.form)
{
var f = textarea.form;
if (typeof f.__msh_prevOnSubmit == "undefined")
{
f.__msh_prevOnSubmit = [];
if (typeof f.onsubmit == "function")
{
var funcref = f.onsubmit;
f.__msh_prevOnSubmit.push(funcref);
f.onsubmit = null;
}
f.onsubmit = function()
{
var a = this.__msh_prevOnSubmit;
var allOK = true;
for (var i = a.length; --i >= 0;)
{
this.__msh_tempEventHandler = a[i];
if(this.__msh_tempEventHandler() == false)
{
allOK = false;
break;
}
}
return allOK;
}
}
f.__msh_prevOnSubmit.push( function()
{
editor._textArea.value = editor.outwardHtml(editor.getHTML());
});
if (typeof f.__msh_prevOnReset == "undefined")
{
f.__msh_prevOnReset = [];
if (typeof f.onreset == "function")
{
var funcref_tmp = f.onreset;
f.__msh_prevOnReset.push(funcref_tmp);
f.onreset = null;
}
f.onreset = function()
{
var a = this.__msh_prevOnReset;
var allOK = true;
for (var i = a.length; --i >= 0;)
{
if(a[i]() == false)
{
allOK = false;
break;
}
}
return allOK;
}
}
f.__msh_prevOnReset.push( function() {editor.setHTML(editor._textArea.value); editor.updateToolbar();});
}
try
{
HTMLArea._addEvent(window, 'unload',
function()
{
textarea.value = editor.outwardHtml(editor.getHTML());
} );
} catch(e) {};
textarea.style.display = "none";
var height = null;
var width  = null;
switch(this.config.height)
{
case 'auto' : { height = parseInt(this._ta_size.h);    break; }
default     : { height = parseInt(this.config.height); break; }
}
if (height == 0)
height = 180;
switch(this.config.width)
{
case 'toolbar': {width = parseInt(this._toolbar.offsetWidth); break; }
case 'auto'   : {width = parseInt(this._ta_size.w);          break; }
default       : {width = parseInt(this.config.width);        break; }
}
if (width == 0)
width = 500;
if (this.config.sizeIncludesToolbar)
{
height -= this._toolbar.offsetHeight;
height -= this._statusBar.offsetHeight;
}
width  = Math.max(width, 100);
height = Math.max(height,100);
this.config.height = height;
this.setInnerSize(width,height);
this.notifyOn('panel_change',function(){editor.setInnerSize();});
if ( HTMLArea.is_gecko )
{
editor.isGenerated = false;
this._iframe.addEventListener("load",
function(e)
{
if ( !editor.isGenerated )
{
editor.isGenerated = true;
editor.initIframe();
}
return true;
},
false);
}
else
{
this._iframe.attachEvent("onload",	function(e)
{
if ( !editor.isGenerated )
{
editor.isGenerated = true;
editor.initIframe();
}
return true;
});
}
return true;
};
HTMLArea.prototype.initIframe = function()
{
var doc = null;
var editor = this;
var html = null;
try
{
doc = editor._iframe.contentWindow.document;
if (!doc)
{
if (HTMLArea.is_gecko)
{
setTimeout(function() { editor.initIframe()}, 50);
return false;
}
else
{
alert("ERROR: IFRAME can't be initialized.");
}
}
}
catch(e)
{
alert("EXCEPTION: couldn't get doc in initFrame - delaying and returning.");
setTimeout(function() { editor.initIframe()}, 50);
return false;
}
if (!editor.config.fullPage)
{
doc.open();
html = "<html>\n";
html += "<head>\n";
html += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" + editor.config.charSet + "\">\n";
if ( typeof editor.config.baseHref != 'undefined' && editor.config.baseHref != null)
{
html += "<base href=\"" + editor.config.baseHref + "\"/>\n";
}
html += "<style title=\"table borders\">"
+ ".htmtableborders, .htmtableborders td, .htmtableborders th {border : 1px dashed lightgrey ! important;} \n"
+ "</style>\n";
html += "<style>"
+ editor.config.pageStyle + "\n"
+ "html, body { border: 0px; } \n"
+ "span.macro, span.macro ul, span.macro div, span.macro p {background : #CCCCCC;}\n"
+ "</style>\n";
if (typeof editor.config.pageStyleSheets !== 'undefined')
{
for(style_i = 0; style_i < editor.config.pageStyleSheets.length; style_i++)
{
if (editor.config.pageStyleSheets[style_i].length > 0)
html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + editor.config.pageStyleSheets[style_i] + "\">";
}
}
html += "</head>\n";
html += "<body>\n";
html +=   editor.inwardHtml(editor._textArea.value);
html += "</body>\n";
html += "</html>";
doc.write(html);
doc.close();
}
else
{
html = editor.inwardHtml(editor._textArea.value);
if (html.match(HTMLArea.RE_doctype))
{
editor.setDoctype(RegExp.$1);
html = html.replace(HTMLArea.RE_doctype, "");
}
doc.open();
doc.write(html);
doc.close();
}
this._doc = doc;
if (HTMLArea.is_gecko)
{
HTMLArea._addEvents(
editor._iframe.contentWindow,
["mousedown"],
function()
{
editor.activateEditor();
}
);
}
else
{
editor.activateEditor();
}
HTMLArea._addEvents( doc,
["keydown", "keypress", "mousedown", "mouseup", "drag", "mouseout"],
function (event)
{
return editor._editorEvent(HTMLArea.is_ie ? editor._iframe.contentWindow.event : event);
});
for (var i in editor.plugins)
{
var plugin = editor.plugins[i].instance;
HTMLArea.refreshPlugin(plugin);
}
if (typeof editor._onGenerate == "function")
{
editor._onGenerate();
}
if (typeof editor.onGenerate == "function")
{
editor.onGenerate();
}
return true;
}
HTMLArea.prototype.getInnerSize = function()
{
return this._innerSize;
}
HTMLArea.prototype.setInnerSize = function(width, height)
{
if (typeof width == 'undefined' || width == null)
{
width  = this._innerSize.width;
}
if (typeof height == 'undefined' || height == null)
{
height  = this._innerSize.height;
}
this._innerSize = {'width':width,'height':height};
var editorWidth  = width;
var editorHeight = height;
var editorLeft   = 0;
var editorTop    = 0;
var panels = this._panels;
var panel = panels.right;
if (panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div))
{
panel.div.style.width    = parseInt(this.config.panel_dimensions.right) + (HTMLArea.ie_ie ? -1 : -2) + 'px';
panel.div.style.height   = height + (HTMLArea.is_ie ? -1 : -1) + 'px';
panel.div.style.top      = '0px';
panel.div.style.right    = (HTMLArea.is_ie ? 1 : 2) + 'px';
panel.div.style.padding  = "0px";
panel.div.style.overflow = "auto";
panel.div.style.display  = 'block';
editorWidth -= parseInt(this.config.panel_dimensions.right) + (HTMLArea.is_ie ? 2 : 0);
}
else
{
panel.div.style.display  = 'none';
}
panel = panels.left;
if (panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div))
{
panel.div.style.width    = parseInt(this.config.panel_dimensions.left) + (HTMLArea.ie_ie ? -1 : -1) + 'px';
panel.div.style.height   = height + (HTMLArea.is_ie ? -1 : -1) + 'px';
panel.div.style.top      = '0px';
panel.div.style.left     = (HTMLArea.is_ie ? 0 : 0) + 'px';
panel.div.style.padding  = "0px";
panel.div.style.overflow = "auto";
panel.div.style.display  = "block";
editorWidth -= parseInt(this.config.panel_dimensions.left) + (HTMLArea.is_ie ? 2 : 0);
editorLeft   = parseInt(this.config.panel_dimensions.left) + (HTMLArea.is_ie ? 2 : 0) + 'px';
}
else
{
panel.div.style.display  = 'none';
}
panel = panels.top;
if (panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div))
{
panel.div.style.top      = '0px';
panel.div.style.left     = '0px';
panel.div.style.width    = width  + 'px';
panel.div.style.height   = parseInt(this.config.panel_dimensions.top) + 'px';
panel.div.style.padding  = "0px";
panel.div.style.overflow = "auto";
panel.div.style.display  = "block";
editorHeight -= parseInt(this.config.panel_dimensions.top);
editorTop     = parseInt(this.config.panel_dimensions.top) + 'px';
}
else
{
panel.div.style.display  = 'none';
}
panel = panels.bottom;
if(panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div))
{
panel.div.style.bottom   = '0px';
panel.div.style.left     = '0px';
panel.div.style.width    = width  + 'px';
panel.div.style.height   = parseInt(this.config.panel_dimensions.bottom) + 'px';
panel.div.style.padding  = "0px";
panel.div.style.overflow = "auto";
panel.div.style.display  = "block";
editorHeight -= parseInt(this.config.panel_dimensions.bottom);
}
else
{
panel.div.style.display  = 'none';
}
this.innerEditor.style.width  = width  + 'px';
this.innerEditor.style.height = height + 'px';
this._iframe.style.width  = editorWidth  + 'px';
this._iframe.style.height = editorHeight + 'px';
this._iframe.style.left = editorLeft;
this._iframe.style.top  = editorTop;
this._textArea.style.width  = editorWidth  + 'px';
this._textArea.style.height = editorHeight + 'px';
this._textArea.style.left = editorLeft;
this._textArea.style.top  = editorTop;
this.notifyOf('resize', {'width':width,'height':height,'editorWidth':editorWidth,'editorHeight':editorHeight,'editorTop':editorTop,'editorLeft':editorLeft});
}
HTMLArea.prototype.addPanel = function(side)
{
var div = document.createElement('div');
div.side = side;
HTMLArea.addClasses(div, 'panel');
this._panels[side].panels.push(div);
this._panels[side].div.appendChild(div);
this.notifyOf('panel_change', {'action':'add','panel':div});
return div;
}
HTMLArea.prototype.removePanel = function(panel)
{
this._panels[panel.side].div.removeChild(panel);
var clean = [ ];
for(var i = 0; i < this._panels[panel.side].panels.length; i++)
{
if(this._panels[panel.side].panels[i] != panel)
{
clean.push(this._panels[panel.side].panels[i]);
}
}
this._panels[panel.side].panels = clean;
this.notifyOf('panel_change', {'action':'remove','panel':panel});
}
HTMLArea.prototype.hidePanel = function(panel)
{
if (panel)
{
panel.style.display = 'none';
this.notifyOf('panel_change', {'action':'hide','panel':panel});
}
}
HTMLArea.prototype.showPanel = function(panel)
{
if ( panel )
{
panel.style.display = '';
this.notifyOf('panel_change', {'action':'show','panel':panel});
}
}
HTMLArea.prototype.hidePanels = function(sides)
{
if(typeof sides == 'undefined')
{
sides = ['left','right','top','bottom'];
}
var reShow = [];
for(var i = 0; i < sides.length;i++)
{
if(this._panels[sides[i]].on)
{
reShow.push(sides[i]);
this._panels[sides[i]].on = false;
}
}
this.notifyOf('panel_change', {'action':'multi_hide','sides':sides});
}
HTMLArea.prototype.showPanels = function(sides)
{
if(typeof sides == 'undefined')
{
sides = ['left','right','top','bottom'];
}
var reHide = [];
for(var i = 0; i < sides.length;i++)
{
if(!this._panels[sides[i]].on)
{
reHide.push(sides[i]);
this._panels[sides[i]].on = true;
}
}
this.notifyOf('panel_change', {'action':'multi_show','sides':sides});
}
HTMLArea.prototype.activateEditor = function()
{
if (HTMLArea.is_gecko && this._doc.designMode != 'on')
{
try
{
HTMLArea.last_on.designMode = 'off';
}
catch(e)
{
}
if ( this._iframe.style.display == 'none' )
{
this._iframe.style.display = '';
this._doc.designMode = 'on';
this._iframe.style.display = 'none';
}
else
{
try
{
this._doc.designMode = 'on';
}
catch( e )
{
alert( "EXCEPTION - failed to turn design mode on in activateEditor() - " + e + "'" );
}
}
}
else if ( HTMLArea.is_ie )
{
this._doc.body.contentEditable = true;
}
else
{
}
HTMLArea.last_on = this._doc;
}
HTMLArea.prototype.deactivateEditor = function()
{
if (HTMLArea.is_gecko && this._doc.designMode == 'on')
{
this._doc.designMode = 'off';
HTMLArea.last_on = null;
}
else
{
this._doc.body.contentEditable = false;
}
}
HTMLArea.prototype.setMode = function(mode)
{
var html = null;
if (typeof mode == "undefined")
{
mode = ((this._editMode == "textmode") ? "wysiwyg" : "textmode");
}
switch (mode)
{
case "textmode":
{
html = this.outwardHtml(this.getHTML());
this._textArea.value = html;
this.deactivateEditor();
this._iframe.style.display   = 'none';
this._textArea.style.display = "block";
if (this.config.statusBar)
{
this._statusBar.innerHTML = HTMLArea._lc("You are in TEXT MODE.  Use the [<>] button to switch back to WYSIWYG.");
}
this.notifyOf('modechange', {'mode':'text'});
break;
}
case "wysiwyg":
{
html = this.inwardHtml(this.getHTML());
this.deactivateEditor();
if (!this.config.fullPage)
{
this._doc.body.innerHTML = html;
}
else
{
this.setFullHTML(html);
}
this._iframe.style.display   = '';
this._textArea.style.display = "none";
this.activateEditor();
if (this.config.statusBar)
{
this._statusBar.innerHTML = '';
this._statusBar.appendChild(this._statusBarTree);
}
this.notifyOf('modechange', {'mode':'wysiwyg'});
break;
}
default:
{
alert("Mode <" + mode + "> not defined!");
return false;
}
}
this._editMode = mode;
for (var i in this.plugins)
{
var plugin = this.plugins[i].instance;
if (typeof plugin.onMode == "function")
{
plugin.onMode(mode);
}
}
return true;
}
HTMLArea.prototype.setFullHTML = function(html)
{
var save_multiline = RegExp.multiline;
RegExp.multiline = true;
if (html.match(HTMLArea.RE_doctype))
{
this.setDoctype(RegExp.$1);
html = html.replace(HTMLArea.RE_doctype, "");
}
RegExp.multiline = save_multiline;
if (!HTMLArea.is_ie)
{
if (html.match(HTMLArea.RE_head))
this._doc.getElementsByTagName("head")[0].innerHTML = RegExp.$1;
if (html.match(HTMLArea.RE_body))
this._doc.getElementsByTagName("body")[0].innerHTML = RegExp.$1;
}
else
{
var html_re = /<html>((.|\n)*?)<\/html>/i;
html = html.replace(html_re, "$1");
this._doc.open();
this._doc.write(html);
this._doc.close();
this.activateEditor();
return true;
}
return true;
}
HTMLArea.prototype.registerPlugin = function()
{
var plugin = arguments[0];
var args = [];
for (var i = 1; i < arguments.length; ++i)
args.push(arguments[i]);
return this.registerPlugin2(plugin, args);
};
HTMLArea.prototype.registerPlugin2 = function(plugin, args)
{
if (typeof plugin == "string")
{
plugin = eval(plugin);
}
if ((typeof plugin == "undefined") || ( plugin == null ))
{
return false;
}
try
{
var obj = new plugin(this, args);
}
catch(e)
{
alert( "INTERNAL ERROR - registerPlugin2(): UNABLE TO CONSTRUCT PLUGIN '" + plugin + "' - '" + e + "'" );
return false;
}
if (obj)
{
var clone = {};
var info = plugin._pluginInfo;
for (var i in info)
clone[i] = info[i];
clone.instance = obj;
clone.args = args;
this.plugins[plugin._pluginInfo.name] = clone;
return obj;
}
else
{
alert("Can't register plugin " + plugin.toString() + ".");
}
return true;
}
HTMLArea.prototype.debugTree = function()
{
var ta = document.createElement("textarea");
ta.style.width = "100%";
ta.style.height = "20em";
ta.value = "";
function debug(indent, str)
{
for (; --indent >= 0;)
ta.value += " ";
ta.value += str + "\n";
};
function _dt(root, level)
{
var tag = root.tagName.toLowerCase(), i;
var ns = HTMLArea.is_ie ? root.scopeName : root.prefix;
debug(level, "- " + tag + " [" + ns + "]");
for (i = root.firstChild; i; i = i.nextSibling)
if (i.nodeType == 1)
_dt(i, level + 2);
};
_dt(this._doc.body, 0);
document.body.appendChild(ta);
};
HTMLArea.prototype._wordClean = function() {
var D = this.getInnerHTML();
if (this.config._level == 5){
D = D.replace(/<img[^>]*>/gi,'');
}else if (this.config._level > 1){
D = D.replace(/<img[^>]*>/gi,'').
replace(/<a [^>]*>/gi,'').
replace(/<\/a[^>]*>/gi,'');
if (this.config._level == '3'){
D = D.replace(/<li[^>]*>/gi,'<br/>').
replace(/<\/li[^>]*>/gi,'').
replace(/<ol[^>]*>/gi,'<p>').
replace(/<\/ol[^>]*>/gi,'</p>').
replace(/<ul[^>]*>/gi,'<p>').
replace(/<\/ul[^>]*>/gi,'</p>');
}
}
D = D.replace(/%5B/g, '[').
replace(/%5D/g, ']');
D = D.replace(/\r/g, '').
replace(/>\&nbsp\;</g, '><');
D = D.replace(/<b [^>]*>/gi,'<b>').
replace(/<i [^>]*>/gi,'<i>').
replace(/<li [^>]*>/gi,'<li>').
replace(/<ul [^>]*>/gi,'<ul>').
replace(/<ol [^>]*>/gi,'<ol>').
replace(/<\!--[^-->]*-->/gi,'').
replace(/<\!--\[[^\]>]*\]>/gi,'');
D = D.replace(/ class=[^\s|>]*/gi,'').
replace(/ style=\"[^>]*\"/gi,'').
replace(/ align=[^\s|>]*/gi,'').
replace(/ width=[^\s|>]*/gi,'').
replace(/ height=[^\s|>]*/gi,'').
replace(/ type=[^\s|>]*/gi,'').
replace(/ tabindex=[^\s|>]*/gi,'');
D = D.replace(/ v:shapes=\"[^>]*\"/gi,'').
replace(/<img[^>]* src=\"file:[^>]*>/gi,'').
replace(/<img[^>]* src=\"http:[^>]*>/gi,'').
replace(/<a* name=[^>]*>/gi,'').
replace(/<\/a \/>/gi,'');
D = D.replace(/<table[^>]*>/gi,'').
replace(/<\/table[^>]*>/gi,'').
replace(/<tbody[^>]*>/gi,'').
replace(/<\/tbody[^>]*>/gi,'').
replace(/<td[^>]*>/gi,'').
replace(/<\/td[^>]*>/gi,'').
replace(/<th[^>]*>/gi,'').
replace(/<\/th[^>]*>/gi,'').
replace(/<tr[^>]*>/gi,'').
replace(/<\/tr[^>]*>/gi,'');
D = D.replace(/<b>/gi,'<strong>').
replace(/<\/b>/gi,'</strong>');
D = D.replace(/<\?xml:[^>]*>/g, '').
replace(/<\/?st1:[^>]*>/g,'').
replace(/<\/?[a-z]\:[^>]*>/g,'').
replace(/<\/?font[^>]*>/gi,'').
replace(/<\/?span[^>]*>/gi,' ').
replace(/<\/?div[^>]*>/gi,' ').
replace(/<\/?pre[^>]*>/gi,' ').
replace(/<\/?h[1-6][^>]*>/gi,' ');
D = D.replace(/<P[^>]*><\/P>/gi,'').
replace(/<a[^>]*><\/a>/gi,'').
replace(/<strong><\/strong>/gi,'').
replace(/<i><\/i>/gi,'').
replace(/<em><\/em>/gi,'').
replace(/<u><\/u>/gi,'');
oldlen = D.length + 1;
while(oldlen > D.length) {
oldlen = D.length;
D = D.replace(/<([a-z][a-z]*)> *<\/\1>/gi,' ').
replace(/<([a-z][a-z]*)> *<([a-z][^>]*)> *<\/\1>/gi,'<$2>');
D = D.replace(/&nbsp;&nbsp;/gi,'&nbsp;');
}
D = D.replace(/  */gi,' ');
this.setHTML(D);
}
HTMLArea.prototype._wordCleanReal = function()
{
var editor = this;
var stats =
{
empty_tags : 0,
mso_class  : 0,
mso_style  : 0,
mso_xmlel  : 0,
orig_len   : this._doc.body.innerHTML.length,
T          : (new Date()).getTime()
};
var stats_txt =
{
empty_tags : "Empty tags removed: ",
mso_class  : "MSO class names removed: ",
mso_style  : "MSO inline style removed: ",
mso_xmlel  : "MSO XML elements stripped: "
};
function showStats()
{
var txt = "HTMLArea word cleaner stats: \n\n";
for (var i in stats)
if (stats_txt[i])
txt += stats_txt[i] + stats[i] + "\n";
txt += "\nInitial document length: " + stats.orig_len + "\n";
txt += "Final document length: " + editor._doc.body.innerHTML.length + "\n";
txt += "Clean-up took " + (((new Date()).getTime() - stats.T) / 1000) + " seconds";
alert(txt);
};
function clearClass(node)
{
var newc = node.className.replace(/(^|\s)mso.*?(\s|$)/ig, ' ');
if (newc != node.className)
{
node.className = newc;
if (!/\S/.test(node.className))
{
node.removeAttribute("className");
++stats.mso_class;
}
}
};
function clearStyle(node)
{
var declarations = node.style.cssText.split(/\s*;\s*/);
for (var i = declarations.length; --i >= 0;)
if (/^mso|^tab-stops/i.test(declarations[i]) ||
/^margin\s*:\s*0..\s+0..\s+0../i.test(declarations[i]))
{
++stats.mso_style;
declarations.splice(i, 1);
}
node.style.cssText = declarations.join("; ");
};
function stripTag(el)
{
if (HTMLArea.is_ie)
el.outerHTML = HTMLArea.htmlEncode(el.innerText);
else
{
var txt = document.createTextNode(HTMLArea.getInnerText(el));
el.parentNode.insertBefore(txt, el);
el.parentNode.removeChild(el);
}
++stats.mso_xmlel;
};
function checkEmpty(el)
{
if (/^(a|span|b|strong|i|em|font)$/i.test(el.tagName) &&
!el.firstChild)
{
el.parentNode.removeChild(el);
++stats.empty_tags;
}
};
function parseTree(root)
{
var tag = root.tagName.toLowerCase(), i, next;
if ((HTMLArea.is_ie && root.scopeName != 'HTML') || (!HTMLArea.is_ie && /:/.test(tag)))
{
stripTag(root);
return false;
}
else
{
clearClass(root);
clearStyle(root);
for (i = root.firstChild; i; i = next)
{
next = i.nextSibling;
if (i.nodeType == 1 && parseTree(i))
checkEmpty(i);
}
}
return true;
};
parseTree(this._doc.body);
this.updateToolbar();
};
HTMLArea.prototype._clearFonts = function()
{
var D = this.getInnerHTML();
if(confirm('Would you like to clear font typefaces?'))
{
D = D.replace(/face="[^"]*"/gi, '');
D = D.replace(/font-family:[^;}"']+;?/gi, '');
}
if (confirm('Would you like to clear font sizes?'))
{
D = D.replace(/size="[^"]*"/gi, '');
D = D.replace(/font-size:[^;}"']+;?/gi, '');
}
if (confirm('Would you like to clear font colours?'))
{
D = D.replace(/color="[^"]*"/gi, '');
D = D.replace(/([^-])color:[^;}"']+;?/gi, '$1');
}
D = D.replace(/(style|class)="\s*"/gi, '');
D = D.replace(/<(font|span)\s*>/gi, '');
this.setHTML(D);
this.updateToolbar();
}
HTMLArea.prototype._splitBlock = function()
{
this._doc.execCommand('formatblock', false, '<div>');
}
HTMLArea.prototype.forceRedraw = function()
{
this._doc.body.style.visibility = "hidden";
this._doc.body.style.visibility = "visible";
};
HTMLArea.prototype.focusEditor = function()
{
switch (this._editMode)
{
case "wysiwyg" :
try
{
if ( HTMLArea.last_on )
{
this.activateEditor();
this._iframe.contentWindow.focus();
}
} catch (e) {} break;
case "textmode":
try
{
this._textArea.focus()
} catch (e) {} break;
default:
alert("ERROR: mode " + this._editMode + " is not defined");
}
return this._doc;
};
HTMLArea.prototype._undoTakeSnapshot = function()
{
++this._undoPos;
if (this._undoPos >= this.config.undoSteps)
{
this._undoQueue.shift();
--this._undoPos;
}
var take = true;
var txt = this.getInnerHTML();
if (this._undoPos > 0)
take = (this._undoQueue[this._undoPos - 1] != txt);
if (take)
{
this._undoQueue[this._undoPos] = txt;
}
else
{
this._undoPos--;
}
};
HTMLArea.prototype.undo = function()
{
if (this._undoPos > 0)
{
var txt = this._undoQueue[--this._undoPos];
if (txt) this.setHTML(txt);
else ++this._undoPos;
}
};
HTMLArea.prototype.redo = function()
{
if (this._undoPos < this._undoQueue.length - 1)
{
var txt = this._undoQueue[++this._undoPos];
if (txt) this.setHTML(txt);
else --this._undoPos;
}
};
HTMLArea.prototype.disableToolbar = function(except)
{
if(typeof except == 'undefined')
{
except = [ ];
}
else if(typeof except != 'object')
{
except = [except];
}
for (var i in this._toolbarObjects)
{
var btn = this._toolbarObjects[i];
if (except.contains(i))
{
continue;
}
btn.state("enabled", false);
}
}
HTMLArea.prototype.enableToolbar = function()
{
this.updateToolbar();
}
HTMLArea.prototype.updateToolbar = function(noStatus)
{
var doc = this._doc;
var text = (this._editMode == "textmode");
var ancestors = null;
var i = null;
var k = null;
var el = null;
if (!text)
{
ancestors = this.getAllAncestors();
if (this.config.statusBar && !noStatus)
{
this._statusBarTree.innerHTML = HTMLArea._lc("Path") + ": ";
for ( i = ancestors.length; --i >= 0;)
{
el = ancestors[i];
if (!el)
{
continue;
}
var a = document.createElement("a");
a.href = "javascript:void(0)";
a.el = el;
a.editor = this;
a.onclick = function()
{
this.blur();
this.editor.selectNodeContents(this.el);
this.editor.updateToolbar(true);
return false;
};
a.oncontextmenu = function()
{
this.blur();
var info = "Inline style:\n\n";
info += this.el.style.cssText.split(/;\s*/).join(";\n");
alert(info);
return false;
};
var txt = el.tagName.toLowerCase();
a.title = el.style.cssText;
if (el.id)
{
txt += "#" + el.id;
}
if (el.className)
{
txt += "." + el.className;
}
a.appendChild(document.createTextNode(txt));
this._statusBarTree.appendChild(a);
if (i != 0)
{
this._statusBarTree.appendChild(document.createTextNode(String.fromCharCode(0xbb)));
}
}
}
}
for (i in this._toolbarObjects)
{
var btn = this._toolbarObjects[i];
var cmd = i;
var inContext = true;
if (btn.context && !text)
{
inContext = false;
var context = btn.context;
var attrs = [];
if (/(.*)\[(.*?)\]/.test(context))
{
context = RegExp.$1;
attrs = RegExp.$2.split(",");
}
context = context.toLowerCase();
var match = (context == "*");
for ( k = 0; k < ancestors.length; ++k)
{
if (!ancestors[k])
{
continue;
}
if (match || (ancestors[k].tagName.toLowerCase() == context))
{
inContext = true;
for (var ka = 0; ka < attrs.length; ++ka)
{
if (!eval("ancestors[k]." + attrs[ka]))
{
inContext = false;
break;
}
}
if (inContext)
{
break;
}
}
}
}
btn.state("enabled", (!text || btn.text) && inContext);
if (typeof cmd == "function")
{
continue;
}
var dropdown = this.config.customSelects[cmd];
if ((!text || btn.text) && (typeof dropdown != "undefined"))
{
dropdown.refresh(this);
continue;
}
switch (cmd)
{
case "fontname":
case "fontsize":
{
if (!text) try
{
var value = ("" + doc.queryCommandValue(cmd)).toLowerCase();
if (!value)
{
btn.element.selectedIndex = 0;
break;
}
var options = this.config[cmd];
k = 0;
for (var j in options)
{
if ((j.toLowerCase() == value) || (options[j].substr(0, value.length).toLowerCase() == value))
{
btn.element.selectedIndex = k;
throw "ok";
}
++k;
}
btn.element.selectedIndex = 0;
}
catch(e)
{};
}
break;
case "formatblock"  :
{
var blocks = [ ];
for( i in this.config['formatblock'])
{
blocks[blocks.length] = this.config['formatblock'][i];
}
var deepestAncestor = this._getFirstAncestor(this._getSelection(), blocks);
if(deepestAncestor)
{
for(var x= 0; x < blocks.length; x++)
{
if(blocks[x].toLowerCase() == deepestAncestor.tagName.toLowerCase())
{
btn.element.selectedIndex = x;
}
}
}
else
{
btn.element.selectedIndex = 0;
}
}
break;
case "textindicator":
if (!text)
{
try
{
btn.element.style.backgroundColor = HTMLArea._makeColor(
doc.queryCommandValue(HTMLArea.is_ie ? "backcolor" : "hilitecolor"));
if (/transparent/i.test(btn.element.style.backgroundColor))
{
btn.element.style.backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("backcolor"));
}
btn.element.style.color = HTMLArea._makeColor(doc.queryCommandValue("forecolor"));
btn.element.style.fontFamily = doc.queryCommandValue("fontname");
btn.element.style.fontWeight = doc.queryCommandState("bold") ? "bold" : "normal";
btn.element.style.fontStyle = doc.queryCommandState("italic") ? "italic" : "normal";
}
catch (e)
{
}
}
break;
case "htmlmode":
btn.state("active", text);
break;
case "lefttoright":
case "righttoleft":
el = this.getParentElement();
while (el && !HTMLArea.isBlockElement(el))
el = el.parentNode;
if (el)
btn.state("active", (el.style.direction == ((cmd == "righttoleft") ? "rtl" : "ltr")));
break;
default:
cmd = cmd.replace(/(un)?orderedlist/i, "insert$1orderedlist");
try
{
btn.state("active", (!text && doc.queryCommandState(cmd)));
}
catch (e)
{}
break;
}	}
if (this._customUndo && !this._timerUndo)
{
this._undoTakeSnapshot();
var editor = this;
this._timerUndo = setTimeout(function()
{
editor._timerUndo = null;
}, this.config.undoTimeout);
}
if(0 && HTMLArea.is_gecko)
{
var s = this._getSelection();
if (s && s.isCollapsed && s.anchorNode
&& s.anchorNode.parentNode.tagName.toLowerCase() != 'body'
&& s.anchorNode.nodeType == 3 && s.anchorOffset == s.anchorNode.length
&& !
(   s.anchorNode.parentNode.nextSibling
&& s.anchorNode.parentNode.nextSibling.nodeType == 3
)
&& !HTMLArea.isBlockElement(s.anchorNode.parentNode)
)
{
try
{
s.anchorNode.parentNode.parentNode.insertBefore
(this._doc.createTextNode('\t'), s.anchorNode.parentNode.nextSibling);
}
catch(e)
{
}
}
}
for ( i in this.plugins)
{
var plugin = this.plugins[i].instance;
if (typeof plugin.onUpdateToolbar == "function")
plugin.onUpdateToolbar();
}
}
HTMLArea.prototype.insertNodeAtSelection = function(toBeInserted)
{
var selnode = null;
if (!HTMLArea.is_ie)
{
var sel = this._getSelection();
var range = this._createRange(sel);
sel.removeAllRanges();
range.deleteContents();
var node = range.startContainer;
var pos = range.startOffset;
switch (node.nodeType)
{
case 3:
if (toBeInserted.nodeType == 3)
{
node.insertData(pos, toBeInserted.data);
range = this._createRange();
range.setEnd(node, pos + toBeInserted.length);
range.setStart(node, pos + toBeInserted.length);
sel.addRange(range);
}
else
{
node = node.splitText(pos);
selnode = toBeInserted;
if (toBeInserted.nodeType == 11 )
{
selnode = selnode.firstChild;
}
node.parentNode.insertBefore(toBeInserted, node);
this.selectNodeContents(selnode);
this.updateToolbar();
}
break;
case 1:
selnode = toBeInserted;
if (toBeInserted.nodeType == 11 )
{
selnode = selnode.firstChild;
}
node.insertBefore(toBeInserted, node.childNodes[pos]);
this.selectNodeContents(selnode);
this.updateToolbar();
break;
}
}
else
{
return null;	}
return null;
}
HTMLArea.prototype.getParentElement = function(sel)
{
if (typeof sel == 'undefined')
{
sel = this._getSelection();
}
var range = this._createRange(sel);
if (HTMLArea.is_ie)
{
switch (sel.type)
{
case "Text":
case "None":
return range.parentElement();
case "Control":
return range.item(0);
default:
return this._doc.body;
}
}
else try
{
var p = range.commonAncestorContainer;
if (!range.collapsed && range.startContainer == range.endContainer &&
range.startOffset - range.endOffset <= 1 && range.startContainer.hasChildNodes())
p = range.startContainer.childNodes[range.startOffset];
while (p.nodeType == 3)
{
p = p.parentNode;
}
return p;
}
catch (e)
{
return null;
}
};
HTMLArea.prototype.getAllAncestors = function()
{
var p = this.getParentElement();
var a = [];
while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body'))
{
a.push(p);
p = p.parentNode;
}
a.push(this._doc.body);
return a;
};
HTMLArea.prototype._getFirstAncestor = function(sel, types)
{
var prnt = this._activeElement(sel);
if(prnt == null)
{
try
{
prnt = (HTMLArea.is_ie ? this._createRange(sel).parentElement() : this._createRange(sel).commonAncestorContainer);
}
catch(e)
{
return null;
}
}
if(typeof types == 'string')
{
types = [types];
}
while(prnt)
{
if(prnt.nodeType == 1)
{
if(types == null) return prnt;
if(types.contains(prnt.tagName.toLowerCase()))
{
return prnt;
}
if(prnt.tagName.toLowerCase() == 'body') break;
if(prnt.tagName.toLowerCase() == 'table') break;
}
prnt = prnt.parentNode;
}
return null;
}
HTMLArea.prototype._activeElement = function(sel)
{
if(sel == null) return null;
if ( this._selectionEmpty(sel) )
{
return null;
}
if(HTMLArea.is_ie)
{
if(sel.type.toLowerCase() == "control")
{
return sel.createRange().item(0);
}
else
{
var range = sel.createRange();
var p_elm = this.getParentElement(sel);
if(p_elm.innerHTML == range.htmlText)
{
return p_elm;
}
return null;
}
}
else
{
if(! sel.isCollapsed)
{
if(sel.anchorNode.nodeType == 1)
{
return sel.anchorNode;
}
}
return null;
}
}
HTMLArea.prototype._selectionEmpty = function(sel)
{
if (!sel)
{
return true;
}
if(HTMLArea.is_ie)
{
return this._createRange(sel).htmlText == '';
}
else if(typeof sel.isCollapsed != 'undefined')
{
return sel.isCollapsed;
}
return true;
}
HTMLArea.prototype._getAncestorBlock = function(sel)
{
var prnt = (HTMLArea.is_ie ? this._createRange(sel).parentElement : this._createRange(sel).commonAncestorContainer);
while(prnt && (prnt.nodeType == 1))
{
switch(prnt.tagName.toLowerCase())
{
case 'div' :
case 'p'   :
case 'address'    :
case 'blockquote' :
case 'center'  :
case 'del'     :
case 'ins'     :
case 'pre'     :
case 'h1'      :
case 'h2'      :
case 'h3'      :
case 'h4'      :
case 'h5'      :
case 'h6'      :
case 'h7'      :
return prnt;
case 'body'     :
case 'noframes' :
case 'dd'  :
case 'li'  :
case 'th'  :
case 'td'  :
case 'noscript' :
return null;
default :
break;
}
}
return null;
}
HTMLArea.prototype._createImplicitBlock = function(type)
{
var sel = this._getSelection();
if(HTMLArea.is_ie)
{
sel.empty();
}
else
{
sel.collapseToStart();
}
var rng = this._createRange(sel);
}
HTMLArea.prototype._formatBlock = function(block_format)
{
var ancestors = this.getAllAncestors();
var apply_to = null;
var x = null;
var target_tag = null;
var target_classNames = [ ];
if(block_format.indexOf('.') >= 0)
{
target_tag = block_format.substr(0, block_format.indexOf('.')).toLowerCase();;
target_classNames = block_format.substr(block_format.indexOf('.'), block_format.length - block_format.indexOf('.')).replace(/\./g, '').replace(/^\s*/, '').replace(/\s*$/, '').split(' ');
}
else
{
target_tag = block_format.toLowerCase();
}
var sel = this._getSelection();
var rng = this._createRange(sel);
if (HTMLArea.is_gecko)
{
if(sel.isCollapsed)
{
apply_to = this._getAncestorBlock(sel);
if(apply_to == null)
{
apply_to = this._createImplicitBlock(sel, target_tag);
}
}
else
{
switch(target_tag)
{
case 'h1'      :
case 'h2'      :
case 'h3'      :
case 'h4'      :
case 'h5'      :
case 'h6'      :
case 'h7'      :
apply_to = [ ];
var search_tags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7'];
for(var y = 0; y < search_tags.length; y++)
{
var headers = this._doc.getElementsByTagName(search_tag[y]);
for( x = 0; x < headers.length; x++)
{
if(sel.containsNode(headers[x]))
{
apply_to[apply_to.length] = headers[x];
}
}
}
if(apply_to.length > 0) break;
case 'div' :
apply_to = this._doc.createElement(target_tag);
apply_to.appendChild(rng.extractContents());
rng.insertNode(apply_to);
break;
case 'p'   :
case 'center'  :
case 'pre' :
case 'ins' :
case 'del' :
case 'blockquote' :
case 'address'    :
apply_to = [ ];
var paras = this._doc.getElementsByTagName(target_tag);
for( x = 0; x < paras.length; x++)
{
if(sel.containsNode(paras[x]))
{
apply_to[apply_to.length] = paras[x];
}
}
if(apply_to.length == 0)
{
sel.collapseToStart();
return this._formatBlock(block_format);
}
break;
}
}
}
return true;
}
HTMLArea.prototype.selectNodeContents = function(node, pos)
{
this.focusEditor();
this.forceRedraw();
var range;
var collapsed = (typeof pos != "undefined");
if (HTMLArea.is_ie)
{
if(!collapsed && node.tagName && node.tagName.toLowerCase().match(/table|img/))
{
range = this._doc.body.createControlRange();
range.add(node);
}
else
{
range = this._doc.body.createTextRange();
range.moveToElementText(node);
(collapsed) && range.collapse(pos);
}
range.select();
}
else
{
var sel = this._getSelection();
range = this._doc.createRange();
if(!collapsed && node.tagName && node.tagName.toLowerCase().match(/table|img/))
{
range.selectNode(node);
(collapsed) && range.collapse(pos);
}
else
{
range.selectNodeContents(node);
(collapsed) && range.collapse(pos);
}
sel.removeAllRanges();
sel.addRange(range);
}
};
HTMLArea.prototype.insertHTML = function(html)
{
var sel = this._getSelection();
var range = this._createRange(sel);
if (HTMLArea.is_ie)
{
range.pasteHTML(html);
}
else
{
var fragment = this._doc.createDocumentFragment();
var div = this._doc.createElement("div");
div.innerHTML = html;
while (div.firstChild)
{
fragment.appendChild(div.firstChild);
}
var node = this.insertNodeAtSelection(fragment);
}
};
HTMLArea.prototype.surroundHTML = function(startTag, endTag)
{
var html = this.getSelectedHTML();
this.insertHTML(startTag + html + endTag);
};
HTMLArea.prototype.getSelectedHTML = function()
{
var sel = this._getSelection();
var range = this._createRange(sel);
var existing = null;
if (HTMLArea.is_ie)
{
existing = range.htmlText;
}
else
{
existing = HTMLArea.getHTML(range.cloneContents(), false, this);
}
return existing;
};
HTMLArea.prototype.hasSelectedText = function()
{
return this.getSelectedHTML() != '';
};
HTMLArea.prototype._clearselection = function() {
var D = this.getInnerHTML();
D = this.stripTags(D);
this.setHTML(D);
}
HTMLArea.prototype.stripTags = function(stringa) {
stringa  = stringa.replace(/<[\/\!]*?[^<>]*?>/gi, ' ');
stringa = stringa.replace(/\n/g, ' ').replace(/\r/g, '');
stringa = stringa.replace(/\&nbsp\;/g,' ').replace(/  */gi,' ');
return stringa;
}
HTMLArea.prototype._insertvaruser = function(htmlnode) {
var editor = this;
var doc = editor._doc;
var x_html = doc.createElement("span");
x_html.innerHTML = "[N_Utente]";
if (HTMLArea.is_ie){
var sel = editor._getSelection();
var range = editor._createRange(sel);
range.pasteHTML(x_html.outerHTML);
}else{
editor.insertNodeAtSelection(x_html);
}
}
HTMLArea.prototype._insertlinkpagdesc = function(htmlnode) {
var editor = this;
var doc = editor._doc;
var box = doc.createElement("span");
box.innerHTML = "&nbsp;<a href=\"http://[NavRA]/P/[PaginaConfermaIscrizione]/sid/[Servizio]/ssid/[SottoServizio]\" title=\"Clicca per confermare l'iscizione\">Conferma l'iscrizione</a>&nbsp;";
var x_html = box;
if (HTMLArea.is_ie){
var sel = editor._getSelection();
var range = editor._createRange(sel);
range.pasteHTML(x_html.outerHTML);
}else{
editor.insertNodeAtSelection(x_html);
}
}
HTMLArea.prototype._insertLinkIn = function(htmlnode) {
var editor = this;
var outparam = null;
if (typeof htmlnode == "undefined") {
htmlnode = this.getParentElement();
if (htmlnode && !/^a$/i.test(htmlnode.tagName))
htmlnode = null;
}
if (htmlnode)
outparam = {
f_href	: HTMLArea.is_ie ? editor.stripBaseURL(htmlnode.href) : htmlnode.getAttribute("href"),
f_desc	: htmlnode.innerHTML,
f_title	: htmlnode.title
};
else
outparam = {
f_href	: "",
f_desc	: this.stripTags(editor.getSelectedHTML()).trim(),
f_title	: ""
};
outparam["f_desc"] = outparam["f_desc"].replace(/&quot;/ig, "''").replace(/"/ig, "''").replace(/&nbsp;/ig, " ");
outparam["f_title"] = outparam["f_title"].replace(/&quot;/ig, "''").replace(/"/ig, "''").replace(/&nbsp;/ig, " ");
this._popupDialog(path_admin + pgm_admin + "/PA/11051" + cod_admin + "0101/INDEX/NO", function(param) {
if (!param)
return false;
var x_html = htmlnode;
var new_tag = false;
if (!x_html) {
new_tag = true;
var doc = editor._doc;
var x_html = doc.createElement("a");
}
for (field in param){
var value = param[field];
value = value.replace(/"/ig, "''");
switch (field){
case "f_href"	: x_html.href	= value; break;
case "f_desc"	: x_html.innerHTML	= value; break;
case "f_title"	: x_html.title	= value; break;
}
}
if (new_tag == true){
if (HTMLArea.is_ie){
var sel = editor._getSelection();
var range = editor._createRange(sel);
range.pasteHTML(x_html.outerHTML);
}else{
editor.insertNodeAtSelection(x_html);
}
}
}, outparam);
};
HTMLArea.prototype._insertLinkOut = function(htmlnode) {
var editor = this;
var outparam = null;
if (typeof htmlnode == "undefined") {
htmlnode = this.getParentElement();
if (htmlnode && !/^a$/i.test(htmlnode.tagName))
htmlnode = null;
}
if (htmlnode)
outparam = {
f_href	: HTMLArea.is_ie ? editor.stripBaseURL(htmlnode.href) : htmlnode.getAttribute("href"),
f_desc	: htmlnode.innerHTML,
f_title	: htmlnode.title
};
else
outparam = {
f_href	: "",
f_desc	: this.stripTags(editor.getSelectedHTML()).trim(),
f_title	: ""
};
outparam["f_desc"] = outparam["f_desc"].replace(/&quot;/ig, "''").replace(/"/ig, "''").replace(/&nbsp;/ig, " ");
outparam["f_title"] = outparam["f_title"].replace(/&quot;/ig, "''").replace(/"/ig, "''").replace(/&nbsp;/ig, " ");
this._popupDialog(path_admin + pgm_admin + "/PA/11081" + cod_admin + "0101/INDEX/NO", function(param) {
if (!param)
return false;
var x_html = htmlnode;
var new_tag = false;
if (!x_html) {
new_tag = true;
var doc = editor._doc;
var x_html = doc.createElement("a");
}
for (field in param){
var value = param[field];
value = value.replace(/"/ig, "''");
switch (field){
case "f_href"	: x_html.href	= value; break;
case "f_desc"	: x_html.innerHTML	= value; break;
case "f_title"	: x_html.title	= value; break;
}
}
if (new_tag == true){
if (HTMLArea.is_ie){
var sel = editor._getSelection();
var range = editor._createRange(sel);
range.pasteHTML(x_html.outerHTML);
}else{
editor.insertNodeAtSelection(x_html);
}
}
}, outparam);
};
HTMLArea.prototype._insertArchivi = function(htmlnode) {
var editor = this;
var outparam = null;
if (typeof htmlnode == "undefined") {
htmlnode = this.getParentElement();
if (htmlnode && !/^a$/i.test(htmlnode.tagName))
htmlnode = null;
}
if (htmlnode)
outparam = {
f_href	: HTMLArea.is_ie ? editor.stripBaseURL(htmlnode.href) : htmlnode.getAttribute("href"),
f_desc	: htmlnode.innerHTML.replace(/<img[^>]*>/gi,''),
f_title	: htmlnode.title
};
else
outparam = {
f_href	: "",
f_desc	: this.stripTags(editor.getSelectedHTML()).trim(),
f_title	: ""
};
outparam["f_desc"] = outparam["f_desc"].replace(/&quot;/ig, "''").replace(/"/ig, "''").replace(/&nbsp;/ig, " ");
outparam["f_title"] = outparam["f_title"].replace(/&quot;/ig, "''").replace(/"/ig, "''").replace(/&nbsp;/ig, " ");
this._popupDialog(path_admin + pgm_admin + "/PA/11041" + cod_admin + "0101/INDEX/NO", function(param) {
if (!param)
return false;
var x_html = htmlnode;
var new_tag = false;
if (!x_html) {
new_tag = true;
var doc = editor._doc;
var x_html = doc.createElement("a");
}
for (field in param){
var value = param[field];
if (field == 'f_title')
value = value.replace(/"/ig, "''");
switch (field){
case "f_href"	: x_html.href	= value; break;
case "f_desc"	: x_html.innerHTML	= value; break;
case "f_title"	: x_html.title	= value; break;
}
}
if (new_tag == true){
if (HTMLArea.is_ie){
var sel = editor._getSelection();
var range = editor._createRange(sel);
range.pasteHTML(x_html.outerHTML);
}else{
editor.insertNodeAtSelection(x_html);
}
}
}, outparam);
};
HTMLArea.prototype._insertPasteData = function(htmlnode) {
var editor = this;
var outparam = null;
if (typeof htmlnode == "undefined") {
htmlnode = this.getParentElement();
if (htmlnode && !/^a$/i.test(htmlnode.tagName))
htmlnode = null;
}
this._popupDialog(path_admin + "/fRAEditorPar2/textarea.html", function(param) {
if (!param)
return false;
var x_html = htmlnode;
var new_tag = false;
if (!x_html) {
new_tag = true;
var doc = editor._doc;
var x_html = doc.createElement("span");
}
for (field in param){
var value = param[field];
value = value.replace(/"/ig, "''");
switch (field){
case "f_desc"	: x_html.innerHTML	= value; break;
}
}
if (new_tag == true){
if (HTMLArea.is_ie){
var sel = editor._getSelection();
var range = editor._createRange(sel);
range.pasteHTML(x_html.outerHTML);
}else{
editor.insertNodeAtSelection(x_html);
}
}
}, outparam);
};
HTMLArea.prototype._createLink = function(link)
{
var editor = this;
var outparam = null;
if (typeof link == "undefined")
{
link = this.getParentElement();
if (link)
{
if (/^img$/i.test(link.tagName))
link = link.parentNode;
if (!/^a$/i.test(link.tagName))
link = null;
}
}
if (!link)
{
var sel = editor._getSelection();
var range = editor._createRange(sel);
var compare = 0;
if (HTMLArea.is_ie)
{
compare = range.compareEndPoints("StartToEnd", range);
}
else
{
compare = range.compareBoundaryPoints(range.START_TO_END, range);
}
if (compare == 0)
{
alert("You need to select some text before creating a link");
return;
}
outparam =
{
f_href : '',
f_title : '',
f_target : '',
f_usetarget : editor.config.makeLinkShowsTarget
};
}
else
outparam =
{
f_href   : HTMLArea.is_ie ? editor.stripBaseURL(link.href) : link.getAttribute("href"),
f_title  : link.title,
f_target : link.target,
f_usetarget : editor.config.makeLinkShowsTarget
};
this._popupDialog(editor.config.URIs["link"], function(param)
{
if (!param)
return false;
var a = link;
if (!a) try
{
editor._doc.execCommand("createlink", false, param.f_href);
a = editor.getParentElement();
var sel = editor._getSelection();
var range = editor._createRange(sel);
if (!HTMLArea.is_ie)
{
a = range.startContainer;
if (!/^a$/i.test(a.tagName))
{
a = a.nextSibling;
if (a == null)
a = range.startContainer.parentNode;
}
}
} catch(e) {}
else
{
var href = param.f_href.trim();
editor.selectNodeContents(a);
if (href == "")
{
editor._doc.execCommand("unlink", false, null);
editor.updateToolbar();
return false;
}
else
{
a.href = href;
}
}
if (!(a && /^a$/i.test(a.tagName)))
return false;
a.target = param.f_target.trim();
a.title = param.f_title.trim();
editor.selectNodeContents(a);
editor.updateToolbar();
return true;
}, outparam);
};
HTMLArea.prototype._insertImage = function(image)
{
var editor = this;	var outparam = null;
if (typeof image == "undefined")
{
image = this.getParentElement();
if (image && !/^img$/i.test(image.tagName))
image = null;
}
if (image) outparam =
{
f_base   : editor.config.baseURL,
f_url    : HTMLArea.is_ie ? editor.stripBaseURL(image.src) : image.getAttribute("src"),
f_alt    : image.alt,
f_border : image.border,
f_align  : image.align,
f_vert   : image.vspace,
f_horiz  : image.hspace
};
this._popupDialog(editor.config.URIs["insert_image"], function(param)
{
if (!param)
{	return false;
}
var img = image;
if (!img)
{
var sel = editor._getSelection();
var range = editor._createRange(sel);
editor._doc.execCommand("insertimage", false, param.f_url);
if (HTMLArea.is_ie)
{
img = range.parentElement();
if (img.tagName.toLowerCase() != "img")
{
img = img.previousSibling;
}
}
else
{
img = range.startContainer.previousSibling;
}
}
else
{
img.src = param.f_url;
}
for (var field in param)
{
var value = param[field];
switch (field)
{
case "f_alt"    : img.alt	= value; break;
case "f_border" : img.border = parseInt(value || "0"); break;
case "f_align"  : img.align	= value; break;
case "f_vert"   : img.vspace = parseInt(value || "0"); break;
case "f_horiz"  : img.hspace = parseInt(value || "0"); break;
}
}
return true;
}, outparam);
};
HTMLArea.prototype._insertTable = function()
{
var sel = this._getSelection();
var range = this._createRange(sel);
var editor = this;	this._popupDialog(editor.config.URIs["insert_table"], function(param)
{
if (!param)
{	return false;
}
var doc = editor._doc;
var table = doc.createElement("table");
for (var field in param)
{
var value = param[field];
if (!value)
{
continue;
}
switch (field)
{
case "f_width"   : table.style.width = value + param["f_unit"]; break;
case "f_align"   : table.align	= value; break;
case "f_border"  : table.border	= parseInt(value); break;
case "f_spacing" : table.cellSpacing = parseInt(value); break;
case "f_padding" : table.cellPadding = parseInt(value); break;
}
}
var cellwidth = 0;
if (param.f_fixed)
cellwidth = Math.floor(100 / parseInt(param.f_cols));
var tbody = doc.createElement("tbody");
table.appendChild(tbody);
for (var i = 0; i < param["f_rows"]; ++i)
{
var tr = doc.createElement("tr");
tbody.appendChild(tr);
for (var j = 0; j < param["f_cols"]; ++j)
{
var td = doc.createElement("td");
if (cellwidth)
td.style.width = cellwidth + "%";
tr.appendChild(td);
(HTMLArea.is_gecko) && td.appendChild(doc.createElement("br"));
}
}
if (HTMLArea.is_ie)
{
range.pasteHTML(table.outerHTML);
}
else
{
editor.insertNodeAtSelection(table);
}
return true;
}, null);
};
HTMLArea.prototype._comboSelected = function(el, txt)
{
this.focusEditor();
var value = el.options[el.selectedIndex].value;
switch (txt)
{
case "fontname":
case "fontsize": this.execCommand(txt, false, value); break;
case "formatblock":
value = "<" + value + ">"
this.execCommand(txt, false, value);
break;
default:
var dropdown = this.config.customSelects[txt];
if (typeof dropdown != "undefined")
{
dropdown.action(this);
}
else
{
alert("FIXME: combo box " + txt + " not implemented");
}
}
};
HTMLArea.prototype.execCommand = function(cmdID, UI, param)
{
var editor = this;	this.focusEditor();
cmdID = cmdID.toLowerCase();
if (HTMLArea.is_gecko)
{
try
{
this._doc.execCommand('useCSS', false, true);
}
catch (e) {};
}
switch (cmdID)
{
case "htmlmode" :
this.setMode();
break;
case "hilitecolor":
(HTMLArea.is_ie) && (cmdID = "backcolor");
case "forecolor":
this._popupDialog(editor.config.URIs["select_color"], function(color)
{
if (color)
{
editor._doc.execCommand(cmdID, false, "#" + color);
}
}, HTMLArea._colorToRgb(this._doc.queryCommandValue(cmdID)));
break;
case "createlink":
this._createLink();
break;
case "fralinkin": this._insertLinkIn(); break;
case "fralinkout": this._insertLinkOut(); break;
case "fraarchivi": this._insertArchivi(); break;
case "fraclear":	this._clearselection(); break;
case "fraincolla": this._insertPasteData(); break;
case "insertvaruser": this._insertvaruser(); break;
case "insertlinkpagdesc": this._insertlinkpagdesc(); break;
case "frazoom":
if (this._iframe.style.height == this.config.height + "px"){	var p_width = this.config.height;
if (HTMLArea.is_ie)
p_width = document.documentElement.offsetHeight;
else
p_width = window.innerHeight;
p_width = p_width - 35;
this._iframe.style.height = p_width + "px";
this._textArea.style.height = p_width + "px";
this._htmlArea.style.height = p_width + 35 + "px";
window.setTimeout("window.location.hash='#fRATool_" + this.config.indobj + "'", 0);
this._iframe.focus();
}else{
this._iframe.style.height = this.config.height + "px";
this._textArea.style.height = this.config.height + "px";
this._htmlArea.style.height = this.config.height + 35 + "px";
}
break;
case "fraclose":
this._htmlArea.style.display = "none";
var commandPar = "IniPar_" + this.config.indobj + "()";
eval(commandPar);
break;
case "popupeditor":
HTMLArea._object = this;
var win;
if (HTMLArea.is_ie)
{
{
win = window.open(this.popupURL(editor.config.URIs["fullscreen"]), "ha_fullscreen",
"toolbar=no,location=no,directories=no,status=no,menubar=no," +
"scrollbars=no,resizable=yes,width=640,height=480");
}
}
else
{
win = window.open(this.popupURL(editor.config.URIs["fullscreen"]), "ha_fullscreen",
"toolbar=no,menubar=no,personalbar=no,width=640,height=480," +
"scrollbars=no,resizable=yes");
}
win.focus()
break;
case "undo":
case "redo":
if (this._customUndo)
this[cmdID]();
else
this._doc.execCommand(cmdID, UI, param);
break;
case "inserttable": this._insertTable(); break;
case "insertimage": this._insertImage(); break;
case "about"    : this._popupDialog(editor.config.URIs["about"], null, this); break;
case "showhelp" : window.open(this.config.helpURL, "ha_help"); break;
case "killword": this._wordClean(); break;
case "cut":
case "copy":
case "paste":
try
{
this._doc.execCommand(cmdID, UI, param);
if (this.config.killWordOnPaste)
this._wordClean();
}
catch (e)
{
if (HTMLArea.is_gecko)
{
alert(HTMLArea._lc("The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly."));
}
}
break;
case "lefttoright":
case "righttoleft":
var dir = (cmdID == "righttoleft") ? "rtl" : "ltr";
el = this.getParentElement();
while (el && !HTMLArea.isBlockElement(el))
el = el.parentNode;
if (el)
{
if (el.style.direction == dir)
el.style.direction = "";
else
el.style.direction = dir;
}
break;
default:
try
{
this._doc.execCommand(cmdID, UI, param);
}
catch(e)
{
if (this.config.debug) { alert(e + "\n\nby execCommand(" + cmdID + ");"); }
}
}
this.updateToolbar();
return false;
};
HTMLArea.prototype._editorEvent = function(ev)
{
if (ev.type == "mouseout"){
this._textArea.value = this.outwardHtml(this.getHTML());
return;
}
var editor = this;
var keyEvent = (HTMLArea.is_ie && ev.type == "keydown") || (!HTMLArea.is_ie && ev.type == "keypress");
var m = null;
var leftText = null;
var rightText = null;
var midText = null;
var textNode = null;
var fn = null;
if(typeof editor._textArea['on'+ev.type] == "function")
{
editor._textArea['on'+ev.type]();
}
if (HTMLArea.is_gecko && keyEvent && ev.ctrlKey &&  this._unLink && this._unlinkOnUndo)
{
if(String.fromCharCode(ev.charCode).toLowerCase() == 'z')
{
HTMLArea._stopEvent(ev);
this._unLink();
editor.updateToolbar();
return;
}
}
if (keyEvent)
{
for (var i in editor.plugins)
{
var plugin = editor.plugins[i].instance;
if (typeof plugin.onKeyPress == "function")
{
if (plugin.onKeyPress(ev))
{
return false;
}
}
}
}
if (keyEvent && ev.ctrlKey && !ev.altKey)
{
var sel = null;
var range = null;
var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase();
var cmd = null;
var value = null;
switch (key)
{
case 'a':
if (!HTMLArea.is_ie)
{
sel = this._getSelection();
sel.removeAllRanges();
range = this._createRange();
range.selectNodeContents(this._doc.body);
sel.addRange(range);
HTMLArea._stopEvent(ev);
}
break;
case 'b':
cmd = "bold";
break;
case 'i':
cmd = "italic";
break;
case 'u':
cmd = "underline";
break;
case 's':
cmd = "strikethrough";
break;
case 'l':
cmd = "justifyleft";
break;
case 'e':
cmd = "justifycenter";
break;
case 'r':
cmd = "justifyright";
break;
case 'j':
cmd = "justifyfull";
break;
case 'z':
cmd = "undo";
break;
case 'y':
cmd = "redo";
break;
case 'v':
if (HTMLArea.is_ie || editor.config.htmlareaPaste)
{
cmd = "paste";
}
break;
case 'n':
cmd = "formatblock";
value = HTMLArea.is_ie ? "<p>" : "p";
break;
case '0':
cmd = "killword";
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
cmd = "formatblock";
value = "h" + key;
if (HTMLArea.is_ie)
value = "<" + value + ">";
break;
}
if (cmd)
{
this.execCommand(cmd, false, value);
HTMLArea._stopEvent(ev);
}
}
else if (keyEvent)
{
if (HTMLArea.is_gecko)
{
var s = editor._getSelection()
var autoWrap = function (textNode, tag)
{
rightText = textNode.nextSibling;
if(typeof tag == 'string') tag = editor._doc.createElement(tag);
var a = textNode.parentNode.insertBefore(tag, rightText);
textNode.parentNode.removeChild(textNode);
a.appendChild(textNode);
rightText.data = ' ' + rightText.data;
if(HTMLArea.is_ie)
{
var r = editor._createRange(s);
s.moveToElementText(rightText);
s.move('character', 1);
}
else
{
s.collapse(rightText, 1);
}
HTMLArea._stopEvent(ev);
editor._unLink = function()
{
var t = a.firstChild;
a.removeChild(t);
a.parentNode.insertBefore(t, a);
a.parentNode.removeChild(a);
editor._unLink = null;
editor._unlinkOnUndo = false;
}
editor._unlinkOnUndo = true;
return a;
}
switch(ev.which)
{
case 32:
{
if(s && s.isCollapsed && s.anchorNode.nodeType == 3 && s.anchorNode.data.length > 3 && s.anchorNode.data.indexOf('.') >= 0)
{
var midStart = s.anchorNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/);
if(midStart == -1) break;
if(this._getFirstAncestor(s, 'a'))
{
break;
}
var matchData = s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/, '$1');
m = matchData.match(HTMLArea.RE_email);
if(m)
{
leftText  = s.anchorNode;
rightText = leftText.splitText(s.anchorOffset);
midText   = leftText.splitText(midStart);
autoWrap(midText, 'a').href = 'mailto:' + m[0];
break;
}
m = matchData.match(HTMLArea.RE_url);
if(m)
{
leftText  = s.anchorNode;
rightText = leftText.splitText(s.anchorOffset);
midText   = leftText.splitText(midStart);
autoWrap(midText, 'a').href = (m[1] ? m[1] : 'http://') + m[2];
break;
}
}
}
break;
default :
{
if(ev.keyCode == 27 || (this._unlinkOnUndo && ev.ctrlKey && ev.which == 122) )
{
if(this._unLink)
{
this._unLink();
HTMLArea._stopEvent(ev);
}
break;
}
else if(ev.which || ev.keyCode == 8 || ev.keyCode == 46)
{
this._unlinkOnUndo = false;
if(s.anchorNode && s.anchorNode.nodeType == 3)
{
var a = this._getFirstAncestor(s, 'a');
if (!a)
{
break;
}
if(!a._updateAnchTimeout)
{
if(   s.anchorNode.data.match(HTMLArea.RE_email)
&& (a.href.match('mailto:' + s.anchorNode.data.trim()))
)
{
textNode = s.anchorNode;
fn = function()
{
a.href = 'mailto:' + textNode.data.trim();
a._updateAnchTimeout = setTimeout(fn, 250);
}
a._updateAnchTimeout = setTimeout(fn, 250);
break;
}
m = s.anchorNode.data.match(HTMLArea.RE_url);
if(m &&  a.href.match(s.anchorNode.data.trim()) )
{
textNode = s.anchorNode;
fn = function()
{
m = textNode.data.match(HTMLArea.RE_url);
a.href = (m[1] ? m[1] : 'http://') + m[2];
a._updateAnchTimeout = setTimeout(fn, 250);
}
a._updateAnchTimeout = setTimeout(fn, 250);
}
}
}
}
}
break;
}
}
switch (ev.keyCode)
{
case 13:
if (HTMLArea.is_gecko && !ev.shiftKey && this.config.mozParaHandler == 'dirty' )
{
this.dom_checkInsertP();
HTMLArea._stopEvent(ev);
}
break;
case 9:
HTMLArea._stopEvent(ev);
break;
case 8:
case 46:
if (HTMLArea.is_gecko && !ev.shiftKey)
{
if (this.dom_checkBackspace())
HTMLArea._stopEvent(ev);
}
else if (HTMLArea.is_ie)
{
if (this.ie_checkBackspace())
HTMLArea._stopEvent(ev);
}
break;
}
}	if (editor._timerToolbar)
{
clearTimeout(editor._timerToolbar);
}
editor._timerToolbar = setTimeout(function()
{
editor.updateToolbar();
editor._timerToolbar = null;
}, 100);
return true;
}
HTMLArea.prototype.convertNode = function(el, newTagName)
{
var newel = this._doc.createElement(newTagName);
while (el.firstChild)
newel.appendChild(el.firstChild);
return newel;
};
HTMLArea.prototype.ie_checkBackspace = function()
{
var sel = this._getSelection();
var range = this._createRange(sel);
if (range.text == "undefined") return true;
var r2 = range.duplicate();
r2.moveStart("character", -1);
var a = r2.parentElement();
if (a != range.parentElement() &&
/^a$/i.test(a.tagName))
{
r2.collapse(true);
r2.moveEnd("character", 1);
r2.pasteHTML('');
r2.select();
return true;
}
};
HTMLArea.prototype.dom_checkBackspace = function()
{
var self = this;
setTimeout(function()
{
var sel = self._getSelection();
var range = self._createRange(sel);
var SC = range.startContainer;
var SO = range.startOffset;
var EC = range.endContainer;
var EO = range.endOffset;
var newr = SC.nextSibling;
if (SC.nodeType == 3)
SC = SC.parentNode;
if (!/\S/.test(SC.tagName))
{
var p = document.createElement("p");
while (SC.firstChild)
p.appendChild(SC.firstChild);
SC.parentNode.insertBefore(p, SC);
SC.parentNode.removeChild(SC);
var r = range.cloneRange();
r.setStartBefore(newr);
r.setEndAfter(newr);
r.extractContents();
sel.removeAllRanges();
sel.addRange(r);
}
}, 10);
};
HTMLArea.prototype.dom_checkInsertP = function()
{
var sel = this._getSelection();
var range = this._createRange(sel);
if (!range.collapsed)
{
range.deleteContents();
}
this.deactivateEditor();
var SC = range.startContainer;
var SO = range.startOffset;
var EC = range.endContainer;
var EO = range.endOffset;
if (SC == EC && SC == body && !SO && !EO)
{
p = this._doc.createTextNode(" ");
body.insertBefore(p, body.firstChild);
range.selectNodeContents(p);
SC = range.startContainer;
SO = range.startOffset;
EC = range.endContainer;
EO = range.endOffset;
}
var p = this.getAllAncestors();
var block = null;
var body = this._doc.body;
for (var i = 0; i < p.length; ++i)
{
if(HTMLArea.isParaContainer(p[i]))
{
break;
}
else if (HTMLArea.isBlockElement(p[i]) && !/body|html/i.test(p[i].tagName))
{
block = p[i];
break;
}
}
if (!block)
{
var wrap = range.startContainer;
while(wrap.parentNode && !HTMLArea.isParaContainer(wrap.parentNode))
{
wrap = wrap.parentNode;
}
var start = wrap;
var end   = wrap;
while(start.previousSibling)
{
if(start.previousSibling.tagName)
{
if(!HTMLArea.isBlockElement(start.previousSibling))
{
start = start.previousSibling;
}
else
{
break;
}
}
else
{
start = start.previousSibling;
}
}
while(end.nextSibling)
{
if(end.nextSibling.tagName)
{
if(!HTMLArea.isBlockElement(end.nextSibling))
{
end = end.nextSibling;
}
else
{
break;
}
}
else
{
end = end.nextSibling;
}
}
range.setStartBefore(start);
range.setEndAfter(end);
range.surroundContents(this._doc.createElement('p'));
block = range.startContainer.firstChild;
range.setStart(SC, SO);
}
range.setEndAfter(block);
var r2 = range.cloneRange();
sel.removeRange(range);
var df = r2.extractContents();
if(df.childNodes.length == 0)
{
df.appendChild(this._doc.createElement('p'));
df.firstChild.appendChild(this._doc.createElement('br'));
}
if(df.childNodes.length > 1)
{
var nb = this._doc.createElement('p');
while(df.firstChild)
{
var s = df.firstChild;
df.removeChild(s);
nb.appendChild(s);
}
df.appendChild(nb);
}
if (!/\S/.test(block.innerHTML))
block.innerHTML = "&nbsp;";
p = df.firstChild;
if (!/\S/.test(p.innerHTML))
p.innerHTML = "<br />";
if (/^\s*<br\s*\/?>\s*$/.test(p.innerHTML) && /^h[1-6]$/i.test(p.tagName))
{
df.appendChild(this.convertNode(p, "p"));
df.removeChild(p);
}
var newblock = block.parentNode.insertBefore(df.firstChild, block.nextSibling);
this.activateEditor();
sel = this._getSelection();
sel.removeAllRanges();
sel.collapse(newblock,0);
this.scrollToElement(newblock);
};
HTMLArea.prototype.scrollToElement = function(e)
{
if(HTMLArea.is_gecko)
{
var top  = 0;
var left = 0;
while(e)
{
top  += e.offsetTop;
left += e.offsetLeft;
if(e.offsetParent && e.offsetParent.tagName.toLowerCase() != 'body')
{
e = e.offsetParent;
}
else
{
e = null;
}
}
this._iframe.contentWindow.scrollTo(left, top);
}
}
HTMLArea.prototype.getHTML = function()
{
var html = '';
switch (this._editMode)
{
case "wysiwyg"  :
{
if (!this.config.fullPage)
{
html = HTMLArea.getHTML(this._doc.body, false, this);
}
else
{
html = this.doctype + "\n" + HTMLArea.getHTML(this._doc.documentElement, true, this);
}
break;
}
case "textmode" :
{
html = this._textArea.value;
break;
}
default	:
{
alert("Mode <" + mode + "> not defined!");
return false;
}
}
return html;
};
HTMLArea.prototype.outwardHtml = function(html)
{
var serverBase = null;
html = html.replace(/<(\/?)b(\s|>|\/)/ig, "<$1strong$2");
html = html.replace(/<(\/?)i(\s|>|\/)/ig, "<$1em$2");
if ( this.config.linkReplacementMode == 'fullyqualified' )
{
serverBase = location.href.replace(/(https?:\/\/[^\/]*)\/.*/, '$1') + '/';
html = html.replace(/https?:\/\/null\//g, serverBase);
html = html.replace(/((href|src|background)=[\'\"])\/+/ig, '$1' + serverBase);
}	else
{
serverBase = location.href.replace(/(https?:\/\/[^\/]*)\/.*/, '$1');
var linkBackRE = new RegExp( "((href|src|background)=['\"])" + serverBase , "ig" );
html = html.replace( linkBackRE, '$1' );
html = html.replace(/https?:\/\/null/g, "");
}
html = this.outwardSpecialReplacements(html);
html = this.fixRelativeLinks(html);
return html;
}
HTMLArea.prototype.inwardHtml = function(html)
{
if (HTMLArea.is_gecko)
{
html = html.replace(/<(\/?)strong(\s|>|\/)/ig, "<$1b$2");
html = html.replace(/<(\/?)em(\s|>|\/)/ig, "<$1i$2");
}
html = this.inwardSpecialReplacements(html);
var nullRE = new RegExp('((href|src|background)=[\'"])/+', 'gi');
html = html.replace(nullRE, '$1' + location.href.replace(/(https?:\/\/[^\/]*)\/.*/, '$1') + '/');
html = this.fixRelativeLinks(html);
return html;
}
HTMLArea.prototype.outwardSpecialReplacements = function(html)
{
for(var i in this.config.specialReplacements)
{
var from = this.config.specialReplacements[i];
var to   = i;
var reg = new RegExp(from.replace(HTMLArea.RE_Specials, '\\$1'), 'g');
html = html.replace(reg, to.replace(/\$/g, '$$$$'));
}
return html;
}
HTMLArea.prototype.inwardSpecialReplacements = function(html)
{
for(var i in this.config.specialReplacements)
{
var from = i;
var to   = this.config.specialReplacements[i];
var reg = new RegExp(from.replace(HTMLArea.RE_Specials, '\\$1'), 'g');
html = html.replace(reg, to.replace(/\$/g, '$$$$'));
}
return html;
}
HTMLArea.prototype.fixRelativeLinks = function(html)
{
if (typeof this.config.stripSelfNamedAnchors != 'undefined' && this.config.stripSelfNamedAnchors)
{
var stripRe = new RegExp(document.location.href.replace(HTMLArea.RE_Specials, '\\$1') + '(#.*)', 'g');
html = html.replace(stripRe, '$1');
}
if(typeof this.config.stripBaseHref != 'undefined' && this.config.stripBaseHref)
{
var baseRe = null
if(typeof this.config.baseHref != 'undefined' && this.config.baseHref != null)
{
baseRe = new RegExp(this.config.baseHref.replace(HTMLArea.RE_Specials, '\\$1'), 'g');
}
else
{
baseRe = new RegExp(document.location.href.replace(/([^\/]*\/?)$/, '').replace(HTMLArea.RE_Specials, '\\$1'), 'g');
}
html = html.replace(baseRe, '');
}
if (HTMLArea.is_ie)
{
}
return html;
}
HTMLArea.prototype.stripBaseURL = function(string)
{
var baseurl = this.config.baseURL;
baseurl = baseurl.replace(/[^\/]+$/, '');
var basere = new RegExp(baseurl);
string = string.replace(basere, "");
baseurl = baseurl.replace(/^(https?:\/\/[^\/]+)(.*)$/, '$1');
basere = new RegExp(baseurl);
return string.replace(basere, "");
};
HTMLArea.prototype.getInnerHTML = function()
{
if(!this._doc.body) return '';
var html = null;
switch (this._editMode)
{
case "wysiwyg"  :
if (!this.config.fullPage)
html = this._doc.body.innerHTML;
else
html = this.doctype + "\n" + this._doc.documentElement.innerHTML;
break;
case "textmode" :
html = this._textArea.value;
break;
default	:
alert("Mode <" + mode + "> not defined!");
return false;
}
return html;
};
HTMLArea.prototype.setHTML = function(html)
{
switch (this._editMode)
{
case "wysiwyg"  :
if (!this.config.fullPage)
{
this._doc.body.innerHTML = html;
}
else
{
this._doc.body.innerHTML = html;
}
break;
case "textmode" : this._textArea.value = html; break;
default	: alert("Mode <" + mode + "> not defined!");
}
return false;
};
HTMLArea.prototype.setDoctype = function(doctype)
{
this.doctype = doctype;
};
HTMLArea.prototype._getSelection = function()
{
if (HTMLArea.is_ie)
{
return this._doc.selection;
}
else
{
return this._iframe.contentWindow.getSelection();
}
};
HTMLArea.prototype._createRange = function(sel)
{
if (HTMLArea.is_ie)
{
return sel.createRange();
}
else
{
this.activateEditor();
if (typeof sel != "undefined")
{
try
{
return sel.getRangeAt(0);
}
catch(e)
{
return this._doc.createRange();
}
}
else
{
return this._doc.createRange();
}
}
};
HTMLArea.prototype.notifyOn = function(ev, fn)
{
if(typeof this._notifyListeners[ev] == 'undefined')
{
this._notifyListeners[ev] = [ ];
}
this._notifyListeners[ev].push(fn);
}
HTMLArea.prototype.notifyOf = function(ev, args)
{
if(this._notifyListeners[ev])
{
for(var i = 0; i < this._notifyListeners[ev].length; i++)
{
this._notifyListeners[ev][i](ev, args);
}
}
}
HTMLArea.prototype._popupDialog = function(url, action, init) {
Dialog(url, action, init);
};
HTMLArea.prototype.imgURL = function(file, plugin)
{
if (typeof plugin == "undefined")
return _editor_url + file;
else
return _editor_url + "plugins/" + plugin + "/img/" + file;
};
HTMLArea.prototype.popupURL = function(file)
{
var url = "";
if (file.match(/^plugin:\/\/(.*?)\/(.*)/))
{
var plugin = RegExp.$1;
var popup = RegExp.$2;
if (!/\.html$/.test(popup))
popup += ".html";
url = _editor_url + "plugins/" + plugin + "/popups/" + popup;
}
else if(file.match(/^\/.*?/))
url = file;
else
url = _editor_url + this.config.popupURL + file;
return url;
};
HTMLArea.prototype._toggleBorders = function()
{
tables = this._doc.getElementsByTagName('TABLE');
if(tables.length != 0)
{
if(!this.borders)
{
name = "bordered";
this.borders = true;
}
else
{
name = "";
this.borders = false;
}
for (var ix=0;ix < tables.length;ix++)
{
if(this.borders)
{
HTMLArea._addClass(tables[ix], 'htmtableborders');
}
else
{
HTMLArea._removeClass(tables[ix], 'htmtableborders');
}
}
}
return true;
}
HTMLArea.prototype.registerPlugins = function(plugin_names)
{
if(plugin_names)
{
for(var i = 0; i < plugin_names.length; i++)
{
this.registerPlugin(eval(plugin_names[i]));
}
}
}
if(!Array.prototype.contains)
{
Array.prototype.contains = function(needle)
{
var haystack = this;
for(var i = 0; i < haystack.length; i++)
{
if(needle == haystack[i]) return true;
}
return false;
}
}
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(needle)
{
var haystack = this;
for(var i = 0; i < haystack.length; i++)
{
if(needle == haystack[i]) return i;
}
return null;
}
}
if(!Array.prototype.append)
{
Array.prototype.append  = function(a)
{
for(var i = 0; i<a.length;i++)
{
this.push(a[i]);
}
return this;
}
}
String.prototype.trim = function()
{
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
if(typeof dump == 'undefined')
{
function dump(o) {
var s = '';
for (var prop in o) {
s += prop + ' = ' + o[prop] + '\n';
}
x = window.open("", "debugger");
x.document.write('<pre>' + s + '</pre>');
}
}