var cnt=0;
var Ktml_initialized=false;
var thisTimeoutID;
var curWin=null;
var winCount=0;
var Ktml_object=null;
var openWins=new Array();
var inspectedFld=null;
var holdForCallback=null;
Object_weave_safe(utility,{req:{}});
utility.req.create_socket=function() {
	function getXmlHttpPrefix() {
		if(getXmlHttpPrefix.prefix)	return getXmlHttpPrefix.prefix;
		var prefixes=["MSXML2","Microsoft","MSXML","MSXML3"];
		var o;
		for(var i=0;i<prefixes.length;i++) {
			try {
				o=new ActiveXObject(prefixes[i]+".XmlHttp");
				return getXmlHttpPrefix.prefix=prefixes[i];
			}
			catch(ex) {}
		}
		throw new Error("Could not find an installed XML parser");
	}
	try {
		if(window.XMLHttpRequest) {
			var req=new XMLHttpRequest();
			if(req.readyState==null) {
				req.readyState=1;
				req.addEventListener("load",function() {
					req.readyState=4;
					if(typeof req.onreadystatechange=="function") {
						req.onreadystatechange();
					}
				}, false);
			}
			return req;
		}
		if(window.ActiveXObject) {
			var ax=new ActiveXObject(getXmlHttpPrefix()+".XmlHttp");
			return ax;
		}
	}
	catch(ex) {}
	return false;
};
 
utility.req.request=function() {};
utility.req.request.events=['Uninitialized','Loading','Loaded','Interactive','Complete'];
utility.req.request.prototype= {
	initialize: function(url,options) {
		this.sock=utility.req.create_socket();
		if(typeof options=='undefined') {
		options= {};
		}
		this.url=(!(typeof url=='undefined'||url==null)?url:'');
		this.set_options(options);
		this.request(url);
	}, set_options:function(options) {
		var default_options= {method:'get',async:false,get:null,post:null,post_body:null,headers:null};
		this.options=Object_weave_safe(options,default_options);
	}, request:function(url) {
		var tmp='';
		var params_get=this.options.get||'';
		if(typeof params_get=='object') {
		for(var key in params_get) {
			var value=params_get[key];
			tmp+="&"+key+"="+encodeURI(params_get[key]);
		}
		if(tmp.length>0)
			tmp=tmp.substr(1);
		}
		var str_get=tmp;
		tmp='';
		var params_post=this.options.post||'';
		if(typeof params_post=='object') {
			for(var key in params_post) {
				var value=params_post[key];
				tmp+="&"+key+"="+encodeURI(params_post[key]);
			}
		}
		var str_post=tmp;
		try {
			if(this.options.method=='get')	url+='?'+str_get;
			this.sock.open(this.options.method,url,this.options.async);
			if(this.options.async) {
				this.sock.onreadystatechange=Function_bind(this.on_state_change,this);
				setTimeout(Function_bind((function() {
					this.respond_ready_state(1)
				}), this), 50);
			}
			this.set_request_headers();
			var body=this.options.post_body?this.options.post_body:str_post;
			this.sock.send(this.options.method=='post'?body:null);
		}
		catch(e) {}
	}, set_request_headers:function() {
		var headers=['X-Requested-With','XMLHttpRequest'];
		if(this.options.method=='post') {
			headers.push('Content-type','application/x-www-form-urlencoded');
			if(this.sock.overrideMimeType)	headers.push('Connection','close');
		}
		if(this.options.headers)	headers.push.apply(headers,this.options.headers);
		for(var i=0;i<headers.length;i+=2)
		this.sock.setRequestHeader(headers[i],headers[i+1]);
	}, on_state_change:function() {
		var readyState=this.sock.readyState;
		if(readyState!=1)
		this.respond_ready_state(this.sock.readyState);
	}, respond_ready_state:function(readyState) {
		try {
			if(this&&this.sock) {
				var tmp=this.sock.status;
			}
		}
		catch(e) {
			return;
		}
		var event=utility.req.request.events[readyState];
		if(event=='Complete') {
			if(this.is_success()) {
				if(this.options.onSuccess) {
					this.options.onSuccess(this.sock);
				}
			}
			else {
				if(this.options.onFailure) {
					this.options.onFailure(this.sock);
				}
			}
		}
		(this.options['on'+event]||utility.js.empty_func)(this.sock);
		if(event=='Complete') {
			this.sock.onreadystatechange=utility.js.empty_func;
		}
	}, is_success:function() {
		return(this.sock.status==undefined||this.sock.status==0||(this.sock.status>=200&&this.sock.status<300));
	}, is_failure:function() {
		return!this.is_success();
	}
};
function Ktml_initDebug() {}
var LOG_ERROR="ERROR",LOG_WARNING="WARNING",LOG_INFO="INFO";
function KTMLLogger(owner) {
	KTStorage.add(this);
	this.owner=owner;
	this.painted=false;
	this.errors=[];
	this.filter= {
		type:'',where:''
	};
	this.logger=null;
	var debug=util_defaultValue($KTML4_GLOBALS['debug'],'false');
	this.enabled=debug=='true';
};
KTMLLogger.prototype.paint=function() {
	if(!this.enabled||this.painted) {
		return;
	}
	var ktml=ktmls[this.owner];
	var logger=utility.dom.createElement("DIV",{id:this.id+'_logger',className:'error_log'});
	logger=ktml.formElement.parentNode.insertBefore(logger,ktml.formElement);
	logger.innerHTML='<div class="error_log_header">KTML4 Error Log</div><div class="error_log_close_button"><input id="'+this.id+'_close_button" type="button" value="Show" onclick="ktmls['+this.owner+'].logger.toggle()" /></div>';
	var log_body=utility.dom.createElement("DIV",{id:this.id+'_log_body',className:'error_log_body'});
	log_body=ktml.formElement.parentNode.insertBefore(log_body,ktml.formElement);
	this.logger=this.id+'_logger';
	this.log_body=this.id+'_log_body';
	this.close_button=this.id+'_close_button';
	this.painted=true;
};
KTMLLogger.prototype.log=function(type,where,what) {
	if(!this.enabled) {
		return;
	}
	this.errors.push( {type: type,where: where,what: what});
	this.paint();
	if(this.visible) {
		this.show(type,where);
	}
};
KTMLLogger.prototype.toggle=function() {
	var btn=document.getElementById(this.close_button);
	if(this.visible) {
		btn.value="Show";
		this.hide();
	}
	else {
		btn.value="Hide";
		this.show(this.filter.type,this.filter.where);
	}
};
KTMLLogger.prototype.show=function(type,where) {
	if(!this.enabled) {
		return;
	}
	this.filter.type=util_defaultValue(type,'');
	this.filter.where=util_defaultValue(where,'');
	this.paint();
	var ktml=ktmls[this.owner];
	ktml.preserveSelection(false);
	var logger=document.getElementById(this.logger);
	var log_body=document.getElementById(this.log_body);
	log_body.style.top='-10000px';
	log_body.style.left='-10000px';
	log_body.style.display='block';
	log_body.style.width=ktml.width+'px';
	log_body.style.height=ktml.height+'px';
	var err=null;
	var errors='';
	for(var i=0;i<this.errors.length;i++) {
		err=this.errors[i];
		if((err.type==this.filter.type||''==this.filter.type)&&(err.where==this.filter.where||''==this.filter.where)) {
			errors+='<div class="error_log_item '+err.type+'"><div class="error_log_type">'+err.type+': </div><div class="error_log_where">'+err.where+': </div><div class="error_log_message">'+err.what+'</div></div>'+"\r\n";
		}
	}
	log_body.innerHTML=errors;
	this.visible=true;
	utility.dom.putElementAt(log_body,ktml.div,'00');
};
KTMLLogger.prototype.hide=function() {
	if(!this.enabled||!this.painted) {
		return;
	}
	var log_body=document.getElementById(this.log_body);
	log_body.style.display="none";
	this.visible=false;
};
function Logging() {
	alert("This is a static class");
}
Logging.initialize=Logging_initialize;
Logging.entering=Logging_entering;
Logging.exiting=Logging_exiting;
Logging.log=Logging_log;
Logging.setLevel=Logging_setLevel;
Logging.write=Logging_write;
Logging.parse=Logging_parse;
Logging.accepted=Logging_accepted;
Logging.alertAttr=Logging_alertAttr;
Logging.dumpVar=Logging_dumpVar;
Logging.getPrefix=Logging_getPrefix;
Logging.alert=Logging_alert;
Logging.prompt=Logging_prompt;
Logging.pushTime=Logging_pushTime;
Logging.popTime=Logging_popTime;
Logging.params= {};
Logging.level=3;
Logging.MAXLOG=20;
Logging.ws=" ";
Logging.enter=" {";
Logging.exit="}	";
Logging.profile=true;
Logging.times=Array();
Logging.passObj=Array();
function Logging_initialize() {
	var tmp="------ Logging system 0.1 ---------\n";
	tmp+="-----------------------------------\n\n";
	Logging.write(tmp,false);
}
function Logging_entering(className,level) {
	if(typeof level=='undefined') {
		level=Logging.level;
	}
	if(!Logging.accepted(level)) {
		return;
	}
	if(!className) {
		className=Logging_entering.caller.name
	}
	var rest='';
	var temp=Logging.getPrefix(level)+Logging.enter+className;
	Logging.ws+="  ";
	Logging.write(temp+"\n");
	if(Logging.profile) {
		Logging.times.push(new Date());
	}
}
function Logging_exiting(className,level,result) {
	if(typeof level=='undefined') {
		level=Logging.level;
	}
	if(!Logging.accepted(level)) {
		return;
	}
	if(!className) {
		className=Logging_exiting.caller.name;
	}
	if(Logging.profile) {
		var now=new Date();
		var start=Logging.times.pop();
	}
	Logging.ws=Logging.ws.substring(0,Logging.ws.length-2);
	var temp=Logging.getPrefix(level)+Logging.exit+"."+className;
	if(typeof(result)!="undefined") {
		temp+=" with result "+Logging.dumpVar(result);
	}
	if(Logging.profile) {
		temp+=' in '+(now-start)+' ms';
	}
	Logging.write(temp+"\n");
}
function Logging_getPrefix(level) {
	return"";
}
function Logging_log(message,rx,level) {
	if(typeof rx=='undefined') {
		rx=new RegExp("","");
	}
	if(typeof level=='undefined') {
		level=Logging.level;
	}
	if(!Logging.accepted(level)) {
		return;
	}
	Logging.write(Logging.getPrefix(level)+Logging.ws+Logging.dumpVar(message,rx)+"\n");
}
function Logging_setLevel(level) {
	Logging.level=level;
}
function Logging_accepted(level) {
	if(level<=0||level>Logging.MAXLOG) {
		alert("Logging level must be an integer between 1 and 20.");
		return false;
	}
	if(level<=Logging.level) {
		return true;
	}
	else {
		return false;
	}
}
function Logging_dumpVar(obj,rx,tab,inner) {
	return utility.debug.dumpone(obj,rx);
	tm="";
	if(!tab) {
		tab="";
	}
	if(Array_indexOf(Logging.passObj,obj)!=-1) {
		tm+=Logging.ws+tab+" "+obj;
		return tm;
	}
	tab+="  ";
	if(typeof(obj)=="object") {
		Logging.passObj.push(obj);
		for(i in obj) {
			if(typeof(obj[i])!="function") {
				var isobj=typeof(obj[i])=="object";
				tm+=Logging.ws+tab+i+": {";
				if(isobj) {
					tm+="\n";
				}
				tm+=Logging.dumpVar(obj[i],rx,tab,true);
				if(isobj) {
					tm+=Logging.ws+tab+" ";
				}
				tm+="}	\n";
			}
		}
		Logging.passObj.pop();
	}
	else if(typeof(obj)=="function") {
		tm+=Logging.ws+tab+typeof(obj);
	}
	else {
		if(!inner) {
			tm+=Logging.ws+tab+typeof(obj);
		}
		tm+=obj;
	}
	tab=tab.substring(0,tab.length-2);
	return tm;
}
function Logging_alertAttr(obj,rx) {
	alert(Logging.dumpVar(obj,rx));
}
function Logging_prompt(obj,rx) {
	prompt("",Logging.dumpVar(obj,rx));
}
function Logging_write(message,append) {
	if(typeof Logging.params.element=='string') {
		var container=document.getElementById(Logging.params.element);
	}
	var el=Logging.params.element;
	if(!el) {
		return false;
	}
	el.value=((append!=undefined)&&(append==false))?message:el.value+"\r\n"+message;
	return true;
}
function Logging_parse(method) {
	var all="";
	var name=method.name;
	all+=name;
	var args=method.arguments;
	return all;
}
function Logging_pushTime(level) {
	if(!Logging.accepted(level)) {
		return;
	}
	Logging.times.push(new Date());
	var temp=Logging.getPrefix(level)+Logging.ws+'Start time balize: ';
	Logging.write(temp+"\n");
}
function Logging_popTime(level,leave) {
	if(!Logging.accepted(level)) {
		return;
	}
	var now=new Date();
	if(leave) {
		var start=Logging.times.pop();
	}
	else {
		var start=Logging.times[Logging.times.length-1];
	}
	var temp=Loggin.getPrefix(level)+Logging.ws+'End time balize: ';
	if(Logging.profile) {
		temp+=' in '+(now-start)+' ms';
	}
	Logging.write(temp+"\n");
}
function Logging_alert(obj,rx) {
	alert(Logging.dumpVar(obj,rx));
}
function UndoItem(undoManager,text) {
	this.parent=undoManager;
	this.hasBookmarks=this.parent.hasBookmarks;
	this.text=text;
	this.add();
}
function UndoItem_toString() {
	var str="";
	return str;
}
function UndoItem_add() {
	var obj=this;
	if(this.parent.owner.edit.readyState!='complete') {
		setTimeout(function() {
			return obj.add();
		}, 100);
		return;
	}
	var book, sel;
	sel=this.getSelection();
	book=this.getBookmark();
	if(!sel) {
		return;
	}
	this.selection_start=sel;
	this.bookmark_start=book;
	if(!this.selection_end) {
		this.selection_end=sel;
		this.bookmark_end=book;
	}
}
function UndoItem_getBookmark() {
	var selected=this.parent.owner.edit.selection;
	var tr=selected.createRange();
	if(this.hasBookmarks) {
		if(selected.type!="Control") {
		var selection_marker=null;
		while(selection_marker=this.parent.owner.edit.getElementById('selection_marker')) {
			selection_marker.parentNode.removeChild(selection_marker);
		}
		try {
			tr.collapse(false);
			tr.pasteHTML('<span id="selection_marker"></span>');
			this.text=this.parent.owner.edit.body.innerHTML;
			selection_marker=this.parent.owner.edit.getElementById('selection_marker');
			selection_marker.removeNode(true);
		}
		catch(err) {}
			return tr.getBookmark();
		}
		else {
			return tr(0);
		}
	}
	else {
		return null;
	}
}
function UndoItem_getSelection() {
	try{
		var selected=this.parent.owner.edit.selection;
		var tr=selected.createRange();
		if(!tr) {
			return null;
		}
		if(this.hasBookmarks) {
			return tr;
		}
		else {
			var sel=new Object;
			sel.startOffset=tr.startOffset;
			sel.endOffset=tr.endOffset;
			sel.startContainer=static_UndoItem_getNumericPath(tr.startContainer);
			sel.endContainer=static_UndoItem_getNumericPath(tr.endContainer);
			return sel;
		}
	}
	catch(err){
		return null;
	}
}
function UndoItem_getTrueSelection(sel) {
	if(this.hasBookmarks) {
	return sel;
	}
	else {
		var selected=this.parent.owner.edit.selection;
		var tr=selected.createRange();
		var node=this.getNodeForPath(sel.endContainer);
		try {
			tr.setEnd(node,sel.endOffset);
		}
		catch(e) {
			if(node.nodeValue) {}
			else {
				tr.setEnd(node.previousSibling,sel.endNode);
			}
		}
		node=this.getNodeForPath(sel.startContainer);
		tr.setStart(node,sel.startOffset);
		return tr;
	}
}
function static_UndoItem_getNumericPath(node) {
	var path=new Array();
	var root=node.ownerDocument.documentElement;
	while(node!=root) {
		var first=node.parentNode.firstChild;
		var i=0;
		while(node!=first) {
			node=node.previousSibling;
			i++;
		}
		path.push(i);
		node=node.parentNode;
	}
	return path.reverse();
}
function UndoItem_getNodeForPath(path) {
	var node=this.parent.owner.edit.documentElement;
	var kids;
	for(var i=0;i<path.length;i++) {
		kids=node.childNodes;
		node=kids[path[i]];
	}
	return node;
}
function UndoItem_moveTo(sel,book) {
	var tr;
	this.parent.owner.cw.focus();
	if(this.hasBookmarks) {
		try {
			tr=this.parent.owner.edit.body.createTextRange();
			var selection_marker=this.parent.owner.edit.getElementById('selection_marker');
			tr.moveToElementText(selection_marker);
			tr.collapse(false);
			tr.select();
			selection_marker.removeNode(true);
		}
		catch(e) {}
	}
	else {
		try {
			tr=this.getTrueSelection(sel);
			tr.collapse(false);
		}
		catch(e) {}
	}
}
function UndoItem_undo() {
	this.moveTo(this.selection_start,this.bookmark_start);
}
function UndoItem_redo() {
	this.moveTo(this.selection_end,this.bookmark_end);
}
function UndoManager(ktml) {
	this.owner=ktml;
	this.limit=50;
	this.edits=new Array();
	if(is.ie) {
		this.hasBookmarks=1;
	}
	else {
		this.hasBookmarks=0;
	}
}
function Undo_toString() {
	var i, str="";
	for(i=0;i<this.edits.length;i++) {
		str+=this.edits[i].toString();
	}
	return str;
}
function Undo_init() {
	if(this.owner.config_var.auto_focus) {
		try {
			this.owner.cw.focus();
			var first_leaf=this.owner.edit.body;
			while(true) {
				var tmp=first_leaf.firstChild;
				while(tmp&&(tmp.nodeType==1&&tmp.nodeName=="BR"||tmp.nodeType==3&&String_trim(tmp.nodeValue)=="")) {
					tmp=tmp.nextSibling;
				}
				if(tmp) {
					first_leaf=tmp;
				}
				else {
					break;
				}
			}
			if(is.mozilla) {
				var sel=this.owner.cw.getSelection();
				sel.removeAllRanges();
				sel.collapse(first_leaf,0)
			}
			else {
				var tr=this.owner.edit.selection.createRange();
				if(first_leaf.nodeType!=1) {
					first_leaf=first_leaf.parentNode;
				}
				tr.moveToElementText(first_leaf);
				tr.collapse(true);
				tr.select();
			}
		}
		catch(e) {
			try {
				if(is.mozilla) {
					this.owner.cw.getSelection().collapse(this.owner.edit.body,0);
				}
				else {
					var tr=this.owner.edit.selection.createRange();
					tr.moveToElementText(this.owner.edit.body);
					tr.collapse(true);
					tr.select();
				}
			}
			catch(e) {}
		}
		this.owner.displayChanged();
	}
	this.cursor=0;
	this.edits[0]=new UndoItem(this,this.owner.edit.body.innerHTML);
}
function Undo_atStart() {
	if(this.cursor<1) {
		return true;
	}
	else {
		return false;
	}
}
function Undo_atEnd() {
	if(this.cursor>=this.edits.length-1) {
		return true;
	}
	else {
		return false;
	}
}
function Undo_addEdit(giveFocusBack) {
	giveFocusBack=giveFocusBack&&1;
	if(this.cursor>=this.edits.length) {
		this.cursor=this.edits.length-1;
	}
	var text=this.owner.edit.body.innerHTML;
	var old_text=this.edits[this.cursor].text;
	if(is.ie) {
		old_text=old_text.replace(/<SPAN id=selection_marker><\/SPAN>/i,'');
	}
	if(old_text==text){return;}
	if(this.cursor==this.limit-1) {
		this.edits.splice(1,1);
	}
	else {
		this.cursor++;
	}
	this.edits[this.cursor]=new UndoItem(this,text);
	giveFocusBack&&this.owner.cw.focus();
}
function Undo_update() {
	try {
		this.edits[this.cursor].add();
	}
	catch(err) {}
}
function Undo_undo() {
	if(this.atStart())
		return;
	if(!this.edits[this.cursor])
		return;
	this.cursor--;
	this.owner.edit.body.innerHTML=this.edits[this.cursor].text;
	this.edits[this.cursor].undo();
	this.owner.cw.focus();
}
function Undo_redo() {
	if(this.atEnd())return;
	if(!this.edits[this.cursor])return;
	this.cursor++;
	this.owner.edit.body.innerHTML=this.edits[this.cursor].text;
	this.edits[this.cursor].redo();
	this.owner.cw.focus();
}
UndoItem.prototype.toString=UndoItem_toString;
UndoItem.prototype.add=UndoItem_add;
UndoItem.prototype.moveTo=UndoItem_moveTo;
UndoItem.prototype.undo=UndoItem_undo;
UndoItem.prototype.redo=UndoItem_redo;
UndoItem.prototype.getSelection=UndoItem_getSelection;
UndoItem.prototype.getBookmark=UndoItem_getBookmark;
UndoItem.prototype.getTrueSelection=UndoItem_getTrueSelection;
UndoItem.prototype.getNodeForPath=UndoItem_getNodeForPath;
UndoManager.prototype.toString=Undo_toString;
UndoManager.prototype.init=Undo_init;
UndoManager.prototype.atStart=Undo_atStart;
UndoManager.prototype.atEnd=Undo_atEnd;
UndoManager.prototype.addEdit=Undo_addEdit;
UndoManager.prototype.update=Undo_update;
UndoManager.prototype.undo=Undo_undo;
UndoManager.prototype.redo=Undo_redo;
function lang_translatepage(content,lang,wnd) {
  var regexp_repl=new RegExp("\\|\\|([^\\|\\|]*)\\|\\|","gi");
  while((arr=regexp_repl.exec(content))!=null){
    if(translated=wnd.translate(arr[1],lang)){
      var repl=new RegExp("\\|\\|"+arr[1]+"\\|\\|","gi");
      if(typeof content.replace!='function'){
        return content.toString();
        }
      try{
        content=content.replace(repl,translated);
        }
      catch(e){}
      }
    }
  return content;
  }
  if(typeof window.ktmls=='undefined') {
    window.ktmls=[];
    }
  var KtmlVersion='4.1.0';
  var KtmlDevelopment=false;
  var KtmlAddVersionToScripts=false;
  var HIDDEN_TAG_ID="KTML_HIDDEN_TAG_GLYPH_ID";
  var HIDDEN_TAGS_RE=new RegExp("<img[^>]*id=['\"]?"+HIDDEN_TAG_ID+"['\"]?","i");
  var ANCHOR_GLYPH_HTML='';
  $HDR_ATTRNAME_TYPE='hdr_type';
  $HDR_ATTRNAME_SUBTYPE='hdr_stype';
  $HDR_MAINCLASSNAME='HTMLDropdown';
  $HDR_DEFAULT_WIDTH=100;
  $HDR_DEFAULT_HEIGHT=150;
  $HDR_DEFAULT_LINEHEIGHT=20;
  $HDR_GLOBALOBJECT="HTMLDropDowns";
  if(typeof window[$HDR_GLOBALOBJECT]=="undefined"){
    window[$HDR_GLOBALOBJECT]={'objects':[],'addedwindowevent':0}
    }
	TEXT_NODE=3;
	COMMENT_NODE=8;
  var KT_clean_functions= {none:null,word:util_cleanHTMLContent,css:util_cleanCSSStyles,classes:util_cleanCSSClasses,script:util_cleanScriptTags,fonts:util_cleanFontTags,formatting:util_cleanFormattingTags,all:util_cleanAllTags};
  var KtmlCommands= {
	'bold':['bold','Bold'],'italic':['italic','Italic'],'underline':['underline','Underline'],'superscript':['superscript','Superscript'],'subscript':['subscript','Subscript'],'copy':['copy','Copy'],'cut':['cut','Cut'],'paste':['paste','Paste'],'backcolor':['hilitecolor','backcolor'],'forecolor':['forecolor','ForeColor'],'fontname':['fontname','FontName'],'fontsize':['fontsize','FontSize'],'indent':['indent','Indent'],'outdent':['outdent','Outdent'],'undo':['undo','Undo'],'redo':['redo','Redo'],'orderlist':['insertorderedlist','InsertOrderedList'],'unorderlist':['insertunorderedlist','InsertUnorderedList'],'hyperlink':['createlink','CreateLink'],'unlink':['unlink','Unlink'],'insert_anchor':['createanchor','CreateBookmark'],'unanchor':['unBookmark','UnBookmark'],'insertimage':['insertimage','InsertImage'],'justifycenter':['justifycenter','JustifyCenter'],'justifyleft':['justifyleft','JustifyLeft'],'justifyright':['justifyright','JustifyRight'],'justifyfull':['justifyfull','JustifyFull'],'removeformat':['removeformat','RemoveFormat'],'blockfmt':['formatblock','FormatBlock'],'selectall':['selectall','SelectAll'],'delete':['delete','Delete']
};
function KtmlGetCommand(command) {
	var idx=is.ie?1: 0;
	return KtmlCommands[command][idx];
}
if(typeof KtmlLangRes=='undefined') {
	KtmlLangRes= {};
}
function langAddResources(lang,what) {
	if(typeof(KtmlLangRes[lang])=="undefined") {
		KtmlLangRes[lang]=[];
	}
	for(var res in what) {
		KtmlLangRes[lang][res.toLowerCase()]=utility.string.getInnerText(what[res]);
	}
}
function translate(what,from) {
	var ret="";
	if(typeof from=="undefined") {
		from="english";
	}
	if(typeof(KtmlLangRes[from])=="undefined") {
		ret=what;
	}
	if(ret==""&&typeof(KtmlLangRes[from][what.toLowerCase()])=="undefined") {
		ret=what;
	}
	if(ret=="") {
		ret=KtmlLangRes[from][what.toLowerCase()];
	}
	return ret;
}
if(typeof KtmlIncludeJsCache=='undefined') {
	KtmlIncludeJsCache= {};
}
function KtmlIncludeJs(src,callback,doc) {
	if(typeof doc=="undefined") {
		doc=document;
	}
	if(typeof KtmlIncludeJsCache[src]!='undefined') {
		if(KtmlIncludeJsCache[src].ready) {
			if(typeof callback=='function') {
				callback(src);
			}
		}
		else {
			KtmlIncludeJsCache[src].deferred.push(callback);
			return;
		}
	}
	else {
	KtmlIncludeJsCache[src]={'source':src,'ready':false,'deferred':[]};
	var src_postfix='';
	if(KtmlAddVersionToScripts) {
		if(src.indexOf('?')>=0) {
			src_postfix+='&version='+KtmlVersion;
		}
		else {
			src_postfix+='?version='+KtmlVersion;
		}
	}
	if(KtmlDevelopment) {
		if(src.indexOf('?')>=0||src_postfix.indexOf('?')>=0) {
			src_postfix+='&rand='+Math.random();
		}
		else {
			src_postfix+='?rand='+Math.random();
		}
	}
	var scriptElement=doc.createElement('script');
	if(is.mozilla) {
		scriptElement.readyState='loaded';
		utility.dom.attachEvent(scriptElement,'onload',function() {
		KtmlIncludeJsCache[src].ready=true;
		if(typeof callback=='function') {
			callback(src);
		}
		if(KtmlIncludeJsCache[src].deferred.length) {
			for(var __i=0;__i<KtmlIncludeJsCache[src].deferred.length;__i++) {
				KtmlIncludeJsCache[src].deferred[__i](src);
			}
		}
		});
	}
	else {
		utility.dom.attachEvent(scriptElement,'onreadystatechange',function() {
		if(scriptElement.readyState=='loaded'||scriptElement.readyState=='complete') {
			KtmlIncludeJsCache[src].ready=true;
			if(typeof callback=='function') {
				callback(src);
			}
			if(KtmlIncludeJsCache[src].deferred.length) {
				for(var __i=0;__i<KtmlIncludeJsCache[src].deferred.length;__i++) {
					KtmlIncludeJsCache[src].deferred[__i](src);
				}
			}
		}
		});
	}
	scriptElement.type='text/javascript';
	scriptElement.src=src+src_postfix;
	var headElement=doc.getElementsByTagName('head')[0];
	headElement.appendChild(scriptElement);
	}
};
var Serializer=function(name,path) {
	this.name=name;
	this.path=path;
	this.props= {};
};
Serializer.prototype= {
	load: function() {
		var old_cookie_str = utility.cookie.del(this.name.replace(/_\d+$/,'')+"_cookie");
		var cookie_str=utility.cookie.get(this.name.replace(/_\d+$/,'')+"_503cookie");
		if(!cookie_str){
			this.props={};
		}{
		this.props=eval('('+cookie_str+')');
		}
	},save:function(){
		// set it to expire in 10 min.
		utility.cookie.set(this.name.replace(/_\d+$/,'')+"_503cookie",this.stringify(this.props),0.007,null,'');
	},stringify:function(arg){
		var c,i,l,s='',v;
		switch(typeof arg){
			case'object':
				if(arg){
					if(typeof arg.push=='function'){
						for(i=0;i<arg.length;++i){
							v=this.stringify(arg[i]);
							if(s){
								s+=',';
							}
							s+=v;
						}
						return'['+s+']';
					}
					else if(typeof arg.toString!='undefined'){
						for(i in arg){
							v=arg[i];
							if(typeof v!='undefined'&&typeof v!='function'){
								v=this.stringify(v);
								if(s){
									s+=',';
								}
								s+=this.stringify(i)+':'+v;
							}
						}
						return'{'+s+'}';
					}
				}
				return'null';
			case'number':return isFinite(arg)?String(arg):'null';
			case'string':
				l=arg.length;
				s='"';
				for(i=0;i<l;i+=1){
					c=arg.charAt(i);
					if(c>=' '){
						if(c=='\\'||c=='"'){
							s+='\\';
						}
						s+=c;
					}
					else{
						switch(c){
							case'\b':
								s+='\\b';
								break;
							case'\f':
								s+='\\f';
								break;
							case'\n':
								s+='\\n';
								break;
							case'\r':
								s+='\\r';
								break;
							case'\t':
								s+='\\t';
								break;
							default:
								c=c.charCodeAt();
								s+='\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);
						}
					}
				}
				return s+'"';
			case'boolean':return String(arg);
			default:return'null';
		}
	},get:function(domain_name,prop_name){
		if(!this.props){
			this.props={};
		}
		if(this.props[domain_name]){
			if(this.props[domain_name][prop_name]){
				return this.props[domain_name][prop_name];
			}
		}
		return null;
	},set:function(domain_name,prop_name,prop_value){
		if(!this.props[domain_name]){
			this.props[domain_name]={};
		}
		if(!this.props[domain_name][prop_name]){
			this.props[domain_name][prop_name]=null;
		}
		this.props[domain_name][prop_name]=prop_value;
	}
}
function _gel(id,doc){
	return(doc?doc:document).getElementById(id);
}
function util_function_copy(func_ref) {
	var func_body=func_ref.toString();
	var args_string=func_body.substring(func_body.indexOf("(")+1,func_body.indexOf(")"));
	args_string=args_string.replace(/\s*/gi,'');
	args_string='"'+args_string.replace(/,/gi,'","')+'"';
	func_body=func_body.substring(func_body.indexOf('{')+1,func_body.lastIndexOf('}'));
	func_body=func_body.replace(/"/gi,'\"');
	return eval('new Function('+args_string+',func_body)');
};
function util_defaultValue(vn,dv) {
	if(typeof vn=='undefined') {
		return dv;
	}
	else {
		return vn;
	}
}
function util_cleanBrowserCSS(tmp){
	var r1 = new RegExp('(mso\-)+[^;"]*[; ]*',"gi");
	tmp = tmp.replace(r1,'; ');
	r1 = new RegExp('(\-moz\-)+[^;"]*[; ]*',"gi");
	tmp = tmp.replace(r1,'; ');
	r1 = new RegExp("( )+","gi");
	tmp = tmp.replace(r1,' ');
	tmp = tmp.replace(r1,' ');	
	return tmp;
}
function util_cleanHTMLContent(tmp){
	tmp=tmp.replace(/<!--(\w|\W)+?-->*/gi,'');
	tmp=tmp.replace(/<title>(\w|\W)+?<\/title>*/gi,'');
	tmp=tmp.replace(/<(\/?)(body|o:|div|link|head|html|xml|meta)[^>]*>/gi,"");	  
	var r1=new RegExp("<(\\?)+xml:.*(\\?)+>","gi");
	tmp=tmp.replace(r1,"");
	tmp=tmp.replace(/<TT([^>]*)>/ig,"<div $1>");
	tmp=tmp.replace(/<\/TT>/ig,"</div>");	
	tmp=tmp.replace(/<TT([^>]*)>/ig,"<p $1>");
	tmp=tmp.replace(/<\/TT>/ig,"</p>");
  // remove title tag
  tmp=tmp.replace(/<title>(\w|\W)+?<\/title>*/gi,'');
	// remove comments inserted by word
	tmp=tmp.replace(/<!--(\[)+if gte(\w|\W)+?-->*/gi,'');
	//tmp=tmp.replace(/<\/?font[^>]*>/ig,"");
	//tmp=tmp.replace(/<\/?span[^>]*>/ig,"");
	// remove classes with names like Mso
	tmp = tmp.replace(/\sclass=[\"]*(Mso)[\w]*[\"]*/ig, '');
	r1 = new RegExp('(style=\"[^\"]*)\s*[\w]*\s*(mso)[\w]+(\-)[\w]+[;]*[\"]*',"gi");
	tmp = tmp.replace(r1,'$1$2');
	tmp = tmp.replace(/\sstyle=[\"]*[\w]*\s*(mso)[\w]+(\-)[\w]+[;]*[\"]*/ig, '');
	// move text-align rule in style attribute to align attribute
	r1=new RegExp("(style=\"[^\"]*)TEXT-ALIGN:\\s?([a-z]*)([^\"]*\")","gi");
	tmp=tmp.replace(r1,"align=$2 $1$3");
	// move background rule in style attribute to background-color style rule
	r1=new RegExp("(style=\"[^\"]*)BACKGROUND:\\s?([a-z0-9#]*)([^;]*;)","gi");
	tmp=tmp.replace(r1,'$1background-color: $2; ');
	r1=new RegExp("(style=\"[^\"]*)width:\\s?([a-z0-9]*)([^\"]*\")","gi");
	tmp=tmp.replace(r1,' width="$2" $1$3');
	r1=new RegExp("(style=\"[^\"]*)height:\\s?([a-z0-9]*)([^\"]*\")","gi");
	tmp=tmp.replace(r1,' height="$2" $1$3');
	r1=new RegExp("\\s(?:lang|style|class)\\s*=\\s*\"[^\"]*\"","gi");
	tmp=tmp.replace(r1,' ');
	r1=new RegExp("\\s(?:lang|style|class)\\s*=\\s*'[^']*'","gi");
	tmp=tmp.replace(r1,' ');
	r1=new RegExp("\\s(?:lang|style|class)\\s*=\\s*[^\\s>]*","gi");
	tmp=tmp.replace(r1,' ');
	tmp=tmp.replace(/(<\/?)dir>/ig,"$1blockquote>");
	tmp=tmp.replace(/(<td[^>]*>)\s*<p>([^<>]*)<\/p>\s*<\/td>/ig,"$1$2</td>");
	var replacements=[133,'&#133;',8226,'&#8243;',8221,'"',8216,"'",8217,"'",145,'&#039;',146,'&#039;',147,'&#034;',148,'&#034;',8220,'&#034;',8226,'&#149;',149,'&#149;',8211,'&#150;',150,'&#150;',8212,'&#151;',151,'&#151;',8482,'&#153;',153,'&#153;',169,'&copy;',174,'&reg;']
	for(var i=0;i<replacements.length;i=i+2){
		rgx=new RegExp(String.fromCharCode(replacements[i]),"gi");
		tmp=tmp.replace(rgx,replacements[i+1]);
	}
	tmp=tmp.replace(/<\/?place[^>]*>/ig,"");
	tmp=tmp.replace(/<\/?city[^>]*>/ig,"");
	tmp=tmp.replace(/<\/?state[^>]*>/ig,"");
	tmp=tmp.replace(/<\/?country[^>]*>/ig,"");
		// remove empty style attributes
	r1=new RegExp("\\s*(style=\"[^\"]*)[;|:]*\\s?([^\"]*\")","gi");
	tmp=tmp.replace(r1,'');
	return tmp;
}
/*
 this is a more aggressive version of util_cleanHTMLContent. in addition to what util_cleanHTMLContent is doing,
 this function also removes any style,script tags from the pasted text. also replaces \n (line feeds)
*/
function util_cleanHTMLContentCustom(tmp){
	tmp=tmp.replace(/<(\/?)(body|o:|div|link|head|html|xml|meta|style|script)[^>]*>/gi,"");
	var r1=new RegExp("<(\\?xml:).*(\\?)*\/>","gi");
	tmp=tmp.replace(r1,"");
	tmp=tmp.replace(/<TT([^>]*)>/ig,"<p $1>");
	tmp=tmp.replace(/<\/TT>/ig,"</p>");
	// remove style tags [not attributes]
	tmp=tmp.replace(/<style>(\w|\W)+?<\/style>*/gi,'');
	//tmp=tmp.replace(/<!--(\[)+if gte(\w|\W)+?-->*/gi,'');
	// remove all comments
	tmp=tmp.replace(/<!--(\w|\W)+?-->*/gi,'');
	// remove classes with names like Mso
	tmp = tmp.replace(/\sclass=[\"]*(Mso)[\w]*[\"]*/ig, '');
	r1 = new RegExp('(style=\"[^\"]*)\s*[\w]*\s*(mso)[\w]+(\-)[\w]+[;]*[\"]*',"gi");
	tmp = tmp.replace(r1,'$1$2');
	tmp = tmp.replace(/\sstyle=[\"]*[\w]*\s*(mso)[\w]+(\-)[\w]+[;]*[\"]*/ig, '');
	// word07 is not double-quoting the attributes. replace double quotes inside attribute to single quotes
	tmp = tmp.replace(/&quot;/gi,"'");
	// move text-align rule in style attribute to align attribute
	r1=new RegExp("(style=\"[^\"]*)TEXT-ALIGN:\\s?([a-z]*)([^\"]*\")","gi");		
	tmp=tmp.replace(r1,"align=$2 $1$3");
	// move background rule in style attribute to background-color style rule
	r1=new RegExp("(style=\"[^\"]*)BACKGROUND:\\s?([a-z0-9#]*)([^;]*;)","gi");
	tmp=tmp.replace(r1,'$1background-color: $2; ');
	// move width rule in style attribute to width attribute	
	//r1=new RegExp("(style=\"[^\"]*)\\s+width:\\s?([a-z0-9]*)([^\"]*\")","gi");  
	//tmp=tmp.replace(r1,' width="$2" $1$3');
	// move height rule in style attribute to height attribute	
	//r1=new RegExp("(style=\"[^\"]*)\\s+height:\\s?([a-z0-9]*)([^\"]*\")","gi");
	//tmp=tmp.replace(r1,' height="$2" $1$3');
	r1=new RegExp("\\s(?:lang)\\s*=\\s*\"[^\"]*\"","gi");					
	tmp=tmp.replace(r1,' ');
	r1=new RegExp("\\s(?:lang)\\s*=\\s*'[^']*'","gi");						
	tmp=tmp.replace(r1,' ');
	r1=new RegExp("\\s(?:lang)\\s*=\\s*[^\\s>]*","gi");					
	tmp=tmp.replace(r1,' ');
	// replace dir with blockquote
	tmp=tmp.replace(/(<\/?)dir>/ig,"$1blockquote>");
	var replacements=[133,'&#133;',8226,'&#8243;',8221,'"',8216,"'",8217,"'",145,'&#039;',146,'&#039;',147,'&#034;',148,'&#034;',8220,'&#034;',8226,'&#149;',149,'&#149;',8211,'&#150;',150,'&#150;',8212,'&#151;',151,'&#151;',8482,'&#153;',153,'&#153;',169,'&copy;',174,'&reg;']
	for(var i=0;i<replacements.length;i=i+2){
		rgx=new RegExp(String.fromCharCode(replacements[i]),"gi");
		tmp=tmp.replace(rgx,replacements[i+1]);
	}
	tmp=tmp.replace(/<\/?place[^>]*>/ig,"");
	tmp=tmp.replace(/<\/?city[^>]*>/ig,"");
	tmp=tmp.replace(/<\/?state[^>]*>/ig,"");
	tmp=tmp.replace(/<\/?country[^>]*>/ig,"");
	tmp=tmp.replace(/<[pP]\s*>&nbsp;<\/[pP]>/gi,"");
	// remove empty paragraph tags
	r1=new RegExp("(<[^>]+>)+&nbsp;(</\w+>)+","gi");
	tmp=tmp.replace(r1,'');
	// remove v: element attached to <img> tag
	r1=new RegExp('\\s+v:[\w|\W]+=[\"]*[^\"]+[\"]*','gi');
	tmp=tmp.replace(r1,'');
	// remove empty style attributes
	r1=new RegExp("\\s*style=\"\\s*(;)*\\s*(\")","gi");
	tmp=tmp.replace(r1,'');
	tmp = util_cleanBrowserCSS(tmp);
	tmp=tmp.replace(/\n+/gi,'\n');
	tmp=tmp.replace(/^\n+/gi,'');
	return tmp;
}

function util_cleanCSSStyles(tmp){
	//tmp=tmp.replace(/\sstyle\s*=\s*['"]?[^'">]*['"]?/ig," ");
	tmp=tmp.replace(/\sstyle\s*=\s*"[^"]*"/ig," ");
	tmp=tmp.replace(/\sstyle\s*=\s*'[^']*'/ig," ");
	tmp=tmp.replace(/\sstyle\s*=\s*[^\s>]+/ig," ");
	tmp=util_cleanCSSClasses(tmp);
	return tmp;
};
function util_cleanCSSClasses(tmp){
	re_class_single=/(<[^\s>]*)([^>]*)(\sclass='[^']*')([^>]*>)/gi;
	re_class_double=/(<[^\s>]*)([^>]*)(\sclass="[^"]*")([^>]*>)/gi;
	re_class=/(<[^\s>]*)([^>]*)(\sclass=[^\s>]*)([^>]*>)/gi;
	tmp=tmp.replace(re_class_single,'$1$2$4');
	tmp=tmp.replace(re_class_double,'$1$2$4');
	tmp=tmp.replace(re_class,'$1$2$4');
	return tmp;
};
function util_cleanScriptTags(tmp) {
	var doc=tmp;
	var openScriptRE=/&lt;script[^&]*&gt;/i;
	var closeTag='\/&gt;';
	var closeScriptTag='&lt;\/script&gt;';
	while (openScriptRE.test(doc)) {
		matchAry=doc.match(openScriptRE);
		matchStr=matchAry[0];
		startIdx=matchAry.index;
		endIdx=startIdx+matchStr.length;
		if(matchStr.indexOf(closeTag)==-1) {
			closeIdx=doc.toLowerCase().indexOf(closeScriptTag,endIdx);
			if(closeIdx != -1)	endIdx=closeIdx+closeScriptTag.length;
		}
		var newDoc = '';
		if (startIdx != 0)	newDoc = doc.substring(0, startIdx);
		if (endIdx+1 != doc.length )	newDoc+=doc.substring(endIdx);
		doc = newDoc;
	}
	return doc;
};
function util_cleanFontTags(tmp) {
	re_font_open=/<font[^>]*>/gi;
	re_font_close=/<\/font>/gi;
	tmp=tmp.replace(re_font_open,'');
	tmp=tmp.replace(re_font_close,'');
	return tmp;
};
function util_cleanFormattingTags(tmp){
	tmp=tmp.replace(/<(H[0-9]+)\s?([^>]*)>/ig,"<p>");
	var r1=new RegExp("<\\/(?:H[0-9]+)>","gi");
	tmp=tmp.replace(r1,"</p>");
	var r1=/<\/?(?:b|strong|i|u|em|font)(?=\s|\/|>)[^>]*>/gi;
	tmp=tmp.replace(r1,"");
	//tmp=tmp.replace(/<([^>]*)style="[^"]*"([^>]*)>/ig,"<$1$2>");
	//tmp=tmp.replace(/<([^>]*)class="[^"]*"([^>]*)>/ig,"<$1$2>");
	var re_open = re_close = build = null;
	
	var removeTags = new Array( 'ACRONYM','B','BDO','BIG','BLINK','DFN','EM','FONT','I','INS','KBD','NOBR','Q','SAMP','SMALL','STIKE','STRONG','SUB','SUP','IT','U','VAR','ADDRESS','PRE');
	for (var i=0;i<removeTags.length;i++){
		build="<"+removeTags[i]+"[^>]*>";
		re_open=new RegExp(build,"gi");
		tmp=tmp.replace(re_open,'');
		build="<\/"+removeTags[i]+">";
		re_close=new RegExp(build,"gi");
		tmp=tmp.replace(re_close,'');
	}
	// handle "s" (strike) take differently. otherwise, we are removing span tags too with this
	re_open=new RegExp("<s>","gi");
	tmp=tmp.replace(re_open,'');
	re_close=new RegExp("<\/s>","gi");
	tmp=tmp.replace(re_close,'');
	return tmp;
};
function util_cleanAllTags(tmp){
	tmp=tmp.replace(/<(\/?)([a-z:0-9]+)[^>]*>/gi,"<$1$2>");
	// commented this line to fix issue 5670
	//tmp=tmp.replace(/>[\s\r\n]*</gi,'><');
	var prev_tag='';
	tmp=tmp.replace(/<(\/?)([a-z:0-9]+)>/gi,function(a,slash,tag){
		var ret='';
		tag=tag.toLowerCase();
		if(/^span|div|p|td|th|li|addr|pre|h[1-6]$/i.test(tag)){
			if(slash==''&&prev_tag!=''&&tag!=prev_tag){
				if(prev_tag=='p'){
					if(tag=='li')
						ret+=' ';
				}
				else{
					ret+='</'+prev_tag+'>';
					ret+='<'+slash+'p>';
				}	
			}
			prev_tag='p';
			return ret;
		}
		else{
			return'';
		}
	});
	while(/<(\/?)p><\p>/i.test(tmp)){
		tmp=tmp.replace(/<(\/?)p><\p>/i,"<$1p>");
		tmp=tmp.replace(/<p><\/p>/gi,"");
	}
	return tmp||'';
};
var KtmlScripts={'base':[],'modules':[]};
var KtmlModuleList={'contextmenu':['main','browser'],'glyphhandler':['main','browser'],'introspection':['main','browser'],'css':['main','browser'],'filebrowser':['main'],'expire':['main'],'xhtml':['main','browser'],'spellchecker':['main']};
var KtmlLoadedModuleList=[];
function KtmlLoadModules() {
	if(!window.KtmlWindowLoaded){return;}
	for(var i=0;i<window.ktmls.length;i++){
		if(!window.ktmls[i].shouldLoadModules){
			if(is.ie){
				return;
			}
		}
	}
	if(typeof KtmlUserModuleList!='undefined'){
		KtmlModuleList=Object_weave(KtmlModuleList,KtmlUserModuleList);
	}
	var scripts={};
	var loadedScripts={};
	var postfix=(is.ie)?'_ie':'_mozilla';
	for(var mod in KtmlModuleList){
      Ktml_object.config_var['KTMLToolBarList']+=','+mod;
		var desc=KtmlModuleList[mod];
		scripts[mod]=[];
		loadedScripts[mod]=0;
		if(Array_indexOf(desc,'main')>=0)
			Array_push(scripts[mod],KtmlDirDepth+'modules/'+mod+'/scripts.js');
		if(Array_indexOf(desc,'browser')>=0)
			Array_push(scripts[mod],KtmlDirDepth+'modules/'+mod+'/scripts'+postfix+'.js');
	}
	for(var mod in scripts){
		var tmp=scripts[mod];
		for(var i=0;i<tmp.length;i++){
			KtmlIncludeJs(tmp[i],function(src){
				Array_push(KtmlScripts['modules'],src.replace(/\?.*$/,''));
				var moduleName=src.replace(/^.*\/modules\/([^\/]+)\/.*$/,'$1');
				if(scripts[moduleName].length>loadedScripts[moduleName]){
					loadedScripts[moduleName]++;
				}
				if(scripts[moduleName].length==loadedScripts[moduleName]){
					KtmlAddModule(moduleName);
				}
			});
		}
	}
}
function KtmlAddModule(mod){
	if(typeof window[mod+'_runonce']=='function'){
		window[mod+'_runonce']();
	}
	if(typeof window[mod+'_runeach']=='function'){
		Array_each(window.ktmls,function(iter){
		if(!iter.shouldLoadModules){return;}
		if(typeof iter[mod+'_runeach_done']!="undefined"){
		return;
		}
		window[mod+'_runeach'](iter);
		iter[mod+'_runeach_done']=true;
		});
	}
}
ktml_attachToFormElement=function(name){
	if(typeof window['ktml_'+name]!="undefined"){
		return;
	}
	window['ktml_'+name]=new ktml(name);
}
function ktml(name){
	if (is.mozilla){
		glblArray=getglblRTElementsRef();
		if(glblArray!='undefined'){
			var thisInd=getThisRTERef(name,glblArray);
			if(thisInd>0){
				var otherKTMLLoaded=getRTEStatus(glblArray,thisInd-1);
				if(otherKTMLLoaded=='false') {
					pause(100);
				}
			}
		}
	}
	if(is.safari){
		is.valid=false;
	}
	try {
		if(typeof utility.dom.getBorderBox=="undefined") {
			is.valid=false;
			alert("KTML version "+KtmlVersion+" requires at least MX Kollection 3.6.1!\r\nRequired function [utility.dom.getBorderBox] not found in utility.js");
		}
	} catch(err) {};
	Ktml_object=this;
	this.name=name;
	this.formElement=document.getElementById(name);
	if(!this.formElement) {
		alert('The element KTML4 is bound to was not found.'+"\r\n"+'The element having ID "'+name+'" was not found in page.');
		return;
	}
	this.checkDocMode();
	if(typeof(getHtmlEditorText)=="undefined"&&typeof(window[this.name+'_config'])=="undefined"&&this.name.match(/_[0-9]*$/)) {
		this.config_var=window[this.name.replace(/_[0-9]*$/,'')+'_config'];
	}
	else {
		this.config_var=window[this.name+'_config'];
	}
	this.width=this.config_var.width;
	if(isNaN(this.width)) {
		this.width=parseInt(this.formElement.style.width);
	}
	if(isNaN(this.width)) {
		this.width=600;
	}
	this.height=this.config_var.height;
	if(isNaN(this.height)) {
		this.height=parseInt(this.formElement.style.height);
	}
	if(isNaN(this.height)) {
		this.height=400;
	}
	this.hooks= {'onkeyup':[],'onkeypress':[],'onmouseover':[],'onmouseup':[],'onunload':[],'ontogglerich2code':[],'ontogglecode2rich':[],'onloadtext':[],'onsavetext':[],'onupdatebuttonstate':[],'ondomselect':[],'onsetdisplaymode':[],'onsetdisplaymode_beforeinvisible':[],'onpaste_word':[],'onpaste':[]};
	if(!is.valid) {
		this.paint();
		return;
	}
	this.readyForSave=true;
	this.setGlobals();
	this.logger=new KTMLLogger(this.counter);
	if(this.formElement.form) {
		var ktml_counters=this.formElement.form.getAttribute("ktml_counters")||'';
		ktml_counters+=(ktml_counters?",": "")+this.counter;
		this.formElement.form.setAttribute("ktml_counters",ktml_counters);
	}
	var _tmpArr1=this.config_var.buttons;
	var _tmpArr2=[];
	var _delta=0;
	var _tmpCounter=0;
	Array_each(_tmpArr1,function(tlbGroup) {
		if(tlbGroup)
		{
			if(tlbGroup[0]>_tmpCounter) {
				if(tlbGroup[0]-_tmpCounter!=_delta) {
					_tmpCounter++;
					_delta=(tlbGroup[0]-_tmpCounter);
				};
			};
			tlbGroup[0]=_tmpCounter;
			_tmpArr2.push(tlbGroup);
		}
	});
	this.config_var.buttons=_tmpArr2;
	try {
		this.formElement.style.display="none";
	}catch(e) {};
	this.flags= {};
	this.active=false;
	this.customButtons=[];
	this.visible=ktml_isElementVisible(this.counter);
	this.fullScreenState=false;
	this.tagReplacementRules= {};
	var denied_tags_list=util_defaultValue($KTML4_GLOBALS['denied_tags_list'],'');
	var allowed_tags_list=util_defaultValue($KTML4_GLOBALS['allowed_tags_list'],'');
	if(denied_tags_list.length>0&&allowed_tags_list.length>0) {}
	else {
		if(denied_tags_list!='') {
			denied_tags_list=denied_tags_list.split(",");
			for(var i=0;i<denied_tags_list.length;i++) {
				this.addTagReplacementRule("strip"+denied_tags_list[i],denied_tags_list[i],"striptag");
			}
		}
		if(allowed_tags_list!='') {
			this.allowed_tags_list=allowed_tags_list.split(",");
		}
		else {
			this.allowed_tags_list=null;
		}
	}
	this.addTagReplacementRule("stripnoscript","noscript","striptagandcontent");
	var logical_emphasis=util_defaultValue($KTML4_GLOBALS['logical_emphasis'],'true');
	if(logical_emphasis=='true') {
		this.addTagReplacementRule("b2strong","b","strong");
		this.addTagReplacementRule("i2em","i","em");
	}
  
	this.charset=is.ie?document.charset:document.characterSet;
	if(is.mozilla) {
		this.loadCompatLayer();
	}
	else {
		this.ui= {showToolbar:"manual",showPI:true,toolbar:false,pi:false};
		this.ui.showToolbar=this.config_var['show_toolbar'];
		this.ui.showPI=!!this.config_var['show_pi'];
		this.ui.toolbar=this.ui.showToolbar=="load";
		this.ui.pi=this.ui.showPI;
		if(typeof KT_Messages=="undefined") {
			if(KtmlDevelopment) {
				alert("Developer Error\r\n\r\n\t\tKT_Messages is undefined.\r\n\r\nMost probably ktml.js resource file is not found in includes/resources/.");
				KT_Messages= {};
			}
		}
		langAddResources(KtmlGlobalLanguage,KT_Messages);
		this.paint();
	}
};
ktml.prototype.loadCompatLayer=function() {
	var idx=this.counter;
	var src=window.KtmlRoot+'core/mozilla_ie_compat.js';
	KtmlIncludeJs(src,function() {
		ktml_delayed_loader(idx);
	});
	//changeglblSetting(idx);
};
function ktml_isElementVisible(idx) {
	var el=ktmls[idx].formElement.parentNode;
	var display="", visibility="";
	var isVisible=true;
	while(el) {
		display=utility.dom.getStyleProperty(el,"display");
		if(display=="none") {
			isVisible=false;
			break;
		}
		visibility=utility.dom.getStyleProperty(el,"visibility");
		if(visibility=="hidden") {
			isVisible=false;
			break;
		}
		el=el.parentNode;
		if(el) {
			if(el.nodeType==3) {
				el=el.parentNode;
			}
			else if(el.nodeName=="BODY") {
				break;
			}
		}
	}
	ktmls[idx].visible=isVisible;
	return isVisible;
};
function ktml_delayed_loader(idx) {
	if(typeof($NXT_FORM_SETTINGS)!="undefined"&&(typeof($style_executed)=="undefined"||typeof($style_executed)!="undefined"&&$style_executed==false)||!ktml_isElementVisible(idx)) {
		window.setTimeout(function() {
			ktml_delayed_loader(idx);
		}, 300);
		return;
	}
	ktml_mozilla_attach_properties(idx);
};
function ktml_mozilla_attach_properties(idx) {
	var _this=ktmls[idx];
	_this.ui={showToolbar:"manual",showPI:true,toolbar:false,pi:false};
	_this.ui.showToolbar=_this.config_var['show_toolbar'];
	_this.ui.showPI=!!_this.config_var['show_pi'];
	_this.ui.toolbar=_this.ui.showToolbar=="load";
	_this.ui.pi=_this.ui.showPI;
	langAddResources(KtmlGlobalLanguage,KT_Messages);
	_this.paint();
};
function KTML_formSubmittalHandler(e) {
	var o=utility.dom.setEventVars(e);
	if(ktml.submit_all(o.e)) {
		return true;
	}
	utility.dom.stopEvent(o.e);
	return false;
};
ktml.prototype.checkDocMode=function() {
	var skip_doctype_check=util_defaultValue($KTML4_GLOBALS['skip_doctype_check'],'false');
	if(skip_doctype_check=='false'&&document.compatMode=='BackCompat') {
		var quirksWarning=KT_Messages["quirks mode message"];
		alert(quirksWarning);
		is.valid=false;
		is.quirks_mode=true;
	}
};
function kt_dotnet_hook(eventTarget,args,callback) {
	var form=document.forms[0];
	fire_starter=form;
	function all_saved() {
		if(form) {
			var ktml_counters=util_defaultValue(form.getAttribute("ktml_counters"),'')+'';
			ktml_counters=ktml_counters.split(",");
			var to_save=ktml_counters.length;
			var saved=0;
			var idx=0;
			for(var i=0;i<ktml_counters.length;i++) {
				if(ktmls[idx].displayMode=="CODE") {
					alert(translate("submit disabled in source view"));
					Page_BlockSubmit=true;
					return false;
				}
			}
			for(var i=0;i<ktml_counters.length;i++) {
				idx=parseInt(ktml_counters[i],10);
				if(ktmls[idx].readyForSave) {
					saved++;
					continue;
				}
				if(!ktml_isElementVisible(idx)) {
					saved++;
					ktmls[idx].readyForSave=true;
					continue;
				}
				ktmls[idx].save(all_saved);
			}
			if(saved==to_save) {
				callback.call(null,args);
			}
		}
		else {
			callback.call(null,args);
			return true;
		}
	}
	all_saved();
};
ktml.prototype.setGlobals=function() {
	Array_push(window.ktmls,this);
	if(typeof($KTML4_GLOBALS)=="undefined") {
		$KTML4_GLOBALS= {};
	}
	this.counter=ktmls.length-1;
	this.displayMode='RICH';
	this.selectableNodes=new Array();
	this.dontLeaveMeFlag=false;
	this.config=[];
	if(typeof(getHtmlEditorText)=="undefined"&&typeof(window[this.name+'_config'])=="undefined"&&this.name.match(/_[0-9]*$/)) {
		this.id=window[this.name.replace(/_[0-9]*$/,'')+'_id'];
	}
	else {
		this.id=window[this.name+'_id'];
	}
	if(!window.ktmlGlobalsAreSet) {
		window.ktmlGlobalsAreSet=true;
		util_setGlobalLocationVars();
		window.focusedKTMLIndex=null;
		if(typeof(Page_BlockSubmit)=="undefined") {
			Page_BlockSubmit=false;
		}
		if(typeof(WebForm_DoPostBackWithOptions)=="function") {
			window.kt_WebForm_DoPostBackWithOption=util_function_copy(WebForm_DoPostBackWithOptions);
			WebForm_DoPostBackWithOptions=function(options) {
				kt_dotnet_hook(options.eventTarget,options,function(options) {
					kt_WebForm_DoPostBackWithOption(options);
				});
			}
		}
		else if(typeof(__doPostBack)=="function") {
			window.kt___doPostBack=util_function_copy(__doPostBack);
			__doPostBack=function() {
				kt_dotnet_hook(arguments[0],arguments,function() {
					kt___doPostBack(arguments[0][0],arguments[0][1]);
				});
			}
			GLOBAL_registerFormSubmitEventHandler('KTML_formSubmittalHandler',2);
		}
		else {
			GLOBAL_registerFormSubmitEventHandler('KTML_formSubmittalHandler',2);
		}
		utility.dom.attachEvent(is.ie?document.body:window,'onkeydown',utility.popup.escapeModal,0);
		window.KTStorage=new ObjectStorage("ktml");
		utility.dom.attachEvent2(window.document.body,'mousedown',utility.popup.removeModal);
		if(window.ktml_init_object['debugger_params'].length) {
			Logging.params.element=window.ktml_init_object['debugger_params'][1];
		}
		window.KtmlDirDepth=window.ktml_init_object['path'];
		window.KtmlRelativeImagePath=window.KtmlDirDepth+"core/img/";
		if(typeof(window.ktml_init_object['language'])!="undefined") {
			window.KtmlGlobalLanguage=window.ktml_init_object['language'];
		}
		else {
			window.KtmlGlobalLanguage='english';
		}
		var loca=window.location;
		if(KtmlDirDepth.indexOf('http')!=0){
			var str=loca.href;
			str=str.split("?")[0];
			var index;
			str=str.substring(0,str.lastIndexOf("/")+1);
			index=KtmlDirDepth.indexOf("./");
			if(index==0){
				window.KtmlRoot=str+KtmlDirDepth.substring(2);
			}
			else{
				index=KtmlDirDepth.indexOf("/");
				if(index==0){
					window.KtmlRoot=loca.protocol+'//'+loca.host+KtmlDirDepth;
				}
				else{
					window.KtmlRoot=str+KtmlDirDepth;
				}
			};
		}
		else{
			window.KtmlRoot=KtmlDirDepth;
		}
		if(loca.protocol=="https:"&&!(/^https:\/\/[^\/:]*:/i.test(KtmlRoot))){
			KtmlRoot=KtmlRoot.replace(/^https:\/\/([^\/]*)/i,"https://$1:443");
		}
		if (jsDlgLoader.length){
			window.KtmlExtension=window.ktml_init_object['server'];
			window.KtmlAbsoluteServicePath=jsDlgLoader +
				"?pageid="+jspageid+
				"&csModule=dhtmledit/ktml/includes/ktm/plugins/service/service";
		}
	}
	else{
		var frm=this.formElement.form;
		if(frm){
			if(typeof frm.onsubmit!='undefined'&&frm.onsubmit!=null){
				var form_handlers=frm.form_handlers;
				if(form_handlers){
					var attached=false;
					for(var j=0;j<form_handlers.length;j++){
						if(form_handlers[j][1]=='KTML_formSubmittalHandler'){
							attached=true;
							break;
						}
						if(!attached){
							form_handlers[form_handlers.length]=[2,'KTML_formSubmittalHandler'];
							sortFormHandlers(form_handlers);
						}
					}
				}
				else{
					var tmp=frm.onsubmit.toString();
					var str=tmp.substring(tmp.indexOf('{')+1,tmp.lastIndexOf('}'));
					frm.onsubmit=new Function('e','if (!KT_formSubmittalHandler(e)) return false; '+str);
					form_handlers=[];
					form_handlers[form_handlers.length]=[priority,function_name];
				}
				frm.form_handlers=form_handlers;
			}
			else{
				frm.onsubmit=new Function('e','return KT_formSubmittalHandler(e);');
				var form_handlers=[];
				form_handlers[form_handlers.length]=[2,'KTML_formSubmittalHandler'];
				frm.form_handlers=form_handlers;
			}
		}
	}
	this.config.UILanguage=KtmlGlobalLanguage;
};
function KtmlSafeMode(msg){
	if(confirm(msg+"\n\n"+KT_Messages["goto technote"])){
		window.open("http://www.interaktonline.com/Support/Knowledgebase/Technote/Details/144/124/KTML+only+loads+in+safe+mode.html");
	}
};
ktml.prototype.paint=function(){
  if(!is.valid){
    if(this.formElement.tagName!="TEXTAREA"){
      var txt=utility.dom.createElement("TEXTAREA",{});
      txt.style.width=this.width+"px";
      txt.style.height=this.height+"px";
      txt.id=this.formElement.id;
      txt.name=this.formElement.name;
      txt.value=this.formElement.value;
      txt=this.formElement.parentNode.insertBefore(txt,this.formElement);
      try{
        this.formElement.disabled=true;
        }
      catch(e){};
      try{
        this.formElement.removeAttribute("name");
        }
      catch(e){};
      try{
        this.formElement.parentNode.removeChild(this.formElement);
        }
      catch(e){};
      this.formElement=txt;
      }
    var warn=utility.dom.createElement("A",{});
    var msg=is.quirks_mode?KT_Messages["quirks mode message"]:KT_Messages["safe mode message"].replace(/%s/,"IE 6.0, Mozilla 1.4, Netscape 7.1");
    warn.href='javascript:/* KTML safe mode */';
    warn.innerHTML="KTML - safe mode<br>";
    warn=this.formElement.parentNode.insertBefore(warn,this.formElement);
    warn.onclick=function(){
      KtmlSafeMode(msg);
      };
    return;
    }

  var tlbCount=this.config_var['buttons'].length;
  var rowCount=0,row=-1;
  for(var i=0;i<tlbCount;i++){
    if(this.config_var['buttons'][i][2].length==0){
      continue;
      }
    row=this.config_var['buttons'][i][0];
    rowCount=Math.max(rowCount,row);
    }
  this.ui.full_size=this.config_var.show_toolbar=='load'&&($KTML4_GLOBALS['editor_inner_dimensions']+'')=='true';
  var toolbarHeight2=29*rowCount+(is.ie?2:4);
  var canvasHeight2=this.height-(this.ui.full_size?0:(toolbarHeight2-(is.ie?2:2)+(this.ui.pi?(27+76+9):0)));
  var toolbarHeight1=8;
  var canvasHeight1=this.height-(this.ui.full_size?0:((is.ie?+3:0)+10+11+0+7));
  if(this.ui.toolbar){
    var toolbarHeight=toolbarHeight2;
    var canvasHeight=canvasHeight2;
    }
  else{
    var toolbarHeight=toolbarHeight1;
    var canvasHeight=canvasHeight1;
    }
  this.tiHeight=this.ui.pi?22:0;
  this.piHeight=this.ui.pi?74:0;
  this.piHeightRec=this.piHeight-20;
  this.piWidthRec=this.width-4-9-32;
  this.iframeSRC=ktml_init_object.path+'core/img/s.gif';
  this.iframeSRC2=ktml_init_object.path+'core/htm/blank.html';
  this.defaults={};
  this.defaults.font_family=this.config_var['font_family']?this.config_var['font_family']:'';
  this.defaults.background_color=this.config_var['background_color']?this.config_var['background_color']:'#ffffff';
  this.defaults.font_size=this.config_var['font_size']?this.config_var['font_size']:'';
  if(this.config_var['classNames']!=''&&jsshowStyleMenu==1)
	  this.defaults.classNames=this.config_var['classNames']?this.config_var['classNames']:'';
  this.defaults.spellcheck_language=this.config_var['spellcheck_language']?this.config_var['spellcheck_language']:'';
  var _span=document.createElement('span');
  this.ui.expanded={toolbar:toolbarHeight2+(is.ie?0:-1),canvas:canvasHeight2+(is.ie?0:4),ti:22,pi:74};
  this.ui.collapsed={toolbar:(is.ie?8:6),canvas:(this.height-(is.ie?8:6)-7)};
  var FROM_WHERE=typeof(KTML_LOCATION_FROM)!="undefined"?KTML_LOCATION_FROM:'ktml4';
  var ktmlContent='\
<div align="left" class="F7F7F7" style="background-color: #F7F7F7 !important" ktml_counter="'+this.counter+'" id="'+this.name+'_div">\
  <table class="ktml ktml_bg" style="table:layout-fixed;" id="'+this.name+'table" width="'+(this.width-4)+'" '+(this.ui.full_size?'':'height="'+this.height+'"')+' cellpadding="0" cellspacing="0" border="1">\
   <tr id="'+this.name+'_toolbarContainer">\
    <td style="height: '+(toolbarHeight+(is.ie?+1:-0))+'px; line-height:1px;" id="'+this.name+'_toolbar">&nbsp;\
    </td>\
   </tr>\
   <tr>\
    <td id="'+this.name+'_htmlObjectContainer" valign="top" style="height: '+(canvasHeight+(is.ie?0:6))+'px;">\
     <iframe style="width: 100%; height: '+(canvasHeight+(is.ie?0:6))+'px; background-color:'+this.defaults.background_color+'; margin:0px;'+(is.ie?'margin-bottom:-3px;':'')+'" id="'+this.name+'_htmlObject" name="'+this.name+'_htmlObject" marginheight="5" marginwidth="5" frameBorder="0" src="'+this.iframeSRC+'"></iframe>\
     <iframe id="'+this.name+'_PropertyInspectorBuffer" name="'+this.name+'_PropertyInspectorBuffer" style="display: none;" src="'+this.iframeSRC+'"></iframe>\
     <textarea id="'+this.name+'_textObject" style="width: 100%; height: 100%; display:none; border:0;margin:-1px 0px;"></textarea>\
    </td>\
   </tr>\
   <tr style="display:'+((this.ui.pi&&this.ui.toolbar)?'':'none')+'">\
    <td style="height: '+this.tiHeight+'px;" id="'+this.name+'_ti" class="taginspector">\
     <div id="'+this.name+'_ti_div" style="width: '+(this.width-4)+'px;height: 25px; overflow: hidden; white-space: nowrap! important;"></div>\
    </td>\
   </tr>\
   <tr style="display:'+((this.ui.pi&&this.ui.toolbar)?'none':'none')+'" id="'+this.name+'_LoadingPI">\
    <td style="height: '+this.piHeight+'px;">Loading ...</td>\
   </tr>\
   <tr style="display:'+((this.ui.pi&&this.ui.toolbar)?'':'none')+';" id="'+this.name+'_PI" onmouseover="ktmls['+this.counter+'].preserveSelection(false);" onclick="introspection_showhelp2('+this.counter+', event)">\
    <td style="height: '+this.piHeight+'px;" id="'+this.name+'_props" class="propertyinspector">\
     <table width="100%" border="0" cellpadding="0" cellspacing="0" class="ktml_bg">\
      <tr>\
       <td width="100%">\
        <fieldset style="margin: 0px; padding: 0px; margin-left: 8px;"><legend class="ktml_legend">'+translate('Properties',this.config.UILanguage)+'</legend>\
         <table width="100%" border="0" cellpadding="0" cellspacing="0">\
          <tr>\
           <td width="100%">\
            <div style="width: '+(this.piWidthRec)+'px; height: '+(this.piHeightRec)+'px; overflow: hidden; z-index: 0;">\
             <div id="Properties_none_'+this.name+'" onselectstart = "return false"; class="property_body ktml_bg">\
              '+translate('Panel description',this.config.UILanguage)+'\
             </div>\
            </div>\
           </td>\
           <td class="ktml_bg" style="text-align: right; background-position: center '+(this.width-4-9-50)+'px !important" >\
           </td>\
          <tr>\
         </table>\
        </fieldset>\
       </td>\
       <td>\
        <div id="'+this.name+'_props_collapse" class="ktml_collapse ktml_collapse_closed" style="margin-top: 5px;"><div class="kt_spacer" style="width:7px !important; height: '+(this.piHeight-(is.ie?10:12))+'px !important"></div></div>\
       </td>\
      </tr>\
     </table>\
     <span id="dummy_prevent_ie_td_border_collapse" style="display:block; float:left; width:0px; height:0px; overflow: hidden">&nbsp;</span>\
    </td>\
   </tr>\
  </table>\
  <div id="'+this.name+'_paste_container" style="position:absolute; top:-2000px; left:-2000px;height:0px;width:0px;overflow:hidden;">clipboard_not_allowed</div>';
  if(is.mozilla){
    ktmlContent+='<iframe id="paste_iframe_'+this.name+'" name="paste_iframe_'+this.name+'" style="position:absolute; top:-2000px; left:-2000px;height:0px;width:0px;z-index:-1;" src="'+this.iframeSRC2+'"></iframe>';
    }
	ktmlContent+='<iframe id="xhtml_iframe_'+this.name+'" name="xhtml_iframe_'+this.name+'" style="display: none" src="'+this.iframeSRC+'"></iframe>';
	ktmlContent+='<iframe id="template_save_iframe_'+this.name+'" name="template_save_iframe_'+this.name+'" style="display: none" src="'+this.iframeSRC+'"></iframe>';
	ktmlContent+='</div>';
	this.formElement.parentNode.insertBefore(_span,this.formElement.nextSibling);
  _span.innerHTML='<table cellpadding="0" cellspacing="0"><tbody><tr><td>'+ktmlContent+'</td></tr></tbody></table>'
  if(is.mozilla){
    var tr=document.getElementById(this.name+'_htmlObject');
    tr.style.height=(canvasHeight+4)+'px';
    var td=document.getElementById(this.name+'_toolbar');
    td.style.height=(toolbarHeight-1)+'px';
    }
  this.div=document.getElementById(this.name+'_div');
  this.div.oncontextmenu=function(){
    return false;
    };
  this.textarea=document.getElementById(this.name+'_textObject');
  this.taginspector=document.getElementById(this.name+'_ti_div');
  this.iframe=document.getElementById(this.name+'_htmlObject');
  if(is.mozilla){
    var tlbM=this.config_var.show_toolbar;
    var piSh=this.config_var.show_pi;
    var ifrH=parseInt(this.iframe.style.height);
    var txtA=document.getElementById(this.name+'_textObject');
    var ifCn=document.getElementById(this.name+'_htmlObjectContainer');
    var tbCn=document.getElementById(this.name+'_toolbarContainer');
    if(tlbM=="load"&&!piSh){
      this.iframe.style.height=(ifrH-10)+"px";
      ifCn.style.height=(ifrH-10)+"px";
      }
    if(tlbM=="manual"||tlbM=="focus"){
      tbCn.style.height="1px";
      this.iframe.style.height=(ifrH+11)+"px";
      }
    }
  var pathToStyle=null;
  var embed_style='';
  try{
    pathToStyle=this.config_var['module_props']['css']['PathToStyle'];
    }
  catch(e){
    pathToStyle=null;
    }
  if(pathToStyle!=null){
    var cusCSS = pathToStyle.split(",");
    embed_style="";
    for (var i=0;i<cusCSS.length;i++){
         if(i>0){
            embed_style+="\n";
         }
        //alert(cusCSS[i]);
        embed_style+='<link id="styler'+[i]+'" href="'+cusCSS[i]+'" rel="stylesheet" type="text/css" media="all" />';
      }
    }
  var oNewDoc=this.iframe.contentWindow.document.open("text/html; charset="+this.charset,"replace");
  oNewDoc.write('<html><head>\n\
<meta http-equiv="Content-Type" content="text/html; charset='+this.charset+'">\n\
 '+embed_style+'\n\
<style>\n\
 zp, zaddress { border:1px solid black; }\n\
 #kt_hidden  {display:none !important;}\n\
 #kt_removable {display:none !important;}\n\
 #kt_new_para_before { display:none; }\n\
 #kt_new_para_after { display:none; }\n\
 form{border:1px dashed red; margin:0px;behavior: url('+KtmlDirDepth+'core/styles/behaviors/cancelsubmit.htc);}\n\
 label{border:1px dashed cyan;}</style></head><body><script>parent.resumeLoad1('+this.counter+')</script></body></html>\
 ');
  oNewDoc.close();
  };
function resumeLoad1(idx){
  var ktmlObj=ktmls[idx];
  var _tmp=document.getElementById(ktmlObj.name+'_PropertyInspectorBuffer');
  var oNewDoc=_tmp.contentWindow.document.open("text/html","replace");
  oNewDoc.write('<html><body onload="parent.resumeLoad2('+ktmlObj.counter+')"></body></html>');
  oNewDoc.close();
  };
function resumeLoad2(idx){
  var ktmlObj=ktmls[idx];
  ktmlObj.edit=ktmlObj.iframe.contentWindow.document;
  if(jsshowStyleMenu==1&&ktmlObj.defaults.classNames!=''){
	  ktmlObj.edit.body.className=ktmlObj.defaults.classNames;
  }else{
	  ktmlObj.edit.body.style.fontFamily=ktmlObj.defaults.font_family;
	  ktmlObj.edit.body.style.fontSize=ktmlObj.defaults.font_size;
	  ktmlObj.edit.body.style.backgroundColor=ktmlObj.defaults.background_color;					
  }
  ktmlObj.cw=ktmlObj.iframe.contentWindow;
  ktmlObj.cw.scroll(0,0);
  blank_location={};
  if(/includes\/ktm\/core\/htm\/full.html/i.test(window.location.pathname)){
    var kloca=opener.location;
    }
  else{
    var kloca=window.location;
    }
  var kcolons=kloca.port?":":"";
  blank_location.pathname=(kloca.pathname+"").replace(/[^\/]*$/,'');
  blank_location.server=kloca.protocol+"//"+kloca.hostname+kcolons+kloca.port;
  blank_location.full=blank_location.server+blank_location.pathname;
  blank_location.ktml_root=blank_location.pathname.replace(/includes\/ktm\/core\/htm\//i,'');
  blank_location.frame_src=unescape(window.parent.document.getElementById(jsFrameName).src);
  var up=0;
  var m=ktml_init_object.path.match(/(\.\.\/)/);
  if(m){
    up=m.length;
    }
  if(is.mozilla)
    callmakeCanvasEditable(ktmlObj);
  else{
    window.setTimeout(function(){
        ktmlObj.makeCanvasEditable();
      },1);
    }
  };
function callmakeCanvasEditable(obj){
  glblArray=getglblRTElementsRef();
  if(glblArray!='undefined'){
    var thisInd=getThisRTERef(obj.name,glblArray);
    if(thisInd>0&&glblArray.length>(thisInd)){
      var otherKTMLLoaded=getRTEStatus(glblArray,thisInd-1);
      if(otherKTMLLoaded=='false') {
        pause(500);
        }
      }
    }
  obj.makeCanvasEditable();
  };
ktml.prototype.fixMozEditor=function(){
  var theHeadNode=this.edit.getElementsByTagName("head")[0];
  var theStyleNode=this.edit.createElement('style');
  theStyleNode.type="text/css";
  var theTextNode=this.edit.createTextNode('a:visited{color:blue ! important}');
  theStyleNode.appendChild(theTextNode);
  theHeadNode.appendChild(theStyleNode);
  };
ktml.prototype.makeCanvasEditable=function(){
	var src=String_htmldecode(this.formElement.value);
	src=src.replace(/<param\s/gi,'<zparam ');
	src=src.replace(/<!--SCRIPT_TRANSLATOR<script/gi,'<script');
	src=src.replace(/<\/script>SCRIPT_TRANSLATOR-->/gi,'</script>');  
	//src=src.replace(/<script/gi,'<!--SCRIPT_TRANSLATOR<script');
	//src=src.replace(/<\/script>/gi,'</script>SCRIPT_TRANSLATOR-->');
	src=String_trim(src);
  if(src==''||src.match(/^<br\s*\/?>$/i)){
    src="<p>&nbsp;</p>";
    }
  src=src.replace(/\sonclick=/ig,' kt_onclick=');
	  this.edit.body.innerHTML=src;
	  this.flags.clipboard_allowed=true;
	  if(is.mozilla){
     try{
        this.edit.designMode='on';
        }
      catch(err){return;};
         this.paste_container=document.getElementById('paste_iframe_'+this.name).contentWindow.document;
         this.edit.execCommand("useCSS",false,true);
         this.fixMozEditor();
         if(window.KT_attachProperties){
            this.propertiesAttached=true;
            window.KT_attachProperties(this.iframe);
            }
         }
	  else{
	    this.edit.execCommand("LiveResize",true,true);
	    }
	  utility.dom.attachEvent2(this.edit,'mousedown',utility.popup.removeModal);
	  this.paintToolbar();
  };
ktml.prototype.addCustomButton=function(btn,button_after_name,group_index){
  this.customButtons.push([btn,button_after_name,group_index]);
  };
var clickedSubmitButton=null;
var skipNextFocusEvent=false;
ktml.prototype.paintToolbar=function(){
  if(this.toolbarPainted){
    return;
    }
	this.toolbarPainted=true;
	var td=document.getElementById(this.name+'_toolbar');
	td.style.display='none';
	td.innerHTML='';
	this.setToolbarButtons(this.config_var['buttons']);
  var toolbarSrc='<table cellpadding="0" cellspacing="0" border="0" width="100%" class="toolbar">\
   <tr>\
    <td class="ktml_collapse" style="display: none"><img src="'+KtmlRelativeImagePath+'s.gif" width="8" /></td>\
    <td valign="bottom" nowrap="nowrap" style="display:'+(this.ui.toolbar?'':'none')+'">\
     <span id="Property_'+this.name+'"></span>\
     <span id="Property_first_'+this.name+'" style="display: none"></span>\
    </td>\
   </tr>\
  </table>\
  <div id="ktml_'+this.name+'_ccdiv" class="cc_container"></div>\
  <div id="ktml_'+this.name+'_cpdiv" class="cp_container">z</div>';
  td.innerHTML=toolbarSrc;
  var collapseTD=td.getElementsByTagName('td')[0];
  var loca=window.location;str=loca.protocol+"//"+loca.host+loca.pathname;
  str=str.replace(/[^\/]*$/i,'');
  this.serializer=new Serializer(this.name,str);
  this.serializer.load();
  this.toolbar=new Toolbar(document.getElementById("Property_"+this.name),document.getElementById("Property_first_"+this.name),this);
  this.toolbar.initializeUI();
  if(this.ui.toolbar&&this.ui.showToolbar=="load"){
    this.ui.showToolbar="none";
    this.toolbar.addBuiltinButtons(this.config.buttons);
    this.toolbar.addCustomButtons(this.customButtons);
    this.toolbar.lateLoaded=true;
    }
  utility.dom.setUnselectable(td);
  collapseTD.title=translate("Show/Hide Toolbar",this.config.UILanguage);
  var ktmlObj=this;
  if(this.ui.showToolbar=="focus") {
  	this.ui.originalShowToolbar="focus";
    }
  if(typeof(nxt_form_attach)!="function"&&this.formElement.form&&!this.formElement.form.getAttribute("kt_submit_all_events_attached")) {
  	var firstSubmitFormButton=null;
    Array_each(this.formElement.form.elements,function(button,i) {
      if(getKTMLIndexFromElement(button)!=-1) {
        return;
        }
      if(!firstSubmitFormButton&&button.type&&button.type=="submit") {
      	firstSubmitFormButton=button;
        }
      utility.dom.attachEvent(button,'focus',function(e) {
      	var o=utility.dom.setEventVars(e);
      	var el=o.targ;
        if(skipNextFocusEvent) {
          if(el.type&&el.type=="submit") {
          	clickedSubmitButton=el;
            }
          skipNextFocusEvent=false;
          return;
          }
        if(el.type&&el.type=="submit") {
        	clickedSubmitButton=el;
          }
        else {
        	clickedSubmitButton=firstSubmitFormButton;
          }
        });
      });
    this.formElement.form.setAttribute("kt_submit_all_events_attached",true);
    }
  utility.dom.attachEvent2(window.document.body,'mousedown',function(e) {
  	var o=utility.dom.setEventVars(e);
  	var el=o.targ;
    if(typeof(nxt_form_attach)!="function") {
      if(el.type&&el.type=="submit") {
      	skipNextFocusEvent=true;
      	clickedSubmitButton=o.targ;
        }
      else {
      	skipNextFocusEvent=false;
      	clickedSubmitButton=null;
        }
      }
    if(ktmlObj.ui.showToolbar=="focus"||ktmlObj.ui.showToolbar=="none") {
      if(is.ie&&typeof(el.getAttribute)=="undefined") {
      	el=document.elementFromPoint(event.screenX-window.screenLeft,event.screenY-window.screenTop);
        }
      var clicked_ktml_index=getKTMLIndexFromElement(el);
      if(focusedKTMLIndex!=null&&(clicked_ktml_index!=focusedKTMLIndex||clicked_ktml_index==-1)) {
        ktmls[focusedKTMLIndex].setToolbarVisibility(false);
        focusedKTMLIndex=null;
        }
      }
    });
  utility.dom.attachEvent(collapseTD,'onclick',function() {
  	ktmlObj.setToolbarVisibility(!ktmlObj.ui.toolbar);
  	return false;
    });
  utility.dom.attachEvent(td,'onmouseover',function() {
  	ktmlObj.preserveSelection(true);
    });
  utility.dom.attachEvent(td,'onmouseout',function() {
  	ktmlObj.preserveSelection(false);
    });
  td.style.display='';
  this.loadEditor();
  };
function getKTMLIndexFromElement(el) {
	var clicked_ktml_index=-1;
	var kc=null;
  while(true) {
  if(!el||el.nodeName=="BODY") {
  	break;
    }
  try {
  	kc=el.getAttribute('ktml_counter')
    }
  catch(err) {}
  if(kc!=null) {
  	clicked_ktml_index=parseInt(kc,10);
  	break;
    }
	el=el.parentNode;
  if(!el) {
  	break;
    }
  if(el.nodeType!=1) {
  	el=el.parentNode;
    }
  }
	return clicked_ktml_index;
  };
ktml.prototype.loadEditor=function() {
	var ktmlObj=this;
	ktmlObj.editorJsLoaded=true;
	var editorSrc=ktml_init_object.path+'core/editor.js';
	editorSrc=editorSrc.replace(/\.js$/,(is.ie?'_ie':'_mozilla')+'.js');
  KtmlIncludeJs(editorSrc,function() {
  	ktmlObj.editorJsLoaded=true;
  	ktmlObj.editorSpecificJsLoaded=true;
  	ktmlObj.editorLoaded();
    });
  if (is.mozilla)
    changeglblSetting(ktmlObj);
  };
ktml.prototype.myCustomResize=function(width,height){
  this.config_var.width=width;
  this.config_var.height=height;
  var tlbCount=this.config_var['buttons'].length;
  var rowCount=0,row=-1;
  for(var i=0;i<tlbCount;i++){
    if(this.config_var['buttons'][i][2].length==0){
      continue;
      }
    row=this.config_var['buttons'][i][0];
    rowCount=Math.max(rowCount,row);
    }
  this.ui.full_size=this.config_var.show_toolbar=='load'&&($KTML4_GLOBALS['editor_inner_dimensions']+'')=='true';

  var toolbarHeight2=29*rowCount+(is.ie?2:4);
  var canvasHeight2=this.config_var.height-(this.ui.full_size?0:(toolbarHeight2-(is.ie?2:2)+(this.ui.pi?(27+76+9):0)));
  var toolbarHeight1=8;
  var canvasHeight1=this.config_var.height-(this.ui.full_size?0:((is.ie?+3:0)+10+11+0+7));
  if(this.ui.toolbar){
    var toolbarHeight=toolbarHeight2;
    var canvasHeight=canvasHeight2;
    }
  else{
    var toolbarHeight=toolbarHeight1;
    var canvasHeight=canvasHeight1;
    }
	 
	 
  this.tiHeight=this.ui.pi?22:0;
  this.piHeight=this.ui.pi?74:0;
  this.piHeightRec=this.ui.pi?this.piHeight-20:0;
  this.piWidthRec=this.config_var.width-45;
  thisIframe=document.getElementById(this.name+'_htmlObject');
  thisIframe.parentNode.style.width=(this.config_var.width)+'px';
  thisIframe.parentNode.style.height=canvasHeight+(is.ie?0:6)+'px';
  var tableElement=document.getElementById(this.name+'table');
  tableElement.style.height=this.config_var.height+'px';
  thisIframe.style.width=(this.config_var.width)+'px';
  thisIframe.style.height=canvasHeight+(is.ie?0:6)+'px';
  toolbarContainer=document.getElementById(this.name+'_toolbarContainer');
  toolbarContainer.style.height=toolbarHeight+'px';
  toolbarContainer.style.width=(this.config_var.width-45)+'px';
  toolbarCell=document.getElementById(this.name+'_toolbar');
  toolbarCell.style.width=(this.config_var.width-45)+'px';
  try{
    document.getElementById(this.name+'_ti').style.width=(this.config_var.width-45)+'px';
    }
  catch(e){}
  if (this.displayMode=='CODE'){
	 this.swapToMode='RICH';
	 this.logic_setDisplayMode();
	 this.swapToMode='CODE';
	 this.disablePushButtons(true);
	 this.logic_setDisplayMode();
  } 
  this.paintToolbar();
  this.toolbar.owner.width=this.config_var.width-45;
  this.toolbar.Resize();
  this.displayChanged();
  }
ktml.prototype.Resize=function() {
	var dif=is.ie?5:2;
	var width=(this.iframe.parentNode.offsetWidth-dif);
  if(width<0) {
  	width=0;
    }
	var height=(this.iframe.parentNode.offsetHeight-2*dif);
  if(height<0) {
  	height=0;
    }
	this.textarea.style.width=width+'px';
	this.textarea.style.height=height+'px';
	this.textarea.style.border='0px solid #ccc';
  };
function ktml_viewsource_hook() {
	this.textarea.value=HandleOutgoingText(this, this.textarea.value);
  };
ktml.prototype.editorLoaded=function() {
  if(this.editorJsLoaded&&this.editorSpecificJsLoaded) {
    if(typeof(this.registerEvents)=="undefined") {
    	return;
      }
  	this.registerEvents(this);
  	this.undo=new UndoManager(this);
  	this.viewInvisibles=true;
  	this.undo.init();
  	this.utils_setInvisibles(false);
  	this.hooks['onsetdisplaymode'].push(ktml_viewsource_hook);
  	this.util_checkClipboardAccess();
  	utility.dom.setUnselectable(this.taginspector);
  	this.loadModules();
    }
  };
ktml.prototype.util_checkClipboardAccess=function() {
  if(!is.mozilla) {
  	return;
    }
  try {
  	this.paste_container.designMode='on';
    }
  catch(err) {
  	return;
    }
  try {
  	this.paste_container.execCommand(KtmlGetCommand('paste'), false, null);
    }
  catch(err) {
    if(err.result==2152924147) {
    	this.flags.clipboard_allowed=false;
      }
    }
  };
ktml.prototype.loadModules=function() {
	this.shouldLoadModules=true;
	window.KtmlWindowLoaded=true;
	KtmlLoadModules();
	var _this=this;
  window.setTimeout(function() {
  	_this.Resize()
    }, 1);
  if(typeof window.onLoadKtml=='function') {
  	window.onLoadKtml(this);
    }
  };
ktml.prototype.setToolbarButtons=function(buttonsVariable) {
  if(typeof(buttonsVariable)=="string") {
  	this.config.buttons=buttonsVariable.split(",");
    }
  else if(typeof(buttonsVariable)=="object") {
  	this.config.buttons=buttonsVariable;
    }
  };
ktml.prototype.hasModule=function(moduleName) {
	return(typeof this.config_var['module_props'][moduleName]!='undefined')
  };
ktml.prototype.preserveSelection=function(flag) {
	this.dontLeaveMeFlag=flag;
  };
ktml.prototype.dispose=function() {
	this.piloader=null;
	this.taginspector=null;
	this.textarea=null;
  if(typeof this.toolbar!='undefined') {
  	this.toolbar.dispose();
  	this.toolbar=null;
    }
  if(typeof this.cpalette!='undefined') {
  	this.cpalette.dispose();
    }
  if(typeof this.glyphhandler!='undefined') {
  	this.glyphhandler.dispose();
    }
  if(typeof this.cleantypespicker!='undefined') {
  	this.cleantypespicker.dispose();
    }
  if(typeof this.contextMenu!='undefined') {
  	KTStorage.get(this.contextMenu).dispose();
    }
  if(typeof this.charpalette!='undefined') {
  	this.charpalette.dispose();
    }
  if(typeof this.inserttablepicker!='undefined') {
  	this.inserttablepicker.dispose();
    }
  for(dr in this.htmldropdowns) {
  	this.htmldropdowns[dr]=null;
    }
	this.htmldropdowns=null;
	this.formElement=null;
	this.div=null;
	this.iframe=null;
	this.edit=null;
  };
function ktmls_unload() {
  if(!is.valid) {
  	return;
    }
  if(is.mozilla) {
  	var ifr=document.getElementsByTagName('iframe');
  	for(var i=0;i<ifr.length;i++) {
    	var oNewDoc=ifr[i].contentWindow.document.open("text/html","replace");
    	oNewDoc.write("");
    	oNewDoc.close();
      }
    }
  if(is.ie) {
  	for(var i=0;i<ktmls.length;i++) {
    	ktmls[i].dispose();
      }
  	CollectGarbage();
    }
  };
if(typeof ktmls_unload_attached=='undefined') {
	ktmls_unload_attached=true;
	utility.dom.attachEvent2(window,'unload',ktmls_unload);
  }
ktml.prototype.collapse=function(how){
  if(this.introspector){
    this.introspector.hidePI();
    }
  var mode=this.displayMode;
  var show={tb:this.ui.toolbar,pi:this.ui.toolbar&&this.ui.pi&&how,ti:(this.ui.toolbar&&this.ui.pi)};
  var avail_height=this.height;
  var brd=is.ie?2:1;
  var borders=brd*3;
  borders+=show.pi?brd*2:0;
  borders+=show.ti?brd*2:0;
  avail_height-=borders;
  avail_height-=show.tb?this.ui.expanded.toolbar:8;
  avail_height-=show.pi?74:0;
  avail_height-=show.ti?22:0;
  var pi_el=null;
  if(this.loadingPI){
    pi_el=document.getElementById(this.name+'_LoadingPI');
    }
  else{
    pi_el=document.getElementById(this.name+'_PI');
    }
  var canvas=this.iframe.parentNode;
  /*
  if(!this.ui.full_size){
    this.iframe.style.height=Math.max(24,avail_height-3-(is.ie?0:3))+'px';
    this.textarea.style.height=Math.max(24,avail_height-6)+'px';
    canvas.style.height=Math.max(24,avail_height-4-(is.ie?0:3))+'px';
    }
  */
  pi_el.style.display=show.pi?'':'none';
  var tb=document.getElementById(this.name+'_toolbar');
  var tbtd=utility.dom.getParentByTagName(this.toolbar.base,"td");
  if(show.tb){
    tb.style.height=this.ui.expanded.toolbar+'px';
    tbtd.style.display='';
    }
   else{
    tbtd.style.display='none';
    tb.style.height='8px';
    }
  this.taginspector.parentNode.parentNode.style.display=show.ti?'':'none';
  /*
  if(!this.ui.full_size){
    if(is.mozilla){
      this.iframe.style.height=Math.max(24,avail_height-(how?(mode=="CODE"?4:4):3))+'px';
      this.textarea.style.height=Math.max(24,avail_height-(how?(mode=="CODE"?0:4):(mode=="CODE"?0:3))-3)+'px';
      canvas.style.height=Math.max(24,avail_height-(how?(mode=="CODE"?4:4):(mode=="CODE"?3:3)))+'px';
      }
    }
 */
  }
ktml.prototype.setToolbarVisibility=function(flag) {
	this.ui.toolbar=flag;
  if(!this.toolbar.lateLoaded) {
  	this.toolbar.addBuiltinButtons(this.config.buttons);
  	this.toolbar.addCustomButtons(this.customButtons);
  	this.toolbar.lateLoaded=true;
    for(var btn in this.toolbar.deferredcommands) {
    	var idx=this.toolbar.indexOfName(btn);
      if(idx>=0) {
      	this.toolbar.buttonobjects[idx].command=this.toolbar.deferredcommands[btn];
        }
      }
  	for(f_idx=0;f_idx<this.toolbar.deferredfunctors.length;f_idx++) {
    	this.toolbar.deferredfunctors[f_idx]();
      }
    }
	this.collapse(flag);
  if(is.mozilla) {
  	this.cw.focus();
    }
	this.Resize();
  if(this.introspector) {
  	this.introspector.update();
    }
	return;
  };
ktml.prototype.logic_tableNavigation=function(currentTD,direction) {
	var _next=direction?utility.dom.getNextSiblingByTagName(currentTD,"td",true): utility.dom.getPreviousSiblingByTagName(currentTD,"td",true);
  if(_next===null) {
  	_next=currentTD.parentNode;
  	_next=direction?utility.dom.getNextSiblingByTagName(_next,"tr",true): utility.dom.getPreviousSiblingByTagName(_next,"tr",true);
    if(_next===null) {
    	return null;
      }
  	_next=direction?utility.dom.getNextSiblingByTagName(_next.firstChild,"td"):utility.dom.getPreviousSiblingByTagName(_next.lastChild,"td");
    }
	return _next;
  };
function dd(s,clear) {
	clear=clear||false;
  if(clear) {
  	document.getElementById("dbg").value="";
    }
	document.getElementById("dbg").value+=utility.debug.dumpone(s)+"";
	document.getElementById("dbg").scrollTop=100000;
  };
ktml.prototype.logic_doFormat=function(what,second_pass){
	var toundo=true;
	switch(what){
		case'cut':
			try{
				this.edit.execCommand(KtmlGetCommand('cut'),false,null);
			}
			catch(e){
				if(confirm('Your browser is configured to not allow direct access to the clipboard via any of the Rich Text Editor buttons.  You can try to use Ctrl+X to cut content instead.\n\nPress OK to open a technical note with possible explanations on how to allow access to you clipboard via the Rich Text Editor buttons. Press Cancel to return to the editor.')){
					var wnd=window.open('http://mozilla.org/editor/midasdemo/securityprefs.html','securityprefs','');
					wnd.focus();
				}
			}
			break;
		case'copy':
			try{
				this.edit.execCommand(KtmlGetCommand('copy'),false,null);
			}
			catch(e){
				if(confirm('Your browser is configured to not allow direct access to the clipboard via any of the Rich Text Editor buttons.  You can try to use Ctrl+C to copy content instead.\n\nPress OK to open a technical note with possible explanations on how to allow access to you clipboard via the Rich Text Editor buttons. Press Cancel to return to the editor.')){
					var wnd=window.open('http://mozilla.org/editor/midasdemo/securityprefs.html','securityprefs','');
					wnd.focus();
				}
			}
			break;
		case'paste':
			utility.window.blockInterface();
			var success=this.pasteClipboard();
			if(is.mozilla&&!success){
				var errmsg = 'Your browser is configured to not allow direct access to the clipboard via any of the Rich Text Editor buttons.  You can try to use Ctrl+V to paste content instead.\n\nPress OK to open a technical note with possible explanations on how to allow access to you clipboard via the Rich Text Editor buttons. Press Cancel to return to the editor.'
				if(confirm(errmsg)){
					var wnd=window.open('http://mozilla.org/editor/midasdemo/securityprefs.html','securityprefs','');
					wnd.focus();
				}
			}
			this.runHooks('onpaste');
			utility.window.unblockInterface();
			break;
		case'paste_word':
			utility.window.blockInterface();
			var success=this.pasteClipboard('word');
			if(is.mozilla&&!success){
				if(confirm('Unprivileged scripts cannot invoke the Cut, Copy, and Paste commands!\nPress OK to open a technical note window with possible explanations to your problem. Press Cancel to return to the editor.')){
					var wnd=window.open('http://mozilla.org/editor/midasdemo/securityprefs.html','securityprefs','');
					wnd.focus();
				}
			}
			this.runHooks('onpaste_word');
			utility.window.unblockInterface();
			break;
		case'toggle_visible':
			this.logic_toggleInvisibles();
			break;
		case'toggle_editmode':
			if(this.displayMode=='CODE'){
				this.disablePushButtons(false);	
				this.swapToMode='RICH';
			}
			else{
				this.disablePushButtons(true);	
				this.swapToMode='CODE';
			}
			this.logic_setDisplayMode(true);
			return;
		case'fonttype':
			this.cw.focus();
			if(!arguments[1]){
				var selNode=this.logic_getSelectedNode();
				var fnt=utility.dom.getParentByTagName(selNode,"FONT");
				if(!fnt){
					break;
				}
				fnt.removeAttribute("face");
				var m=fnt.outerHTML.match(/<font([^>]*)>/i);
				var str='';
				if(m.length>1){
					str=m[1].replace(/\s/gi,'');
				}
				if(!str){
					this.util_stripTag(fnt);
				}
			}
			else{
				this.ui_logicDoWordFormat(KtmlGetCommand('fontname'),arguments[1]);
			}
			break;
		case'SelectAll':
			this.edit.execCommand(KtmlGetCommand('selectall'),false,null);
			break;
		case'fontsize':
			this.cw.focus();
			var tmp=arguments[1];
			if(isNaN(parseInt(tmp))){
				var selNode=this.logic_getSelectedNode();
				var fnt=utility.dom.getParentByTagName(selNode,"FONT");
				if(!fnt){
					break;
				}
				fnt.removeAttribute("size");
				var m=fnt.outerHTML.match(/<font([^>]*)>/i);
				var str='';
				if(m.length>1){
					str=m[1].replace(/\s/gi,'');
				}
				if(!str){
					this.util_stripTag(fnt);
				}
			}
			else{
				var ret=this.ui_logicDoWordFormat(KtmlGetCommand('fontsize'),parseInt(tmp));
				if(!ret){
					return;
				}
			}
			break;
		case'bold':
			this.ui_logicDoWordFormat(KtmlGetCommand('bold'));
			break;
		case'italic':
			this.ui_logicDoWordFormat(KtmlGetCommand('italic'));
			break;
		case'underline':
			this.ui_logicDoWordFormat(KtmlGetCommand('underline'));
			break;
		case'superscript':
			this.ui_logicDoWordFormat(KtmlGetCommand('superscript'));
			break;
		case'subscript':
			this.ui_logicDoWordFormat(KtmlGetCommand('subscript'));
			break;
		case'JustifyLeft':
			this.edit.execCommand(KtmlGetCommand('justifyleft'),false,null);
			break;
		case'JustifyCenter':
			this.edit.execCommand(KtmlGetCommand('justifycenter'),false,null);
			break;
		case'JustifyRight':
			this.edit.execCommand(KtmlGetCommand('justifyright'),false,null);
			break;
		case'JustifyFull':
			this.edit.execCommand(KtmlGetCommand('justifyfull'),false,null);
			break;
		case'InsertOrderedList':
			this.edit.execCommand(KtmlGetCommand('orderlist'),false,null);
			this.logic_cleanList();
			break;
		case'InsertUnorderedList':
			this.edit.execCommand(KtmlGetCommand('unorderlist'),false,null);
			this.logic_cleanList();
			break;
		case'indent':
			this.edit.execCommand(KtmlGetCommand('indent'),false,null);
			break;
		case'outdent':
			this.edit.execCommand(KtmlGetCommand('outdent'),false,null);
			break;
		case'cshr':
			this.logic_hrOnClick();
			break;
		case'FindText':
			if(is.mozilla){}
			break;
		case'CleanHTML':
			this.util_cleanHTMLContent();
			return;
		case'RemoveLink':
			if(is.mozilla&&this.cw.getSelection().isCollapsed){
				this.logic_removeTag();
			}
			else{
				this.logic_removeTag();
				this.edit.execCommand("Unlink",false,false);
			}
			break;
		case'insert_anchor':
			var sAnchorName,rng,htmlText,initValue;
			rng=this.edit.selection.createRange();
			var originalSelection = rng.htmlText;
			if(is.ie&&(this.edit.selection.type=="Control")){
				var el=rng.item(0);
				htmlText=el.outerHTML;
				this.edit.selection.empty();
				var tr=this.edit.body.createTextRange();
				tr.moveToElementText(el)
				tr.moveStart("character",1);
				tr.select();
			}
			else{
				htmlText=rng.htmlText;
				rng.collapse(false);
				rng.select();
			}
			initValue=utility.string.getInnerText(htmlText);
			initValue=String_trim(initValue);
			initValue=initValue.replace(/\s+/g,' ');
			initValue=initValue.replace(/[^\w\s;&]+/g,'_');
			sAnchorName=prompt(translate("Please enter anchor name:",this.config.UILanguage),initValue);
			if(sAnchorName&&sAnchorName!=""){
				// Begin: FIX (Issue 3183) -- Part 1 of 1.
				// Old code:		 
				//var strAnchorToBeInserted = "<a name='"+sAnchorName+"'>"+originalSelection;
				// New code:
				var strAnchorToBeInserted = "<a name='" + sAnchorName + "'>";
				this.insertHTML(strAnchorToBeInserted);
				// End: FIX (Issue 3183) -- Part 1 of 1.
				toundo=false;
			};
			break;
		case'cscharacter':
			this.logic_openChrPalette();
			return;
		case'BackColor':
			this.logic_openPalette(this.toolbar.bgcolor,'b');
			return;
		case"ForeColor":
			this.logic_openPalette(this.toolbar.fgcolor,'f');
			break;
		case'undo':
			if(this.undo){
				this.undo.undo();
				toundo=false;
			}
			else{
				this.logic_recCommand(KtmlGetCommand('undo'));
			}
			break;
		case'redo':
			if(this.undo){
				this.undo.redo();
				toundo=false;
			}
			else{
				this.logic_recCommand(KtmlGetCommand('redo'));
			}
			break;
		case'InsertHeading':
			this.cw.focus();
			this.logic_InsertHeading(arguments[1]);
			break;
		case'toggle_properties_inspector':
			this.logic_togglePIDisplay();
			break;	
		case'csforeground':
			this.logic_openCSColorPalette('f');
			break;	
		case'csbackground':
			this.logic_openCSColorPalette('b');
			break;	
		case'csimage':
			this.logic_imageOnClick();
			break;	
		case'cslink':
			this.logic_linkOnClick();
			break;				
		case'cssnippet':
			this.logic_snippetOnClick();
			break;	
		case'csfield':
			this.logic_fieldOnClick();
			break;								
	}
	if(toundo){
		this.invalidate();
	}
	if(this.undo&&toundo){
		this.undo.addEdit();
	}
	this.cw.focus();
	this.ui_setButtonState();
};
ktml.prototype.disablePushButtons=function(state){
	var clsList=("idPrevButton,idNextButton,idFinishButton").split(',');
	Array_each(clsList,function(elem,i){
		if(window.parent.document.getElementById(elem)){
			window.parent.document.getElementById(elem).disabled=state;
		}	
	});
};  
ktml.prototype.pasteClipboard=function(clean_type) {
	var ret={clipboard_allowed:false,has_word:false,html_content:'',cleaned_content:''};
	ret=testClipboardForWordHTML(this);
	if(!ret.clipboard_allowed) 
		return false;
	pasteText=ret.html_content;
	var pasteTextNoBR=pasteText.replace(/<br[ \/]*>/gi,"");
	var pasteTextHasTags=pasteTextNoBR.match(/<[a-z].*>/i);
	var pastedPlain=false;
	if (pasteTextHasTags==null) 
		pastedPlain=true;
	var taglist="acronym,b,bdo,big,blink,dfn,em,font,i,ins,kbd,nobr,q,s,samp,small,strike,strong,sub,sup,it,u,var";
	hasformattags=DoesContainTag(ret.pastedText,taglist);
	hasScript=checkForScript();
	if(useCSPasteOptions!=1){
		// we should not show the commonspot paste options dialog.
		doDefaultClean(ret);
	}else{
		if (pastePlain==0||(pastePlain==1&&pastedPlain==false)) {
			var strURL=jsDlgLoader+ '?csModule=dhtmledit/paste-dlg' +
											'&nonstd=' + escape(ret.nonstandard_fonts) +
											'&hasformattags=' + hasformattags +
											'&hasScript=' + hasScript +
											'&hasWord=' + ret.has_word +
											'&formatted=' + enablePasteFormatted +
											'&unformatted=' + enablePasteUnformatted +
											'&code=' + enablePasteCode +
											'&remclass=' + pasteRemClass +
											'&remWord=' + pasteRemWord +
											'&remstyle=' + pasteRemStyle +
											'&remfonts=' + pasteRemFonts +
											'&defPasteOption=' + defPasteOption +
											'&counter=' + this.counter;
			if (curWin && curWin.closed){
				curWin = null;
			}
			if(curWin){
				try{
					curWin.focus();
				}
				catch(err){}	
			}
			else {
				curWin = newWindow(this.name+"Paste",strURL);
			}
		} 
		else {
         //ktname,removeScript,removeClass,removeWord,removeStyle,removeFont,replacementfont,pastePlain,pasteCode,removeFormat);
			pasteCallback(this.counter,0,0,0,0,0,null,1,0,0);
		}	
	}	
	if(is.ie){
		try{
			var cur_range=this.edit.selection.createRange();
			if(cur_range){
				this.edit.selection.clear();
				this.undo.addEdit();
			}	
		}
		catch(err){}	
	}
	return true;
}
function doDefaultClean(ret){
	var remScript = 0;	
	var remFormat = 0;
	var replaceFont = null;
	var pastePlain = 0;
	var pasteCode = 0;
	//0: never remove
	//3: leave by default
	var remClass = (pasteRemClass==0||pasteRemClass==3)?0:1;
	var remStyle = (pasteRemStyle==0||pasteRemStyle==3)?0:1;
	var remWord = (pasteRemWord==0||pasteRemWord==3)?0:1;
	var remFonts = (pasteRemFonts==0||pasteRemFonts==3)?0:1;
	switch(defPasteOption){
		case"paste_enable_formatted":
			break;
		case"paste_enable_unformatted":
			remFormat = 1;
			break;
		case"paste_enable_code":
			pasteCode = 1;		
			break;
		case"pastePlain":
			pastePlain = 1;
			break;
	}
	pasteCallback(0,remScript,remClass,remWord,remStyle,remFonts,replaceFont,pastePlain,pasteCode,remFormat);
}
function pasteCallback(counter,removeScript,removeClass,removeWord,removeStyle,removeFont,replacementFont,pastePlain,pasteCode,removeFormat) {
//{none:null,word:util_cleanHTMLContent,css:util_cleanCSSStyles,classes:util_cleanCSSClasses,script:util_cleanScriptTags,fonts:util_cleanFontTags,formatting:util_cleanFormattingTags,all:util_cleanAllTags};
   //Ktml_object=Ktml_object;
	var retObj={clipboard_allowed:false,has_word:false,html_content:'',cleaned_content:''};
	retObj=testClipboardForWordHTML(Ktml_object);
	var cur_range=Ktml_object.edit.selection.createRange();
	var clean_function=null;
	var clean_called=0;
	var new_html = retObj.html_content;
	if(pastePlain==1)
		removeWord=1;
	var r1=new RegExp("^&nbsp;");
	new_html=new_html.replace(r1,"");
	cur_range.select();
	if(cur_range.length){
		cur_range.item(0).outerHTML="";
		cur_range=Ktml_object.edit.selection.createRange();
	}

	if (new_html.length!=0){
		new_html=util_rem_strings(new_html);
	}		
	if (removeWord==1){
		new_html=util_plain2translated(util_cleanHTMLContentCustom(util_translated2plain(new_html),true), counter);
		clean_called=1;
	}		
	if (removeScript==1){
		clean_function=util_getCleanFunction('script',retObj.has_word);
		if(clean_function){
			new_html=util_plain2translated(clean_function(util_translated2plain(new_html)), counter);
			clean_called=1;
		}
	}
	if (removeClass==1){
		clean_function=util_getCleanFunction('classes',retObj.has_word);
		if(clean_function){
			new_html=util_plain2translated(clean_function(util_translated2plain(new_html)), counter);
			clean_called=1;
		}
	}

	if (removeStyle==1){
		/*
		new_html=new_html.replace(/\s*style\s*=\s*['"]?[^'">]*['"]?/ig," ");
		new_html=util_plain2translated(util_translated2plain(new_html.replace(/\s<span\s*style\s*=\s*['"]?[^'">]*['"]?/ig," ")));
		*/
		var tmp=new_html;
		tmp=tmp.replace(/\sstyle\s*=\s*"[^"]*"/ig," ");
		tmp=tmp.replace(/\sstyle\s*=\s*'[^']*'/ig," ");
		tmp=tmp.replace(/\sstyle\s*=\s*[^\s>]+/ig," ");
		new_html=tmp;
		clean_called=1;
	}
	if (removeStyle==1&&removeClass==1){
		clean_function=util_getCleanFunction('css',retObj.has_word);
		if(clean_function){
			new_html=util_plain2translated(clean_function(util_translated2plain(new_html)), counter);
			clean_called=1;
		}
	}
	if (removeFont==1){
		clean_function=util_getCleanFunction('fonts',retObj.has_word);
		if(clean_function){
			new_html=util_plain2translated(clean_function(util_translated2plain(new_html)), counter);
			clean_called=1;
		}
	}
	
	if (pastePlain==1){
		clean_function=util_getCleanFunction('all',retObj.has_word);
		if(clean_function){
			new_html=util_plain2translated(clean_function(util_translated2plain(new_html)), counter);
			clean_called=1;
		}
	}
	if (removeFormat==1){
		clean_function=util_getCleanFunction('formatting',retObj.has_word);
		if(clean_function){
			new_html=util_plain2translated(clean_function(util_translated2plain(new_html)), counter);
			clean_called=1;
		}
	}	
	if (replacementFont){
		var nonstandardlist = retObj.nonstandard_fonts;
		if(nonstandardlist.length > 0){
			var arrayofstrings = nonstandardlist.split("^");
			for (var j=0; j<arrayofstrings.length; j++){ 
				new_html = substringReplace(new_html, arrayofstrings[j], replacementFont);
			}	
		}
	}
	if (pasteCode==1){
		new_html = substringReplace(new_html,"<","&lt;");
		new_html = substringReplace(new_html,">","&gt;");
		clean_called=1;
	}
	if(is.mozilla){
		//new_html = util_removeSiteNameFromHTML(Ktml_object,new_html);
		Ktml_object.paste_container.body.innerHTML=new_html;
		Ktml_object.paste_container.execCommand('SelectAll',false,false);
		Ktml_object.paste_container.execCommand('cut',false,false);
      var selNode = Ktml_object.logic_getSelectedNode();
      if (selNode.nodeName.toLowerCase()=='p'&&selNode.innerHTML=='&nbsp;'){
       // Ktml_object.edit.selection.collapseToEnd();
        Ktml_object.logic_removeTag();
		}  			
		Ktml_object.edit.execCommand('paste',false,false);
		Ktml_object.paste_container.body.innerHTML=retObj.html_content;
		Ktml_object.paste_container.execCommand('SelectAll',false,false);
		Ktml_object.paste_container.execCommand('cut',false,false);
	//	var str=util_removeSiteNameFromHTML(Ktml_object,Ktml_object.edit.body.innerHTML);
	//	Ktml_object.edit.body.innerHTML=str;
	}
	else{
		var oldText = cur_range.htmlText;
		oldText = oldText.replace(/<[pP][^>]*>\s*<br[^>]*[^>]*>\s*<\/[pP]>/gi,'<p>&nbsp;</p>');
		if (oldText == '<P>&nbsp;</P>'){
			oldText = '';
		  cur_range.innerHTML = oldText;	
    }	
		cur_range.pasteHTML(new_html);
	}
	if(Ktml_object.undo){
		Ktml_object.undo.addEdit();
	}
	Ktml_object.displayChanged();
	return true;
}
// Insert Horizontal Line callback
function hrPropsCallback(data) {
	var sel = Ktml_object.edit.selection;
	if (sel.type == "Text" || sel.type == "None" || sel.type == "Control")	{

    var rng = sel.createRange();
		var el = rng.parentElement();
		if (data['align'] == 'default')
			data['align'] = 'left';
    if (data['noshade']!='none')
      var noShade = 'noshade="noshade"';
    else
      var noShade = '';
      
		if (el.tagName.toLowerCase() == 'hr')	{
			el.align = data['align'];
			el.color = data['color'];
      if(noShade!='')
        el.noShade = data['noshade'];
			el.size = data['size'];
			el.title = data['title'];
		}	
		else {
			str = '<hr align="' + data["align"] + '" color="' + data["color"] +'" '+ noShade + ' size="' + data["size"] + '" title="' + data["title"] + '" />';
		}
    
		if (is.mozilla){
      var selNode = Ktml_object.logic_getSelectedNode();
      if (selNode.parentNode.children.length==1&&selNode.parentNode.children[0].nodeName.toLowerCase()=='br'){
        sel.collapseToEnd();
        Ktml_object.logic_removeTag();
        Ktml_object.logic_removeTag();
        Ktml_object.util_insertTextSel(Ktml_object.edit, str, null);
      }  
      else if (selNode.nodeName.toLowerCase()=='p'){
        var el=Ktml_object.edit.createElement('hr');
  			el.align = data['align'];
  			el.color = data['color'];
        if(noShade!='')
  			  el.noShade = data['noshade'];
			el.size = data['size'];
			el.title = data['title'];
			utility.dom.insertAfter(el,selNode);
      }
      else
        Ktml_object.util_insertTextSel(Ktml_object.edit, str, null);
    }  
		else
			Ktml_object.insertHTML('</p>'+str);	

    Ktml_object.displayChanged();
	}
	else
		return false;
}
// Snippets and Insert Character callback
function insertSpecialCallback(c,counter){
	var _this = ktmls[counter];
	var sel = _this.edit.selection;
	if (sel.type == "Text" || sel.type == "None" || sel.type == "Control"){
		if (is.ie){
			var cut_range = _this.edit.selection.createRange();
			cut_range.pasteHTML(c);
		}	
		else
      	_this.util_insertTextSel(_this.edit, c, null);
    _this.displayChanged();
	}
}
// Foreground Color dialog callback
function forecolorCallback(color,counter){
	var _this = ktmls[counter];
	var sel = _this.edit.selection;
  if (sel.type == "Text" || sel.type == "None") {
  	var cur_range = sel.createRange();
    
  	// ensure the selection is still the same
  	if (sel.type == "None" || holdForCallback == cur_range.htmlText)
  		_this.edit.execCommand('forecolor', false, color);
  }
	_this.displayChanged();
}



function util_rem_strings(input) {  
	var output=input;
	for(var i=0;i<pasteReplace.length;i++) {
		pairStr=unescape(pasteReplace[i]);
		if (pairStr.length!=0) {
			splitIdx=pairStr.indexOf('~');
			if (splitIdx==-1) {
				searchStr=pairStr;
				replaceStr='';
			} else {
				searchStr=pairStr.substring(0,splitIdx);
				replaceStr=pairStr.substring(splitIdx+1);
			}
			searchRE=new RegExp(searchStr,'gi');
			output=output.replace(searchRE,replaceStr);
		}
	}
	return output;
}	
function util_getCleanFunction(clean_type,has_word) {
	has_word=util_defaultValue(has_word,false);
	clean_type=util_defaultValue(clean_type,false);

  if(clean_type) {
  	var clean_function=KT_clean_functions[clean_type];
    }
  else {
  	var auto_clean_on_paste=$KTML4_GLOBALS['auto_clean_on_paste']+'';
  	auto_clean_on_paste=(typeof($KTML4_GLOBALS['auto_clean_on_paste'])=='undefined')?'word': auto_clean_on_paste;
    if(!has_word&&auto_clean_on_paste=='word') {
    	auto_clean_on_paste='none';
      }
	if(auto_clean_on_paste=='word'&&(pasteRemWord==0||pasteRemWord==3)){
		auto_clean_on_paste='none';	
	}		
	if(auto_clean_on_paste=='word')
		auto_clean_on_paste='word_custom';		
  	var clean_function=KT_clean_functions[auto_clean_on_paste];
    }
	return clean_function;
  }
ktml.prototype.util_selectionSplit=function(tagNames,stoppers,select_what){
  return false;
  tagName=util_defaultValue(tagName,'P').toLowerCase();
  select_what=util_defaultValue(select_what,'between').toLowerCase();
  var currentTag=null;
  if(is.mozilla){
    currentTag=this.cw.getSelection().anchorNode;
    }
  else{
    currentTag=this.edit.selection.createRange().parentElement();
    }
  var parentTag=utility.dom.getParentByTagName(currentTag,tagName);
  if(!parentTag){
    return;
    }
  this.insertHTML('<br id="kt_removable">','after',false);
  var outer=parentTag.outerHTML;
  var fragments=outer.split(/</);
  var frag='';
  var where='before';
  var sbefore='';
  var safter='';
  var starters=[];
  var enders=[];
  var end_done=false;
  for(var i=0;i<fragments.length;i++){
    frag=String_trim(fragments[i]);
    if(!frag){
      continue;
      }
    if(/^br id="?kt_removable"?/i.test(frag)){
      safter+=frag.substring(frag.indexOf(">")+1);
      where='after';
      }
    else{
      if(where=='before'){
        if(/^\/+/.test(frag)){
          starters.pop();
          }
        else{
          starters.push('<'+frag.substring(0,frag.indexOf('>'))+'>');
          }
        sbefore+='<'+frag;
        }
      else{
        if(!end_done&&/^\/+/.test(frag)){
          enders.push('<'+frag.substring(0,frag.indexOf('>'))+'>');
          }
        else{
          end_done=true;
          }
        safter+='<'+frag;
        }
      }
    }
  var unique=this.getUniqueID();
  var signature_html='<br id="'+unique+'"/>';
  var new_html='';
  switch(select_what){
    case'between':
      sbefore=sbefore+enders.join("")+'</'+tagName+'>';
      sbefore_text=String_trim(sbefore.replace(/(<[^>]*>)/gi,''));
      if(sbefore_text==''){
        sbefore='';
        }
      safter_text=String_trim(safter.replace(/(<[^>]*>)/gi,''));
      if(safter_text==''){
        safter='<'+tagName+'>&nbsp;</'+tagName+'>';		
        }
      else{
        safter=starters.join("")+safter;
        }
      new_html=sbefore+signature_html+safter;
      break;
    case'second-tag-start':
      sbefore=sbefore+enders.join("")+'</'+tagName+'>';
      safter=starters.join("")+signature_html+safter;
      new_html=sbefore+safter;
      break;
    }
  var insertion_tag=null;
  try{
    parentTag.outerHTML=new_html;
    var insertion_tag=this.edit.getElementById(unique);
    if(insertion_tag){
      if(is.mozilla){
        var sel=this.cw.getSelection();
        sel.collapse(insertion_tag,0);
        var rng=sel.getRangeAt(0);
        rng.setEndBefore(insertion_tag.nextSibling);
        }
      else{
        var rng=this.edit.body.createTextRange();
        rng.moveToElementText(insertion_tag);
        }
      rng.select();
      }
    }
  catch(err){}
  return insertion_tag;
  };
ktml.prototype.util_selectionInsideTags=function(inside_tags){
  if(typeof(inside_tags)=="Object"){
    inside_tags=","+inside_tags.join(",")+",";
    }
  else{
    inside_tags=","+inside_tags+",";
    }
	var sel=this.edit.selection;
	var rng=sel.createRange();
	var fn=null;
  if(is.ie) {
    if(rng.length) {
    	fn=rng.item(0);
      }
    else {
    	fn=rng.parentElement();
      }
    }
  else {
  	fn=rng.commonAncestorContainer;
    }
  while(fn) {
    if(inside_tags.indexOf(","+fn.nodeName.toLowerCase()+",")>=0) {
    	return fn;
      }
  	fn=fn.parentNode;
    }
	return false;
  };
ktml.prototype.util_selectionContainsTags=function(forbid_tags) {
  if(typeof(forbid_tags)=="String") {
  	forbid_tags=forbid_tags.split(",");
    }
	var sel=this.edit.selection;
	var rng=sel.createRange();
	var selection_html='';
  if(sel.type=="Control") {
    if(is.ie) {
    	selection_html=rng.item(0).outerHTML;
      }
    else {
    	selection_html=rng.startContainer.childNodes[rng.startOffset].outerHTML
      }
    }
  else {
  	selection_html=rng.htmlText;
    }
	var reg=null;
	for(var i=0;i<forbid_tags.length;i++) {
	  reg=new RegExp("<"+forbid_tags[i]+"(?:\\s|\/|>)+","i");
    if(reg.test(selection_html)) {
    	return true;
      }
    }
	return false;
  };
ktml.prototype.util_stripTag=function(tag) {
	var iHTML = tag.innerHTML;
	this.util_insertSelectionMark();
	tag.outerHTML=iHTML;
	this.util_removeSelectionMark();
  };
ktml.prototype.util_insertSelectionMark=function() {
	var uniqueID=this.getUniqueID();
	this.insertHTML('<span id="'+uniqueID+'" style="display: none;">&nbsp;</span>',"first-node",false);
	this.marker=uniqueID;
  };
ktml.prototype.util_removeSelectionMark=function() {
	var marker=this.edit.getElementById(this.marker);
	if(!marker) {
		return;
	}
	var rng=this.edit.selection.createRange();
	marker.style.display="";
	rng.moveToElementText(marker);
	if(is.mozilla) {
		var ps=marker.previousSibling;
		var psp=0;
		if(!ps) {
			ps=marker.nextSibling;
		}
		else {
			psp=ps.nodeValue.length;
			if(marker.nextSibling) {
				if (marker.nextSibling.nodeValue)
					marker.previousSibling.nodeValue+=marker.nextSibling.nodeValue;
				marker.parentNode.removeChild(marker.nextSibling);
			}
		}
	}
	marker.parentNode.removeChild(marker);
	if(is.mozilla&&ps) {
		this.edit.selection.collapse(ps,psp);
	}
	else {
		rng.select();
	}
	this.marker=null;
};
ktml.prototype.ui_logicDoWordFormat=function(cmd,param) {
	if(is.ie) {
		var selType=this.edit.selection.type;
		if(selType=="Control") {
			return false;
		}
		if(cmd=="FontSize"&&selType=="Text") {
			var rng=this.edit.selection.createRange();
			var m=-1;
			while(m!=0&&rng.text.replace(/\s*/g,'')!=''&&rng.text.match(/\s$/)) {
				m=rng.moveEnd("character",-1);
			}
			rng.select();
		}
		this.edit.execCommand(cmd,false,param);
		return true;
	}
	var selType=this.edit.selection.type;
	if(selType!="None") {
		this.edit.execCommand(cmd,false,param);
		return true;
	}
	var sel=this.edit.selection;
	var rng=this.edit.selection.createRange();
	var sn=rng.startContainer;
	var so=rng.startOffset;
	var en=rng.endContainer;
	var eo=rng.endOffset;
	var st=null;
	var sv=null;
	if(typeof(param)!="undefined") {
		sv=this.edit.queryCommandValue(cmd);
	}
	else {
		st=this.edit.queryCommandState(cmd);
	}
	var startText=sn.textContent.substring(0,so);
	var endText=en.textContent.substring(eo,en.textContent.length);
	var i=startText.match(/\s?([^\s]*)$/i)[1].length;
	var j=endText.match(/^([^\s]*)\s?/i)[1].length;
	if(i*j!=0) {
		sel.collapse(sn,so-i);
		sel.extend(en,eo+j);
	}
	this.edit.execCommand(cmd,false,param);
	if(i*j==0) {
		return true;
	}
	this.edit.selection.collapseToEnd();
	var rng=this.edit.selection.createRange();
	if(st||sv) {
		rng.setStart(rng.endContainer,so);
		rng.setEnd(rng.endContainer,eo);
	}
	else {
		rng.setStart(rng.endContainer,i);
		rng.setEnd(rng.endContainer,i);
	}
	rng.select();
	return true;
};
ktml.prototype.ui_flickerFreeClassSet=function(el,class_name) {
	try{
		if(el.className!=class_name) {
			el.className=class_name;
		}
	}
	catch(e){};
}
ktml.prototype.ui_setButtonState=function() {
	var pbtn, tbtn, cel;
	var qstate;
	var kttype;
	this.displayShouldChange=true;
	for(var i=0;i<this.toolbar.buttonobjects.length;i++) {
		pbtn=this.toolbar.buttonobjects[i];
		if(pbtn.button_type!="img") {
			continue;
		}
		if(!pbtn.cid&&pbtn.name!='toggle_properties_inspector') {
			continue;
		}
		tbtn=KTStorage.get(pbtn.assoc);
		cel=tbtn.getElement("container");
		try {
			var cmdID=pbtn.cid;
			if(pbtn.name=='help') {
				if(this.toolbar.getHelpMode()) {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
				}
				else {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
				}
				continue;
			}
			if(this.undo) {
				if(pbtn.name=='undo') {
					if(this.undo.cursor<1) {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_disabled");
						tbtn.state=0;
					}
					else {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
						tbtn.state=1;
					}
					continue;
				}
				if(pbtn.name=='redo') {
					if(this.undo.cursor==(this.undo.edits.length-1)) {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_disabled");
						tbtn.state=0;
					}
					else {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
						tbtn.state=1;
					}
					continue;
				}
			}
			if(pbtn.name=='toggle_properties_inspector') {
				if(this.ui.pi) {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
					tbtn.state=2;
				}
				else {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
					tbtn.state=1;
				}
				continue;
			}				
			if(pbtn.name=='toggle_fullscreen') {
				if(this.fullScreenState) {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
					tbtn.state=2;
				}
				else {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
					tbtn.state=1;
				}
				continue;
			}
			if(is.ie) {
				qstate=this.edit.queryCommandSupported(cmdID);
				qvalue=this.edit.queryCommandState(cmdID);
				if(qstate==false) {
					if(qvalue==true) {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
						tbtn.state=2;
					}
					else {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
						tbtn.state=0;
					}
				}
				else {
					if(qvalue==true) {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
						tbtn.state=2;
					}
					else {
						this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
						tbtn.state=1;
					}
				}
			}
			else {
				qstate=this.edit.queryCommandState(cmdID.toLowerCase());
				if(",bold,italic,".indexOf(","+cmdID.toLowerCase()+",")>=0){
					var current_tag=this.logic_getSelectedNode().tagName.toLowerCase();
					if(current_tag=='strong'&&cmdID.toLowerCase()=='bold')
						qstate=true;
					if(current_tag=='em'&&cmdID.toLowerCase()=='italic')
						qstate=true;
				}
				if(qstate==false) {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
					tbtn.state=1;
				}
				else {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
					tbtn.state=2;
				}
			}
		}
		catch(e) {
			if(pbtn.name=='help') {
				if(this.toolbar.getHelpMode()) {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
				}
				else {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
				}
			}
			else if(pbtn.name=="toggle_visible") {
				if(this.viewInvisibles) {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_latched");
					tbtn.state=2;
				}
				else {
					this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
					tbtn.state=1;
				}
			}
			else {
				this.ui_flickerFreeClassSet(cel,"toolbaritem_flat");
				tbtn.state=1;
			}
		}
	}
	this.ui_updateFontFace();
	this.ui_updateFontSize();
	this.ui_updateBlockFormat();
	this.logic_updateDOMHierarchy(true,0);
	try {
		if(this.inspectedNode)
			var MediaType=(this.inspectedNode.getAttribute("for")+"").toLowerCase();
		else
			var MediaType="none";	
	}
	catch(e) {
		var MediaType="none";
	}
	if(is.mozilla&&",flashmovie,windowsmedia,".indexOf(MediaType)>=0) {
		window.setTimeout("ktmls["+this.counter+"].runHooks('onupdatebuttonstate')", 100);
	}
	else {
		this.runHooks('onupdatebuttonstate');
	}
};
ktml.prototype.ui_updateFontFace=function() {
	var btn;
	if(btn=this.toolbar.font_type) {
		btn=KTStorage.get(btn);
		var fontname=null;
		fontname=this.edit.queryCommandValue(KtmlGetCommand('fontname'));
		
		if(fontname) {
			fontname=fontname.toLowerCase();
		}
		if(fontname==''&&is.mozilla){
			try{
				var isSpan=this.cw.getSelection().anchorNode.parentNode;
			}
			catch(e){
				var isSpan=null;
			}	
			if(isSpan&&isSpan.style){
				try{
					fontname=isSpan.style.fontFamily.toLowerCase();
				}
				catch(e){
					fontname='';
				}
			}
		}
		if((fontname!="")&&(fontname!=null)) {
			fcreatenew=true;
			var str="/"+fontname+"/i";
			for(i=0;i<btn.options.length;i++) {
				var nm=new String(btn.options[i].value);
				if(nm==fontname||nm.match(str)||(nm.toLowerCase().indexOf(fontname.toLowerCase())!=-1)) {
					btn.pickValue(i);
					fcreatenew=false;
					break;
				}
			}
			if(fcreatenew&&false) {
				var ooption=document.createElement("OPTION");
				btn.options.add(ooption);
				ooption.text=fontname;
				ooption.name=fontname;
				ooption.value=fontname;
				ooption.selected=true;
				if(btn.obj) {
					btn.add(fontname,'<font face="'+fontname+'">'+fontname+'</font>');
				}
			}
		}
		else {
			btn.pickValue(0);
		}
	}
	return true;
};
ktml.prototype.ui_updateFontSize=function() {
	var btn;
	if(!(btn=this.toolbar.font_size)) {
		return;
	}
	btn=KTStorage.get(btn);
	var fs="";
	if(is.mozilla) {
		try {
			fs=this.edit.queryCommandValue(KtmlGetCommand('fontsize'));
		}
		catch(e) {
			fs="";
		}
	}
	else {
		try {
			var sel=this.edit.selection;
			var selRange=sel.createRange();
			if(sel.type=="Text") {
				var obj=utility.dom.getParentByTagName(selRange.parentElement(), "font");
				if(obj==null) {
					fs="";
				}
				else {
					var sizeAttribute=obj.getAttribute("SIZE");
					if(sizeAttribute) {
						if(sizeAttribute=="+0") {
							fs="";
						}
						else {
							fs=sizeAttribute;
						}
					}
					else {
						fs="";
					}
				}
			}
			else {
				fs="";
			}
		}
		catch(e) {
			fs="";
		}
	}
	for(var i=0;i<btn.options.length;i++) {
		if(btn.options[i].value==fs) {
			btn.pickValue(i);
			return;
		}
	}
	btn.pickValue(0);
};
ktml.prototype.ui_updateBlockFormat=function() {
	var btn;
	if(!(btn=this.toolbar.blockformat)) {
		return;
	}
	btn=KTStorage.get(btn);
	try {
		fs=this.edit.queryCommandValue(KtmlGetCommand('blockfmt'));
		if(is.ie){
			var tmpprss=this.logic_getSelectedNode();
			if(tmpprss.tagName=="P"){
				fs='p';
			}	
		}
	}
	catch(e) {
		fs="";
	}
	if(fs=="Normal"||fs=="") {
		var sn=this.logic_getSelectedNode();
		var additionalFormattingTagNames="div";
		additionalFormattingTagNames="^"+additionalFormattingTagNames.toUpperCase().split(",").join("$|^")+"|";
		var lo=sn;
		if(!lo)
			return true;
		while(lo.tagName&&lo.tagName!="BODY"&&(m=lo.tagName.match(additionalFormattingTagNames))) {
			fs=m;
			break;
			lo=lo.parentNode;
			if(!lo)
				continue;
		}
	}
	if(fs!=null&&fs!="") {
		fsval='<'+fs+'>';
		for(var i=0;i<btn.options.length;i++) {
			var it=btn.options[i].text;
			if(it.indexOf(fs)!=-1||btn.options[i].value==fsval||it==fs) {
				btn.pickValue(i);
				break;
			}
		}
	}
	else {
		btn.pickValue(0);
	}
	return true;
};
ktml.prototype.logic_togglePIDisplay=function() {
	var doShow=this.ui.pi?false:true;
	this.swapToMode=this.displayMode;
	this.ui.pi=doShow;
	this.collapse(true);
	this.myCustomResize(this.config_var.width,this.config_var.height);	
	this.ui_setButtonState();
	return true;	
};
ktml.prototype.logic_snippetOnClick=function(){
	var sel = this.edit.selection;
	//alert (sel.type);
	if (sel.type == "Text" || sel.type == "None" || sel.type == "Control"){
		// invoke snippet dialog
		var strurlstring = jsDlgLoader + '?csModule=dhtmledit/insert-snippet&pageid=' + jspageid;
		newWindow('cpinsertspecial', strurlstring+'&counter='+this.counter);
	}
};
ktml.prototype.logic_hrOnClick=function(){
	var sel = this.edit.selection;
	if (sel.type == "Text" || sel.type == "None" || sel.type == "Control"){
		var rng = sel.createRange();
		var el = rng.parentElement();
		var clsname = '';
		var align = 'left';
		var color = '#000000';
		var noshade = true;
		var size = 1;
		var title = '';
		if (el.tagName.toLowerCase() == 'hr'){
			clsname = el.className;
			align = el.align;
			color = el.color;
			noshade = el.noShade;
			size = el.size;
			title = el.title;
		}
		var strurlstring = jsDlgLoader + 
									'?url=/commonspot/dhtmledit/hr-prop.cfm&pageid=' + jspageid + 
									'&controlid=' + jscontrolid + 
									'&clsname=' + clsname + 
									'&align=' + align + 
									'&color=' + escape(color) + 
									'&noshade=' + noshade + 
									'&size=' + size + 
									'&title=' + title;
    
    newWindow('cpinserthr', strurlstring);
	}
	else
		return false;
};
ktml.prototype.logic_openCSColorPalette=function(type,ignore) {
	var sel=cur_range=curcolor=null;
	try {
		sel = this.edit.selection;
	}
	catch (err){}	
	holdForCallback = '';
	if (type=='f'){ //forground color
		cur_range = this.edit.selection.createRange();
		holdForCallback = cur_range.htmlText;
		curcolor = this.edit.queryCommandValue('forecolor');
		curcolor =  escape(utility.math.intbgr2hexrgb(curcolor));		
 		if (this.edit.selection.type == "Text" || this.edit.selection.type == "None")
			newWindow('colors', jsDlgLoader + 
							'?csModule=dlgcontrols/ct-color-palette&color=' + curcolor + 
							'&callback=forecolorCallback&counter=' + this.counter
						);		
		return true;				
	}
	if (type=='b'){ //background color
		if (sel){
			// Begin: FIX (Issue 3513) -- Part 1 of 1.
			// New code: Proceed only if a selection has been made.
			if (sel.type == "None" && !ignore) {
				alert('A background color can only be applied to selected text. Please select the desired text and re-try.');
				return;
			}
			// End: FIX (Issue 3513) -- Part 1 of 1.		
			cur_range = this.edit.selection.createRange();
			holdForCallback = cur_range.htmlText;			
			if (this.selectableNodes && this.selectableNodes[0]){     
				if (this.selectableNodes && this.selectableNodes.length){
					for (var i = 0; i < this.selectableNodes.length; i++){  
						if ((this.selectableNodes[i]).currentStyle != 'undefined')
							curcolor = (this.selectableNodes[i]).currentStyle;
						else if (window.getComputedStyle)
							curcolor = document.defaultView.getComputedStyle(this.selectableNodes[i], '').getPropertyValue("background-color");
						else
							curcolor = (this.selectableNodes[i]).style;
						if (curcolor != 'transparent') 
							break;
						curcolor = null;
					}
				} 
			}			
			if (!curcolor)
				curcolor = 'rgb(255,255,255)';
			curcolor =  escape(utility.math.intbgr2hexrgb(curcolor ));
			newWindow('colors', jsDlgLoader + 
							'?csModule=dlgcontrols/ct-color-palette&color=' + curcolor + 
							'&callback=backcolorCallback&counter=' + this.counter
						);					
		}
	}
};
ktml.prototype.logic_doClean=function(type,node,rng) {
	node=util_defaultValue(node,null);
	rng=util_defaultValue(rng,false);
	if(this.displayMode=="CODE") {
		return false;
	}
	var was_invisibles=false;
	if(this.viewInvisibles) {
		was_invisibles=true;
		this.logic_toggleInvisibles();
	}
	var clean_func=null;
	switch(type) {
		case"all": 
			clean_func=util_cleanAllTags;
			break;
		case"word": 
			clean_func=util_cleanHTMLContent;
			break;
		case"word_custom":
			clean_func=util_cleanHTMLContentCustom;
			break;
		case"formatting": 
			clean_func=util_cleanFormattingTags;
			break;
		case"css": 
			clean_func=util_cleanCSSStyles;
			break;
		case"script": 
			clean_func=util_cleanScriptTags;
			break;
		case"classes": 
			clean_func=util_cleanCSSClasses;
			break;
		case"fonts": 
			clean_func=util_cleanFontTags;
			break;
		default: 
			return;
			break;
	}
	var tmp="", tmp2="";
	if(!node) {
		var sel=this.edit.selection;
		if(!rng&&sel.type=='None'&&(is.mozilla&&sel.isCollapsed||is.ie)) {
			var sl=this.edit.selection.createRange();
			var uniqueID=this.getUniqueID();
			sl.pasteHTML('<u id="'+uniqueID+'"></u>');
			tmp=this.getPlainSource();
			tmp=clean_func(tmp);
			this.edit.body.innerHTML=util_plain2translated(tmp,this.counter);
			var sel=this.edit.getElementById(uniqueID);
			if(sel) {
				sl.moveToElementText(sel);
				sel.parentNode.removeChild(sel);
				sl.select();
			}
			this.logic_updateDOMHierarchy(true,0);
		}
		else if(sel.focusNode.nodeName!='BODY') {
			if(!rng) {
				this.makeValidSelection();
				rng=this.edit.selection.createRange();
			}
			var html=rng.htmlText;
			tmp2=clean_func(html);
			rng.pasteHTML(tmp2);
			if(is.mozilla) {
				try {
					rng=sel.getRangeAt(0);
					rng.select();
				}
				catch(err) {}
			}
		}
	}
	else {
		tmp=util_translated2plain(node.innerHTML);
		tmp2=clean_func(tmp);
		try {
			node.outerHTML=util_plain2translated(tmp2,this.counter);
		}
		catch(e) {}
		if(node&&node.nodeType==1) {
			try {
				var rng=this.edit.body.createTextRange();
				rng.moveToElementText(node);
				rng.collapse(false);
				rng.select();
			}
			catch(e) {}
		}
	}
	if(was_invisibles) {
		this.logic_toggleInvisibles();
	}
	if(this.undo) {
		this.undo.addEdit();
	}
};
ktml.prototype.runHooks=function(hookName) {
	var args=[];
	for(var i=1;i<ktml.prototype.runHooks.arguments.length;i++) {
		args.push(ktml.prototype.runHooks.arguments[i]);
	}
	for(var i=0;i<this.hooks[hookName].length;i++) {
		var hook=this.hooks[hookName][i];
		hook.apply(this,args);
	}
};
ktml.prototype.hndlr_onmouseover=function(e) {
	this.runHooks('onmouseover',e);
};
ktml.prototype.invalidate=function() {
	this.readyForSave=false;
};
ktml.prototype.displayChanged=function() {
	this.displayShouldChange=true;
	if(this.MediaPlayer) {
		this.MediaPlayer.stop();
		return;
	}
	if(this.displayShouldChange) {
		if(this.config.hideToolbarTag) {
			this.showToolbar();
		}
		this.invalidate();
		if(this.displayMode!="CODE") {
			this.ui_setButtonState();
		}
		else {
			this.taginspector.innerHTML="";
		}
		this.displayShouldChange=false;
	}
	else {}
};
wait_displayChanged=function(obj,event) {
	if(window['ktml_displayChanged_timeout']) {
		clearTimeout(window['ktml_displayChanged_timeout']);
	}
	window['ktml_displayChanged_timeout']=setTimeout("window['ktml_"+obj.name+"'].displayChanged();",200);
};
function HandleOutgoingText(ktml,str2) {
	var str2=str2||ktml.getPlainSource();
	str2=util_removeSiteNameFromHTML(ktml,str2);
	str2=str2.replace(/(src="?[^\"]+)\?size=\d*("?)/ig,'$1$2');
	str2=str2.replace(/(background-image:\s*url\([^\)]+)\?size=\d*\)/ig,'$1)');
	str2=str2.replace(/\skt_onclick=/ig,' onclick=');
	if(is.ie) {
		str2=str2.replace(/(<(?:td|th)[^>]*?)\svalign=("?)center/ig,'$1 valign=$2middle');
		str2=str2.replace(/(<(?:td|th)[^>]*?)\salign=("?)middle/ig,'$1 align=$2center');
	}
	str2=ktml.replaceTags(str2);
	str2=String_trim(str2);
	regexp="[\s\n]*<p[^>]*>\s*<br[\s]*[\/]*>[\s\n]*<\/p>[\s\n]*/gi";
	str2=str2.replace(regexp,'<p>&nbsp;</p>');
	str2=str2.replace(/[\s\n]*<p[^>]*>\s*<br[^>]*ktml_hidden ktml_selstart[^>]*>[\s\n]*<\/p>[\s\n]*/gi,'');
	str2=str2.replace(/\s*<br[^>]*ktml_hidden ktml_selstart[^>]*>[\s\n]*/gi,'');
	str2=str2.replace(/[\s\n]*<p[^>]*>\s*<br[^>]*ktml_hidden ktml_selend[^>]*>[\s\n]*<\/p>[\s\n]*/gi,'');
	str2=str2.replace(/<br[^>]*ktml_hidden ktml_selend[^>]*>/gi,'');
	str2=str2.replace(/<!--SCRIPT_TRANSLATOR<script/gi,'<script');
	str2=str2.replace(/<\/script>SCRIPT_TRANSLATOR-->/gi,'</script>');	
	str2=str2.replace(/<p[^>]*>\s*<br[^>]*[^>]*>\s*<\/p>/gi,'<p>&nbsp;</p>');
	str2=str2.replace(/<li[^>]*>[\s\n]*<br[^>]*[^>]*>[\s\n]*<\/li>/gi,'');
	return str2;
};
function HandleIncomingText(ktml,str,mode,obj){
	if(typeof obj!="undefined"){
		str=obj.getPlainSource();
	}
	str=util_removeSiteNameFromHTML(ktml,str);
	str=str.replace(/(src="?[^\"]+)\?size=\d*("?)/ig,'$1$2');
	str=str.replace(/(background-image:\s*url\([^\)]+)\?size=\d*\)/ig,'$1)');
	str=str.replace(/\skt_onclick=/ig,' onclick=');
	str=String_trim(str);
	if(str==''||str.match(/^<br\s*\/?>$/i)){
		str="<p>&nbsp;</p>";
	}
	return str;
};

function util_removeSiteNameFromHTML(ktml,html){
	if(blank_location!=""){
		html=html.replace(/<([a-z]+)([^>]+)>/gi,function(a,b,c){
			return'<'+b+c.replace(/\s(src|href)\s*=\s*\"?([^\"]*)"?/gi,function(a,b,c){
				return' '+b+'="'+encodeURI(decodeURI(util_removeSiteNameFromHREF(ktml,c)))+'"';
			})+'>';
		});
		html=html.replace(/<([a-z]+)([^>]+)>/gi,function(a,b,c){
			return'<'+b+c.replace(/(background-image:\s*url\s*\(([^\(]*)\))/gi,function(a,b,c){
				return'background-image:url('+encodeURI(decodeURI(util_removeSiteNameFromHREF(ktml,c)))+')';
			})+'>';
		});
	}
	return html;
};
function util_removeSiteNameFromHREF(ktml,href,showIT){
	if(!ktml)
		ktml=this;
	if(!showIT)
		showIT=false;
	if(blank_location==""||!href){
		return href;
	}
	var blank_common=blank_location.pathname.substring(blank_location.ktml_root.length);
	if(is.mozilla){
		if(showIT)
			console.log('3929-'+href);
		if(ktml&&/(\.\.\/){4}/.test(href)){
			href=ktml_location.server+blank_location.ktml_root+blank_common+href.substring(12);
		}
		if(showIT)
			console.log('3934-'+href);
		else if(href.indexOf("/")!=0&&href.indexOf(ktml_location.server)==-1&&!/^[a-zA-Z]+:/.test(href)){
			href=ktml_location.server+blank_location.ktml_root+blank_common+href;
		}
		else if(href.indexOf("/")==0){
			href=ktml_location.server+href;
		}
		var tmp_href=ktml_location.server;
		while(/\/[^\/]*\/\.\./.test(href)){
			if(href.indexOf(tmp_href)==0)
				href=href.substring(tmp_href.length);
			href=href.replace((new RegExp("\\/[^\\/]*\\/\\.\\.\\/")),'/');
		}
	}
	if(href.indexOf(ktml_location.server)==0){
		var tmp_href=href.substring(ktml_location.server.length);
		if(tmp_href&&tmp_href!="/"){
			href=tmp_href;
		}
		else{
			return href;
		}
	}
	if(/^[a-zA-Z]+:/.test(href)){
		return href;
	}
	/*
	if(href.indexOf(blank_location.ktml_root)==0){
		href=href.substring(blank_location.ktml_root.length);
	}
	*/
	var updir=0;
	var spl1=blank_common.split(new RegExp("\\/","gi"));
	var spl2=href.replace(/^\//,'').split(new RegExp("\\/","gi"));
	var i=0;
	for(j=0;j<Math.min(spl1.length,spl2.length);j++){
		if(spl1[j]!=spl2[j]){
			break;
		}
		i+=spl1[j].length+1;
	}
	var trail=href.substring(i);
	if(/^blank\.html#/.test(trail)){
		trail=trail.substring("blank.html".length);
	}
	if(i>0){
		updir=blank_common.substring(i);
		updir=updir.split("/").length;
		if(updir>1){
			var s='';
			for(var j=1;j<updir;j++){
				s+='../';
			}
			trail=s+trail;
		}
	}
	else{
		if(trail.indexOf("/")<0){}
			else if(trail.indexOf("/")!=0){
			trail=blank_location.ktml_root+trail;
		}
	}
	href=trail;
	var hrefTemp=unescape(unescape(unescape(String_htmldecode(href))));
	if(hrefTemp.indexOf(blank_location.frame_src)==0) {
		href=hrefTemp.substring(blank_location.frame_src.length);
	}
	if(href.indexOf(blank_location.ktml_root+'#')==0) {
		href=href.substring(blank_location.ktml_root.length);
	}	
	if(!ktml.config_var.strip_server_location){
		if(href.indexOf("/")==0){
			href=ktml_location.server+href;
		}
		else{
			if(updir>1){
				var spl=blank_location.ktml_root.split("/");
				href=blank_location.ktml_root+href;
				for(var j=0;j<spl.length-1;j++){
					href=href.replace((new RegExp("\\/[^\\/]*\\/\\.\\.\\/","i")),'/');
				}
				href=ktml_location.server+href;
			}
			else{
				href=ktml_location.server+blank_location.ktml_root+href;
			}
		}
	}
	return href;
};
function util_setGlobalLocationVars(){
	if(ktml_location==""){
		ktml_location={};
		if(/includes\/ktm\/core\/htm\/full.html/i.test(window.location.pathname)){
			var loca=opener.location;
		}
		else{
			var loca=window.location;
		}
		var colons=loca.port?":":"";ktml_location.pathname=(loca.pathname+"").replace(/[^\/]*$/,'');
		ktml_location.server=loca.protocol+"//"+loca.hostname+colons+loca.port;
		ktml_location.full=ktml_location.server+ktml_location.pathname;
	}
};
var ktml_location='';
ktml.prototype.addTagReplacementRule=function(tagRuleName,sTagName,sTagRule){
  this.tagReplacementRules[tagRuleName]={tagName:sTagName,tagRule:sTagRule};
  };
ktml.prototype.replaceTags=function(string){
	
  // Begin: FIX (Issue 3053) -- Part 1 of 1.
  // Old code:		 
  // var allowed_empty_tags=['td','th','a','embed','noembed','iframe'];
  // New code:
  var allowed_empty_tags=['td','th','a','embed','noembed','iframe','br','div'];
  // End: FIX (Issue 3053) -- Part 1 of 1.
	
  var re1='<('+allowed_empty_tags.join('|')+')';
  var re2='<z('+allowed_empty_tags.join('|')+')';
  var preserve_tags_re=new RegExp(re1,"gi");
  var restore_tags_re=new RegExp(re2,"gi");
  string=string.replace(preserve_tags_re,"<z$1");
  while(/<([a-zA-Z0-9]+)[^>]*>[\s\r\n]*<\/\1>/.test(string)){
    string=string.replace(/<([a-zA-Z0-9]+)[^>]*>[\s\r\n]*<\/\1>/gi,'');
    }
  string=string.replace(restore_tags_re,"<$1");
  var sRuleName='';
  var oRule=null;
  for(sRuleName in this.tagReplacementRules){
    oRule=this.tagReplacementRules[sRuleName];
    if(oRule.tagRule=="striptagandcontent"){
      string=string.replace(new RegExp("<(?:"+oRule.tagName+")[^>]*>","gi"),'<!--STRIP');
      string=string.replace(new RegExp("<\/?(?:"+oRule.tagName+")>","gi"),'STRIP-->');
      string=string.replace(/<!--STRIP(?:[\w\W\s\r\n]*?)STRIP-->/gi,'');
      }
    else if(oRule.tagRule=="striptag"){
      string=string.replace(new RegExp("<(?:"+oRule.tagName+")[^>]*>","gi"),"");
      string=string.replace(new RegExp("<\/"+oRule.tagName+">","gi"),"");
      }
    else{
      string=string.replace(new RegExp("<"+oRule.tagName+"( |>){1}","gi"),"<"+oRule.tagRule+"$1");
      string=string.replace(new RegExp("<\/"+oRule.tagName+">","gi"),"</"+oRule.tagRule+">");
      }
    }
  if(this.allowed_tags_list){
    var tag_split=/<\/?([a-z]*)[^>]*>/gi;
    var allowed_tags_list=","+this.allowed_tags_list.join(",")+",";
    string=string.replace(tag_split,function(a,tag_name,c){
      if(allowed_tags_list.indexOf(","+tag_name.toLowerCase()+",")==-1){
        return'';
        }
      return a;
      });
    }
  return string;
  };
ktml.prototype.logic_recCommand=function(cmd,param1,param2){
  var tmpcont=this.getPlainSource();
  var i=0;
  do{
    if(this.edit.execCommand(cmd,param1,param2)){
      i++;
      }
    else{
      break;
      }
    var str=this.getPlainSource();
    if(str!=tmpcont||i>=101) {
	    break;
      }
    }
	while(1);
  };
// reverting back to original KTML function.  
ktml.prototype.getPlainSource=function() {
	var text_content='';
	var html_content=this.edit.body.innerHTML;
	if(is.ie) {
		text_content=this.edit.body.innerText;
	}
	else {
		text_content=this.edit.body.textContent;
	}
	text_content=String_trim(text_content);
	var str2='';
	if(text_content=="") {
		var dont_strip=/<(?:img|table|hr|a|fieldset|form|input|button|textarea|select|object|embed|script|iframe)/i;
		if(dont_strip.test(html_content)) {
			str2=util_translated2plain(html_content);
		}
	}
	else {
		str2=util_translated2plain(html_content);
	}
   // strip all empty spaces between tags ex.<tr>and <td> tag.
   // 29/apr/08 Surya: commented the following line of code as problem is elsewhere. 
   //str2=str2.replace(/>[\s]*/gi,'>');
	if(String_trim(str2)=="") {
		return'';
	}
	else {
		return str2;
	}
};
ktml.prototype.logic_toggleInvisibles=function() {
	var tdarr, j;
	var sw=false;
	if(this.viewInvisibles!=null) {
		sw=this.viewInvisibles;
	}
	this.viewInvisibles=!sw;
	this.utils_setInvisibles(sw);
};
ktml.prototype.utils_setInvisibles=function(flag) {
	var tarr=this.edit.getElementsByTagName("TABLE");
	for(var i=0;i<tarr.length;i++) {
		if(!flag&&(!tarr[i].getAttribute("KT_modified")||tarr[i].getAttribute("KT_modified")=="0")&&(!tarr[i].border||tarr[i].border==0||tarr[i].border==null)) {
			this.utils_makeTableCallback(tarr[i],this.utils_makeOutline);
		}
		else if(flag) {
			this.utils_makeTableCallback(tarr[i],this.utils_unmakeOutline);
		}
	}
};
ktml.prototype.utils_makeTableCallback=function(t,fun) {
	var tdarr, j;
	tdarr=t.getElementsByTagName("TD");
	for(j=0;j<tdarr.length;j++) {
		if(utility.dom.getParentByTagName(tdarr[j],'TABLE')==t) {
			fun(tdarr[j]);
		}
	}
	fun(t);
};
ktml.prototype.utils_makeOutline=function(t) {
	t.setAttribute("KT_modified","1");
	var borders=["Top","Right","Bottom","Left"];
	var brd,brds, brdc, brdw, bs, bc, bw, bs2, bc2, bw2, attr;
	var matr= {};
	for(var i=0;i<borders.length;i++) {
		brd=borders[i];
		brds=is.ie?"border"+brd+"Style": "border-"+brd+"-style";
		brdc=is.ie?"border"+brd+"Color": "border-"+brd+"-color";
		brdw=is.ie?"border"+brd+"Width": "border-"+brd+"-width";
		try {
			bs=utility.dom.getStyleProperty(t,brds);
		}
		catch(e) {};
		try {
			bc=utility.dom.getStyleProperty(t,brdc);
		}
		catch(e) {};
		try {
			bw=utility.dom.getStyleProperty(t,brdw);
		}
		catch(e) {};
		bs2=t.style[brds];
		bc2=t.style[brdc];
		bw2=t.style[brdw];
		if(bs==""||bs=="none"||bc==""||bw=="0px"||bw=="") {
			matr["border"+brd]="1px dashed black";
			t.setAttribute("KT_rem"+brd,"1");
			if(bs!=bs2) {
				t.setAttribute("KT_rem"+brd+"Style","1");
			}
			else if(bs2) {
				t.setAttribute("KT_add"+brd+"Style",bs2);
			}
			if(bw!=bw2) {
				t.setAttribute("KT_rem"+brd+"Width","1");
			}
			else if(bw2) {
				t.setAttribute("KT_add"+brd+"Width",bw2);
			}
			if(bc!=bc2) {
				t.setAttribute("KT_rem"+brd+"Color","1");
			}
			else if(bc2) {
				t.setAttribute("KT_add"+brd+"Color",bc2);
			}
		}
	}
	for(var i=0;i<borders.length;i++) {
		brd="border"+borders[i];
		if(matr[brd]) {
			t.style[brd]=matr[brd];
		}
	}
};
ktml.prototype.utils_unmakeOutline=function(t) {
	if(t.getAttribute("KT_modified")&&(t.getAttribute("KT_modified")==1)) {
		t.removeAttribute("KT_modified");
		var borders=["Top","Right","Bottom","Left"];
		var brd, addw, addc, adds;
		for(var i=0;i<borders.length;i++) {
			brd=borders[i];
			if(t.getAttribute("KT_rem"+brd)) {
				t.style["border"+brd]="";
				t.removeAttribute("KT_rem"+brd);
			}
			if(t.getAttribute("KT_rem"+brd+"Style")) {
				t.style["border"+brd+"Style"]="";
				t.removeAttribute("KT_rem"+brd+"Style");
			}
			if(t.getAttribute("KT_rem"+brd+"Width")) {
				t.style["border"+brd+"Width"]="";
				t.removeAttribute("KT_rem"+brd+"Width");
			}
			if(t.getAttribute("KT_rem"+brd+"Color")) {
				t.style["border"+brd+"Color"]="";
				t.removeAttribute("KT_rem"+brd+"Color");
			}
			addw=t.getAttribute("KT_add"+brd+"Width");
			if(addw) {
				t.style["border"+brd+"Width"]=addw;
				t.removeAttribute("KT_add"+brd+"Width");
			}
			addc=t.getAttribute("KT_add"+brd+"Color");
			if(addc) {
				t.style["border"+brd+"Color"]=addc;
				t.removeAttribute("KT_add"+brd+"Color");
			}
			adds=t.getAttribute("KT_add"+brd+"Style");
			if(adds) {
				t.style["border"+brd+"Style"]=adds;
				t.removeAttribute("KT_add"+brd+"Style");
			}
		}
	}
};
ktml.prototype.logic_InsertHeading=function(hName) {
	if(hName!='') {
		if(is.mozilla) {
			hName=hName.replace(/[<>]/gi,"");
		}
		this.edit.execCommand(KtmlGetCommand('blockfmt'), false, hName);
	}
	else {
		// issue 3142
		// modified the change done for 3142 to fix issue it caused (4690)
		try{
			var fs=this.edit.queryCommandValue(KtmlGetCommand('blockfmt'));
			if (fs==''||fs=='Normal'||fs=='p'){
				var tempTag=this.logic_getSelectedNode();
				if (tempTag.tagName.toLowerCase()=='div'||tempTag.tagName.toLowerCase()=='p')
					fs=tempTag;
			}	
			if(fs!='Normal'&&fs!='')
				this.logic_removeTag();
		}
		catch(err){}
	}
};
ktml.prototype.logic_FindReplace=function() {
	this.toolbar.openFindReplace();
};
ktml.prototype.logic_openPalette=function(o,value) {
	if(this.displayMode=="CODE") {
		return false;
	}
	if(this.cpalette.isVisible) {
		this.cpalette.setVisible(false);
	}
	else {
		this.cpalette.showAtElement(o);
		this.cpalette.setSelected(value);
	}
};
ktml.prototype.logic_openChrPalette=function(){
	var sel = this.edit.selection;
	if (sel.type == "Text" || sel.type == "None" || sel.type == "Control") {
		var rng = sel.createRange();
		if(is.mozilla&&(sel.focusNode.nodeName=="BR"||sel.type=="Control"&&sel.focusNode.childNodes[sel.anchorOffset].nodeName=="BR")) {
				this.logic_removeTag();
				var rng=sel.createRange();
				var ln=rng.startContainer.childNodes.length;
				rng.setStartAfter(rng.startContainer.childNodes[ln-1]);
			}		
		var contents = rng.htmlText.toLowerCase();

		// parse out the field tag
		var str = '';
		var start = contents.indexOf('&');
		if (start != -1) {
			var end = contents.indexOf(';');
			if (end == - 1)
				end = contents.length;
			str = contents.substring(start,end);
		}
		
		var theFont = this.edit.queryCommandValue('fontname');
    
    var strurlstring =jsDlgLoader+ '?csModule=dhtmledit/special-prop' + 
                   '&pageid=' + jspageid + 
                   '&controlid=' + jscontrolid + 
						 '&counter=' + this.counter +
                   '&selectedchar=' + escape(str) + 
                   '&currentFont=' + escape(theFont);
		newWindow('cpinsertspecial', strurlstring);
	}	else
		return false;
};
ktml.prototype.logic_openCharacterPalette=function(o,value) {
	if(this.displayMode=="CODE") {
		return false;
	}
	if(this.charpalette.isVisible) {
		this.charpalette.setVisible(false);
	}
	else {
		this.charpalette.showAtElement(o);
		this.charpalette.setSelected(value);
	}
};
ktml.prototype.logic_openSmileysPalette=function(o) {
	if(this.displayMode=="CODE") {
		return false;
	}
	if(this.smileyspalette.isVisible) {
		this.smileyspalette.setVisible(false);
	}
	else {
		this.smileyspalette.showAtElement(o);
		this.smileyspalette.setVisible(true);
	}
};
ktml.prototype.logic_InsertTable=function() {
	if(this.displayMode=="CODE") {
		return false;
	}
	if(this.undo) {
		this.undo.addEdit();
	}
	this.toolbar.openInsertTable();
	if(this.undo) {
		this.undo.addEdit();
	}
};
ktml.prototype.getUniqueID=function() {
	return Math.round(Math.random()*100000000000000000);
  };
ktml.prototype.logic_domSelect=function(selectionTarget,ind,collapse) {
  if(selectionTarget==null) {
  	return;
    }
	collapse=collapse||"no";
	var calledFromTI=false;
  if(typeof selectionTarget=="number") {
  	calledFromTI=true;
  	this.selectableNodes=this.selectableNodes.reverse();
    while(selectionTarget>0) {
    	this.selectableNodes.pop();
    	selectionTarget--;
      }
  	this.selectableNodes=this.selectableNodes.reverse();
  	selectionTarget=this.selectableNodes[selectionTarget];
    }
	var selTagName=selectionTarget.nodeName.toLowerCase();
  if(ind==null) {
    if(",img,table,hr,input,textarea,fieldset,select,".indexOf(","+selTagName+",")>-1) {
    	ind=2;
      }
    else {
    	ind=1;
      }
    }
	var realSelectionElement=selectionTarget.translated?selectionTarget.translated:selectionTarget;
  if(ind==1) {
    try {
      if(is.mozilla) {
      	var rng=this.edit.createRange();
      	rng.selectNodeContents(realSelectionElement);
        switch(collapse) {
        	case"no":
						break;
        	case"begin":
						rng.collapse(true);
						break;
        	case"end":
						rng.collapse(false);
						break;
          }
      	rng.select();
        }
      else {
      	var tmp1=this.edit.body.createTextRange();
      	tmp1.moveToElementText(realSelectionElement);
      	tmp1.select();
        if(collapse!="no") {
        	tmp1.collapse(collapse=="begin"?true:false);
        	tmp1.select();
          }
        }
      if(!calledFromTI) {
      	this.logic_updateDOMHierarchy(true,0);
        }
      else {
      	this.logic_updateDOMHierarchy(true,0,false);
        }
      }
    catch(e) {}
    }
  else if(ind==2) {
    if(is.mozilla) {
    	var sel=this.cw.getSelection();
    	var pn=realSelectionElement.parentNode;
    	for(var i=0;i<pn.childNodes.length;i++) {
        if(pn.childNodes[i]==realSelectionElement) {
        	sel.removeAllRanges();
        	sel.collapse(pn,i);
        	var range=this.edit.createRange();
        	range.selectNode(realSelectionElement);
        	sel.addRange(range);
        	break;
          }
        }
      }
    else {
      var tmp1=this.edit.body.createControlRange();
      try {
      	tmp1.add(realSelectionElement);
        }
      catch(e) {
      	this.cw.focus();
        }
    	tmp1.select();
      }
    if(!calledFromTI) {
    	this.logic_updateDOMHierarchy(true,0);
      }
    else {
    	this.logic_updateDOMHierarchy(true,0,false);
      }
    }
	this.selectableNodeClick=selectionTarget;
	this.runHooks('ondomselect');
	this.cw.focus();
  };
ktml.prototype.logic_removeTag=function() {
  try {
    if(this.selectableNodes&&this.selectableNodes[0]) {
    	var tmpel=this.selectableNodes[0];
      }
    else {
    	var tmpel=this.logic_getSelectedNode();
      }
  	var tagname=tmpel.tagName.toLowerCase();

    if (tagname=='a') {
		// Begin: FIX (Issue 3034) -- Part 1 of 1.
		// Old code:		 
		/*
    	var innertmpel=tmpel.getElementsByTagName('IMG');
      if(innertmpel) {
      	var imgID=innertmpel[0].id;
      	var newimgID=imgID.split('|');
        if(newimgID.length>3) {
        	newimgID=newimgID.splice(2,(newimgID.length-2));
        	newimgID=newimgID.join('|');
        	innertmpel[0].setAttribute('id','||'+newimgID);
          }
        }
		 */		 
		 // New code:
		 tmpel.outerHTML=tmpel.innerHTML;
		 // End: FIX (Issue 3034) -- Part 1 of 1.
      }

    if(tagname=='img'&&tmpel.getAttribute("orig")!=null&&tmpel.getAttribute("for")=="anchor") {
    	var inspected=new WMedia_Translator(this);
    	this.insertHTML(inspected.getAttribute("content"), "first-node");
    	this.logic_updateDOMHierarchy(true,0);
      if(this.introspector) {
      	this.introspector.update();
      	this.cw.focus();
        }
    	return;
      }
    else if(Array_indexOf(['table','img','hr','input','textarea'],tagname)>=0) {
      if(is.ie) {
      	var parentel;
      	parentel=tmpel.parentNode;
        if(parentel.tagName=="A"&&String_trim(parentel.innerText)=="") {
        	tmpel=parentel;
        	parentel=parentel.parentNode;
          }
      	parentel.removeChild(tmpel);
        }
      else {
      	var parentel=tmpel.parentNode;
        if(parentel.nodeName=="A"&&String_trim(parentel.textContent)=="") {
        	tmpel=parentel;
        	parentel=parentel.parentNode;
          }
      	var rng=this.cw.getSelection().getRangeAt(0);
      	rng.selectNode(tmpel);
        try {
        	this.edit.execCommand("inserthtml",false,'<br id="kt_removable">');
          }
        catch(e) {}
      	var br=this.edit.getElementById('kt_removable');
        if(br) {
          try {
          	rng.setStartBefore(br);
          	rng.setEndBefore(br);
            }
          catch(e) {}
        	br.parentNode.removeChild(br);
          }
      	rng.select();
        }
      }
    else if(Array_indexOf(['tr'],tagname)>=0) {
    	var pNode=tmpel.parentNode;
    	var pNode2=tmpel.parentNode;
    	pNode.removeChild(tmpel);
      if(Array_indexOf(['TBODY','THEAD','TFOOT'],pNode.nodeName)>=0) {
      	pNode2=pNode.parentNode;
        }
      if(pNode2.rows.length==0) {
      	pNode2.parentNode.removeChild(pNode2);
        }
      else if(pNode.rows.length==0) {
      	pNode.parentNode.removeChild(pNode);
        }
      }
    else if(Array_indexOf(['ul','li','ol'],tagname)>=0) {
    	var lis=tmpel.getElementsByTagName('LI');
    	for(var i=lis.length-1;i>=0;i--) {
      	lis[i].outerHTML=lis[i].innerHTML+'<br/>';
        }
    	tmpel.outerHTML=tmpel.innerHTML;
      }
    else {
      if(this.edit.body.contains(tmpel)) {
      	tmpel.outerHTML=tmpel.innerHTML;
        }
      }
  	this.cw.focus();
  	this.displayChanged();
    if(this.undo) {
    	this.undo.addEdit();
      }
    }
  catch(e) {}
  };
ktml.prototype.logic_removeClasses=function() {
  try {
  	var tmpel=null;
    if(this.selectableNodeClick) {
    	tmpel=this.selectableNodeClick;
      }
    else {
      if(this.selectableNodes&&this.selectableNodes[0]) {
      	tmpel=this.selectableNodes[0];
        }
      else {
      	tmpel=this.logic_getSelectedNode();
        }
      }
    if(tmpel.tagName) {
    	tmpel.className="";
      }
	this.cw.focus();
	this.displayChanged();
  if(this.undo) {
  	this.undo.addEdit();
    }
  }
  catch(e) {}
  };
ktml.prototype.insertObject=function(nNode,bOverwriteSelection) {
  if(typeof(bOverwriteSelection)=="undefined") {
  	bOverwriteSelection=true;
    }
	return this.insertNodeAtSelection(nNode,bOverwriteSelection);
  };
ktml.prototype.doSelectFromAnchor=function(e) {
  if(is.ie) {
  	var hoverElement=this.cw.event.srcElement;
    }
  else {
  	var hoverElement=e.target;
    }
	utility.dom.stopEvent(is.ie?this.cw.event:e);
  if(hoverElement.id==HIDDEN_TAG_ID) {
  	hoverElement=hoverElement.parentElement;
  	this.logic_domSelect(hoverElement,null);
    }
  };
function util_getValidContainerParent(el) {
	var invalid_parents=",td,th,tr,tbody,li";
  while(el){
    if(el.nodeType==1&&invalid_parents.indexOf(","+el.tagName.toLowerCase()+",")<0){
      break;
      }
    el=el.parentNode;
    }
  return el;
  }
ktml.prototype.makeValidSelection=function() {
  if(this.edit.selection.type=="Control") {
  	return;
    }
  try {
    if(this.edit.selection.type!="Text") {
    	return;
      }
  	var rng=this.edit.selection.createRange();
  	var common_parent=rng.parentElement();
  	common_parent=util_getValidContainerParent(common_parent);
    if(!common_parent) {
    	return;
      }
  	var s_rng=rng.duplicate();
  	s_rng.collapse(true);
  	var s_node=s_rng.parentElement();
  	s_node=util_getValidContainerParent(s_node);
    if(s_node&&s_node!=common_parent) {
      while(s_node&&s_node.parentNode!=common_parent) {
      	s_node=s_node.parentNode;
        }
      }
  	var e_rng=rng.duplicate();
  	e_rng.collapse(false);
  	var e_node=e_rng.parentElement();
    if(e_node&&e_node!=common_parent) {
      while(e_node&&e_node.parentNode!=common_parent) {
      	e_node=e_node.parentNode;
        }
      }
    if(is.mozilla) {
    	var rng=this.edit.selection.getRangeAt(0);
    	rng.setStartBefore(s_node);
    	rng.setEndAfter(e_node);
    	rng.select();
      }
    else {
    	var rng=this.edit.selection.createRange();
      if(s_node) {
      	var rStart=rng.duplicate();
      	rStart.moveToElementText(s_node);
        if(s_node.tagName=="TABLE") {
        	rStart.moveStart("character",-1);
          }
      	rStart.collapse(true);
      	rng.setEndPoint("StartToStart",rStart);
        }
      if(e_node) {
      	var rEnd=rng.duplicate();
      	rEnd.moveToElementText(e_node);
        if(s_node) {
        	moved_back=rStart.moveEnd("character",1);
        	moved_back=rStart.moveEnd("character",-1);
          }
      	rEnd.collapse(false);
      	rng.setEndPoint("EndToEnd",rEnd);
        }
    	rng.select();
      }
  	this.util_saveSelection();
  	this.displayChanged();
    }
  catch(e) {
  	al(e);
    }
  }
ktml.prototype.getSelectionHTML=function(){
  var ret='';
  var was_invisibles=false;
  if(this.viewInvisibles){
    was_invisibles=true;
    this.logic_toggleInvisibles();
    }
  if(is.ie){
    var selType=this.edit.selection.type;
    var selRange=this.edit.selection.createRange();
    if(selType=="Control"){
      ret=selRange.item(0).outerHTML;
      }
    else{
      ret=selRange.htmlText;
      }
    }
  else{
    var sel=this.edit.selection;
    for(var i=0;i<sel.rangeCount;i++){
      ret+=sel.getRangeAt(i).htmlText;
      }
    }
  ret=ret.replace(/<\/?body[^>]*>/gi,'');
  if(was_invisibles){
    this.logic_toggleInvisibles();
    }
  return ret;
  };
ktml.prototype.insertText=function(sText,select_what){
  var new_text=this.edit.createTextNode(sText);
  this.insertNodeAtSelection(new_text,select_what);
  }
ktml.prototype.insertHTML=function(sHTML,select_what,add_undo) {
	if(this.displayMode!='RICH') {
		return;
		}
	add_undo=util_defaultValue(add_undo,true);
	select_what=util_defaultValue(select_what,"");
	if(add_undo&&this.undo) {
	this.undo.update();
	}
	var tr;
	tr=this.edit.selection.createRange();
	var newID=this.getUniqueID();
	if(select_what=="after") {
	sHTML+='<br id="kt_removable">';
	}
	else if(select_what=="first-node"||select_what=="first-leaf") {
		var before='';
		var after='';
		if(/</.test(sHTML)) {
			before=sHTML.substring(0,sHTML.indexOf("<"));
		}
		if(/>/.test(sHTML)) {
			after=sHTML.substring(sHTML.lastIndexOf(">")+1);
		}
		sHTML=sHTML.substring(before.length,sHTML.length-after.length);
		sHTML=before+'<span id="'+newID+'">'+sHTML+'</span>'+after;
	}
	if(this.edit.selection.type=="None"||this.edit.selection.type=="Text") {
    if(tr.parentElement().ownerDocument==this.edit) {
    	tr.pasteHTML(sHTML);
      }
	}
	else {
		if(is.ie) {
			if(tr(0).ownerDocument==this.edit) {
				this.edit.selection.clear();
				tr=this.edit.selection.createRange();
				tr.pasteHTML(sHTML);
			}
		}
		else {
			if(tr.parentElement().ownerDocument==this.edit) {
				tr.pasteHTML(sHTML);
			}
		}
	}
	if(select_what=="after") {
		var newSpan=this.edit.getElementById("kt_removable");
		if(newSpan) {
			if(is.mozilla) {
				try {
					tr.setEndBefore(newSpan);
				}
				catch(err) {}
			try {
				tr.setStartBefore(newSpan);
			}
			catch(err) {}
			this.cw.focus();
			tr.select();
		}
		newSpan.parentNode.removeChild(newSpan);
	}
}
  else if(select_what=="first-node") {
  	var newSpan=this.edit.getElementById(newID);
    if(newSpan) {
    	var newEl=newSpan.firstChild;
      while(newEl&&newEl.nodeType!=1) {
      	newEl=newEl.nextSibling;
        }
      if(newEl) {
        if(newEl.nodeType==1) {
        	newSpan.parentNode.replaceChild(newEl,newSpan);
        	this.logic_domSelect(newEl);
          }
        }
      else {
        if(is.ie) {
        	var selRng=this.edit.body.createTextRange();
        	selRng.moveToElementText(newSpan);
        	selRng.select();
        	var selBefore=selRng.duplicate();
        	selBefore.collapse(true);
        	var selAfter=selRng.duplicate();
        	selAfter.collapse(false);
          }
      	var parNode=newSpan.parentNode;
      	var textNode=this.edit.createTextNode(newSpan.innerText);
      	parNode.replaceChild(textNode,newSpan);
        if(is.ie) {
        	selRng.setEndPoint("StartToStart",selBefore);
        	selRng.setEndPoint("EndToEnd",selAfter);
        	selRng.select();
          }
        else {
        	this.edit.selection.removeAllRanges();
        	this.edit.selection.selectAllChildren(textNode);
        	this.edit.selection.collapse(textNode,0);
        	this.edit.selection.extend(textNode,textNode.textContent.length);
          }
        }
      }
    }
  else if(select_what=="first-leaf") {
  	var newSpan=this.edit.getElementById(newID);
    if(newSpan) {
    	var newEl=newSpan;
    	var firstEl=newEl.firstChild;
      while(true) {
      	var tmp=newEl.firstChild;
        while(tmp&&tmp.nodeType!=1) {
        	tmp=tmp.nextSibling;
          }
        if(tmp) {
          if(firstEl==null) {
          	firstEl==tmp;
            }
        	newEl=tmp;
          }
        else {
        	break;
          }
        }
      if(newEl) {
        if(newEl.nodeType==1) {
        	newSpan.parentNode.replaceChild(firstEl,newSpan);
        	this.logic_domSelect(newEl,null);
          }
        }
      else {
        if(is.ie) {
        	var selRng=this.edit.body.createTextRange();
        	selRng.moveToElementText(newSpan);
        	selRng.select();
        	var selBefore=selRng.duplicate();
        	selBefore.collapse(true);
        	var selAfter=selRng.duplicate();
        	selAfter.collapse(false);
          }
      	var parNode=newSpan.parentNode;
      	var textNode=this.edit.createTextNode(newSpan.innerText);
      	parNode.replaceChild(textNode,newSpan);
        if(is.ie) {
        	selRng.setEndPoint("StartToStart",selBefore);
        	selRng.setEndPoint("EndToEnd",selAfter);
        	selRng.select();
          }
        else {
        	this.edit.selection.removeAllRanges();
        	this.edit.selection.selectAllChildren(textNode);
        	this.edit.selection.collapse(textNode,0);
        	this.edit.selection.extend(textNode,textNode.textContent.length);
          }
        }
      }
    }
  if(add_undo&&this.undo) {
  	this.undo.addEdit();
    }
  };
ktml.prototype.getNextElementName=function(tagName,attrName,attrValue) {
	var elTags=this.edit.body.getElementsByTagName(tagName.toUpperCase());
	var elCount=elTags.length;
	var ret=1;
	var ocu=[];
	var rex=new RegExp(attrValue+'(\\d+)','i');
	for(var i=0;i<elCount;i++) {
	var oEl=elTags[i];
	var m=oEl[attrName].match(rex);
  if(m) {
  	var curCnt=parseInt(m[1],10);
  	ocu.push(curCnt);
    }
  }
	ocu.sort();
  if(ocu.length>0&&ocu[0]>1) {
  	return 1;
    }
	for(var i=1;i<ocu.length;i++) {
    if(ocu[i]>(ocu[i-1]+1)) {
    	return ocu[i-1]+1;
      }
    }
	return ocu.length+1;
  };
ktml.prototype.logic_setDisplayMode=function(runHooks){
	var mode=this.swapToMode;
	var btn=KTStorage.get(this.toolbar.swap);
	if(mode=='CODE'){
		if(this.MediaPlayer){
			var idx=this.counter;
			this.MediaPlayer.stop(function(){
				ktmls[idx].logic_setDisplayMode();
			});
			return;
		}
		this.preserveSelection(false);
		var a,i,s="",ua;
		ua=navigator.userAgent;
		if(is.mozilla&&(ua.indexOf("Win95")!=-1||ua.indexOf("Win98")!=-1||ua.indexOf("Win 9x 4.90")!=-1)){
			a=this.selectableNodes;
			for(i=0;i<a.length;i++){
				if(a[i].tagName=="TABLE"||a[i].tagName=="IMG"||a[i].tagName=="OBJECT"){
					alert(utility.string.sprintf(translate("move pointer"),a[i].tagName));
					return;
				}
				s+=a[i].tagName+", ";
			}
		}
		utility.window.blockInterface();
		btn.getElement("container").className="toolbaritem_latched";
		btn.state=2;
		this.runHooks('onsetdisplaymode_beforeinvisible');
		if(this.ui.showPI){
			pi_el=document.getElementById(this.name+'_LoadingPI');
			if(pi_el){
				pi_el.style.display='none';  
			}
			pi_el=document.getElementById(this.name+'_PI');
			if(pi_el){
				pi_el.style.display='none';  
			}
		}
		this.Resize();
		//this.textarea.value=this.getPlainSource();
		this.iframe.style.display="none";
		if(this.viewInvisibles){
			this.utils_setInvisibles(true);
		}
		var tdEle=(this.iframe).parentNode;
		this.preserveSelection(false);
		if(tdEle.style.width!=''){
			this.textarea.style.width=((tdEle.style.width).replace('px','')-4)+'px';
		}
		this.textarea.style.display="block";
		this.textarea.focus();
		this.textarea.select();
		this.displayMode="CODE";
		for(var i=0;i<this.toolbar.buttonobjects.length;i++){
			var tbtn=this.toolbar.buttonobjects[i];
			if(tbtn.name=="find_replace"||tbtn.name=="toggle_editmode"||tbtn.name=="about"){
				continue;
			}
			var pbtn=KTStorage.get(tbtn.assoc);
			
			switch(tbtn.button_type){
				case"img":
					pbtn.getElement("container").className="toolbaritem_disabled";
					pbtn.state=0;
					break;
				case"combo":
					pbtn.getElement("container").className="ccontainer_disabled";
					pbtn.state=0;
					break;
				case"select":
					pbtn.getElement("container").className="lcontainer_disabled";
					pbtn.state=0;
					break;
			}
		}
		if(is.ie){
			var outerHTML=this.taginspector.outerHTML;
			outerHTML=outerHTML.replace(/(<div[^>]*>).*$/ig,'$1</DIV>');
			this.taginspector.outerHTML=outerHTML;
			this.taginspector=document.getElementById(this.name+'_ti').getElementsByTagName('div')[0];
		}
		else{}
		this.taginspector.innerHTML=translate("Not Available in Source View",this.config.UILanguage);
		if(this.textarea.style.height&&this.ui.showPI){
			var txtHt = parseInt((this.textarea.style.height).replace('px',''));			
			var tgHt = parseInt((this.taginspector.style.height).replace('px',''));
			var fxHt=is.ie?0:12;
			this.textarea.style.height=parseInt(txtHt+tgHt+fxHt)+'px';
		}
		this.collapse(false);
		utility.window.unblockInterface();
		if(runHooks)
			this.runHooks('onsetdisplaymode');
		
	}
	else{
		btn.getElement("container").className="toolbaritem_flat";
		btn.state=0;
		if(is.mozilla&&this.fullScreenState){
			document.body.style.MozUserSelect='none';
		}
		this.textarea.style.display="none";
		this.iframe.style.display="block";
		this.displayMode="RICH";
		this.collapse(true);
		var toundo=false;
		if(this.undo&&this.textarea.value!=this.getPlainSource()) {
			toundo=true;
		}
		if(this.textarea.value!="") {
			this.setContent(HandleIncomingText(this,this.textarea.value,mode));
		}
		else {
			 this.edit.body.innerHTML="<p></p>";
		}
		if(is.mozilla){
			this.edit.designMode='on';
			this.edit.execCommand("useCSS",false,true);
			this.fixMozEditor();
		}
		if(this.viewInvisibles){
			if(is.ie){
				this.utils_setInvisibles(false);
			}
			else{
				setTimeout("ktmls["+this.counter+"].utils_setInvisibles(false)",1);
			}
		}
		if(toundo){
			try{
				this.undo.addEdit();
			}
			catch(e){}
		}
		if(this.iframe.focus){
			this.iframe.focus();
		}
		this.cw.focus();
		if(is.ie){
			var rng=this.edit.body.createTextRange();
			rng.collapse(true);
			rng.select();
			this.util_saveSelection();
		}
		else{
			try{
				var sel=this.cw.getSelection();
				sel.collapse(this.edit.body.firstChild,0);
			}
			catch(e){}
		}
		for(var i=0;i<this.toolbar.buttonobjects.length;i++){
			var tbtn=this.toolbar.buttonobjects[i];
			if(tbtn.name=="toggle_editmode"){
				continue;
			}
			var pbtn=KTStorage.get(tbtn.assoc);
			switch(tbtn.button_type){
				case"img":
					if(this.viewInvisibles&&tbtn.name=="toggle_visible"){
						pbtn.getElement("container").className="toolbaritem_latched";
					}
					else{
						pbtn.getElement("container").className="toolbaritem_flat";
					}
					pbtn.state=1;
					break;
				case"combo":
					pbtn.getElement("container").className="ccontainer";
					pbtn.state=1;
					break;
				case"select":
					pbtn.getElement("container").className="lcontainer";
					pbtn.state=1;
					break;
			}
		}
		this.taginspector.innerHTML="";
		this.displayShouldChange=true;
		//this.myCustomResize(this.config_var.width,this.config_var.height);
		wait_displayChanged(this);
	}
};
ktml.prototype.setContent=function(text){
	if(text.match(/^\s*$/)||text.match(/^\s*<br\s*\/?>$/i)){
		text="<p>&nbsp;</p>";
	}
  text=text.replace(/\sonclick=/ig,' kt_onclick=');
  this.edit.body.innerHTML=util_plain2translated(text,this.counter);
};
function util_plain2translated(str,counter){
  if(typeof KTML_Translators!="undefined"){
    for(var i in KTML_Translators){
      eval("str = "+KTML_Translators[i]+"_translateMarkup(str,'"+i+"', "+counter+");");
      }
    }
  return str;
};
function util_translated2plain(str){
  var m=str.match(new RegExp("<img[^>]*>","gi"));
  var idxs1={};
  var vals1={};
  if(!m){
    return str;
    }
  var i=m.length;
  while(i--){
    var orig=m[i].match(/\sorig=['"]?([^'">]*)['"]?/i);
    if(orig){
      vals1["KT_REPLACEMENT"+i]=decodeURIComponent(unescape(orig[1]));
      idxs1["KT_REPLACEMENT"+i]=m[i];
      }
    }
  var ostr=str;
  for(var idx in idxs1){
    var i1=str.indexOf(idxs1[idx]);
    str=str.substr(0,i1)+vals1[idx]+str.substr(i1+idxs1[idx].length);
    }
  return str;
};
ktml.prototype.getModuleProperty=function(moduleName,propertyName) {
	if(typeof(this.config_var['module_props'][moduleName])!="undefined"&&typeof(this.config_var['module_props'][moduleName][propertyName])!="undefined") {
		return this.config_var['module_props'][moduleName][propertyName];
	}
	else {
		return undefined;
	}
};
ktml.prototype.setModuleProperty=function(moduleName,propertyName,propertyValue) {
	if(typeof(this.config_var['module_props'][moduleName])=="undefined") {
		this.config_var['module_props'][moduleName]= {};
	}
	this.config_var['module_props'][moduleName][propertyName]=propertyValue;
};
ktml.prototype.hasModuleProperty=function(moduleName,propertyName) {
	try {
		return(typeof this.config_var['module_props'][moduleName][propertyName]!='undefined')
	}
	catch(e) {
		return false;
	}
};
ktml.prototype.makeRequest=function(module,method,postParams,fct,show_error){
	if(KtmlDevelopment){
		show_error=true;
	}
	else{
		if(!this.visible){
			show_error=false;
		}
		else{
			if(typeof(show_error)=="undefined"){
				show_error=true;
			}
		}
	}
	var url=KtmlAbsoluteServicePath;
	url+=((ktml_init_object.server=="asp"&&module=="spellcheck"&&method=="spellcheck")?((/\?/.test(url)?"&":"?")+"develmoduleid=spellcheck"):"");
	try{
		this.rpc=new utility.req.request();
	}
	catch(e){
		this.rpc=false;
	}
	var counter=this.counter;
	var completeEvent=function(sock){
		var obj=null;
		var str='';
		var err=null;
		try{
			str=sock.responseText;
			obj=eval('('+str+')');
		}
		catch(err){}
		if(err&&is.ie&&err.number==-1072896658){
			err=null;
			try{
				window.execScript("Function BinaryToString(Binary)\r\nDim I,S\r\nFor I = 1 to LenB(Binary)\r\nS = S & Chr(AscB(MidB(Binary,I,1)))\r\nNext\r\nBinaryToString = S\r\nEnd Function","VBScript");
				str=BinaryToString(sock.responseBody);
				obj=eval('('+str+')');
			}
			catch(err){}
		}
		if(err&&err.number!=-2146827286){
			if(KtmlDevelopment){
				alert("Cannot parse server response: \n==== Error number:"+(err?err.number:"NA")+"\n==== Module, method:"+module+", "+method+"\n==== Server response "+(is.ie?"(CTRL+C to copy)":"")+"\n"+str+"==== End server response");
			}
			else{
				if(show_error){
					alert(translate("cannot parse server"));
				}
			}
			ktmls[counter].logger.log(LOG_ERROR,'SP','Module '+module+', method '+method+"<br>==== Server response ====\r\n<xmp class=\"sp_error\">"+str+"</xmp>\r\n==== End server response ====");
			return;
		}
		else if(obj===null||err&&err.number==-2146827286){
			var err_str='';
			if(KtmlDevelopment){
				err_str=str.replace(/<(\/?)(body|head|style|html|meta|script)[^>]*>/gi,"");
			}
			else{
				err_str=translate("cannot parse server")
				//err_str='4646';
				//err_str=str.replace(/<(\/?)(body|head|style|html|meta|script)[^>]*>/gi,"");
			}
			obj={thumbnail:"ERROR",error:{code:'INVALID_SERVER_RESPONSE',message:err_str}};ktmls[counter].logger.log(LOG_ERROR,'SP','Module '+module+', method '+method+"<br>==== Server response ====\r\n<xmp class=\"sp_error\">"+str+"</xmp>\r\n==== End server response ====");
		}
		if(fct){
			try{
				fct(obj);
			}
			catch(err){
				if(err.number!=-2147418094&&err.number!=-2146823277){
					throw(err);
				}
			}
		}
	};
	var default_post={'id':this.id,'module':module,'method':method,'encoding':this.charset};
	Object_weave(default_post,postParams);
	this.rpc.initialize(url,{'method':'post','async':true,'get':{'encoding':this.charset},'post':default_post,'onComplete':completeEvent});
};
ktml.prototype.wrapSelection=function(){
	this.selectedNode=this.logic_getSelectedNode();
	var rng=this.edit.selection.createRange();
	if(this.edit.selection.type=='None'){
		var nodesArray=[rng.parentElement()];
	}
	else{
		var nodesArray=this.getSelectionAsNodes(rng);
	}
	var first=nodesArray[0];
	if(!first){
		return;
	}
	var last=nodesArray[nodesArray.length-1];
	var startSel=utility.dom.createElement('br',{'style':'display: none','class':'ktml_hidden ktml_selstart'},this.cw);
	var endSel=utility.dom.createElement('br',{'style':'display: none','class':'ktml_hidden ktml_selend'},this.cw);
	if(Array_indexOf(['img','table','hr'],first.tagName.toLowerCase())>=0&&nodesArray.length==1){
		var par=first.parentNode;
		par.insertBefore(startSel,first);
		utility.dom.insertAfter(endSel,first);
	}
	else{
		if(first.childNodes.length){
			first.insertBefore(startSel,first.childNodes[0]);
		}
		else{
			first.appendChild(startSel);
		}
		last.appendChild(endSel);
	}
};
ktml.prototype.save=function(ready_func){
	var simple_save=false;
	if(this.viewInvisibles==true){
		this.logic_toggleInvisibles();
	}
	if(this.hasModule('xhtml')){
		if(typeof(this.formatter)!="undefined"&&this.getModuleProperty('xhtml','xhtml_save')=='true'){
			if(this.formatter.type=="js"){
				this.formatter.save();
				this.readyForSave=true;
				this.runHooks('onsavetext');
				if(ready_func){
					ready_func();
				}
			}
			else{
				var counter=this.counter;
				this.formatter.save(function(){
					ktmls[counter].readyForSave=true;
					ktmls[counter].runHooks('onsavetext');
					if(ready_func){
						ready_func();
					}
				});
			}
			simple_save=false;
		}
		else{
			simple_save=true;
		}
	}
	else{
		simple_save=true;
	}
	if(simple_save){
		this.formElement.value=HandleOutgoingText(this);
		this.readyForSave=true;
		this.runHooks('onsavetext');
		if(ready_func){
			ready_func();
		}
	}
};
ktml.submit_all=function(e){
	var o=utility.dom.setEventVars(e);
	if(o.targ){
		fire_starter=o.targ;
	}
	fire_starter=utility.dom.getParentByTagName(fire_starter,"FORM");
	check_func=function(){
		var ktmlsready=0,ktmls_length=0;
		for(var i=0;i<ktmls.length;i++){
			if(fire_starter&&fire_starter!=ktmls[i].formElement.form){
				continue;
			}
			ktmls_length++;
			if(ktmls[i].readyForSave){
				ktmlsready++;
			}
		}
		if(ktmls_length==ktmlsready){
			util_formAddActionButton(fire_starter);
			var ret=KT_formSubmittalHandler(check_func.eventArg);
			if(ret){
				fire_starter.submit();
			}
		}
	};
	check_func.eventArg=o.e;
	var ktmlsready=0,ktmls_length=0;
	var stop_it=false;
	for(var i=0;i<ktmls.length;i++){
		if(fire_starter&&fire_starter!=ktmls[i].formElement.form){
			continue;
		}
		if(ktmls[i].displayMode=="CODE"){
			stop_it=true;
			alert(translate("submit disabled in source view"));
			break;
		}
		ktmls_length++;
		if(!ktml_isElementVisible(i)){ktmls[i].readyForSave=true;
			continue;
		}
		if(!ktmls[i].readyForSave){
			if(ktmls[i].flags.xhtml_exists&&HandleOutgoingText(ktmls[i])){
				stop_it=true;
				ktmls[i].save(check_func);
			}
			else{
				stop_it=stop_it||false;
				ktmls[i].save();
				ktmlsready++;
			}
		}
		else{
			ktmlsready++;
		}
	}
	if(stop_it){
		utility.dom.stopEvent(o.e);
		return false;
	}
	else{
		if(ktmlsready==ktmls_length){
			util_formAddActionButton(fire_starter);
		}
		return true;
	}
};
function util_formAddActionButton(frm) {
  if(typeof(nxt_form_attach)=="function") {
    if(typeof window.UNI_buttonpressed!='undefined') {
    	var button_regexp=window.UNI_buttonpressed;
      }
    else {
    	$UNI_DELETE_BUTTON_NAME=/delete/i;
    	$UNI_INSERT_BUTTON_NAME=/insert/i;
    	$UNI_UPDATE_BUTTON_NAME=/update/i;
    	$UNI_CANCEL_BUTTON_NAME=/cancel/i;
    	$UNI_LOGIN_BUTTON_NAME=/login/i;
    	var form_buttons=[];
      Array_each(frm.getElementsByTagName('input'), function(button,i) {
        if(button.type&&(button.type.toLowerCase()=='submit'||button.type.toLowerCase()=='button')) {
        	Array_push(form_buttons,button);
          }
        });
      if(form_buttons.length==1) {
      	var button_regexp=form_buttons[0].name;
        }
      else {
      	var update=false;
      	var insert=false;
      	var login=false;
      	for(var i=0;i<form_buttons.length;i++) {
        	var button=form_buttons[i];
          if(button.name.toString().match($UNI_UPDATE_BUTTON_NAME)) {
          	update=true;
            }
          if(button.name.toString().match($UNI_INSERT_BUTTON_NAME)) {
          	insert=true;
            }
          if(button.name.toString().match($UNI_LOGIN_BUTTON_NAME)) {
          	login=true;
            }
          }
        if(update) {
        	var button_regexp=$UNI_UPDATE_BUTTON_NAME;
          }
        else {
          if(insert) {
          	var button_regexp=$UNI_INSERT_BUTTON_NAME;
            }
          else {
            if(login) {
            	var button_regexp=$UNI_LOGIN_BUTTON_NAME;
              }
            }
          }
        }
      }
    Array_each(frm.getElementsByTagName('input'), function(button,i) {
      if(button.type&&(button.type.toLowerCase()=='submit'||button.type.toLowerCase()=='button')) {
        if(button.className=='mxw_v'||button.className=='mxw_add') {
        	return true;
          }
        if(button.name.match(button_regexp)) {
          var hd=utility.dom.createElement('input', {
          	'type': 'hidden','name': button.name,'value': button.value
            });
        	hd=frm.appendChild(hd);
          }
        }
      });
    }
  else {
    if(clickedSubmitButton) {
    	var already=null;;
      while((already=document.getElementById('kt_form_submit_button'))) {
      	already.parentNode.removeChild(already);
        }
      var hd=utility.dom.createElement('input',{'id':'kt_form_submit_button','type':'hidden','name': clickedSubmitButton.name,'value':clickedSubmitButton.value});
    	hd=frm.appendChild(hd);
    	clickedSubmitButton=null;
      }
    }
};
ktml.prototype.toggleFullScreen=function(){
  if(!this.fullScreenState){
    this.formElement.value=HandleOutgoingText(this);
    window.slaveKtml=this;
    wnd=utility.window.openWindow("ktml_full_window_editor",ktml_init_object.path+"core/htm/full.html",window.screen.availWidth-5,window.screen.availHeight-45);
    if(wnd){
      this.fullScreenState=true;
      this.preserveSelection(false);
      wnd.moveTo(-3,-3);
      var el=document.getElementById('modalBlocker');
      try{
        el.focus();
        }
      catch(err){}
      }
    }
  else{
    if(!opener||opener&&opener.closed){
      return;
      }
    var new_html=this.getPlainSource();
    if(is.mozilla){
      new_html=new_html.replace(/<img[^>]*>/gi,function(a,b,c){
        return a.replace(/\ssrc="(?:\.\.\/){4}/,' src="'+opener.ktml_init_object.path+'../../');
        });
      new_html=new_html.replace(/<a[^>]*>/gi,function(a,b,c){
        return a.replace(/\shref="(?:\.\.\/){4}/,' href="'+opener.ktml_init_object.path+'../../');
        });
      }
    opener.slaveKtml.formElement.value=HandleOutgoingText(this,new_html);
    opener.slaveKtml.setContent(new_html);
    opener.slaveKtml.fullScreenState=false;
    utility.window.close();
    opener.focus();
    opener.slaveKtml.invalidate();
    opener.slaveKtml.cw.focus();
    }
  }
function ktml_doBold(){
  this.logic_doFormat(DECMD_BOLD);
  }
function ktml_doItalic() {
	this.logic_doFormat(DECMD_ITALIC);
  }
function ktml_doUnderline() {
	this.logic_doFormat('Underline');
  }
function ktml_doUndo() {
  if(this.undo) {
  	this.undo.undo();
    }
  }
function ktml_doRedo() {
  if(this.undo) {
  	this.undo.redo();
    }
  }
function ktml_addUndoContext() {
  if(this.undo) {
  	this.undo.addEdit();
    }
  }
ktml.prototype.doBold=ktml_doBold;
ktml.prototype.doItalic=ktml_doItalic;
ktml.prototype.doUnderline=ktml_doUnderline;
ktml.prototype.doUndo=ktml_doUndo;
ktml.prototype.doRedo=ktml_doRedo;
ktml.prototype.addUndoContext=ktml_addUndoContext;
ktml.prototype.getSelectedNode=ktml.prototype.logic_getSelectedNode;
ktml.prototype.removeSelectedNode=ktml.prototype.logic_removeTag;
ktml.prototype.applyHeadingStyle=ktml.prototype.logic_InsertHeading;
$KT_CMD_ID=0;
$KT_JS_STRING=1;
$KT_JS_FUNCTION=2;
$KT_JS_CALLBACK=3;
function ComboButton(button_id,deferred){
  if(typeof deferred=='undefined'){
    deferred=false;
    }
  this.deferred=deferred;
  KTStorage.add(this);
  var cb_id=this.id;
  this.toolbar_button=button_id;
  this.rendered=false;
  this.visible=true;
  var button=KTStorage.get(button_id);
  this.title=button.alt?translate(button.alt,button.ktml.config.UILanguage):translate(button.name,button.ktml.config.UILanguage);
  this.secTitle=button.secAlt?translate(button.secAlt,button.ktml.config.UILanguage):this.title;
  this.default_value=button.default_value;
  this.htmlstring='<table border="0" cellspacing="0" cellpadding="0" class="ccontainer" onmouseover="combobutton_mouseover(event)" onmouseout="combobutton_mouseout(event)" onmousedown="combobutton_mousedown(event)" onmouseup="combobutton_mouseup(event)" toolbar_button="'+button_id+'" button="'+this.id+'" kttype="combo" id="'+this.id+'">\
   <tr>\
    <td title="'+this.title+'" class="drop_down_image" onmouseup="combobutton_mouseup1(event)" id="'+cb_id+'_cell"></td>\
    <td title="'+this.secTitle+'" onmouseup="combobutton_mouseup2(event)"><div class="drop_down_arrow"><div style="background-image:url('+KtmlRelativeImagePath+'arrow2.gif) !important; width:12px !important; height:16px !important; border-width:0px !important; margin: 0px !important; padding:0px !important; overflow:hidden !important;"></div></div></td>\
   </tr>\
  </table>';
  this.setTooltip=function(_title,_secTitle){
    if(typeof _title=="undefined"){
      return;
      }
    if(typeof _secTitle=="undefined"){
      _secTitle=_title;
      }
    var _cell1=this.getElement("table").rows[0].cells[0];
    var _cell2=this.getElement("table").rows[0].cells[1];
    _cell1.title=_title;
    _cell2.title=_secTitle;
    this.title=_title;
    this.secTitle=_secTitle;
    }
  this.setValue=function(newValue){
    this.value=newValue;
    this.paint();
    };
  this.getValue=function(){
    return this.value;
    };
  this.closeCallback=function(){};
  this.width=button.width=41;
  this.paint=function(){
    var button=KTStorage.get(button_id);
    var cb=KTStorage.get(cb_id);
    button.params.paint.call(cb);
    };
  this.element=this.id;
  this.table=this.id;
  this.cell=cb_id+"_cell";
  var _this=this;
  if(button.params.title){
    this.getTitle=function(){
      return button.params.title.call(_this);
      }
    }
  if(this.deferred){}
  else{
    button.ktml.toolbar.addAfterAction(function(){
      _this.rendered=true;
      var button=KTStorage.get(_this.toolbar_button);
      button.width=_this.width=_this.getWidth();
      _this.setVisible(_this.visible);
      _this.setValue(_this.default_value);
      });
    }
  };
ComboButton.prototype.transformToImageButton=function(){
  if(this.transformedToImageButton){
    return;
    }
  this.transformedToImageButton=true;
  var cell=this.getElement("table").rows[0].cells[1];
  cell.firstChild.firstChild.className="drop_down_image_disabled";
  };
ComboButton.prototype.deferredAfterAction=function(){
  if(this.deferred){
    this.rendered=true;
    var button=KTStorage.get(this.toolbar_button);
    button.width=this.width=this.getWidth();
    this.setVisible(this.visible);
    this.setValue(this.default_value);
    }
  };
ComboButton.prototype.getAsElement=function(){
  var tmp=document.createElement('span');
  tmp.innerHTML=this.htmlstring;
  return tmp.childNodes[0];
  };
ComboButton.prototype.getElement=function(what){
  switch(what){
    case"container":
      return document.getElementById(this.element);
      break;
    case"ccontainer":
      return document.getElementById(this.element).getElementsByTagName('div');
      break;
    case"table":
      return document.getElementById(this.table);
      break;
    case"cell":
      return document.getElementById(this.cell);
      break;
    }
  };
ComboButton.prototype.getWidth=function(){
  return 41;
  };
ComboButton.prototype.dispose=function() {};
var ignore_next=false;
function combobutton_mouseover(e) {
  if(ignore_next) {
  	ignore_next=false;
  	return;
    }
	var obj=utility.dom.setEventVars(e);
	var src=obj.targ;
  if(src.tagName.toLowerCase()!='table') {
  	src=utility.dom.getParentByTagName(src,'table');
    }
	var _this=KTStorage.get(src.getAttribute('button'));
  if(_this.state==0) {
  	return;
    }
	var comboDownArrow=src.rows[0].cells[1].firstChild;
  if(src.className!="ccontainer_disabled") {
  	src.className="ccontainer ccontainer_hover";
  	comboDownArrow.className="drop_down_arrow_hover";
    };
  }
function combobutton_mouseout(e) {
	var obj=utility.dom.setEventVars(e);
	var src=obj.targ;
  if(src.tagName.toLowerCase()!='table') {
  	src=utility.dom.getParentByTagName(src,'table');
    }
	var _this=KTStorage.get(src.getAttribute('button'));
  if(_this.state==0) {
  	return;
    }
	var comboDownArrow=src.rows[0].cells[1].firstChild;
  if(src.className!="ccontainer_disabled") {
  	src.className="ccontainer";
  	comboDownArrow.className="drop_down_arrow";
    };
  }
function combobutton_mousedown(e) {
	var obj=utility.dom.setEventVars(e);
	var src=obj.targ;
  if(src.tagName.toLowerCase()!='table') {
  	src=utility.dom.getParentByTagName(src,'table');
    }
	var _this=KTStorage.get(src.getAttribute('button'));
  if(_this.state==0) {
  	return;
    }
	var comboDownArrow=src.rows[0].cells[1].firstChild;
  if(src.className!="ccontainer_disabled") {
  	src.className="ccontainer_inset";
    };
  }
function combobutton_mouseup(e) {
  if(ignore_next) {
  	return;
    }
	var obj=utility.dom.setEventVars(e);
	var src=obj.targ;
  if(src.tagName.toLowerCase()!='table') {
  	src=utility.dom.getParentByTagName(src,'table');
    }
	var _this=KTStorage.get(src.getAttribute('button'));
  if(_this.state==0) {
  	return;
    }
	var comboDownArrow=src.rows[0].cells[1].firstChild;
  if(src.className!="ccontainer_disabled") {
  	src.className="ccontainer ccontainer_hover";
    };
  }
function combobutton_mouseup1(e) {
	var obj=utility.dom.setEventVars(e);
	var src=obj.targ;
	var btn=utility.dom.getParentByTagName(src,'table');
	var cb=KTStorage.get(btn.getAttribute("button"));
  if(cb.state==0) {
  	return;
    }
	var tlb=KTStorage.get(btn.getAttribute("toolbar_button"));
  if(tlb.ktml.toolbar.checkHelp()) {
  	tlb.ktml.toolbar.showHelp(tlb.helpId);
  	return false;
    }
	utility.popup.force=true;
	utility.popup.removeModal();
	utility.popup.force=false;
	ignore_next=true;
	tlb.params.command.call(cb,cb.value);
  }
function combobutton_mouseup2(e) {
	var obj=utility.dom.setEventVars(e);
	var src=obj.targ;
	var btn=utility.dom.getParentByTagName(src,'table');
	var cb=KTStorage.get(btn.getAttribute("button"));
if(cb.state==0) {
	return;
}
	var tlb=KTStorage.get(btn.getAttribute("toolbar_button"));
if(tlb.ktml.toolbar.checkHelp()) {
	tlb.ktml.toolbar.showHelp(tlb.helpId);
	return false;
}
	var cb=KTStorage.get(btn.getAttribute("button"));
	ignore_next=true;
	tlb.params.open.call(cb);
}
function HtmlDropdownButton(button_id) {
	KTStorage.add(this);
	this.toolbar_button=button_id;
	this.rendered=false;
	this.visible=true;
	var button=KTStorage.get(button_id);
	this.title=button.alt?translate(button.alt,button.ktml.config.UILanguage): translate(button.name,button.ktml.config.UILanguage);
	this.options=button.options;
  this.imagesize= {width: 11, height: 15};
	var calc1=79-this.imagesize.width;
	this.htmlstring='<table border="0" cellspacing="0" cellpadding="0" \  class="lcontainer" toolbar_button="'+button_id+'" button="'+this.id+'" id="'+this.id+'">\  <tr valign="middle">\   <td nowrap="nowrap"><div title="'+this.title+'" class="lcontainer_text" style="width:'+(calc1+(is.ie?0:0))+'px;">'+button.options[0].attributes.HTMLValue+'</div></td>\   <td bgcolor="buttonface"><div title="'+this.title+'" class="lcontainer_vrule"><div id="'+this.id+'_arrow" style="background-image:url('+KtmlDirDepth+'core/img/arrow.gif) !important;height:'+this.imagesize.height+'px !important;width:'+this.imagesize.width+'px !important;border-width:0px !important;margin: 0px !important;padding:0px !important;overflow:hidden !important;"></div></div></td>\  </tr>\ </table>\ ';
	this.width=button.width=90;
	var _this=this;
  button.ktml.toolbar.addAfterAction(function() {
  	_this.rendered=true;
  	_this.selectedIndex=-1;
  	_this.highlightedIndex=-1;
  	_this.mustResize=true;
  	_this.initialize();
  	_this.render();
  	var button=KTStorage.get(_this.toolbar_button);
  	_this.setVisible(_this.visible);
  	button.width=_this.width=_this.getWidth();
    });
  };
HtmlDropdownButton.prototype.getElement=function(what) {
  switch(what) {
  	case"container": return document.getElementById(this.id);
  	case"table": return document.getElementById(this.id);
  	case"cell0": return document.getElementById(this.id).rows[0].cells[0];
  	case"arrow": return document.getElementById(this.id+'_arrow');
  	case"optcontainer": return document.getElementById(this.id+'_optcontainer');
    }
	return null;
  };
HtmlDropdownButton.prototype.pickValue=function(idx) {
	var tbl=this.optContainerTable;
	var cell0=this.getElement("cell0");
	var toret=null;
	this.selectedIndex=idx;
  if(is.ie) {
  	var newText=tbl.rows[idx].cells[0].innerText;
    if(cell0.childNodes[0].innerText!=newText) {
    	cell0.childNodes[0].innerText=newText;
      }
    }
  else {
  	var newText=tbl.rows[idx].cells[0].textContent;
    if(cell0.childNodes[0].textContent!=newText) {
    	cell0.childNodes[0].textContent=newText;
      }
    }
	cell0.parentElement.parentElement.parentElement.lastHi=tbl.rows[idx].cells[0];
  };
HtmlDropdownButton.prototype.getWidth=function() {
	return 90;
  };
function htmldropdown_table_click(e) {
	var targetObjectCounter=false;
	var o=utility.dom.setEventVars(e);
	var src=o.targ;
	var src=utility.dom.getParentByTagName(src,'table');
	var toolbar_button=KTStorage.get(src.getAttribute('toolbar_button'));
	var _this=KTStorage.get(src.getAttribute('button'));
  if(_this.state==0) {
  	return;
    }
  if(targetObjectCounter!=null) {
  	utility.dom.stopEvent(e);
    if(!_this.disabled) {
      if(toolbar_button.ktml.toolbar.checkHelp()) {
      	toolbar_button.ktml.toolbar.showHelp(toolbar_button['helpId']);
      	return false;
        }
	     _this.toggleDisplay();
      }
    }
  };
function htmldropdown_select_mouseover() {
  if(tmpObj.select.className!="lcontainer_disabled") {
  	tmpObj.select.className="lcontainer lcontainer_hover";
  	downArrButton.className="lcontainer_vrule_hover";
    }
  };
function htmldropdown_select_mouseout() {
  if(tmpObj.select.className!="lcontainer_disabled") {
  	tmpObj.select.className="lcontainer";
  	downArrButton.className="lcontainer_vrule"
    }
  };
function hndlr_htmldropdown_key(e) {
	var o=utility.dom.setEventVars(e);
	var targetObjectCounter=null;
	var src=o.targ;
	var src=utility.dom.getParentByTagName(src,'div');
	var obj=KTStorage.get(src.getAttribute('button'));
	var btn=KTStorage.get(obj.toolbar_button);
  if(o.e.keyCode==9) {
  	obj.toggleDisplay(0);
  	btn.ktml.util_restoreSelection();
    }
  if(o.e.keyCode==27) {
  	obj.toggleDisplay(0);
  	utility.dom.stopEvent(o.e);
  	btn.ktml.util_restoreSelection();
    }
  if(o.e.keyCode==38) {
  	utility.dom.stopEvent(o.e);
  	var newindex=obj.highlightedIndex-1;
  	if(newindex<0)newindex=0;
  	var tr=obj.setHighlightedIndex(newindex);
    if(utility.dom.getStyleProperty(obj.optcontainer,'display')!='none') {
    	var c=obj.getScrollCoords();
    	var min_display_y=parseInt(c.divpos.y)+parseInt(obj.optcontainer.scrollTop);
    	var max_display_y=min_display_y+parseInt(obj.optcontainer.offsetHeight);
    	var min_tr_y=parseInt(c.trpos.y)-parseInt(obj.optcontainer.scrollTop);
    	var max_tr_y=min_tr_y+parseInt(obj.optContainerTable.rows[obj.highlightedIndex].offsetHeight);
      if(min_tr_y<min_display_y) {
      	obj.optcontainer.scrollTop=-parseInt(c.divpos.y)+parseInt(c.trpos.y);
        }
      }
    }
  if(o.e.keyCode==40) {
  	utility.dom.stopEvent(o.e);
  	var newindex=obj.highlightedIndex+1;
  	if(newindex>=(btn.options.length-1))newindex=(btn.options.length-1);
    var tr=obj.setHighlightedIndex(newindex);
    if(utility.dom.getStyleProperty(obj.optcontainer,'display')!='none') {
    	var c=obj.getScrollCoords();
    	var min_display_y=parseInt(c.divpos.y);
    	var max_display_y=min_display_y+parseInt(obj.optcontainer.offsetHeight);
    	var min_tr_y=parseInt(c.trpos.y);
    	var max_tr_y=min_tr_y+parseInt(obj.optContainerTable.rows[obj.highlightedIndex].offsetHeight);
      if(max_display_y<max_tr_y) {
      	obj.optcontainer.scrollTop=max_tr_y-max_display_y;
        }
      }
    }
  if(o.e.keyCode==13) {
    if(utility.dom.getStyleProperty(obj.optcontainer,'display')!='none') {
    	btn.ktml.util_restoreSelection();
    	obj.setSelectedIndex(obj.highlightedIndex,true);
    	obj.toggleDisplay(0);
    	utility.dom.stopEvent(o.e);
      }
    }
	return false;
  };
HtmlDropdownButton.prototype.getScrollCoords=function() {
	var tr=this.optContainerTable.rows[this.selectedIndex];
	var divpos=utility.dom.getAbsolutePos(this.optcontainer);
	var trpos=utility.dom.getAbsolutePos(tr);
  return {'trpos':trpos,'divpos':divpos};
  };
HtmlDropdownButton.prototype.initialize=function() {
	var toolbar_button=KTStorage.get(this.toolbar_button);
	var tmp='';
	for(var i=0;i<this.options.length;i++) {
    this.options[i].attributes["HTMLValue"]=lang_translatepage(this.options[i].attributes["HTMLValue"],toolbar_button.ktml.config.UILanguage,window);
    }
  };
HtmlDropdownButton.prototype.render=function() {
	this.select=this.getElement("container");
	var tlb=KTStorage.get(this.toolbar_button);
	this.optcontainer=document.createElement("DIV");
	this.optcontainer.className="optcontainer";
	this.optcontainer=tlb.ktml.toolbar.base.insertBefore(this.optcontainer,tlb.ktml.toolbar.base.lastChild);
	this.optcontainer.setAttribute("toolbar_button",this.toolbar_button);
	this.optcontainer.setAttribute("button",this.id);
	this.optcontainer.setAttribute("button",this.id);
	this.optcontainer.id=this.id+'_optcontainer';
	this.table0=this.getElement("container");
	this.table0.rows[0].cells[0].firstChild.textContent=this.options[0].attributes['HTMLValue'];
	this.table0.rows[0].cells[0].firstChild.innerText=this.options[0].attributes['HTMLValue'];
	var innerhtml='<table counter="'+this.counter+'" cellspacing="0" cellpadding="0">';
	for(var i=0;i<this.options.length;i++) {
  	innerhtml+='<tr><td><div class="opt">'+this.options[i].attributes["HTMLValue"]+'</div></td></tr>';
    }
	innerhtml+='</table>';
	this.optcontainer.innerHTML=innerhtml;
  utility.dom.attachEvent(this.optcontainer,'onmousedown',function(e) {
  	var o=utility.dom.setEventVars(e);
    if(o.targ.scrollWidth<=o.e.offsetX&&o.e.offsetX<o.targ.offsetWidth) {
    	tlb.ktml.preserveSelection(false);
      }
    });
  utility.dom.attachEvent(this.select,'onmouseup',function(e) {
  	htmldropdown_table_click(e);
    });
	var downArrButton=utility.dom.getElementsBySelector('.lcontainer_vrule',this.table0);
	if(downArrButton)downArrButton=downArrButton[0];
  var _this=this;
  utility.dom.attachEvent(this.select,'onmouseover',function() {
    if(_this.state!=0) {
    	_this.select.className="lcontainer lcontainer_hover";
    	downArrButton.className="lcontainer_vrule_hover";
      }
    });
  utility.dom.attachEvent(this.select,'onmouseout',function() {
    if(_this.state!=0) {
    	_this.select.className="lcontainer";
    	downArrButton.className="lcontainer_vrule"
      }
    });
	this.optContainerTable=this.optcontainer.getElementsByTagName('table')[0];
	utility.dom.attachEvent(this.optcontainer,'keydown',hndlr_htmldropdown_key,1);
	utility.dom.setUnselectable(this.select);
	utility.dom.setUnselectable(this.optcontainer);
	for(var i=0;i<this.options.length;i++) {
  	var newOptionCell=this.optContainerTable.rows[i].cells[0];
  	newOptionCell.noWrap="true";
  	newOptionCell.onmouseover=HtmlDropdownButton.rowHi;
  	newOptionCell.onmouseup=HtmlDropdownButton.set_selected_index_and_close;
    }
  this.rendered=true;
  if(is.ie) {
    utility.dom.attachEvent(this.optcontainer,"onmousewheel",function(e) {
    	var amount=window.event.wheelDelta;
    	amount=amount/120;
    	utility.dom.stopEvent(window.event);
    	this.scrollTop-=amount*45;
    	return false;
      }, false);
    }
  else {
    this.optcontainer.addEventListener("DOMMouseScroll",function(e) {
      try {
      	this.scrollTop+=e.detail*15;
      	utility.dom.stopEvent(e);
      	return false;
        }
      catch(err) {}
      }, true);
    }
  };
HtmlDropdownButton.prototype.show=function() {
	this.optcontainer.style.top='-20000px';
	this.optcontainer.style.display='block';
  utility.dom.putElementAt(this.optcontainer,this.table0,'03',{x:is.ie?0:2,y:is.ie?-1:-3},false);
	HtmlDropdownButton.sizeToContent(this.id);
	utility.dom.bringIntoView(this.optcontainer);
	this.open=1;
	this.optcontainer.style.zIndex=200;
	var _this=this;
  utility.popup.makeModal(function() {
  	_this.hide();
    }, this.optcontainer);
  if(this.highlightedIndex>=0) {
  	this.scrollToIndex(this.highlightedIndex);
    };
	var _ktml=KTStorage.get(this.toolbar_button).ktml;
	_ktml.util_saveSelection();
  if(is.ie) {
  	utility.dom.toggleSpecialTags(this.optcontainer,false,1,_ktml.edit,_ktml.iframe);
    }
  };
HtmlDropdownButton.prototype.scrollToIndex=function(idx) {
	var tbl=this.optContainerTable;
	var sOf=0;
	for(var i=0;i<tbl.rows.length;i++) {
    if(i==idx) {
    	sOf=tbl.rows[i].offsetTop;
    	break;
      };
    }
	this.optcontainer.scrollTop=sOf;
  };
HtmlDropdownButton.prototype.hide=function() {
	this.optcontainer.style.display='none';
	this.open=0;
  if(is.ie) {
  	var _ktml=KTStorage.get(this.toolbar_button).ktml;
  	utility.dom.toggleSpecialTags(this.optcontainer,false,0,_ktml.edit,_ktml.iframe);
    }
  };
HtmlDropdownButton.rowHi=function(targEl) {
	var wantedHighlightedIndex=-1;
	var obj=null;
	var button=null;
  if(typeof targEl=="number") {
  	wantedHighlightedIndex=targEl;
  	obj=this;
    }
  else if(typeof targEl=="undefined") {
  	targEl=event.srcElement;
    while(targEl&&(!(button=targEl.getAttribute("button")))) {
      if(targEl.tagName=="TR") {
      	wantedHighlightedIndex=targEl.rowIndex;
        }
	     targEl=targEl.parentElement;
      }
    if(button===null) {
    	return;
      }
    obj=KTStorage.get(button);;
    }
  else if(is.mozilla) {
    if(typeof(targEl.target)!="undefined") {
    	targEl=targEl.target;
      }
    while(targEl&&(!(button=targEl.getAttribute("button")))) {
      if(targEl.tagName=="TR") {
      	wantedHighlightedIndex=targEl.rowIndex;
        }
    	targEl=targEl.parentElement;
      }
    if(button===null) {
    	return true;
      }
  	obj=KTStorage.get(button);;
    }
  else {
  	utility.dom.stopEvent(window.event);
    while(targEl&&(!(button=targEl.getAttribute("button")))) {
      if(targEl.tagName=="TR") {
      	wantedHighlightedIndex=targEl.rowIndex;
        }
    	targEl=targEl.parentElement;
      }
    if(button===null) {
    	return true;
      }
  	obj=KTStorage.get(button);;
    }
  if(typeof(obj.highlightedIndex)!="undefined"&&obj.highlightedIndex!=wantedHighlightedIndex) {
  	obj.unsetHighlightedIndex(obj.highlightedIndex);
    }
	obj.highlightedIndex=wantedHighlightedIndex;
  var mouseovertext='';
  if(0<=obj.highlightedIndex&&obj.highlightedIndex<obj.optContainerTable.rows.length) {
    mouseovertext=obj.optContainerTable.rows[obj.highlightedIndex].cells[0].innerText;
    obj.optContainerTable.rows[obj.highlightedIndex].cells[0].firstChild.title=mouseovertext;
  	obj.optContainerTable.rows[obj.highlightedIndex].cells[0].firstChild.style.margin='0px';
  	obj.optContainerTable.rows[obj.highlightedIndex].cells[0].firstChild.style.border='1px solid black';
    }
  };
HtmlDropdownButton.rowLow=function(wantedHilightedIndex) {
	var toolbar_button=KTStorage.get(this.toolbar_button);
  if(0<=wantedHilightedIndex&&wantedHilightedIndex<this.optContainerTable.rows.length) {
  	this.optContainerTable.rows[wantedHilightedIndex].cells[0].firstChild.style.margin='1px';
  	this.optContainerTable.rows[wantedHilightedIndex].cells[0].firstChild.style.border='0px solid black';
    }
  };
HtmlDropdownButton.prototype.setHighlightedIndex=HtmlDropdownButton.rowHi;
HtmlDropdownButton.prototype.unsetHighlightedIndex=HtmlDropdownButton.rowLow;
HtmlDropdownButton.setDisabled=function(flag) {
  	this.disabled=flag;
  	this.select.className="lcontainer"+(flag?" lcontainer_disabled": "");
    };
HtmlDropdownButton.prototype.setDisabled=HtmlDropdownButton.setDisabled;
HtmlDropdownButton.updateState=function(flag) {
	this._disabled=flag;
	this.select.className="lcontainer"+(flag?" lcontainer_disabled": "");
  };
HtmlDropdownButton.prototype.updateState=HtmlDropdownButton.updateState;
HtmlDropdownButton.sizeToContent=function(obj_id) {
	var obj=KTStorage.get(obj_id);
  if(obj.mustResize) {
  	var oldtop=obj.optcontainer.style.top;
  	obj.optcontainer.style.top="-10000px";
    }
	obj.optcontainer.style.display='block';
  if(obj.mustResize) {
  	var nw=obj.optContainerTable.offsetWidth+(obj.optContainerTable.offsetHeight<=obj.optcontainer.offsetHeight?0: 0);
    if(obj.optContainerTable.offsetHeight<obj.optcontainer.offsetHeight) {
    	obj.optcontainer.style.height=(obj.optContainerTable.offsetHeight+(is.ie?(document.compatMode=="BackCompat"?2: 0): 0))+"px";
    	nw+=(is.ie?(document.compatMode=="BackCompat"?2: 0): 0);
      }
    else {
    	nw+=obj.optcontainer.offsetWidth-obj.optcontainer.clientWidth+(is.ie?(document.compatMode=="BackCompat"?0: -2): -2);
      }
  	obj.optcontainer.style.width=(nw)+"px";
  	obj.optcontainer.style.top=oldtop;
  	obj.mustResize=false;
    }
	obj.setHighlightedIndex(obj.selectedIndex);
  if(is.ie) {
  	obj.optcontainer.focus();
    }
  };
HtmlDropdownButton.set_selected_index_and_close=function(e) {
	var button=null;
	var o=utility.dom.setEventVars(e);
	utility.dom.stopEvent(o.e);
	var startEl=o.targ;
  while(startEl&&(button=startEl.getAttribute("button"))==null) {
  	startEl=startEl.parentElement;
    }
  if(button!=null) {
  	var obj=KTStorage.get(button);
    }
  else {
  	return;
    }
	var tbl=o.targ;
	var td=o.targ;
  while(tbl.tagName.toLowerCase()!='table') {
    if(tbl.tagName.toLowerCase()=='td') {
    	td=tbl;
      }
  	tbl=tbl.parentNode;
    }
	var idx=0;
	for(var i=0;i<tbl.rows.length;i++) {
    if(tbl.rows[i].cells[0]==td) {
    	idx=i;
    	break;
      }
    }
	obj.setSelectedIndex(idx,true);
	obj.toggleDisplay(0);
	var toolbar_button=KTStorage.get(obj.toolbar_button);
	toolbar_button.value=obj.options[idx].value;
	toolbar_button.run(o.e,startEl);
  };
HtmlDropdownButton.prototype.setSelectedIndex=function(idx,setLogic) {
	var toolbar_button=KTStorage.get(this.toolbar_button);
  if(this.selectedIndex<0) {
  	this.selectedIndex=0;
    }
  if(setLogic) {
  	this.selectedIndex=idx;
    }
	var tbl=this.optContainerTable;
	var cell0=this.table0.rows[0].cells[0];
	var toret=null;
	for(var i=0;i<tbl.rows.length;i++) {
    if(i==idx) {
    	tbl.lastHi=tbl.rows[i].cells[0];
    	toret=tbl.rows[i];
    	this.setHighlightedIndex(i);
      if(setLogic) {
      	var new_text=is.ie?tbl.rows[i].cells[0].innerText: tbl.rows[i].cells[0].textContent;
      	cell0.childNodes[0].textContent=new_text;
      	cell0.childNodes[0].innerText=new_text;
      	toolbar_button.ktml.util_restoreSelection();
        }
      }
    }
	return toret;
  };
HtmlDropdownButton.prototype.toggleDisplay=function() {
  if(this.selectedIndex<0) {
  	this.selectedIndex=0;
    }
	var el=this.optcontainer;
	var val=utility.dom.getDisplay(el);
  if(arguments.length==0) {
    if(val=='none') {
    	this.show();
      }
    else if(val=='block'||val=='') {
    	this.hide();
      }
    }
  else {
  	var mode=arguments[0];
    if(mode==1) {
    	this.show();
      }
    else if(mode==0) {
    	this.hide();
      }
    }
  };
HtmlDropdownButton.prototype.remove=function(index) {
	this.options.splice(index,1);
	this.optContainerTable.deleteRow(index);
  };
HtmlDropdownButton.prototype.removeAll=function() {
	for(var index=this.optContainerTable.rows.length-1;index>=1;index--) {
  	this.remove(index);
    }
  };
HtmlDropdownButton.prototype.add=function(value,text) {
	var newOptionRow=this.optContainerTable.insertRow(this.optContainerTable.rows.length);
	var newOptionCell=newOptionRow.insertCell(0);
	newOptionCell.noWrap="true";
	newOptionCell.onmouseover=HtmlDropdownButton.rowHi;
	newOptionCell.onmouseup=HtmlDropdownButton.set_selected_index_and_close;
	newOptionCell.innerHTML='<div class="opt">'+text+'</div>';
  this.options.push( {value: value,text: text,attributes: {HTMLValue: value}});
	this.mustResize=true;
  };
HtmlDropdownButton.prototype.set=function(idx,text,value,htmlValue) {
  if(idx<0||idx>=this.options.length) {
  	return;
    }
	var optionRow=this.optContainerTable.rows[idx];
	var optionCell=optionRow.cells[0];
	optionCell.innerHTML='<div class="opt">'+htmlValue+'</div>';
	this.mustResize=true;
  };
HtmlDropdownButton.prototype.indexOfValue=function(value) {
	var i=this.options.length;
  while(i--) {
    if(this.options[i].value==value) {
    	return i;
      }
    }
	return-1;
  };
HtmlDropdownButton.prototype.setVisible=ImageButton.prototype.setVisible=ComboButton.prototype.setVisible=function(flag) {
	this.visible=flag;
  if(this.rendered) {
    try {
    	this.getElement("container").style.display=flag?'': 'none';
      }
    catch(e) {}
    }
  };
var KT_icon_images="about.gif align_center.gif align_justify.gif align_left.gif align_right.gif bold.gif bulleted_list.gif clean.gif cleancss.gif clean_menu.gif copy.gif cut.gif find_replace.gif help.gif horizontal_rule.gif indent.gif insert_anchor.gif insert_button.gif insert_checkbox.gif insert_fieldset.gif insert_file.gif insert_filefield.gif insert_flash.gif insert_form.gif insert_hiddenfield.gif insert_image.gif insert_label.gif insert_link.gif insert_listmenu.gif insert_quicktime.gif insert_radiobutton.gif insert_table.gif insert_template.gif insert_textarea.gif insert_textfield.gif insert_windowsmedia.gif italic.gif linkremove.gif numbered_list.gif outdent.gif paste.gif pasteword.gif redo.gif spellcheck.gif subscript.gif superscript.gif toggle_editmode.gif toggle_fullscreen.gif toggle_visible.gif underline.gif undo.gif pi.gif";
KT_icon_images=KT_icon_images.replace(/\.[^\s]*/gi,'');
KT_icon_images=KT_icon_images.split(" ");
KT_icon_indexes= {};
for(var i=0;i<KT_icon_images.length;i++) {
  KT_icon_indexes[KT_icon_images[i]]=i;
  }
function ImageButton(button_id,deferred) {
  if(typeof deferred=='undefined') {
  	deferred=false;
    }
	this.deferred=deferred;
	KTStorage.add(this);
	this.rendered=false;
	this.visible=true;
	this.toolbar_button=button_id;
	var button=KTStorage.get(button_id);
	this.image=this.id;
	this.title=button.alt?translate(button.alt,button.ktml.config.UILanguage):translate(button.name,button.ktml.config.UILanguage);
	var idx=parseInt(KT_icon_indexes[button.name],10)||0;
	var pos=-idx*32-6;
	this.htmlstring='<div class="toolbaritem_flat" \ toolbar_button="'+button_id+'" \ button="'+this.id+'" \ id="'+this.id+'"\ title="'+this.title+'" \ onmouseover="toolbar_mouseover(event, \''+this.id+'\')" \ onmousedown="toolbar_mousedown(event, \''+this.id+'\')" \ onmouseup="toolbar_mouseup(event, \''+this.id+'\')" \ onmouseout="toolbar_mouseout(event, \''+this.id+'\')" ';
  if(button.button_icon) {
  	this.htmlstring+='style="background-image: url('+button.button_icon+'?'+KtmlVersion+');background-repeat: no-repeat;background-position: center;"';
    }
  else {
  	this.htmlstring+='style="background-image: url('+KtmlRelativeImagePath+'montage.gif?'+KtmlVersion+');background-position: '+(pos)+'px 2px;background-repeat: no-repeat;"';
    }
	this.htmlstring+='></div>';
	this.width=button.width=26;
	var _this=this;
  if(this.deferred) {}
  else {
    button.ktml.toolbar.addAfterAction(function() {
    	_this.rendered=true;
    	var button=KTStorage.get(_this.toolbar_button);
    	button.width=_this.width=_this.getWidth();
    	_this.setVisible(_this.visible);
      });
    }
  };
ImageButton.prototype.deferredAfterAction=function() {
	this.rendered=true;
	var button=KTStorage.get(this.toolbar_button);
	button.width=this.width=this.getWidth();
  };
ImageButton.prototype.getAsElement=function() {
	var tmp=document.createElement('span');
	tmp.innerHTML=this.htmlstring;
	return tmp.childNodes[0];
  };
ImageButton.prototype.getElement=function(what) {
  switch(what) {
  	case"container": return document.getElementById(this.id);
  	case"image": return document.getElementById(this.id);
    }
	return null;
  };
ImageButton.prototype.getWidth=function() {
	return 26;
	return this.getElement("container").offsetWidth+6;
  };
function ToolbarButton(options,params) {
	KTStorage.add(this);
	this.ktml=null;
	this.button_type=options['button_type'];
	this.group=options['group'];
	this.name=options['name'];
	this.alt=options['alt_text'];
	this.secAlt=options['second_alt_text'];
	this.button_icon=options['button_icon'];
	this.config_display_button=1;
	this.in_floater=false;
	this.width=0;
	this.cid=options['command_id'];
	this.options=options;
  this.params=params||{};
	this.helpId=options['help']||options['name'].toLowerCase();
	var default_value=options['default_value'];
  if(typeof(default_value)!='undefined') {
  	this.default_value=default_value;
    }
  else {
    this.default_value={};
    }
  if(this.button_type=='select') {
  	this.options=params.options;
  	this.styleProperties=this.default_value;
    }
  else {
    this.styleProperties= {};
    }
	commandType=options['command_type']||$KT_CMD_ID;
  if(options['command_type']==$KT_JS_STRING&&options['command_string']=='') {
  	command='';
    }
  else {
  	command=options['command_string']||options['name'];
    }
  if(typeof(open_command)!='undefined') {
  	this.open=open_command;
    }
  if(typeof(paint_command)!='undefined') {
  	this.paint=paint_command;
    }
	var defaultcommandstr='';
  if(commandType==$KT_JS_FUNCTION) {
  	var s=command.toString();
    defaultcommandstr=s.substring(s.indexOf("{")+1,s.lastIndexOf("}")-1);
    }
  else if(commandType==$KT_JS_CALLBACK) {
  	defaultcommandstr=command;
    }
  else if(commandType==$KT_JS_STRING) {
  	defaultcommandstr=command;
    }
  else {
  	defaultcommandstr='this.ktml.logic_doFormat("'+command+'")';
    }
	this.command=defaultcommandstr;
  };
ToolbarButton.prototype.checkFocus=function(obj,mandatory) {
  if(obj.className=="toolbaritem_disabled") {
  	return false;
    }
	var propname='';
	var par=utility.dom.getParentByTagName(obj,'span');
  if(par) {
  	propname=par.id.replace(/Property_/,"");
    }
  if(!par) {
  	var par=utility.dom.getParentByTagName(obj,'div');
  	propname=par.parentNode.id;
  	propname=propname.replace(/^toolbar_floater_/,'');
  	propname=propname.replace(/_([^_]*)$/,'');
    }
  if(propname!=this.ktml.name) {
    if(mandatory) {
    	alert(translate("not active context"));
    	return false;
      }
    }
  if(this.ktml.savedSelection) {
    try {
    	this.ktml.savedSelection.select();
      }
    catch(e) {}
    }
  else {
  	this.ktml.cw.focus();
    }
	return true;
  };
ToolbarButton.prototype.run=function(e,src) {
  if(this.ktml.toolbar.checkHelp()) {
    if(this.name=="help") {
    	this.ktml.toolbar.setHelpMode(false,this);
    	return true;
      }
    if(this.name!="about") {
    	this.ktml.toolbar.showHelp(this.helpId);
    	return false;
      }
    }
	var isFocused=this.checkFocus(src,true);
  if(!isFocused) {
  	return;
    }
	eval(this.command);
	this.clearselection();
	utility.popup.force=true;
	utility.popup.removeModal();
	utility.popup.force=false;
  };
ToolbarButton.prototype.dispose=function() {
	var button_instance=KTStorage.get(this.assoc);
  if(typeof(button_instance['dispose'])=="function") {
  	button_instance.dispose();
  	button_instance=null;
    }
  };
ToolbarButton.prototype.clearselection=function() {
  if(is.ie) {
  	document.selection.clear();
    }
  else {
  	window.getSelection().removeAllRanges();
    }
  }
function background_color_command(new_value) {
	var tlb=KTStorage.get(this.toolbar_button);
	tlb.ktml.util_restoreSelection(true);
	var cb=KTStorage.get(this.id);
  if(is.ie) {
  	tlb.ktml.edit.execCommand(KtmlGetCommand('backcolor'), false, new_value);
    }
  else {
  	tlb.ktml.util_expandSelection('FONT',['style','background-color: '+new_value+';']);
    }
  if(tlb.ktml.undo) {
  	tlb.ktml.undo.addEdit();
    }
	this.closeCallback();
  };
function background_color_open() {
	var tlb=KTStorage.get(this.toolbar_button);
	var cb=KTStorage.get(this.id);
  if(typeof tlb.ktml.cpalette=='undefined') {
  	var cpaletteSrc=window.KtmlRoot+'core/js/lib/colorpicker.js';
    KtmlIncludeJs(cpaletteSrc,function() {
    	tlb.ktml.cpalette=new ColorPalette(tlb.ktml);
    	tlb.params.open.call(cb);
    	return;
      });
	   return;
    }
  tlb.ktml.cpalette.onSelect=function(new_value) {
  	cb.setValue(new_value);
  	tlb.params.command.call(cb,cb.value);
    };
	var el=cb.getElement("container");
	tlb.ktml.logic_openPalette(el,cb.value);
  };
function background_color_paint() {
	var el=this.getElement("cell");
	el.innerHTML='<div><img src="'+KtmlRelativeImagePath+'bgcolor.gif" width="16" height="12" style="display: block;"><span style="display: block;width: 16px;height: 4px;overflow: hidden;margin-bottom: 2px;background-color: '+this.value+'"></span></div>';
  }
function clean_menu_command(new_value) {
	var tlb=KTStorage.get(this.toolbar_button);
	var cb=KTStorage.get(this.id);
	tlb.ktml.logic_doClean(new_value);
	tlb.ktml.displayChanged();
	this.closeCallback();
  };
function clean_menu_open() {
	var tlb=KTStorage.get(this.toolbar_button);
	var cb=KTStorage.get(this.id);
  if(typeof(tlb.ktml.cleantypespicker)=="undefined") {
  	var cleantypespickerSrc=window.KtmlRoot+'core/js/lib/cleantypespicker.js';
    KtmlIncludeJs(cleantypespickerSrc,function() {
    	tlb.ktml.cleantypespicker=new CleanTypesPicker(tlb.ktml);
    	tlb.params.open.call(cb);
    	return;
      });
	   return;
    }
  tlb.ktml.cleantypespicker.onSelect=function(new_value) {
  	cb.setValue(new_value);
  	tlb.params.command.call(cb,cb.value);
    };
	tlb.ktml.cleantypespicker.showAtElement(cb.getElement("table"));
  if(is.ie) {
  	var _elm=tlb.ktml.cleantypespicker.div;
  	var _ktml=tlb.ktml;
  	var docObj=_ktml.edit;
  	var docBox=_ktml.iframe;
  	utility.dom.toggleSpecialTags(_elm,false,1,docObj,docBox);
    };
  };
function clean_menu_paint() {
	var img_src='<img src="'+KtmlRelativeImagePath;
  if(this.value=="word") {
  	img_src+="cleanword";
    }
  else if(this.value=="formatting") {
  	img_src+="clean";
    }
  else if(this.value=="all") {
  	img_src+="cleanalltags";
    }
  else if(this.value=="css") {
  	img_src+="cleancss";
    }
	img_src+='.gif" width="16" height="16" '+(is.ie?'style="margin-bottom:-2px;"':'')+'> ';
	var el=this.getElement("cell");
	el.innerHTML=img_src;
	el=this.getElement("table");
	el.title=translate(this.value,KTStorage.get(this.toolbar_button).ktml.config.UILanguage);
  };
function hyperlink_picker_command(new_value) {
	var tlb=KTStorage.get(this.toolbar_button);
	tlb.ktml.logic_InsertLink();
  };
function hyperlink_picker_open() {
	var tlb=KTStorage.get(this.toolbar_button);
	var linksSrc=tlb.ktml.getModuleProperty("hyperlink_browser","ServiceProvider");
  if(!linksSrc) {
  	return;
    }
	var cb=KTStorage.get(this.id);
  if(typeof(tlb.ktml.hyperlinkPicker)=="undefined") {
  	var hyperlinkPickerSrc=window.KtmlRoot+'core/js/lib/hyperlinkpicker.js';
    KtmlIncludeJs(hyperlinkPickerSrc,function() {
    	tlb.ktml.hyperlinkPicker=new HyperlinkPicker(tlb.id,linksSrc);
    	tlb.params.open.call(cb);
    	return;
      });
  	return;
    }
  tlb.ktml.hyperlinkPicker.onSelect=function(url,title) {
    cb.setValue( {url: url,title: title});
  	tlb.ktml.logic_InsertLink(url,title);
    };
  tlb.ktml.hyperlinkPicker.showAtElement(cb.getElement("table"));
  if(is.ie) {
  	utility.dom.toggleSpecialTags(tlb.ktml.hyperlinkPicker.container,false,1,ktml.edit,ktml.iframe);
    };
  };

function insert_table_command(new_value) {
	if(!new_value||new_value&&(new_value.cx==0)||new_value&&(new_value.cy==0)) {
		return;
	}
	var table_html='<table cellpadding="2" cellspacing="2" summary="Table Summary" border="1" width="100%">\r\n';
	for(var i=0;i<new_value.cy;i++) {
		table_html+='<tr>\r\n';
		for(var j=0;j<new_value.cx;j++) {
			table_html+='<td>&nbsp;</td>\r\n';
		}
		table_html+='</tr>\r\n';
	}
	table_html+='</table>';
	var tlb=KTStorage.get(this.toolbar_button);
	if(is.mozilla)
		table_html+='<br />';
	tlb.ktml.insertHTML(table_html,is.mozilla?"after":"first-leaf");
	var _assoc_combo=KTStorage.get(tlb.assoc);
	if(_assoc_combo) {
		_assoc_combo.getTitle();
	};
};
function insert_table_open() {
	var tlb=KTStorage.get(this.toolbar_button);
	var cb=KTStorage.get(this.id);
	if(typeof tlb.ktml.inserttablepicker=='undefined') {
		var inserttablepickerSrc=window.KtmlRoot+'core/js/lib/inserttable.js';
		KtmlIncludeJs(inserttablepickerSrc,function() {
			tlb.ktml.inserttablepicker=new InsertTablePicker(tlb.ktml);
			tlb.params.open.call(cb);
		});
		return;
	}
	tlb.ktml.inserttablepicker.onSelect=function(new_value) {
		cb.setValue(new_value);
		tlb.params.command.call(cb,cb.value);
	};
	tlb.ktml.inserttablepicker.showAtElement(cb.getElement("table"));
	if(is.ie) {
		utility.dom.toggleSpecialTags(tlb.ktml.inserttablepicker.div,false,1,tlb.ktml.edit,tlb.ktml.iframe);
	};
};
function insert_table_paint() {
	var el=this.getElement("cell");
	el.innerHTML='<img src="'+KtmlRelativeImagePath+'insert_table.gif" width="16" height="16">';
	el=this.getElement("table");
	el.title=this.getTitle();
};
function insert_table_getTitle() {
	var ktml=KTStorage.get(this.toolbar_button).ktml;
	var title=translate("insert_table",ktml.config.UILanguage);
	var secTitle=translate(this.title,ktml.config.UILanguage);
	secTitle=secTitle.replace(/\d+/g,'%s');
	secTitle=utility.string.sprintf(secTitle,this.value.cy,this.value.cx);
	this.setTooltip(secTitle,title);
	return secTitle;
  };
function insert_character_command(new_value) {
	var tlb=KTStorage.get(this.toolbar_button);
	tlb.ktml.insertHTML(new_value,is.mozilla?"after": "");
  };
function insert_character_open() {
	var tlb=KTStorage.get(this.toolbar_button);
	var cb=KTStorage.get(this.id);
  if(typeof(tlb.ktml.charpalette)=="undefined") {
  	var charpaletteSrc=window.KtmlRoot+'core/js/lib/characterpicker.js';
    KtmlIncludeJs(charpaletteSrc,function() {
    	tlb.ktml.charpalette=new CharacterPalette(tlb.ktml);
    	tlb.params.open.call(cb);
    	return;
      });
    return;
    }
  tlb.ktml.charpalette.onSelect=function(new_value) {
  	cb.setValue(new_value);
  	tlb.params.command.call(cb,cb.value);
    };
	tlb.ktml.logic_openCharacterPalette(cb.getElement("table"), cb.value);
  if(is.ie) {
  	utility.dom.toggleSpecialTags(tlb.ktml.charpalette.div,false,1,tlb.ktml.edit,tlb.ktml.iframe);
    };
  };
function insert_character_paint() {
	var el=this.getElement("cell");
	el.innerHTML='<div style="margin-top: -1px;width: 14px;font-size: 14px;line-height: 12px !important;">'+this.value+'</div>';
  }
KtmlToolbarRows={'standard':'1','formatting':'1','insert':'2','styles':'2','form':'3'};
KtmlToolbarButtonsIndexMap={'about':0,'align_center':1,'align_justify':2,'align_left':3,'align_right':4,'bold':7,'bulleted_list':8,'clean_menu':9,'copy':10,'cut':11,'find_replace':12,'fontsize_list':13,'fonttype_list':14,'heading_list':16,'help':17,'indent':19,'insert_anchor':20,'insert_label':31,'insert_listmenu':33,'insert_table':35, 'italic':39,'numbered_list':40,'outdent':41,'paste':42,'redo':43,'spellcheck':44,'style_list':45,'subscript':46,'superscript':47,'toggle_editmode':48,'toggle_fullscreen':49,'toggle_visible':50,'underline':51,'undo':52,'toggle_properties_inspector':53,'csforeground':54,'csbackground':55,'csimage':56,'cslink':57,'cssnippet':58,'csfield':59,'cshr':60,'cscharacter':61};
function KtmlDefaultButtons() {
  function opt(obj1,obj2) {
    var tmp= {
    };
  for(var i in obj1) {
  	tmp[i]=obj1[i];
    }
  for(var i in obj2) {
  	tmp[i]=obj2[i];
    }
	return tmp;
  }
	var tmp=[];
/*
	stdIconList = "cut.gif,copy.gif,paste.gif,undo.gif,redo.gif,find.gif,toggle_visible.gif,toggle_editmode.gif,toggle_fullscreen.gif,help.gif";
	formtIconList = "bold.gif,italic.gif,under.gif,left.gif,center.gif,right.gif,justify.gif,numlist.gif,bullist.gif,deindent.gif,inindent.gif,blank.gif,fgcolor.gif,csbgcolor.gif,superscript.gif,subscript.gif";
	stylIconList = "blank.gif,blank.gif,blank.gif,blank.gif";

	insertIcontList = "cslink.gif,csimage.gif,instable.gif,snippet.gif,inserthr.gif,insertspecial.gif,csfield.gif";

*/
  var options={'command_type':$KT_CMD_ID,'button_type':'img'};
  tmp.push(new ToolbarButton(opt(options, {'name': 'spellcheck','help': 'spellcheck_button'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'cut'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'copy'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'paste'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'find_replace','help': 'findreplace_button','command_type': $KT_JS_STRING,'command_string': "this.ktml.logic_FindReplace()"})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'undo','command_id': 'undo'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'redo','command_id': 'redo'})));
  tmp.push(new ToolbarButton(opt(options, {	'name': 'toggle_visible','help': 'show_hide','command_id': 'toggle_visible'})));
  tmp.push(new ToolbarButton(opt(options, {	'name': 'toggle_editmode','help': 'code_design','command_id': 'toggle_editmode'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'toggle_properties_inspector', button_type: 'img', help: 'properties_inspector', 'command_type': $KT_JS_STRING, 'command_string': 'this.ktml.logic_togglePIDisplay()','alt_image': 'pi.gif', 'group': 'standard', 'button_icon': KtmlRelativeImagePath+'pi.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'csforeground', button_type: 'img', help: 'custom_foreground', 'command_type': $KT_JS_STRING, 'command_string': "this.ktml.logic_openCSColorPalette('f')",'alt_image': 'fgcolor.gif', 'group': 'format', 'button_icon': KtmlRelativeImagePath+'fgcolor.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'csbackground', button_type: 'img', help: 'custom_background', 'command_type': $KT_JS_STRING, 'command_string': "this.ktml.logic_openCSColorPalette('b')",'alt_image': 'bgcolor.gif', 'group': 'format', 'button_icon': KtmlRelativeImagePath+'bgcolor.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'cssnippet', button_type: 'img', help: 'custom_snippet', 'command_type': $KT_JS_STRING, 'command_string': "this.ktml.logic_snippetOnClick()",'alt_image': 'snippet.gif', 'group': 'format', 'button_icon': KtmlRelativeImagePath+'snippet.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'csfield', button_type: 'img', help: 'custom_field', 'command_type': $KT_JS_STRING, 'command_string': 'this.ktml.logic_fieldOnClick()','alt_image': 'csfield.gif', 'group': 'insert', 'button_icon': KtmlRelativeImagePath+'csfield.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'cslink', button_type: 'img', help: 'custom_link', 'command_type': $KT_JS_STRING, 'command_string': 'this.ktml.logic_linkOnClick()','alt_image': 'cslink.gif', 'group': 'insert', 'button_icon': KtmlRelativeImagePath+'cslink.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'csimage', button_type: 'img', help: 'custom_image', 'command_type': $KT_JS_STRING, 'command_string': 'this.ktml.logic_imageOnClick()','alt_image': 'csimage.gif', 'group': 'insert', 'button_icon': KtmlRelativeImagePath+'csimage.gif'})));
  tmp.push(new ToolbarButton(opt(options, {	'name': 'toggle_fullscreen', 'help': 'toggle_fullscreen','command_type': $KT_JS_STRING,'command_string': 'this.ktml.toggleFullScreen()'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'help','command_id': 'help','command_type': $KT_JS_STRING,'command_string': 'if (this.ktml.toolbar.getHelpMode()) {this.ktml.toolbar.setHelpMode(false, this);}else{this.ktml.toolbar.setHelpMode(true, this);}'})));
  options= {'command_type': $KT_CMD_ID, 'button_type': 'img'};
  tmp.push(new ToolbarButton(opt(options, {'name': 'bold','command_id': KtmlGetCommand('bold'), 'help': 'basicformat_bold'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'italic','command_id': KtmlGetCommand('italic'), 'help': 'basicformat_italic'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'underline','command_id': KtmlGetCommand('underline'), 'help': 'basicformat_underline'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'superscript','command_id': KtmlGetCommand('superscript'), 'help': 'superscript'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'subscript','command_id': KtmlGetCommand('subscript'), 'help': 'subscript'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'align_left','command_id': KtmlGetCommand('justifyleft'), 'command_type': $KT_CMD_ID, 'command_string': 'JustifyLeft'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'align_center','command_id': KtmlGetCommand('justifycenter'), 'command_type': $KT_CMD_ID, 'command_string': 'JustifyCenter'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'align_right','command_id': KtmlGetCommand('justifyright'), 'command_type': $KT_CMD_ID, 'command_string': 'JustifyRight'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'align_justify','command_id': KtmlGetCommand('justifyfull'), 'command_type': $KT_CMD_ID, 'command_string': 'JustifyFull'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'numbered_list','command_id': KtmlGetCommand('orderlist'), 'command_type': $KT_CMD_ID, 'command_string': 'InsertOrderedList'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'bulleted_list','command_id': KtmlGetCommand('unorderlist'), 'command_type': $KT_CMD_ID, 'command_string': 'InsertUnorderedList'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'indent'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'outdent'})));
  options= {'command_type': $KT_JS_STRING, 'button_type': 'select'};
  tmp.push(new ToolbarButton(opt(options, {'name': 'heading_list','alt_text': 'Format','help': 'html_tags','command_id': KtmlGetCommand('blockfmt'), 'command_string': "this.ktml.logic_doFormat('InsertHeading',this.value)"}), {'options': [ {'value': '', 'text': '||Normal||', 'attributes': {'HTMLValue': '||Normal||'}}, {'value': '<DIV>', 'text': 'div', 'attributes': {'HTMLValue': '<div style="margin: 0px 0px 0px 0px">Div</div>'}}, {'value': '<p>', 'text': 'Paragraph', 'attributes': {'HTMLValue': '<p style="margin: 0px 0px 0px 0px">Paragraph</p>'}}, {'value': '<h1>', 'text': 'Heading 1', 'attributes': {'HTMLValue': '<h1 style="margin: 0px 0px 0px 0px">Heading 1</h1>'}}, {'value': '<h2>', 'text': 'Heading 2', 'attributes': {'HTMLValue': '<h2 style="margin: 0px 0px 0px 0px">Heading 2</h2>'}}, {'value': '<h3>', 'text': 'Heading 3', 'attributes': {'HTMLValue': '<h3 style="margin: 0px 0px 0px 0px">Heading 3</h3>'}}, {'value': '<h4>', 'text': 'Heading 4', 'attributes': {'HTMLValue': '<h4 style="margin: 0px 0px 0px 0px">Heading 4</h4>'}}, {'value': '<h5>', 'text': 'Heading 5', 'attributes': {'HTMLValue': '<h5 style="margin: 0px 0px 0px 0px">Heading 5</h5>'}}, {'value': '<h6>', 'text': 'Heading 6', 'attributes': {'HTMLValue': '<h6 style="margin: 0px 0px 0px 0px">Heading 6</h6>'}}, {'value': '<address>', 'text': 'Address', 'attributes': {'HTMLValue': '<address style="margin: 0px 0px 0px 0px">Address</address>'}}, {'value': '<pre>', 'text': 'Formatted', 'attributes': {'HTMLValue': '<pre style="margin: 0px 0px 0px 0px">Formatted</pre>'}}]}));
  tmp.push(new ToolbarButton(opt(options, {'name': 'style_list','alt_text': 'Style','help': 'css_style','command_string': 'alert("CSS module not available!")'}), {'options': [ {'value': '', 'text': '||No Style||', 'attributes': {'HTMLValue': '||No Style||'}}]}));
  var fonttype_options=[ {'value': '', 'text': "||Default Font Face||", 'attributes': {'HTMLValue': "||Default Font Face||"}}];
	var config_fonttypes_string=util_defaultValue($KTML4_GLOBALS['fonts'],null);
  if(config_fonttypes_string!=null) {
  	config_fonttypes_string=config_fonttypes_string.split("|");
  	var config_fonttypes=[];
  	var one_font='';
  	for(var i=0;i<config_fonttypes_string.length;i++) {
      one_font=config_fonttypes_string[i].replace(/[";]/gi,'');
      config_fonttypes.push( {value: one_font,text: one_font,attributes: {HTMLValue: '<font face="'+one_font+'">'+one_font+'</font>'}});
      }
    fonttype_options=fonttype_options.concat(config_fonttypes);
    }
  else {
    var default_fonttypes=[ {'value': 'Arial, Helvetica, sans-serif', 'text': 'Arial, Helvetica, sans-serif', 'attributes': {'HTMLValue': '<font face="Arial, Helvetica, sans-serif">Arial, Helvetica, sans-serif</font>'}}, {'value': 'Times New Roman, Times, serif', 'text': 'Times New Roman, Times, serif', 'attributes': {'HTMLValue': '<font face="Times New Roman, Times, serif">Times New Roman, Times, serif</font>'}}, {'value': 'Courier New, Courier, mono', 'text': 'Courier New, Courier, mono', 'attributes': {'HTMLValue': '<font face="Courier New, Courier, mono">Courier New, Courier, mono</font>'}}, {'value': 'Georgia', 'text': 'Georgia', 'attributes': {'HTMLValue': '<font face="Georgia">Georgia</font>'}}, {'value': 'Verdana, Helvetica', 'text': 'Verdana, Helvetica', 'attributes': {'HTMLValue': '<font face="Verdana, Helvetica">Verdana, Helvetica</font>'}}, {'value': 'System', 'text': 'System', 'attributes': {'HTMLValue': '<font face="System">System</font>'}}];
    fonttype_options=fonttype_options.concat(default_fonttypes);
    }
  tmp.push(new ToolbarButton(opt(options, {'name': 'fonttype_list','alt_text': 'Font Face','help': 'fontface','command_string': "this.ktml.logic_doFormat('fonttype',this.value)"}), {'options': fonttype_options}));
  tmp.push(new ToolbarButton(opt(options, {'name': 'fontsize_list','alt_text': 'Font Size','help': 'fontsize','command_string': "this.ktml.logic_doFormat('fontsize',this.value)"}
  ), {'options': [ {'value': '', 'text': '||Font Size||', 'attributes': {'HTMLValue': "||Font Size||"}}, {'value': '1', 'text': '8px', 'attributes': {'HTMLValue': '<font size="1">1 (8px)</font>'}}, {'value': '2', 'text': '11px', 'attributes': {'HTMLValue': '<font size="2">2 (11px)</font>'}}, {'value': '3', 'text': '14px', 'attributes': {'HTMLValue': '<font size="3">3 (14px)</font>'}}, {'value': '4', 'text': '16px', 'attributes': {'HTMLValue': '<font size="4">4 (16px)</font>'}}, {'value': '5', 'text': '20px', 'attributes': {'HTMLValue': '<font size="5">5 (20px)</font>'}}, {'value': '6', 'text': '24px', 'attributes': {'HTMLValue': '<font size="6">6 (24px)</font>'}}]}));
  tmp.push(new ToolbarButton(opt(options, {'name': 'clean_menu','alt_text': 'Clean HTML Content','help': 'cleanup','button_type': "combo",'alt_image': "cleanword.gif",'default_value': 'word'}), {'command': clean_menu_command, 'open': clean_menu_open, 'paint': clean_menu_paint}));
  options= {'command_type': $KT_JS_STRING, 'button_type': 'img'};
  tmp.push(new ToolbarButton(opt(options, {'name': 'insert_anchor','help': 'insert_anchor','command_type': $KT_CMD_ID,'command_id': KtmlGetCommand('insert_anchor')})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'insert_table','help': 'insert_table','button_type': "combo",'alt_text': "Insert %s x %s Table",'default_value': {cx: 2,cy: 2}}), {'command': insert_table_command, 'open': insert_table_open, 'paint': insert_table_paint, 'title': insert_table_getTitle}));
  tmp.push(new ToolbarButton(opt(options, {'name': 'cshr', button_type: 'img', help: 'custom_hr', 'command_type': $KT_JS_STRING, 'command_string': 'this.ktml.logic_hrOnClick()','alt_image': 'inserthr.gif', 'group': 'insert', 'button_icon': KtmlRelativeImagePath+'inserthr.gif'})));
  tmp.push(new ToolbarButton(opt(options, {'name': 'cscharacter', button_type: 'img', help: 'insert_character', 'command_type': $KT_JS_STRING, 'command_string': 'this.ktml.logic_openChrPalette()','alt_image': 'insertspecial.gif', 'group': 'insert', 'button_icon': KtmlRelativeImagePath+'insertspecial.gif'})));
	return tmp;
  };

function ToolbarNameGenerator(toolbar) {
	this.toolbar=toolbar;
	this.uid=new UIDGenerator("toolbar_"+toolbar.owner.name);
  };
ToolbarNameGenerator.prototype.gen=function() {
	return this.uid.generate();
  };
function Toolbar(element,element2,owner) {
	KTStorage.add(this);
	this.after_actions=[];
	this.owner=owner;
	this.base=element;
	this.buttons=new Array();
	this.buttonobjects=new Array();
	this.lateLoaded=false;
  this.deferredcommands= {};
	this.deferredfunctors=[];
	this.name_generator=new ToolbarNameGenerator(this);
  this.groups= {};
	this.rows=[];
	this.helpMode=false;
	this.loadConfig();
  };
Toolbar.prototype.addAfterAction=function(functor) {
	this.after_actions.push(functor);
  };
Toolbar.prototype.initializeUI=function() {
	this.base.innerHTML="";
  };
function toolbar_mousedown(e,btn_id) {
	var button=KTStorage.get(btn_id);
  if(button.state==0) {
  	return;
    }
	button.getElement("container").className="toolbaritem_inset";
  };
function toolbar_mouseup(e,btn_id) {
	var button=KTStorage.get(btn_id);
  if(button.state==0) {
  	return;
    }
	button.getElement("container").className=button.state==0?"toolbaritem_latched":"toolbaritem_outset";
	var tlb=KTStorage.get(button.toolbar_button);
	var o=utility.dom.setEventVars(e);
	tlb.run(o.e,o.targ);
	utility.dom.stopEvent(o.e);
	return false;
  };
function toolbar_mouseover(e,btn_id) {
	var button=KTStorage.get(btn_id);
  if(button.state==0) {
    return;
    }
	button.getElement("container").className="toolbaritem_outset";
  };
function toolbar_mouseout(e,btn_id) {
	var button=KTStorage.get(btn_id);
  if(button.state==0) {
	 return;
    }
	button.getElement("container").className=button.state==2?"toolbaritem_latched":"toolbaritem_flat";
  };
Toolbar.prototype.showFloater=function(group_id,o) {
	var pos=utility.dom.getBox(o.targ);
	var obj=this;
	var floater=null;
	var floater_id='toolbar_floater_'+this.owner.name+'_'+group_id;
	var div_id=floater_id+'_div';
	var sep_image_id=floater_id+'_image';
  if(this.groups[group_id]['floater']==null) {
    floater=utility.dom.createElement('div', {'className': 'div_floater','id': floater_id});
    floater.innerHTML='\
   <div id="'+div_id+'" ></div>\
   <div style="clear:both;text-align: center;vertical-align: center;"><img class="sep" id="'+sep_image_id+'" src="'+KtmlRelativeImagePath+'s.gif"/></div>\
   <div class="open">\
   <nobr>'+translate("Add/Remove Buttons",this.owner.config.UILanguage);+'</nobr>\
   </div>\
  ';
    floater=this.base.appendChild(floater);
    if(is.mozilla&&is.mac) {
     floater.style.overflow="auto";
      }
    utility.dom.attachEvent(floater,'onmouseover',function(e) {
      obj.owner.preserveSelection(true);
      });
    utility.dom.attachEvent(floater,'onmouseout',function(e) {
      obj.owner.preserveSelection(false);
      });
	  this.groups[group_id]['floater']=floater;
	  var obj=this;
    var action=floater.getElementsByTagName('div')[2];
    utility.dom.attachEvent(action,'onmouseup',function(e) {
      obj.openToolbarConfig(group_id);
      });
    utility.dom.attachEvent(action,'onmouseover',function(e) {
      utility.dom.classNameAdd(action,'highlight');
      });
    utility.dom.attachEvent(action,'onmouseout',function(e) {
      utility.dom.classNameRemove(action,'highlight');
      });
    }
  else {
    floater=this.groups[group_id]['floater'];
    }
	var buttons=this.groups[group_id].buttons;
	var button_instance=null;
	var move_it=false;
	var cnt=0;
	for(var i=0;i<buttons.length;i++) {
    button_instance=KTStorage.get(buttons[i].assoc);
    if(this.config_display_buttons[buttons[i].name]&&buttons[i].in_floater) {
      cnt++;
      this.moveButton(group_id,button_instance,'floater');
      button_instance.setVisible(true);
      }
    }
  this.groups[group_id]['display_hidden']=1;
  floater.style.top='-20000px';
  floater.style.display='';
  document.getElementById(sep_image_id).style.display=cnt?"":"none";
  utility.dom.putElementAt(floater,o.targ,'03');
  floater.style.zIndex=10;
  utility.popup.makeModal(function() {
  	obj.hideFloater(group_id,false);
    }, floater);
  if(is.ie) {
  	var _ktml=this.owner;
  	var docObj=_ktml.edit;
  	var docBox=_ktml.iframe;
  	utility.dom.toggleSpecialTags(floater,false,1,docObj,docBox);
    };
  };
Toolbar.prototype.moveButton=function(group_id,button,where) {
  if(where=='floater') {
  	var div_id='toolbar_floater_'+this.owner.name+'_'+group_id+'_div';
  	var div=document.getElementById(div_id);
  	var container=button.getElement("container");
  	container.parentNode.style.display="none";
  	div.appendChild(container);
    }
  else {
  	var div=document.getElementById("toolbar_button_container_"+KTStorage.get(button.toolbar_button).id);
  	var container=button.getElement("container");
  	div.appendChild(container);
  	container.parentNode.style.display="";
    }
  };
Toolbar.prototype.hideFloater=function(group_id,force) {
  if(!this.groups[group_id]['display_hidden']) {
  	return;
    };
	for(var i=0;i<this.groups[group_id].buttons.length;i++) {
  	var button=this.groups[group_id].buttons[i];
    if(button.in_floater) {
    	var button_instance=KTStorage.get(button.assoc);
    	button_instance.setVisible(false);
    	this.moveButton(group_id,button_instance,'back');
      }
    }
	this.groups[group_id]['floater'].style.display='none';
	this.groups[group_id]['display_hidden']=false;
	this.Resize();
  };
Toolbar.toggleHiddenButtons=function(e,toolbar_id,group_id) {
	var o=utility.dom.setEventVars(e);
	var tlb=KTStorage.get(toolbar_id);
  if(!tlb.groups[group_id]['display_hidden']) {
  	tlb.showFloater(group_id,o);
    }
  };
Toolbar.prototype.addBuiltinButtons=function(arr){
  ToolbarRowTemplate='\
 <table class="toolbar_table" id="@@id@@" cellspacing="0" cellpadding="0" border="0">\
  <tbody>\
   <tr>\
    @@content@@\
   </tr>\
  </tbody>\
 </table>\
 ';ToolbarGroupTemplate='\
 <td>\
 <div class="toolbar_group">\
  <table class="toolbar_icons" id="@@id@@" cellspacing="0" cellpadding="0" border="0">\
   <tbody>\
    <tr>\
     <td class="toolbar_left"><div style="width:6px !important; height:1px !important; border-width:0px !important; margin: 0px !important; padding:0px !important; overflow:hidden !important;"></div></td>\
     <td class="toolbar_icon_td">\
      <div class="toolbar_icon_container" id="@@id@@_element" style="width:@@toolbar_icon_container_width@@;">\
      <table cellspacing="0" cellpadding="0" border="0">\
       <tr>\
        @@content@@\
       </tr>\
      </table>\
      </div>\
     </td>\
     <td class="toolbar_right" title="'+translate("Show/Hide Buttons",this.owner.config.UILanguage)+'" onmouseup="Toolbar.toggleHiddenButtons(event, \'@@toolbar_id@@\', \'@@group_name@@\');"><div style="width:13px !important; height:1px !important; border-width:0px !important; margin: 0px !important; padding:0px !important; overflow:hidden !important;"></div></td>\
    </tr>\
   </tbody>\
  </table>\
 </div>\
 </td>\
 ';
  ToolbarHtmlString=[];
  var rows=[];
  for(var i=0;i<arr.length;i++){
    var row=arr[i];
    var rowIndex=row[0];
    if(typeof rows[rowIndex]=='undefined'){
      rows[rowIndex]=[];
      }
    rows[rowIndex].push(row[1]);
    }
  var inserted_rows=[];
  var inserted_groups=[];
  for(var i=0;i<arr.length;i++){
    if(!arr[i]||!arr[i][2]||!arr[i][2].length){
      continue;
      }
    var row=arr[i];
    var rowIndex=row[0];
    var rowLogicIndex=rowIndex-1;
    var groupName=row[1];
    var _tmp=ToolbarRowTemplate;
    if(Array_indexOf(inserted_rows,rowIndex)<0){
      _tmp=ToolbarRowTemplate.replace("@@id@@","Toolbar_row_"+rowIndex+"_"+this.owner.name);
      this.rows[rowLogicIndex]={'index':rowIndex,'element':null,'groups':[],'_string':_tmp};
      inserted_rows.push(rowIndex);
      }
    var _tmp=ToolbarGroupTemplate;
    var group_id='';
    if(Array_indexOf(inserted_groups,groupName)<0) {
    	group_id="Toolbar_group_"+groupName+"_"+this.owner.name;
    	_tmp=_tmp.replace(/@@toolbar_id@@/g,this.id);
    	_tmp=_tmp.replace(/@@group_name@@/g,groupName);
    	_tmp=_tmp.replace(/@@id@@/g,group_id);
      var groupDescriptor= {
      	'name': groupName, 'element': group_id+'_element', 'display_hidden': false, 'floater': null, 'buttons': [], 'width': 0, 'button_strings': [], 'row': rowIndex, '_string': _tmp, '_buttons': []
      };
    	this.groups[groupName]=groupDescriptor;
    	inserted_groups.push(groupName);
    	this.rows[rowLogicIndex].groups.push(groupName);
      }
    }
	var reference=KtmlDefaultButtons();
	var existing_groups=[];
	for(var x=0;x<arr.length;x++) {
  	Array_push(existing_groups,arr[x][1]);
    };
	var _standard_Exists=(Array_indexOf(existing_groups,"standard")>=0)?true:false;
	var _targGroupName=_standard_Exists?"standard":existing_groups[0];
	var _aboutBtnObj=null;
	for(var y=0;y<reference.length;y++) {
    if(reference[y].name=="about") {
    	_aboutBtnObj=reference[y];
    	break;
      }
    }
	var _addedAbout=true;
	for(var i=0;i<arr.length;i++) {
  	var row=arr[i];
  	var _thisGroupName=row[1];
  	for(var j=0;j<row[2].length;j++) {
    	for(var k=0;k<reference.length;k++) {
        if(row[2][j]==reference[k].name) {
	        	reference[k].group=_thisGroupName;
   	     	reference[k].ktml=this.owner;
      	  	this.addButton(reference[k]);
        		break;
          }
        }
      }
    }
	var _tmp2='';
	var row_width=this.owner.width-2-9-2;
	var drawableRowWidth=0;
	var drawableIconWidth=0;
	var visible_buttons_width=0;
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
    if(!row) {
    	continue
      };
  	var num_groups=row.groups.length;
  	drawableRowWidth=row_width-num_groups*6;
  	drawableIconWidth=(drawableRowWidth-row.groups.length*(6+13+4));
  	visible_buttons_width=0;
  	var _tmp='';
  	var group_index=0;
  	var all_buttons=0;
  	for(group_index=0;group_index<row.groups.length;group_index++) {
    	var groupName=row.groups[group_index];
    	var group=this.groups[groupName];
    	group.width=0;
    	group.occupiedSpace=0;
    	for(var i=0;i<group.buttons.length;i++) {
      	var button=group.buttons[i];
        if(this.config_display_buttons[button.name]) {
        	group.occupiedSpace+=button.width;
          }
        }
    	visible_buttons_width+=group.occupiedSpace;
    	all_buttons+=group.buttons.length;
      }
  	visible_buttons_width=visible_buttons_width||1;
  	for(group_index=0;group_index<row.groups.length;group_index++) {
    	var groupName=row.groups[group_index];
    	var group=this.groups[groupName];
    	group.availableSpace=Math.floor(drawableIconWidth*group.occupiedSpace/visible_buttons_width);
      }
  	var button_index=0;
  	group_index=0;
  	var added_buttons=0;
  	var cat_au_butoanele_din_row_pana_acum=0;
    while(added_buttons<all_buttons) {
    	for(group_index=0;group_index<row.groups.length;group_index++) {
      	var groupName=row.groups[group_index];
      	var group=this.groups[groupName];
        if(button_index>=group.buttons.length) {
        	continue;
          }
      	var button=group.buttons[button_index];
      	var target_group_width=group.width+button.width;
      	var target_row_width=cat_au_butoanele_din_row_pana_acum+button.width;
        if(!this.config_display_buttons[button.name]) {
        	this.setButtonDisplay(button,false);
        	button.in_floater=false;
          }
        else if(target_group_width>group.availableSpace||target_row_width>drawableIconWidth) {
        	this.setButtonDisplay(button,false);
        	button.in_floater=true;
          if(target_group_width>group.availableSpace) {
            if(!group.substracted_partial_button_width) {
            	group.substracted_partial_button_width=true;
            	var nextGroupName=row.groups[group_index+1];
              if(nextGroupName) {
              	var nextGroup=this.groups[nextGroupName];
              	nextGroup.availableSpace+=(group.availableSpace-group.width);
                }
              }
            }
          }
        else {
        	this.setButtonDisplay(button,true);
        	button.in_floater=false;
        	group.width+=button.width;
        	cat_au_butoanele_din_row_pana_acum+=button.width;
          }
      	added_buttons++;
      	group.button_strings.push('<td id="toolbar_button_container_'+button.id+'">'+group._buttons[button_index]+'</td>');
        }
    	button_index++;
      }
  	for(group_index=0;group_index<row.groups.length;group_index++) {
    	var groupName=row.groups[group_index];
    	var group=this.groups[groupName];
    	group._string=group._string.replace("@@content@@",group.button_strings.join("\r\n"));
    	group._string=group._string.replace("@@toolbar_icon_container_width@@",(group.width)+"px");
    	_tmp+=group._string;
      }
  	row._string=row._string.replace("@@content@@",_tmp);
  	_tmp2+=row._string;
    }
  this.base.innerHTML=_tmp2;
  for(var i=0;i<this.after_actions.length;i++) {
    this.after_actions[i]();
    }
  };
Toolbar.prototype.addCustomButtons=function(arr) {
	for(var i=0;i<arr.length;i++) {
	 this.insertButtonAfter(arr[i][0],arr[i][1],arr[i][2]);
    }
  };
Toolbar.prototype.Resize=function() {
	var row_width=this.owner.width-13;
	var drawableRowWidth=0;
	var drawableIconWidth=0;
	var visible_buttons_width=0;
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
    if(!row) {
    	continue;
      }
  	var num_groups=row.groups.length;
  	drawableRowWidth=row_width-(num_groups*6);
  	//alert('6700--'+num_groups+'\nrow_width--'+row_width+'\ndrawableRowWidth--'+drawableRowWidth);
  	drawableIconWidth=(drawableRowWidth-row.groups.length*(6+13+4));
  	visible_buttons_width=0;
  	var group_index=0;
  	var all_buttons=0;
  	for(group_index=0;group_index<row.groups.length;group_index++) {
    	var groupName=row.groups[group_index];
    	var group=this.groups[groupName];
    	group.width=0;
    	group.substracted_partial_button_width=false;
    	group.occupiedSpace=0;
    	for(var i=0;i<group.buttons.length;i++) {
      	var button=group.buttons[i];
        if(this.config_display_buttons[button.name]) {
        	group.occupiedSpace+=button.width;
          }
        }
    	visible_buttons_width+=group.occupiedSpace;
    	all_buttons+=group.buttons.length;
      }
  	visible_buttons_width=visible_buttons_width||1;
  	for(group_index=0;group_index<row.groups.length;group_index++) {
    	var groupName=row.groups[group_index];
    	var group=this.groups[groupName];
    	group.availableSpace=Math.floor(drawableIconWidth*group.occupiedSpace/visible_buttons_width);
      }
  	var button_index=0;
  	group_index=0;
  	var added_buttons=0;
  	var cat_au_butoanele_din_row_pana_acum=0;
    while(added_buttons<all_buttons) {
    	for(group_index=0;group_index<row.groups.length;group_index++) {
      	var groupName=row.groups[group_index];
      	var group=this.groups[groupName];
        if(button_index>=group.buttons.length) {
        	continue;
          }
      	var button=group.buttons[button_index];
      	var target_group_width=group.width+button.width;
      	var target_row_width=cat_au_butoanele_din_row_pana_acum+button.width;
        if(!this.config_display_buttons[button.name]) {
        	this.setButtonDisplay(button,false);
        	button.in_floater=false;
          }
        else if(target_group_width>group.availableSpace||target_row_width>drawableIconWidth) {
        	this.setButtonDisplay(button,false);
        	button.in_floater=true;
          if(target_group_width>group.availableSpace) {
            if(!group.substracted_partial_button_width) {
            	group.substracted_partial_button_width=true;
            	var nextGroupName=row.groups[group_index+1];
              if(nextGroupName) {
              	var nextGroup=this.groups[nextGroupName];
              	nextGroup.availableSpace+=(group.availableSpace-group.width);
                }
              }
            }
          }
        else {
        	this.setButtonDisplay(button,true);
        	button.in_floater=false;
        	group.width+=button.width;
        	cat_au_butoanele_din_row_pana_acum+=button.width;
          }
      	added_buttons++;
        }
    	button_index++;
      }
  	for(group_index=0;group_index<row.groups.length;group_index++) {
    	var groupName=row.groups[group_index];
    	var group=this.groups[groupName];
    	var groupElement=document.getElementById(group.element);
    	groupElement.style.width=(group.width)+"px";
      }
    }
  };
function select_onclick(e) {
	var tlb=KTStorage.get(this.tlb_id);
  if(tlb.ktml.toolbar.checkHelp()) {
  	tlb.ktml.toolbar.showHelp(tlb.helpId);
    }
  };
Toolbar.prototype.addButton=function(button,index) {
  if(button==null) {
  	return;
    }
  if(button.name=="style_list"&&!this.owner.hasModule('css')) {
  	return;
    }
	var rowIndex=KtmlToolbarRows[button.group];
	var rowLogicIndex=rowIndex-1;
	button.ktml=this.owner;
	var btn_html='';
  switch(button.button_type) {
  	case"img": var __tmp=new ImageButton(button.id);
    	btn_html=__tmp.htmlstring;
    	break;
  	case"combo": var __tmp=new ComboButton(button.id);
    	btn_html=__tmp.htmlstring;
    	break;
  	case"select": var __tmp=new HtmlDropdownButton(button.id);
    	btn_html=__tmp.htmlstring;
    	break;
  	default: break;
    }
	button.assoc=__tmp.id;
	this.groups[button.group].buttons.push(button);
  if(typeof this.config_display_buttons[button.name]!='undefined') {
  	button.config_display_button=this.config_display_buttons[button.name];
    }
  else {
  	this.config_display_buttons[button.name]=button.config_display_button=1;
  	this.saveConfig();
    }
  if(typeof(alt)!="undefined"&&alt!=null) {
  	button.alt=lang_translatepage(button.alt,this.owner.config.UILanguage,window);
    }
  if(this.buttonobjects.length>index) {
  	this.buttonobjects.splice(index,0,button);
    }
  else {
  	this.buttonobjects[this.buttonobjects.length]=button;
    }
  switch(button.name) {
   case"fonttype_list":
      this.font_type=__tmp.id;
      break;
   case"fontsize_list":
      this.font_size=__tmp.id;
      break;
   case"style_list":
      this.styler=__tmp.id;
      break;
   case"heading_list":
      this.blockformat=__tmp.id;
      break;
   case"toggle_editmode":
      this.swap=__tmp.id;
      break;
   }
  if(!button.config_display_button) {
  	__tmp.setVisible(false);
    }
	Array_push(this.groups[button.group]['_buttons'],btn_html);
  };
Toolbar.prototype.addButtonDeferred=function(button,group_index,index) {
  if(button==null) {
  	return;
    }
	var rowIndex=KtmlToolbarRows[button.group];
	var rowLogicIndex=rowIndex-1;
	button.ktml=this.owner;
	var btn_html=null;
   switch(button.button_type) {
   case"img":
      var __tmp=new ImageButton(button.id,true);
      btn_html=__tmp.htmlstring;
      break;
   case"combo":
      var __tmp=new ComboButton(button.id,true);
      btn_html=__tmp.htmlstring;
      break;
   case"select":
      var __tmp=new HtmlDropdownButton(button.id,true);
      btn_html=__tmp.htmlstring;
      break;
   default:
      var __tmp=new ImageButton(button.id,true);
      btn_html=__tmp.htmlstring;	
      break;
   }
	button.assoc=__tmp.id;
	this.groups[button.group].buttons.splice(group_index,0,button);
   if(typeof this.config_display_buttons[button.name]!='undefined') {
      button.config_display_button=this.config_display_buttons[button.name];
    }
   else {
      this.config_display_buttons[button.name]=button.config_display_button=1;
      this.saveConfig();
    }
  if(typeof(alt)!="undefined"&&alt!=null) {
  	button.alt=lang_translatepage(button.alt,this.owner.config.UILanguage,window);
    }
	this.buttonobjects.splice(index,0,button);
  if(!button.config_display_button) {
  	__tmp.setVisible(false);
    }
	this.groups[button.group]._buttons.splice(group_index,0,btn_html);
	return __tmp;
  };
Toolbar.prototype.insertButtonAfter=function(btn,insert_after_btn_name,insert_after_tlb_index,autoCall) {
	var LoadMode=this.owner.config_var['show_toolbar'];
  if((LoadMode=="focus"||LoadMode=="manual")&&!autoCall) {
  	var tl_ob=this;
  	var bt_ob=btn;
  	var bt_nm=insert_after_btn_name;
  	var bt_in=insert_after_tlb_index;
    var deferedCall=function() {
    	tl_ob.insertButtonAfter(bt_ob,bt_nm,bt_in,true)
      };
  	this.addAfterAction(deferedCall);
  	return;
    }
  if(typeof(this.groups[btn.group])=='undefined') {
  	var gn=null;
    for(var gn in this.groups) {
    	btn.group=gn;
    	break;
      }
    if(!gn) {
    	return;
      }
    }
  var arr=this.owner.config.buttons;
	_outer:for(var z=0;z<arr.length;z++) {
  	var _tmpRow=isNaN(insert_after_tlb_index)?arr[z]:arr[insert_after_tlb_index];
  	var _customGroupName=_tmpRow[1];
  	var _buttons=_tmpRow[2];
  	_inner: for(var y=0;y<_buttons.length;y++) {
      if(_buttons[y]==insert_after_btn_name) {
      	Array_splice(_buttons,y+1,null,btn.name);
      	btn.group=_customGroupName;
      	break _outer;
        }
      }
  	_customGroupName=_tmpRow[1];
  	arr[z][2].push(insert_after_btn_name);
  	btn.group=_customGroupName;
    if(!isNaN(insert_after_tlb_index)) {
    	break;
      }
    }
	var found_button=null, found_group=null;
	var old_btn=null;
	var groupName='';
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
    if(!row) {
    	continue
      };
  	var num_groups=row.groups.length;
  	for(var group_index=row.groups.length-1;group_index>=0;group_index--) {
    	groupName=row.groups[group_index];
      if(groupName!=btn.group) {
      	continue;
        }
    	for(var i=0;i<this.groups[groupName].buttons.length;i++) {
      	old_btn=this.groups[groupName].buttons[i];
        if(old_btn.name==insert_after_btn_name) {
        	found_button=old_btn;
        	break;
          }
        }
      }
    }
  if(!found_button&&old_btn) {
  	found_button=old_btn;
    }
	found_group=document.getElementById(this.groups[btn.group].element);
  if(found_group) {
    if(found_button) {
    	var group_index=this.groupIndexOfName(found_button.name);
    	var index=this.indexOfName(found_button.name);
    	var found_button_element=KTStorage.get(found_button.assoc).getElement("container");
    	var button=this.addButtonDeferred(btn,group_index+1,index+1);
    	var td=found_button_element.parentNode;
    	var tr=td.parentNode;
    	td=tr.insertCell(td.cellIndex+1);
    	td.id="toolbar_button_container_"+btn.id;
    	td.appendChild(button.getAsElement());
      }
    else {
    	var last_group_index=this.groups[btn.group].buttons.length-1;
    	var found_button=this.groups[btn.group].buttons[last_group_index];
      if(found_button) {
      	var last_index=this.indexOfName(found_button.name);
      	var found_button_element=KTStorage.get(found_button.assoc).getElement("container");
      	var td=found_button_element.parentNode;
      	var tr=td.parentNode;
        }
      else {
      	var first_index=0;
      	var table=found_group.getElementsByTagName('table')[0];
      	var tr=table.rows[0];
        }
    	var button=this.addButtonDeferred(btn,last_group_index+1,last_index+1);
    	td=tr.insertCell(-1);
    	td.id="toolbar_button_container_"+btn.id;
    	td.appendChild(button.getAsElement());
      }
    if(typeof button.deferredAfterAction=='function') {
    	button.deferredAfterAction();
      }
  	this.Resize();
    }
  else {};
  };
Toolbar.prototype.insertButtonBefore=function(btn,insert_before_btn_name,insert_before_tlb_index,autoCall) {
	var LoadMode=this.owner.config_var['show_toolbar'];
  if((LoadMode=="focus"||LoadMode=="manual")&&!autoCall) {
  	var tl_ob=this;
  	var bt_ob=btn;
  	var bt_nm=insert_before_btn_name;
  	var bt_in=insert_before_tlb_index;
    var deferedCall=function() {
    	tl_ob.insertButtonBefore(bt_ob,bt_nm,bt_in,true)
      };
  	this.addAfterAction(deferedCall);
  	return;
    }
  if(typeof(this.groups[btn.group])=='undefined') {
  	var gn=null;
    for(var gn in this.groups) {
    	btn.group=gn;
    	break;
      }
    if(!gn) {
    	return;
      }
    }
	var arr=this.owner.config.buttons;
	_outer:for(var z=0;z<arr.length;z++) {
  	var _tmpRow=isNaN(insert_before_tlb_index)?arr[z]: arr[insert_before_tlb_index];
	if (!_tmpRow)
		break;	
  	var _customGroupName=_tmpRow[1];
  	var _buttons=_tmpRow[2];
  	_inner: for(var y=0;y<_buttons.length;y++) {
      if(_buttons[y]==insert_before_btn_name) {
      	Array_splice(_buttons,y,null,btn.name);
      	btn.group=_customGroupName;
      	break _outer;
        }
      }
  	_customGroupName=_tmpRow[1];
  	Array_splice(arr[0][2],0,null,btn.name);
  	btn.group=_customGroupName;
    if(!isNaN(insert_before_tlb_index)) {
    	break;
      }
    }
	var found_button=null, found_group=null;
	var old_btn=null;
	var groupName='';
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
  	var num_groups=row.groups.length;
  	for(var group_index=row.groups.length-1;group_index>=0;group_index--) {
    	groupName=row.groups[group_index];
      if(groupName!=btn.group) {
      	continue;
        }
    	for(var i=this.groups[groupName].buttons.length-1;i>=0;i--) {
      	old_btn=this.groups[groupName].buttons[i];
        if(old_btn.name==insert_before_btn_name) {
        	found_button=old_btn;
        	break;
          }
        }
      }
    }
  if(!found_button&&old_btn) {
  	found_button=old_btn;
    }
	found_group=document.getElementById(this.groups[btn.group].element);
  if(found_group) {
    if(found_button) {
    	var group_index=this.groupIndexOfName(found_button.name);
    	var index=this.indexOfName(found_button.name);
    	var found_button_element=KTStorage.get(found_button.assoc).getElement("container");
    	var button=this.addButtonDeferred(btn,group_index,index);
    	var td=found_button_element.parentNode;
    	var tr=td.parentNode;
    	td=tr.insertCell(td.cellIndex);
    	td.id="toolbar_button_container_"+btn.id;
    	td.appendChild(button.getAsElement());
      }
    else {
    	var first_group_index=0;
    	var found_button=this.groups[btn.group].buttons[first_group_index];
      if(found_button) {
      	var first_index=this.indexOfName(found_button.name);
      	var found_button_element=KTStorage.get(found_button.assoc).getElement("container");
      	var td=found_button_element.parentNode;
      	var tr=td.parentNode;
        }
      else {
      	var first_index=0;
      	var table=found_group.getElementsByTagName('table')[0];
      	var tr=table.rows[0];
        }
    	var button=this.addButtonDeferred(btn,first_group_index,first_index);
    	td=tr.insertCell(0);
    	td.id="toolbar_button_container_"+btn.id;
    	td.appendChild(button.getAsElement());
      }
    if(typeof button.deferredAfterAction=='function') {
    	button.deferredAfterAction();
      }
  	this.Resize();
    }
  else {};
  };
Toolbar.prototype.indexOfName=function(name) {
	var toret=-1;
	for(var i=0;i<this.buttonobjects.length;i++) {
    if(this.buttonobjects[i].name==name) {
    	toret=i;
    	break;
      }
    }
	return toret;
  };
Toolbar.prototype.groupIndexOfName=function(name) {
	var toret=-1;
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
    if(!row) {
    	continue
      };
  	var num_groups=row.groups.length;
  	for(var group_index=row.groups.length-1;group_index>=0;group_index--) {
    	var groupName=row.groups[group_index];
    	for(var i=0;i<this.groups[groupName].buttons.length;i++) {
      	var old_btn=this.groups[groupName].buttons[i];
        if(old_btn.name==name) {
        	toret=i;
        	break;
          }
        }
      }
    }
	return toret;
  };
Toolbar.prototype.getValueFromActiveForm=function(fieldName,fieldType,returnType) {
	var containers=this.base.getElementsByTagName("SELECT");
	var valToReturn=false;
	for(var i=0;i<containers.length;i++) {
    if(containers[i].name==fieldName||containers[i].id==fieldName) {
      if(returnType=="value") {
      	valToReturn=containers[i].options[containers[i].selectedIndex].value;
        }
      else if(returnType=="all") {
      	valToReturn=containers[i];
        }
      }
    };
	return valToReturn;
  };
Toolbar.prototype.setHelpMode=function(helpMode,el) {
  function massCursorElems(el,tag,how) {
  	var a, i;
  	a=el.getElementsByTagName(tag);
  	for(i=0;i<a.length;i++) {
      a[i].style.cursor=how;
      }
    }
  function massCursorToChildren(el,how) {
  	el=document.getElementById(el);
    if(el) {
    	massCursorElems(el,"INPUT",how);
    	massCursorElems(el,"SELECT",how);
    	massCursorElems(el,"IMG",how);
      }
    }
  function massCursor(k,how) {
    if(k.introspector) {
    	for(var i=0;i<k.introspector.taglist.length;i++) {
        massCursorToChildren(k.introspector[k.introspector.taglist[i]],how);
        }
      }
    }
  this.helpMode=helpMode;
  if(helpMode) {
  	var btn=null;
    if(el.assoc) {
    	var btn=KTStorage.get(el.assoc);
      };
  	massCursor(this.owner,'help');
  	btn.getElement('image').className="toolbaritem_latched";
  	btn.state=2;
    for(var row_index=0;row_index<this.rows.length;row_index++) {
      var row=this.rows[row_index];
      for(var group_index=row.groups.length-1;group_index>=0;group_index--) {
        var groupName=row.groups[group_index];
      	for(var i=0;i<this.groups[groupName].buttons.length;i++) {
          var _buttType=this.groups[groupName].buttons[i].button_type;
          switch(_buttType) {
            case'img':
              var _container=KTStorage.get(this.groups[groupName].buttons[i].assoc).getElement('container');
              break;
            case'combo':
              var _container=KTStorage.get(this.groups[groupName].buttons[i].assoc).getElement('ccontainer');
              break;
            case'select':
              var _container=KTStorage.get(this.groups[groupName].buttons[i].assoc).table0.getElementsByTagName('div');
              break;
            }
          if(_container) {
            if(_container.length) {
              Array_each(_container,function(el) {
              	el.style.cursor='help';
                });
              }
            else {
            	_container.style.cursor='help';
              }
            }
          }
        }
      }
    }
  else {
    var btn=null;
    if(el.assoc) {
    	var btn=KTStorage.get(el.assoc);
      }
    massCursor(this.owner,'');
    btn.getElement('image').className="toolbaritem_flat";
    btn.state=1;
    for(var row_index=0;row_index<this.rows.length;row_index++) {
      var row=this.rows[row_index];
      for(var group_index=row.groups.length-1;group_index>=0;group_index--) {
        var groupName=row.groups[group_index];
        for(var i=0;i<this.groups[groupName].buttons.length;i++) {
          var _buttType=this.groups[groupName].buttons[i].button_type;
          switch(_buttType) {
          	case'img':
              var _container=KTStorage.get(this.groups[groupName].buttons[i].assoc).getElement('container');
              break;
          	case'combo':
              var _container=KTStorage.get(this.groups[groupName].buttons[i].assoc).getElement('ccontainer');
              break;
          	case'select':
              var _container=KTStorage.get(this.groups[groupName].buttons[i].assoc).table0.getElementsByTagName('div');
              break;
            }
          if(_container) {
            if(_container.length) {
              Array_each(_container,function(el) {
              	el.style.cursor='default';
                });
              }
            else {
            	_container.style.cursor='default';
              };
            };
          }
        }
      }
    }
  };
Toolbar.prototype.getHelpMode=function() {
	return this.helpMode;
  };
Toolbar.prototype.checkHelp=function() {
	return this.helpMode;
  };
Toolbar.prototype.showHelp=function(fname) {
	var strUrl=jsDlgLoader+'?csModule=help/openhelp&topic=RTE&CSHelpID='+'topic_'+fname;
	//var strUrl=jsDlgLoader +'?csModule=private/openKTMLhelp&topic=RTE&CSHelpID='+'topic_'+fname;
	newWindow('help',strUrl);
	/*
	var postfix="../resources/KTMLHelp.html?ktmlid="+this.owner.counter+"&topic_id="+fname;
	alert(KtmlRoot);
	var helpUrl=KtmlRoot+postfix;
	utility.window.openWindow("_help"+parseInt(Math.random()*1000000000),helpUrl, 550, 300, false);
	*/
  };
Toolbar.prototype.openAboutBox=function() {
	utility.window.openWindow("_about"+parseInt(Math.random()*1000000000),KtmlRoot+"core/htm/about.html", 350, 220);
  };
Toolbar.prototype.openInsertTable=function() {
	utility.window.openWindow("_instable"+parseInt(Math.random()*1000000000),KtmlRoot+"core/htm/instable.html?id="+this.owner.counter, 360, 240, true);
  };
Toolbar.prototype.openFindReplace=function() {
	utility.window.openWindow("_findreplace"+parseInt(Math.random()*1000000000), KtmlRoot+"core/htm/findreplace.html?id="+this.owner.counter+'&counter='+this.owner.counter,290,200);
  };
Toolbar.prototype.getWidthForButton=function(button) {
	var button_instance=KTStorage.get(button.assoc);
	return button_instance.getWidth();
  };
Toolbar.prototype.saveConfig=function() {
	var display_buttons2='';

  for(var button_name in this.config_display_buttons) {

    if(typeof(KtmlToolbarButtonsIndexMap[button_name])!="undefined") {
      if(this.config_display_buttons[button_name]) {
      	display_buttons2+=(display_buttons2?",":"")+KtmlToolbarButtonsIndexMap[button_name];
        }
      }
    else {
    	display_buttons2+=(display_buttons2?",":"")+button_name;
      }
    }
	this.owner.serializer.set('toolbar','display_buttons2',display_buttons2);
	this.owner.serializer.save();
  };
Toolbar.prototype.loadConfig=function() {
  //do nothing
  var old_cookie_display_buttons=this.owner.serializer.get('toolbar','display_buttons');
  var display_buttons2=this.owner.serializer.get('toolbar','display_buttons2');
  var config_display_buttons={};
  if(old_cookie_display_buttons) {
  	config_display_buttons=old_cookie_display_buttons;
  	this.owner.serializer.set('toolbar','display_buttons',null);
  	this.owner.serializer.save();
    }
  else if(display_buttons2) {
  	cookie_display_buttons=display_buttons2.split(",");
  	display_buttons2=","+display_buttons2+",";
    for(var button_name in KtmlToolbarButtonsIndexMap) {
      if(display_buttons2.indexOf(","+KtmlToolbarButtonsIndexMap[button_name]+",")!=-1) {
      	config_display_buttons[button_name]=1;
        }
      else {
      	config_display_buttons[button_name]=0;
        }
      }
    for(var key in cookie_display_buttons) {
      if(key.match(/^\d+$/)) {
      	continue;
        }
    	config_display_buttons[key]=key;
      }
    }
	this.config_display_buttons=config_display_buttons;
  };
Toolbar.prototype.setButtonDisplay=function(button,mode) {
	var button_instance=KTStorage.get(button.assoc);
	button_instance.setVisible(mode);
  };
Toolbar.prototype.setVisibleButtonsConfig=function(group_id) {
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
  	var num_groups=row.groups.length;
  	var groups=row.groups;
  	for(var group_index=row.groups.length-1;group_index>=0;group_index--) {
    	var groupName=row.groups[group_index];
      if(typeof(group_id)!="undefined"&&group_id!=groupName) {
      	continue;
        }
    	for(var i=0;i<this.groups[groupName].buttons.length;i++) {
      	var button=this.groups[groupName].buttons[i];
      	button.config_display_button=this.config_display_buttons[button.name];
        if(typeof this.config_display_buttons[button.name]!='undefined') {
        	this.setButtonDisplay(button,button.config_display_button);
          }
        else {
        	this.setButtonDisplay(button,true);
          }
        }
      }
    }
  };
Toolbar.prototype.openToolbarConfig=function(group_id) {
	var container=document.createElement('div');
	container.id='toolbarconfig';
	container.className='ktmlContextMenuDIV';
	var str='\
  <table cellspacing="0" cellpadding="0" border="0">\
    <tbody>\
 ';
  Array_each(this.groups[group_id].buttons,function(button) {
  	var render='';
  	var button_instance=KTStorage.get(button.assoc);
  	var _tmpUrl=KtmlRoot+"core/img/montage.gif?"+KtmlVersion;
  	var idx=parseInt(KT_icon_indexes[button.name],10);
  	var _img_html_tpl='<input type="image" '+'align="absmiddle" '+'onclick="return false" '+'src="%s" '+'style="background-image: url(%s);'+'background-repeat: no-repeat;'+'background-position: %spx 2px;'+'width: 20px;'+'height: 20px;'+'margin: 0px;'+'position: relative;'+'top: %spx;'+'left: -2px;'+'border: 0px;">';
  	var imgVoffset=(is.mozilla)?"-2":(is.ie)?"2":"0";
    if(!isNaN(idx)) {
    	var _pos=-idx*32-6;
    	render=utility.string.sprintf(_img_html_tpl,KtmlRelativeImagePath+'s.gif',_tmpUrl,_pos,imgVoffset);
      }
    else {
      if(typeof button.options.alt_image!="undefined") {
      	render=utility.string.sprintf(_img_html_tpl,KtmlRelativeImagePath+'s.gif',KtmlRelativeImagePath+button.options.alt_image,2,imgVoffset);
        }
      else {
      	render='';
        }
      }
    var checkBoxOffset=(is.mozilla)?"3px":(is.ie)?"2px":"0";
    var flag_has_title_prop=button_instance.title?1:0;
    var flag_has_title_method=button_instance.getTitle?2:0;
    var flag_has_secondary_title=(button_instance.secTitle&&(button_instance.secTitle!=textContent))?4:0;
    var descriptor=flag_has_title_prop+flag_has_title_method+flag_has_secondary_title;
    var textContent;
    switch(descriptor) {
    	case 1:
        textContent=button_instance.title;
        break;
    	case 3:
        textContent=(button_instance.title!=button_instance.getTitle())?button_instance.title+"/"+button_instance.getTitle():button_instance.title;
          break;
    	case 5:
      case 7:
        textContent=(button_instance.title!=button_instance.secTitle)?button_instance.title+"/"+button_instance.secTitle:button_instance.title;
        break;
    	default:
        textContent=button.name;
        break;
      }
    str+='\
     <tr class="ktmlContextMenuItem_default" \
      onclick="this.getElementsByTagName(\'input\')[0].checked = !this.getElementsByTagName(\'input\')[0].checked ">\
       <td valign="bottom" class="ktmlContextMenuImages">\
        <div  class="kt_spacer" style="width:49px; height: 24px;"><nobr>\
          <input type="checkbox" id="tc_button_'+button.name+'" name="tc_button_'+button.name+'" '+(button.config_display_button?'checked="true"':'')+' onclick="this.checked = !this.checked; return true;"\
           style="position: relative; top: '+checkBoxOffset+'">\
          '+render+'\
        </div></nobr></td>\
       <td class="ktmlContextMenuText">\
        <div style="height: 24px; \
         line-height:24px; \
         margin: 0px;"><nobr>\
         '+textContent+'\
        </nobr></div></td>\
          <td valign="middle" class="ktmlContextMenuSubmenu">&nbsp;</td>\
        </tr>\
    ';});
    str+='\
    </tbody>\
    </table>\
';
    container.innerHTML=str;
    container.style.top='-20000px';
    container.style.width='auto';
    container.style.height='auto';
    var strictm=document.compatMode=="CSS1Compat";
    container=this.base.appendChild(container);
    utility.dom.setUnselectable(container);
    var c_width=container.offsetWidth;
    var c_height=container.offsetHeight;
    container.style.width=(c_width-4)+'px';
    container.style.height=(c_height-4)+'px';
    if(is.mozilla&&is.mac) {
      container.style.overflow='auto';
      }
    utility.dom.putElementAt(container,this.groups[group_id]['floater'],'00', {
    	x: 14,y: 14
      });
  	container.style.zIndex=2000;
  	var ktml_counter=this.owner.counter;
    utility.popup.makeModal(function() {
    	ktmls[ktml_counter].toolbar.closeToolbarConfig(group_id);
    	ktmls[ktml_counter].toolbar.base.removeChild(container);
      }, container);
    if(is.ie) {
    	utility.dom.toggleSpecialTags(container,false,1,this.owner.edit,this.owner.iframe);
      };
    };
Toolbar.prototype.closeToolbarConfig=function(group_id) {
	var buttons=this.groups[group_id].buttons;
	for(var i=0;i<buttons.length;i++) {
  	var checked=document.getElementById('tc_button_'+this.groups[group_id].buttons[i].name).checked;
  	this.config_display_buttons[this.groups[group_id].buttons[i].name]=checked?1: 0;
  	this.groups[group_id].buttons[i].config_display_button=checked?1: 0;
    if(!checked) {
      this.groups[group_id].buttons[i].in_floater=false;
      }
    else {
    	this.groups[group_id].buttons[i].in_floater=true;
      }
    }
	this.saveConfig();
	this.hideFloater(group_id,false);
	this.Resize();
  };
Toolbar.prototype.dispose=function(){
	for(var row_index=0;row_index<this.rows.length;row_index++) {
  	var row=this.rows[row_index];
    if(!row) {
    	continue
      };
  	var num_groups=row.groups.length;
  	for(var group_index=row.groups.length-1;group_index>=0;group_index--){
    	var groupName=row.groups[group_index];
    	this.groups[groupName].element=null;
    	for(var i=0;i<this.groups[groupName].buttons.length;i++){
      	this.groups[groupName].buttons[i].dispose();
      	this.groups[groupName].buttons[i]=null;
        }
    	this.groups[groupName]=null;
      }
    this.rows[row_index].element=null;
    this.rows[row_index]=null;
    }
  	for(var i=0;i<this.buttons.length;i++){
    	this.buttons[i]=null;
      }
  	this.base=null;
    };
function updateIntrospector(what,updateText){
  try {
    if (this.introspector){
      this.introspector.apply(what,updateText);
      }
    }
    catch(e) {}
  };
function getglblRTElementsRef(){
	lglblRTElements=parent.glblRTElements;
	return lglblRTElements;
	};
function getThisRTERef(tbRef,glbRef) {
	var thistbIndex=null;
	try{
  	if (glbRef.length>1){
  		for(var i=0;i<glbRef.length;i++) {
  			splitString = glbRef[i].split("|");
  			if (splitString[0]==tbRef) {
  				thistbIndex=i;
  				break;
  				}
  			}
  		}
  		return thistbIndex;
     }
    catch(e){return null;}
	};
function changeglblSetting(ktObj){
  if(thisTimeoutID)
    clearInterval(thisTimeoutID);
  while(!ktObj.editorJsLoaded){
		thisTimeoutID=setInterval(function(){
      changeglblSetting(ktObj);
      },100);
		return;
		}
	var lclglblRTElements=getglblRTElementsRef();
	var thistbIndex=null;
	var pString='';
	if (lclglblRTElements.length>1){
	  thistbIndex=getThisRTERef(ktObj.name,lclglblRTElements);
		if(thistbIndex>=0){
			try{
				oldTxt=lclglblRTElements[thistbIndex].split("|");
				lclglblRTElements[thistbIndex]=oldTxt[0]+'|'+oldTxt[1]+'|'+oldTxt[2]+'|true';
				parent.glblRTElements=lclglblRTElements;
        var thisInd=getThisRTERef(ktObj.name,parent.glblRTElements);
				}
			catch(e){};
			}
		}
	};
function getRTEStatus(glbRef,ind){
  arTxt=glbRef[ind].split("|");
  return arTxt[3];
  };
/*
* This function will not return until (at least)
* the specified number of milliseconds have passed.
* It uses a modal dialog.
*/
function pause(numberMillis){
  var dialogScript=
    'parent.window.focus();window.setTimeout('+'function(){window.close();},'+numberMillis+');';
  if(is.mozilla){ //For NN6, but it requires a trusted script.
    try{
      openDialog(
      'javascript:document.writeln(' +
      '"<script>'+dialogScript+'<'+'/script>"','pauseDialog','modal=1,width=10,height=10');
      }
     catch(err){};
    }
  else{
    var result=
    // For IE5.
    window.showModalDialog(
    'javascript:document.writeln(' +
    '"<script>'+dialogScript+'<'+'/script>")');
    }
  };
function specialActivate(){
  if (Ktml_object&&jsWaitToLoad&&!jsLoaded) {
    jsLoadNow=true;
    setval();
    setTimeout('doDocOnReadyStateChange();',100);
  	}
	else {
  	doDocOnReadyStateChange();
  	}
	};
function doDocOnReadyStateChange(){
	try{
		Ktml_object.makeCanvasEditable();
	}
	catch(err){};
};
function setval() {
  if(!Ktml_initialized){
    //Ktml_object.toolbar.initializeUI();
    Ktml_initialized = true;
    try{
      window.focus();
      }
    catch(e){};
    }
  }
function customResize(w,h,name) {
  try{
    window['ktml_'+name].myCustomResize(w,h);
    }
  catch(e){};
  }
  
function saveKTML(name){
  	window['ktml_'+name].save();
  }
//DECMD_PASTE_onclick_continue(fake_clipboard,ktml);
function DECMD_PASTE_onclick_continue(clipboard_ref,ktObj) {
	Ktml_object=ktObj;
	if(is.mozilla){
		//add Moz specific stuff here
		var plainText = getInnerText(objRef.contentWindow.document.body);
		var pasteTextNoBR = pasteText.replace(/<br[ \/]*>/gi, "");
		var pasteTextHasTags = pasteTextNoBR.match(/<[a-z].*>/i);
		}
	else{
		//add IE specific stuff here
		}

	};
function checkForScript() {
	oe=/&lt;script.*&gt;/gi;
	o=/&lt;script/gi;
	c=/&lt;\/script&gt;/gi;
	oe2=/<script[^>]*>;/gi;
	o2=/<script/gi;
	c2=/<\/script>/gi;
	if (pasteText.search(o) >= 0 || pasteText.search(oe) >= 0 || pasteText.search(c) >= 0 ||
	pasteText.search(o2) >= 0 || pasteText.search(oe2) >= 0 || pasteText.search(c2) >= 0)
		return 1;
	else
		return 0;
	};
