
String.prototype.supplant=function(oProps,bReplaceWithBlank,oCallBack){var i,j,vValue;var sString=this;var q=0;var sOpenTag=(isUndefined(oProps.__open_tag))?'{':oProps.__open_tag;var sCloseTag=(isUndefined(oProps.__close_tag))?'}':oProps.__close_tag;for(;;){i=q+sString.substring(q,sString.length).indexOf(sOpenTag);if(i<0){break;}
if(i+1<=q){break;}
j=sString.indexOf(sCloseTag,i+1);if(j==-1){break;}
if($defined(oCallBack)){vValue=oCallBack(sString.substring(i+1,j),oProps);}else{vValue=oProps[sString.substring(i+1,j)];}
if(isUndefined(vValue)){if(bReplaceWithBlank){vValue='';}else{q=i+1;continue;}}
sString=sString.substring(0,i)+vValue+sString.substring(j+1);}
return sString;}
function isNull(a){return typeof a=='object'&&!a;}
function isUndefined(a){return typeof a=='undefined';}


function Filter_Trim(vValue){return vValue.trim();}
function Filter_Integer(vValue){return(isNaN(parseInt(vValue,10)))?'':parseInt(vValue,10);}
var MapFilterName_Filter={__filter__trim:Filter_Trim,__filter__int:Filter_Integer};function FilterFieldValue(vValue,vFilter){var vFilteredValue=vValue;var arrFilters=vFilter.split(',');for(var i=0;i<arrFilters.length;i++){var sCurrFilter=arrFilters[i].trim();if($defined(MapFilterName_Filter[sCurrFilter])){vFilteredValue=MapFilterName_Filter[sCurrFilter](vFilteredValue);}}
return vFilteredValue;}
function FilterField(oField,vFilter){oField=$(oField);oField.setValue(FilterFieldValue(oField.getValue(),vFilter));}
function Validator_None(vValue){return true;}
function Validator_None_Message(){return'';}
function Validator_IsInteger(vValue){return(parseInt(vValue).toString().length==vValue.toString().length&&!isNaN(parseInt(vValue,10)));}
function Validator_IsInteger_Message(){return'Un número entero es necesario.';}
function Validator_IsPositiveInteger(vValue){return(Validator_IsInteger(vValue)&&vValue>0);}
function Validator_IsPositiveInteger_Message(){return'Un numero entero positivo es necesario.';}
function Validator_IsNonNegativeInteger(vValue){return(Validator_IsInteger(vValue)&&vValue>=0);}
function Validator_IsNonNegativeInteger_Message(){return'Un numero entero no negativo es necesario.';}
function Validator_IsNotEmpty(vValue){return(vValue.toString()!='');}
function Validator_IsNotEmpty_Message(){return'Este campo no puede estar vacío.';}
function Validator_EmptyOrPositiveInteger(vValue){return(!Validator_IsNotEmpty(vValue)||Validator_IsPositiveInteger(vValue));}
function Validator_EmptyOrPositiveInteger_Message(){return'Introduzca cualquier número entero positivo o deje el campo vacío.';}
function Validator_EmptyOrNonNegativeInteger(vValue){return(!Validator_IsNotEmpty(vValue)||Validator_IsNonNegativeInteger(vValue));}
function Validator_EmptyOrNonNegativeInteger_Message(){return'Introduzca cualquier número entero no negativo o deje el campo vacío.';}
function Validator_Email(vValue){return(vValue.match(/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,5}|[0-9]{1,5})(\]?)$/)!=null||vValue.match(/^\$/));}
function Validator_Email_Message(){return'Introduzca un correo electrónico válido.'}
function Validator_Character(vValue,oOptions){if(vValue.match(/^[a-z\n\r]+$/i)==null){return false;}
if($defined(oOptions)){vValue=vValue.replace(/\n|\r/g,'');if($defined(oOptions.length_from)&&oOptions.length_from!=''){if(vValue.toString().length<oOptions.length_from){return false;}}
if($defined(oOptions.length_to)&&oOptions.length_to!=''){if(vValue.toString().length>oOptions.length_to){return false;}}}
return true;}
function Validator_Character_Message(oOptions){if($defined(oOptions)){var sMessage='';if(oOptions.length_from){sMessage+='Escriba por lo menos '+oOptions.length_from+' letras.';}
if(oOptions.length_to){sMessage+='Escriba no más de '+oOptions.length_to+' letras.';}
if(oOptions.length_from&&oOptions.length_to){sMessage='Escriba por lo menos '+oOptions.length_from+' letras.';}
if(sMessage!=''){return sMessage;}}
return'ntroduce una o más letras.';}
function Validator_Number(vValue,oOptions){if(vValue.match(/^[\-]*[\d]+[\.]{0,1}[\d]*$/)==null){return false;}
if($defined(oOptions)){if($defined(oOptions.range_from)&&oOptions.range_from.toString()!=''){if(parseFloat(vValue)<parseFloat(oOptions.range_from)){return false;}}
if($defined(oOptions.range_to)&&oOptions.range_to.toString()!=''){if(parseFloat(vValue)>parseFloat(oOptions.range_to)){return false;}}}
return true;}
function Validator_Number_Message(oOptions){if($defined(oOptions)){var sMessage='';var bRangeFromFound=false;if($defined(oOptions.range_from)&&oOptions.range_from.toString()!=''){sMessage+='Introduzca un número no inferior a '+oOptions.range_from+'. ';bRangeFromFound=true;}
var bRangeToFound=false;if($defined(oOptions.range_to)&&oOptions.range_to.toString()!=''){sMessage+='Introduzca un número hasta '+oOptions.range_to+'.';bRangeToFound=true;}
if(bRangeFromFound&&bRangeToFound){sMessage='Introduzca un número entre '+oOptions.range_from+' and '+oOptions.range_to+'.';}
if(sMessage!=''){return sMessage;}}
return'Por favor ingresa un número valido';}
var mapPhoneFormat_Data={"1":{reg_exp:/^\(\d{3}\) \d{3} \d{4}$/,format:'(310) 571 3135'},"2":{reg_exp:/^\d{3}\.\d{3}\.\d{4}$/,format:'310.571.3135'},"3":{reg_exp:/^\d{3} \d{3} \d{4}$/,format:'310 571 3135'},"4":{reg_exp:/^\d{3}\-\d{3}\-\d{4}$/,format:'310-571-3135'}}
function Validator_Phone(vValue,oOptions){if($defined(oOptions)&&$defined(oOptions.phone_format)){var sPhoneFormatId=oOptions.phone_format;var oData=mapPhoneFormat_Data[sPhoneFormatId];if($defined(oData)){var oRegExp=oData.reg_exp;return(vValue.match(oRegExp)!=null);}}
var oDefaultPhoneRe=/^[\(\)\.x\ \-\d]+$/;var sDigitsOnly=vValue.replace(/[^\d]+/g,'');return(vValue.match(oDefaultPhoneRe)!=null&&sDigitsOnly.toString().length>4);}
function Validator_Phone_Message(oOptions){if($defined(oOptions)&&$defined(oOptions.phone_format)){var sPhoneFormatId=oOptions.phone_format;var oData=mapPhoneFormat_Data[sPhoneFormatId];if($defined(oData)){var sFormat=oData.format;return'El formato requerido de número telefónico es ['+sFormat+'].';}}
return'Un numero de telefono se considera valido si tiene al menos 5 digitos separados por un espacio, punto, guion, "x" o parentesis.';}
var mapDateFormat_Data={"1":{handler:ValidDate_1,format:'YYYY-MM-DD'},"2":{handler:ValidDate_2,format:'YY-MM-DD'},"3":{handler:ValidDate_3,format:'DD-MM-YYYY'},"4":{handler:ValidDate_4,format:'DD-MM-YY'}}
function IsValidDateCombination(iYear,iMonth,iDate){if(iYear<0){return false;}
if(iDate<1||iDate>31){return false;}
if(iMonth<1||iMonth>12){return false;}
return true;}
function ValidDate_1(sDate){var re=/^(\d{4})\-(\d{2})\-(\d{2})$/;if(sDate.match(re)==null){return false;}
var arr=re.exec(sDate);return IsValidDateCombination(parseInt(RegExp.$1,10),parseInt(RegExp.$2,10),parseInt(RegExp.$3,10));}
function ValidDate_2(sDate){var re=/^(\d{2})\-(\d{2})\-(\d{2})$/;if(sDate.match(re)==null){return false;}
var arr=re.exec(sDate);return IsValidDateCombination(parseInt(RegExp.$1,10),parseInt(RegExp.$2,10),parseInt(RegExp.$3,10));}
function ValidDate_3(sDate){var re=/^(\d{2})\-(\d{2})\-(\d{4})$/;if(sDate.match(re)==null){return false;}
var arr=re.exec(sDate);return IsValidDateCombination(parseInt(RegExp.$3,10),parseInt(RegExp.$2,10),parseInt(RegExp.$1,10));}
function ValidDate_4(sDate){var re=/^(\d{2})\-(\d{2})\-(\d{2})$/;if(sDate.match(re)==null){return false;}
var arr=re.exec(sDate);return IsValidDateCombination(parseInt(RegExp.$3,10),parseInt(RegExp.$2,10),parseInt(RegExp.$1,10));}
function Validator_Date(vValue,oOptions){vValue=vValue.replace(/[\/\.\\]+/g,'-');if($defined(oOptions)&&$defined(oOptions.date_format)){var sDateFormatId=oOptions.date_format;var oData=mapDateFormat_Data[sDateFormatId];if($defined(oData)){var oValidateFunction=oData.handler;return oValidateFunction(vValue);}}
return false;}
function Validator_Date_Message(oOptions){if($defined(oOptions)&&$defined(oOptions.date_format)){var sDateFormatId=oOptions.date_format;var oData=mapDateFormat_Data[sDateFormatId];if($defined(oData)){var sFormat=oData.format;return'El formato requerido de fecha es ['+sFormat+'].';}}
return'Introduzca una fecha válida.';}
function Validator_RegExp(vValue,oOptions){if($defined(oOptions)&&$defined(oOptions.reg_exp)){var sRegExp=oOptions.reg_exp;if(sRegExp.indexOf('/')==-1){sRegExp='/'+sRegExp+'/';}
var oRegExp=eval(sRegExp);return(vValue.match(oRegExp)!=null);}
return true;}
function Validator_RegExp_Message(oOptions){if($defined(oOptions)&&$defined(oOptions.reg_exp)){var sRegExp=oOptions.reg_exp;return'Es necesario un valor que coincida con la expresión regular ['+sRegExp+']';}
return'';}
var MapValidatorName_Validator={__validator__int:Validator_IsInteger,__validator__positive_int:Validator_IsPositiveInteger,__validator__nonnegative_int:Validator_IsNonNegativeInteger,__validator__not_empty:Validator_IsNotEmpty,__validator__empty_or_positive_int:Validator_EmptyOrPositiveInteger,__validator__empty_or_nonnegative_int:Validator_EmptyOrNonNegativeInteger,__validator__none:Validator_None,__validator__email:Validator_Email,__validator__character:Validator_Character,__validator__number:Validator_Number,__validator__phone:Validator_Phone,__validator__date:Validator_Date,__validator__reg_exp:Validator_RegExp}
var MapValidatorName_Message={__validator__int:Validator_IsInteger_Message,__validator__positive_int:Validator_IsPositiveInteger_Message,__validator__nonnegative_int:Validator_IsNonNegativeInteger_Message,__validator__not_empty:Validator_IsNotEmpty_Message,__validator__empty_or_positive_int:Validator_EmptyOrPositiveInteger_Message,__validator__empty_or_nonnegative_int:Validator_EmptyOrNonNegativeInteger_Message,__validator__none:Validator_None_Message,__validator__email:Validator_Email_Message,__validator__character:Validator_Character_Message,__validator__number:Validator_Number_Message,__validator__phone:Validator_Phone_Message,__validator__date:Validator_Date_Message,__validator__reg_exp:Validator_RegExp_Message}
function ValidateFieldValue(vValue,vValidator,oOptions){if($defined(MapValidatorName_Validator[vValidator])){return MapValidatorName_Validator[vValidator](vValue,oOptions);}
return true;}
var ATTRIBUTE_VALIDATOR_VALUE='value_validator';var ATTRIBUTE_VALIDATOR_OPTIONS='validator_options';function ValidateField(oField){oField=$(oField);var sValidatorValue=oField.getProperty(ATTRIBUTE_VALIDATOR_VALUE);if(sValidatorValue!=null){var oOptions=null;var sOptions=$(oField).getProperty(ATTRIBUTE_VALIDATOR_OPTIONS);if(sOptions!=null){oOptions=eval('('+sOptions+')')}
return ValidateFieldValue(oField.getValue(),sValidatorValue,oOptions);}
return true;}
function CheckFieldValidation(oField){if(!ValidateField(oField)){alert('Incorrect Value!\n\nValue should be validated as:\n'+Validator_GetMessage(oField));}}
function Validator_SetFieldValidators(oField,sValidatorIdent,sValidatorOptions){if(sValidatorOptions){$(oField).set(ATTRIBUTE_VALIDATOR_OPTIONS,sValidatorOptions);}
$(oField).set(ATTRIBUTE_VALIDATOR_VALUE,sValidatorIdent);}
function Validator_SetFieldEvents(oField,sAction){if(!sAction){sAction='CheckFieldValidation(this)';}
if(oField.tagName=='INPUT'||oField.tagName=='TEXTAREA'){if($(oField).getProperty('type')=='checkbox'||$(oField).getProperty('type')=='radio'){oField.onclick=new Function(sAction);}else{oField.onblur=new Function(sAction);}}else if(oField.tagName=='SELECT'){oField.onchange=new Function(sAction);}}
function Validator_GetMessage(oField){var vValidator=$(oField).getProperty(ATTRIBUTE_VALIDATOR_VALUE);if(vValidator!=null){var oOptions=null;var sOptions=$(oField).getProperty(ATTRIBUTE_VALIDATOR_OPTIONS);if(sOptions!=null){oOptions=eval('('+sOptions+')')}
if($defined(MapValidatorName_Message[vValidator])){return MapValidatorName_Message[vValidator](oOptions);}}
return'';}


function MoveCursorAfterElement(oElement,oRng){var oTextSibling=oElement.ownerDocument.createElement('FONT');oTextSibling.className=RTE_CONST.DEFAULT_CSS_STYLE;oTextSibling.innerHTML='&nbsp;';if(oElement.nextSibling){oElement.parentNode.insertBefore(oTextSibling,oElement.nextSibling);}else{oElement.parentNode.appendChild(oTextSibling);}
var oNextSibling=oTextSibling;oRng.moveToElementText(oNextSibling);}
function MoveCursorBeforeElement(oElement,oRng){var oTextSibling=oElement.ownerDocument.createElement('FONT');oTextSibling.className=RTE_CONST.DEFAULT_CSS_STYLE;oTextSibling.innerHTML='&nbsp;';oElement.parentNode.insertBefore(oTextSibling,oElement);var oPrevSibling=oTextSibling;oRng.moveToElementText(oPrevSibling);}
function IsCharacterKeyDown(iKeyCode){if((iKeyCode<48||iKeyCode>111)&&iKeyCode!=9&&iKeyCode!=32&&iKeyCode!=144&&iKeyCode!=188&&iKeyCode!=190&&iKeyCode!=191&&iKeyCode!=192&&iKeyCode!=219&&iKeyCode!=220&&iKeyCode!=221&&iKeyCode!=222){return false;}
return true;}


window['rangy']=(function(){var OBJECT="object",FUNCTION="function",UNDEFINED="undefined";var domRangeProperties=["startContainer","startOffset","endContainer","endOffset","collapsed","commonAncestorContainer","START_TO_START","START_TO_END","END_TO_START","END_TO_END"];var domRangeMethods=["setStart","setStartBefore","setStartAfter","setEnd","setEndBefore","setEndAfter","collapse","selectNode","selectNodeContents","compareBoundaryPoints","deleteContents","extractContents","cloneContents","insertNode","surroundContents","cloneRange","toString","detach"];var textRangeProperties=["boundingHeight","boundingLeft","boundingTop","boundingWidth","htmlText","text"];var textRangeMethods=["collapse","compareEndPoints","duplicate","getBookmark","moveToBookmark","moveToElementText","parentElement","pasteHTML","select","setEndPoint","getBoundingClientRect"];function isHostMethod(o,p){var t=typeof o[p];return t==FUNCTION||(!!(t==OBJECT&&o[p]))||t=="unknown";}
function isHostObject(o,p){return!!(typeof o[p]==OBJECT&&o[p]);}
function isHostProperty(o,p){return typeof o[p]!=UNDEFINED;}
function createMultiplePropertyTest(testFunc){return function(o,props){var i=props.length;while(i--){if(!testFunc(o,props[i])){return false;}}
return true;};}
var areHostMethods=createMultiplePropertyTest(isHostMethod);var areHostObjects=createMultiplePropertyTest(isHostObject);var areHostProperties=createMultiplePropertyTest(isHostProperty);function isTextRange(range){return range&&areHostMethods(range,textRangeMethods)&&areHostProperties(range,textRangeProperties);}
var api={version:"1.2.2",initialized:false,supported:true,util:{isHostMethod:isHostMethod,isHostObject:isHostObject,isHostProperty:isHostProperty,areHostMethods:areHostMethods,areHostObjects:areHostObjects,areHostProperties:areHostProperties,isTextRange:isTextRange},features:{},modules:{},config:{alertOnWarn:false,preferTextRange:false}};function fail(reason){window.alert("Rangy not supported in your browser. Reason: "+reason);api.initialized=true;api.supported=false;}
api.fail=fail;function warn(msg){var warningMessage="Rangy warning: "+msg;if(api.config.alertOnWarn){window.alert(warningMessage);}else if(typeof window.console!=UNDEFINED&&typeof window.console.log!=UNDEFINED){window.console.log(warningMessage);}}
api.warn=warn;if({}.hasOwnProperty){api.util.extend=function(o,props){for(var i in props){if(props.hasOwnProperty(i)){o[i]=props[i];}}};}else{fail("hasOwnProperty not supported");}
var initListeners=[];var moduleInitializers=[];function init(){if(api.initialized){return;}
var testRange;var implementsDomRange=false,implementsTextRange=false;if(isHostMethod(document,"createRange")){testRange=document.createRange();if(areHostMethods(testRange,domRangeMethods)&&areHostProperties(testRange,domRangeProperties)){implementsDomRange=true;}
testRange.detach();}
var body=isHostObject(document,"body")?document.body:document.getElementsByTagName("body")[0];if(body&&isHostMethod(body,"createTextRange")){testRange=body.createTextRange();if(isTextRange(testRange)){implementsTextRange=true;}}
if(!implementsDomRange&&!implementsTextRange){fail("Neither Range nor TextRange are implemented");}
api.initialized=true;api.features={implementsDomRange:implementsDomRange,implementsTextRange:implementsTextRange};var allListeners=moduleInitializers.concat(initListeners);for(var i=0,len=allListeners.length;i<len;++i){try{allListeners[i](api);}catch(ex){if(isHostObject(window,"console")&&isHostMethod(window.console,"log")){window.console.log("Init listener threw an exception. Continuing.",ex);}}}}
api.init=init;api.addInitListener=function(listener){if(api.initialized){listener(api);}else{initListeners.push(listener);}};var createMissingNativeApiListeners=[];api.addCreateMissingNativeApiListener=function(listener){createMissingNativeApiListeners.push(listener);};function createMissingNativeApi(win){win=win||window;init();for(var i=0,len=createMissingNativeApiListeners.length;i<len;++i){createMissingNativeApiListeners[i](win);}}
api.createMissingNativeApi=createMissingNativeApi;function Module(name){this.name=name;this.initialized=false;this.supported=false;}
Module.prototype.fail=function(reason){this.initialized=true;this.supported=false;throw new Error("Module '"+this.name+"' failed to load: "+reason);};Module.prototype.warn=function(msg){api.warn("Module "+this.name+": "+msg);};Module.prototype.createError=function(msg){return new Error("Error in Rangy "+this.name+" module: "+msg);};api.createModule=function(name,initFunc){var module=new Module(name);api.modules[name]=module;moduleInitializers.push(function(api){initFunc(api,module);module.initialized=true;module.supported=true;});};api.requireModules=function(modules){for(var i=0,len=modules.length,module,moduleName;i<len;++i){moduleName=modules[i];module=api.modules[moduleName];if(!module||!(module instanceof Module)){throw new Error("Module '"+moduleName+"' not found");}
if(!module.supported){throw new Error("Module '"+moduleName+"' not supported");}}};var docReady=false;var loadHandler=function(e){if(!docReady){docReady=true;if(!api.initialized){init();}}};if(typeof window==UNDEFINED){fail("No window found");return;}
if(typeof document==UNDEFINED){fail("No document found");return;}
if(isHostMethod(document,"addEventListener")){document.addEventListener("DOMContentLoaded",loadHandler,false);}
if(isHostMethod(window,"addEventListener")){window.addEventListener("load",loadHandler,false);}else if(isHostMethod(window,"attachEvent")){window.attachEvent("onload",loadHandler);}else{fail("Window does not have required addEventListener or attachEvent method");}
return api;})();rangy.createModule("DomUtil",function(api,module){var UNDEF="undefined";var util=api.util;if(!util.areHostMethods(document,["createDocumentFragment","createElement","createTextNode"])){module.fail("document missing a Node creation method");}
if(!util.isHostMethod(document,"getElementsByTagName")){module.fail("document missing getElementsByTagName method");}
var el=document.createElement("div");if(!util.areHostMethods(el,["insertBefore","appendChild","cloneNode"]||!util.areHostObjects(el,["previousSibling","nextSibling","childNodes","parentNode"]))){module.fail("Incomplete Element implementation");}
if(!util.isHostProperty(el,"innerHTML")){module.fail("Element is missing innerHTML property");}
var textNode=document.createTextNode("test");if(!util.areHostMethods(textNode,["splitText","deleteData","insertData","appendData","cloneNode"]||!util.areHostObjects(el,["previousSibling","nextSibling","childNodes","parentNode"])||!util.areHostProperties(textNode,["data"]))){module.fail("Incomplete Text Node implementation");}
var arrayContains=function(arr,val){var i=arr.length;while(i--){if(arr[i]===val){return true;}}
return false;};function isHtmlNamespace(node){var ns;return typeof node.namespaceURI==UNDEF||((ns=node.namespaceURI)===null||ns=="http://www.w3.org/1999/xhtml");}
function parentElement(node){var parent=node.parentNode;return(parent.nodeType==1)?parent:null;}
function getNodeIndex(node){var i=0;while((node=node.previousSibling)){i++;}
return i;}
function getNodeLength(node){var childNodes;return isCharacterDataNode(node)?node.length:((childNodes=node.childNodes)?childNodes.length:0);}
function getCommonAncestor(node1,node2){var ancestors=[],n;for(n=node1;n;n=n.parentNode){ancestors.push(n);}
for(n=node2;n;n=n.parentNode){if(arrayContains(ancestors,n)){return n;}}
return null;}
function isAncestorOf(ancestor,descendant,selfIsAncestor){var n=selfIsAncestor?descendant:descendant.parentNode;while(n){if(n===ancestor){return true;}else{n=n.parentNode;}}
return false;}
function getClosestAncestorIn(node,ancestor,selfIsAncestor){var p,n=selfIsAncestor?node:node.parentNode;while(n){p=n.parentNode;if(p===ancestor){return n;}
n=p;}
return null;}
function isCharacterDataNode(node){var t=node.nodeType;return t==3||t==4||t==8;}
function insertAfter(node,precedingNode){var nextNode=precedingNode.nextSibling,parent=precedingNode.parentNode;if(nextNode){parent.insertBefore(node,nextNode);}else{parent.appendChild(node);}
return node;}
function splitDataNode(node,index){var newNode=node.cloneNode(false);newNode.deleteData(0,index);node.deleteData(index,node.length-index);insertAfter(newNode,node);return newNode;}
function getDocument(node){if(node.nodeType==9){return node;}else if(typeof node.ownerDocument!=UNDEF){return node.ownerDocument;}else if(typeof node.document!=UNDEF){return node.document;}else if(node.parentNode){return getDocument(node.parentNode);}else{throw new Error("getDocument: no document found for node");}}
function getWindow(node){var doc=getDocument(node);if(typeof doc.defaultView!=UNDEF){return doc.defaultView;}else if(typeof doc.parentWindow!=UNDEF){return doc.parentWindow;}else{throw new Error("Cannot get a window object for node");}}
function getIframeDocument(iframeEl){if(typeof iframeEl.contentDocument!=UNDEF){return iframeEl.contentDocument;}else if(typeof iframeEl.contentWindow!=UNDEF){return iframeEl.contentWindow.document;}else{throw new Error("getIframeWindow: No Document object found for iframe element");}}
function getIframeWindow(iframeEl){if(typeof iframeEl.contentWindow!=UNDEF){return iframeEl.contentWindow;}else if(typeof iframeEl.contentDocument!=UNDEF){return iframeEl.contentDocument.defaultView;}else{throw new Error("getIframeWindow: No Window object found for iframe element");}}
function getBody(doc){return util.isHostObject(doc,"body")?doc.body:doc.getElementsByTagName("body")[0];}
function getRootContainer(node){var parent;while((parent=node.parentNode)){node=parent;}
return node;}
function comparePoints(nodeA,offsetA,nodeB,offsetB){var nodeC,root,childA,childB,n;if(nodeA==nodeB){return offsetA===offsetB?0:(offsetA<offsetB)?-1:1;}else if((nodeC=getClosestAncestorIn(nodeB,nodeA,true))){return offsetA<=getNodeIndex(nodeC)?-1:1;}else if((nodeC=getClosestAncestorIn(nodeA,nodeB,true))){return getNodeIndex(nodeC)<offsetB?-1:1;}else{root=getCommonAncestor(nodeA,nodeB);childA=(nodeA===root)?root:getClosestAncestorIn(nodeA,root,true);childB=(nodeB===root)?root:getClosestAncestorIn(nodeB,root,true);if(childA===childB){throw new Error("comparePoints got to case 4 and childA and childB are the same!");}else{n=root.firstChild;while(n){if(n===childA){return-1;}else if(n===childB){return 1;}
n=n.nextSibling;}
throw new Error("Should not be here!");}}}
function fragmentFromNodeChildren(node){var fragment=getDocument(node).createDocumentFragment(),child;while((child=node.firstChild)){fragment.appendChild(child);}
return fragment;}
function inspectNode(node){if(!node){return"[No node]";}
if(isCharacterDataNode(node)){return'"'+node.data+'"';}else if(node.nodeType==1){var idAttr=node.id?' id="'+node.id+'"':"";return"<"+node.nodeName+idAttr+">["+node.childNodes.length+"]";}else{return node.nodeName;}}
function NodeIterator(root){this.root=root;this._next=root;}
NodeIterator.prototype={_current:null,hasNext:function(){return!!this._next;},next:function(){var n=this._current=this._next;var child,next;if(this._current){child=n.firstChild;if(child){this._next=child;}else{next=null;while((n!==this.root)&&!(next=n.nextSibling)){n=n.parentNode;}
this._next=next;}}
return this._current;},detach:function(){this._current=this._next=this.root=null;}};function createIterator(root){return new NodeIterator(root);}
function DomPosition(node,offset){this.node=node;this.offset=offset;}
DomPosition.prototype={equals:function(pos){return this.node===pos.node&this.offset==pos.offset;},inspect:function(){return"[DomPosition("+inspectNode(this.node)+":"+this.offset+")]";}};function DOMException(codeName){this.code=this[codeName];this.codeName=codeName;this.message="DOMException: "+this.codeName;}
DOMException.prototype={INDEX_SIZE_ERR:1,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INVALID_STATE_ERR:11};DOMException.prototype.toString=function(){return this.message;};api.dom={arrayContains:arrayContains,isHtmlNamespace:isHtmlNamespace,parentElement:parentElement,getNodeIndex:getNodeIndex,getNodeLength:getNodeLength,getCommonAncestor:getCommonAncestor,isAncestorOf:isAncestorOf,getClosestAncestorIn:getClosestAncestorIn,isCharacterDataNode:isCharacterDataNode,insertAfter:insertAfter,splitDataNode:splitDataNode,getDocument:getDocument,getWindow:getWindow,getIframeWindow:getIframeWindow,getIframeDocument:getIframeDocument,getBody:getBody,getRootContainer:getRootContainer,comparePoints:comparePoints,inspectNode:inspectNode,fragmentFromNodeChildren:fragmentFromNodeChildren,createIterator:createIterator,DomPosition:DomPosition};api.DOMException=DOMException;});rangy.createModule("DomRange",function(api,module){api.requireModules(["DomUtil"]);var dom=api.dom;var DomPosition=dom.DomPosition;var DOMException=api.DOMException;function isNonTextPartiallySelected(node,range){return(node.nodeType!=3)&&(dom.isAncestorOf(node,range.startContainer,true)||dom.isAncestorOf(node,range.endContainer,true));}
function getRangeDocument(range){return dom.getDocument(range.startContainer);}
function dispatchEvent(range,type,args){var listeners=range._listeners[type];if(listeners){for(var i=0,len=listeners.length;i<len;++i){listeners[i].call(range,{target:range,args:args});}}}
function getBoundaryBeforeNode(node){return new DomPosition(node.parentNode,dom.getNodeIndex(node));}
function getBoundaryAfterNode(node){return new DomPosition(node.parentNode,dom.getNodeIndex(node)+1);}
function insertNodeAtPosition(node,n,o){var firstNodeInserted=node.nodeType==11?node.firstChild:node;if(dom.isCharacterDataNode(n)){if(o==n.length){dom.insertAfter(node,n);}else{n.parentNode.insertBefore(node,o==0?n:dom.splitDataNode(n,o));}}else if(o>=n.childNodes.length){n.appendChild(node);}else{n.insertBefore(node,n.childNodes[o]);}
return firstNodeInserted;}
function cloneSubtree(iterator){var partiallySelected;for(var node,frag=getRangeDocument(iterator.range).createDocumentFragment(),subIterator;node=iterator.next();){partiallySelected=iterator.isPartiallySelectedSubtree();node=node.cloneNode(!partiallySelected);if(partiallySelected){subIterator=iterator.getSubtreeIterator();node.appendChild(cloneSubtree(subIterator));subIterator.detach(true);}
if(node.nodeType==10){throw new DOMException("HIERARCHY_REQUEST_ERR");}
frag.appendChild(node);}
return frag;}
function iterateSubtree(rangeIterator,func,iteratorState){var it,n;iteratorState=iteratorState||{stop:false};for(var node,subRangeIterator;node=rangeIterator.next();){if(rangeIterator.isPartiallySelectedSubtree()){if(func(node)===false){iteratorState.stop=true;return;}else{subRangeIterator=rangeIterator.getSubtreeIterator();iterateSubtree(subRangeIterator,func,iteratorState);subRangeIterator.detach(true);if(iteratorState.stop){return;}}}else{it=dom.createIterator(node);while((n=it.next())){if(func(n)===false){iteratorState.stop=true;return;}}}}}
function deleteSubtree(iterator){var subIterator;while(iterator.next()){if(iterator.isPartiallySelectedSubtree()){subIterator=iterator.getSubtreeIterator();deleteSubtree(subIterator);subIterator.detach(true);}else{iterator.remove();}}}
function extractSubtree(iterator){for(var node,frag=getRangeDocument(iterator.range).createDocumentFragment(),subIterator;node=iterator.next();){if(iterator.isPartiallySelectedSubtree()){node=node.cloneNode(false);subIterator=iterator.getSubtreeIterator();node.appendChild(extractSubtree(subIterator));subIterator.detach(true);}else{iterator.remove();}
if(node.nodeType==10){throw new DOMException("HIERARCHY_REQUEST_ERR");}
frag.appendChild(node);}
return frag;}
function getNodesInRange(range,nodeTypes,filter){var filterNodeTypes=!!(nodeTypes&&nodeTypes.length),regex;var filterExists=!!filter;if(filterNodeTypes){regex=new RegExp("^("+nodeTypes.join("|")+")$");}
var nodes=[];iterateSubtree(new RangeIterator(range,false),function(node){if((!filterNodeTypes||regex.test(node.nodeType))&&(!filterExists||filter(node))){nodes.push(node);}});return nodes;}
function inspect(range){var name=(typeof range.getName=="undefined")?"Range":range.getName();return"["+name+"("+dom.inspectNode(range.startContainer)+":"+range.startOffset+", "+
dom.inspectNode(range.endContainer)+":"+range.endOffset+")]";}
function RangeIterator(range,clonePartiallySelectedTextNodes){this.range=range;this.clonePartiallySelectedTextNodes=clonePartiallySelectedTextNodes;if(!range.collapsed){this.sc=range.startContainer;this.so=range.startOffset;this.ec=range.endContainer;this.eo=range.endOffset;var root=range.commonAncestorContainer;if(this.sc===this.ec&&dom.isCharacterDataNode(this.sc)){this.isSingleCharacterDataNode=true;this._first=this._last=this._next=this.sc;}else{this._first=this._next=(this.sc===root&&!dom.isCharacterDataNode(this.sc))?this.sc.childNodes[this.so]:dom.getClosestAncestorIn(this.sc,root,true);this._last=(this.ec===root&&!dom.isCharacterDataNode(this.ec))?this.ec.childNodes[this.eo-1]:dom.getClosestAncestorIn(this.ec,root,true);}}}
RangeIterator.prototype={_current:null,_next:null,_first:null,_last:null,isSingleCharacterDataNode:false,reset:function(){this._current=null;this._next=this._first;},hasNext:function(){return!!this._next;},next:function(){var current=this._current=this._next;if(current){this._next=(current!==this._last)?current.nextSibling:null;if(dom.isCharacterDataNode(current)&&this.clonePartiallySelectedTextNodes){if(current===this.ec){(current=current.cloneNode(true)).deleteData(this.eo,current.length-this.eo);}
if(this._current===this.sc){(current=current.cloneNode(true)).deleteData(0,this.so);}}}
return current;},remove:function(){var current=this._current,start,end;if(dom.isCharacterDataNode(current)&&(current===this.sc||current===this.ec)){start=(current===this.sc)?this.so:0;end=(current===this.ec)?this.eo:current.length;if(start!=end){current.deleteData(start,end-start);}}else{if(current.parentNode){current.parentNode.removeChild(current);}else{}}},isPartiallySelectedSubtree:function(){var current=this._current;return isNonTextPartiallySelected(current,this.range);},getSubtreeIterator:function(){var subRange;if(this.isSingleCharacterDataNode){subRange=this.range.cloneRange();subRange.collapse();}else{subRange=new Range(getRangeDocument(this.range));var current=this._current;var startContainer=current,startOffset=0,endContainer=current,endOffset=dom.getNodeLength(current);if(dom.isAncestorOf(current,this.sc,true)){startContainer=this.sc;startOffset=this.so;}
if(dom.isAncestorOf(current,this.ec,true)){endContainer=this.ec;endOffset=this.eo;}
updateBoundaries(subRange,startContainer,startOffset,endContainer,endOffset);}
return new RangeIterator(subRange,this.clonePartiallySelectedTextNodes);},detach:function(detachRange){if(detachRange){this.range.detach();}
this.range=this._current=this._next=this._first=this._last=this.sc=this.so=this.ec=this.eo=null;}};function RangeException(codeName){this.code=this[codeName];this.codeName=codeName;this.message="RangeException: "+this.codeName;}
RangeException.prototype={BAD_BOUNDARYPOINTS_ERR:1,INVALID_NODE_TYPE_ERR:2};RangeException.prototype.toString=function(){return this.message;};function RangeNodeIterator(range,nodeTypes,filter){this.nodes=getNodesInRange(range,nodeTypes,filter);this._next=this.nodes[0];this._position=0;}
RangeNodeIterator.prototype={_current:null,hasNext:function(){return!!this._next;},next:function(){this._current=this._next;this._next=this.nodes[++this._position];return this._current;},detach:function(){this._current=this._next=this.nodes=null;}};var beforeAfterNodeTypes=[1,3,4,5,7,8,10];var rootContainerNodeTypes=[2,9,11];var readonlyNodeTypes=[5,6,10,12];var insertableNodeTypes=[1,3,4,5,7,8,10,11];var surroundNodeTypes=[1,3,4,5,7,8];function createAncestorFinder(nodeTypes){return function(node,selfIsAncestor){var t,n=selfIsAncestor?node:node.parentNode;while(n){t=n.nodeType;if(dom.arrayContains(nodeTypes,t)){return n;}
n=n.parentNode;}
return null;};}
var getRootContainer=dom.getRootContainer;var getDocumentOrFragmentContainer=createAncestorFinder([9,11]);var getReadonlyAncestor=createAncestorFinder(readonlyNodeTypes);var getDocTypeNotationEntityAncestor=createAncestorFinder([6,10,12]);function assertNoDocTypeNotationEntityAncestor(node,allowSelf){if(getDocTypeNotationEntityAncestor(node,allowSelf)){throw new RangeException("INVALID_NODE_TYPE_ERR");}}
function assertNotDetached(range){if(!range.startContainer){throw new DOMException("INVALID_STATE_ERR");}}
function assertValidNodeType(node,invalidTypes){if(!dom.arrayContains(invalidTypes,node.nodeType)){throw new RangeException("INVALID_NODE_TYPE_ERR");}}
function assertValidOffset(node,offset){if(offset<0||offset>(dom.isCharacterDataNode(node)?node.length:node.childNodes.length)){throw new DOMException("INDEX_SIZE_ERR");}}
function assertSameDocumentOrFragment(node1,node2){if(getDocumentOrFragmentContainer(node1,true)!==getDocumentOrFragmentContainer(node2,true)){throw new DOMException("WRONG_DOCUMENT_ERR");}}
function assertNodeNotReadOnly(node){if(getReadonlyAncestor(node,true)){throw new DOMException("NO_MODIFICATION_ALLOWED_ERR");}}
function assertNode(node,codeName){if(!node){throw new DOMException(codeName);}}
function isOrphan(node){return!dom.arrayContains(rootContainerNodeTypes,node.nodeType)&&!getDocumentOrFragmentContainer(node,true);}
function isValidOffset(node,offset){return offset<=(dom.isCharacterDataNode(node)?node.length:node.childNodes.length);}
function assertRangeValid(range){assertNotDetached(range);if(isOrphan(range.startContainer)||isOrphan(range.endContainer)||!isValidOffset(range.startContainer,range.startOffset)||!isValidOffset(range.endContainer,range.endOffset)){throw new Error("Range error: Range is no longer valid after DOM mutation ("+range.inspect()+")");}}
var styleEl=document.createElement("style");var htmlParsingConforms=false;try{styleEl.innerHTML="<b>x</b>";htmlParsingConforms=(styleEl.firstChild.nodeType==3);}catch(e){}
api.features.htmlParsingConforms=htmlParsingConforms;var createContextualFragment=htmlParsingConforms?function(fragmentStr){var node=this.startContainer;var doc=dom.getDocument(node);if(!node){throw new DOMException("INVALID_STATE_ERR");}
var el=null;if(node.nodeType==1){el=node;}else if(dom.isCharacterDataNode(node)){el=dom.parentElement(node);}
if(el===null||(el.nodeName=="HTML"&&dom.isHtmlNamespace(dom.getDocument(el).documentElement)&&dom.isHtmlNamespace(el))){el=doc.createElement("body");}else{el=el.cloneNode(false);}
el.innerHTML=fragmentStr;return dom.fragmentFromNodeChildren(el);}:function(fragmentStr){assertNotDetached(this);var doc=getRangeDocument(this);var el=doc.createElement("body");el.innerHTML=fragmentStr;return dom.fragmentFromNodeChildren(el);};var rangeProperties=["startContainer","startOffset","endContainer","endOffset","collapsed","commonAncestorContainer"];var s2s=0,s2e=1,e2e=2,e2s=3;var n_b=0,n_a=1,n_b_a=2,n_i=3;function RangePrototype(){}
RangePrototype.prototype={attachListener:function(type,listener){this._listeners[type].push(listener);},compareBoundaryPoints:function(how,range){assertRangeValid(this);assertSameDocumentOrFragment(this.startContainer,range.startContainer);var nodeA,offsetA,nodeB,offsetB;var prefixA=(how==e2s||how==s2s)?"start":"end";var prefixB=(how==s2e||how==s2s)?"start":"end";nodeA=this[prefixA+"Container"];offsetA=this[prefixA+"Offset"];nodeB=range[prefixB+"Container"];offsetB=range[prefixB+"Offset"];return dom.comparePoints(nodeA,offsetA,nodeB,offsetB);},insertNode:function(node){assertRangeValid(this);assertValidNodeType(node,insertableNodeTypes);assertNodeNotReadOnly(this.startContainer);if(dom.isAncestorOf(node,this.startContainer,true)){throw new DOMException("HIERARCHY_REQUEST_ERR");}
var firstNodeInserted=insertNodeAtPosition(node,this.startContainer,this.startOffset);this.setStartBefore(firstNodeInserted);},cloneContents:function(){assertRangeValid(this);var clone,frag;if(this.collapsed){return getRangeDocument(this).createDocumentFragment();}else{if(this.startContainer===this.endContainer&&dom.isCharacterDataNode(this.startContainer)){clone=this.startContainer.cloneNode(true);clone.data=clone.data.slice(this.startOffset,this.endOffset);frag=getRangeDocument(this).createDocumentFragment();frag.appendChild(clone);return frag;}else{var iterator=new RangeIterator(this,true);clone=cloneSubtree(iterator);iterator.detach();}
return clone;}},canSurroundContents:function(){assertRangeValid(this);assertNodeNotReadOnly(this.startContainer);assertNodeNotReadOnly(this.endContainer);var iterator=new RangeIterator(this,true);var boundariesInvalid=(iterator._first&&(isNonTextPartiallySelected(iterator._first,this))||(iterator._last&&isNonTextPartiallySelected(iterator._last,this)));iterator.detach();return!boundariesInvalid;},surroundContents:function(node){assertValidNodeType(node,surroundNodeTypes);if(!this.canSurroundContents()){throw new RangeException("BAD_BOUNDARYPOINTS_ERR");}
var content=this.extractContents();if(node.hasChildNodes()){while(node.lastChild){node.removeChild(node.lastChild);}}
insertNodeAtPosition(node,this.startContainer,this.startOffset);node.appendChild(content);this.selectNode(node);},cloneRange:function(){assertRangeValid(this);var range=new Range(getRangeDocument(this));var i=rangeProperties.length,prop;while(i--){prop=rangeProperties[i];range[prop]=this[prop];}
return range;},toString:function(){assertRangeValid(this);var sc=this.startContainer;if(sc===this.endContainer&&dom.isCharacterDataNode(sc)){return(sc.nodeType==3||sc.nodeType==4)?sc.data.slice(this.startOffset,this.endOffset):"";}else{var textBits=[],iterator=new RangeIterator(this,true);iterateSubtree(iterator,function(node){if(node.nodeType==3||node.nodeType==4){textBits.push(node.data);}});iterator.detach();return textBits.join("");}},compareNode:function(node){assertRangeValid(this);var parent=node.parentNode;var nodeIndex=dom.getNodeIndex(node);if(!parent){throw new DOMException("NOT_FOUND_ERR");}
var startComparison=this.comparePoint(parent,nodeIndex),endComparison=this.comparePoint(parent,nodeIndex+1);if(startComparison<0){return(endComparison>0)?n_b_a:n_b;}else{return(endComparison>0)?n_a:n_i;}},comparePoint:function(node,offset){assertRangeValid(this);assertNode(node,"HIERARCHY_REQUEST_ERR");assertSameDocumentOrFragment(node,this.startContainer);if(dom.comparePoints(node,offset,this.startContainer,this.startOffset)<0){return-1;}else if(dom.comparePoints(node,offset,this.endContainer,this.endOffset)>0){return 1;}
return 0;},createContextualFragment:createContextualFragment,toHtml:function(){assertRangeValid(this);var container=getRangeDocument(this).createElement("div");container.appendChild(this.cloneContents());return container.innerHTML;},intersectsNode:function(node,touchingIsIntersecting){assertRangeValid(this);assertNode(node,"NOT_FOUND_ERR");if(dom.getDocument(node)!==getRangeDocument(this)){return false;}
var parent=node.parentNode,offset=dom.getNodeIndex(node);assertNode(parent,"NOT_FOUND_ERR");var startComparison=dom.comparePoints(parent,offset,this.endContainer,this.endOffset),endComparison=dom.comparePoints(parent,offset+1,this.startContainer,this.startOffset);return touchingIsIntersecting?startComparison<=0&&endComparison>=0:startComparison<0&&endComparison>0;},isPointInRange:function(node,offset){assertRangeValid(this);assertNode(node,"HIERARCHY_REQUEST_ERR");assertSameDocumentOrFragment(node,this.startContainer);return(dom.comparePoints(node,offset,this.startContainer,this.startOffset)>=0)&&(dom.comparePoints(node,offset,this.endContainer,this.endOffset)<=0);},intersectsRange:function(range,touchingIsIntersecting){assertRangeValid(this);if(getRangeDocument(range)!=getRangeDocument(this)){throw new DOMException("WRONG_DOCUMENT_ERR");}
var startComparison=dom.comparePoints(this.startContainer,this.startOffset,range.endContainer,range.endOffset),endComparison=dom.comparePoints(this.endContainer,this.endOffset,range.startContainer,range.startOffset);return touchingIsIntersecting?startComparison<=0&&endComparison>=0:startComparison<0&&endComparison>0;},intersection:function(range){if(this.intersectsRange(range)){var startComparison=dom.comparePoints(this.startContainer,this.startOffset,range.startContainer,range.startOffset),endComparison=dom.comparePoints(this.endContainer,this.endOffset,range.endContainer,range.endOffset);var intersectionRange=this.cloneRange();if(startComparison==-1){intersectionRange.setStart(range.startContainer,range.startOffset);}
if(endComparison==1){intersectionRange.setEnd(range.endContainer,range.endOffset);}
return intersectionRange;}
return null;},union:function(range){if(this.intersectsRange(range,true)){var unionRange=this.cloneRange();if(dom.comparePoints(range.startContainer,range.startOffset,this.startContainer,this.startOffset)==-1){unionRange.setStart(range.startContainer,range.startOffset);}
if(dom.comparePoints(range.endContainer,range.endOffset,this.endContainer,this.endOffset)==1){unionRange.setEnd(range.endContainer,range.endOffset);}
return unionRange;}else{throw new RangeException("Ranges do not intersect");}},containsNode:function(node,allowPartial){if(allowPartial){return this.intersectsNode(node,false);}else{return this.compareNode(node)==n_i;}},containsNodeContents:function(node){return this.comparePoint(node,0)>=0&&this.comparePoint(node,dom.getNodeLength(node))<=0;},containsRange:function(range){return this.intersection(range).equals(range);},containsNodeText:function(node){var nodeRange=this.cloneRange();nodeRange.selectNode(node);var textNodes=nodeRange.getNodes([3]);if(textNodes.length>0){nodeRange.setStart(textNodes[0],0);var lastTextNode=textNodes.pop();nodeRange.setEnd(lastTextNode,lastTextNode.length);var contains=this.containsRange(nodeRange);nodeRange.detach();return contains;}else{return this.containsNodeContents(node);}},createNodeIterator:function(nodeTypes,filter){assertRangeValid(this);return new RangeNodeIterator(this,nodeTypes,filter);},getNodes:function(nodeTypes,filter){assertRangeValid(this);return getNodesInRange(this,nodeTypes,filter);},getDocument:function(){return getRangeDocument(this);},collapseBefore:function(node){assertNotDetached(this);this.setEndBefore(node);this.collapse(false);},collapseAfter:function(node){assertNotDetached(this);this.setStartAfter(node);this.collapse(true);},getName:function(){return"DomRange";},equals:function(range){return Range.rangesEqual(this,range);},inspect:function(){return inspect(this);}};function copyComparisonConstantsToObject(obj){obj.START_TO_START=s2s;obj.START_TO_END=s2e;obj.END_TO_END=e2e;obj.END_TO_START=e2s;obj.NODE_BEFORE=n_b;obj.NODE_AFTER=n_a;obj.NODE_BEFORE_AND_AFTER=n_b_a;obj.NODE_INSIDE=n_i;}
function copyComparisonConstants(constructor){copyComparisonConstantsToObject(constructor);copyComparisonConstantsToObject(constructor.prototype);}
function createRangeContentRemover(remover,boundaryUpdater){return function(){assertRangeValid(this);var sc=this.startContainer,so=this.startOffset,root=this.commonAncestorContainer;var iterator=new RangeIterator(this,true);var node,boundary;if(sc!==root){node=dom.getClosestAncestorIn(sc,root,true);boundary=getBoundaryAfterNode(node);sc=boundary.node;so=boundary.offset;}
iterateSubtree(iterator,assertNodeNotReadOnly);iterator.reset();var returnValue=remover(iterator);iterator.detach();boundaryUpdater(this,sc,so,sc,so);return returnValue;};}
function createPrototypeRange(constructor,boundaryUpdater,detacher){function createBeforeAfterNodeSetter(isBefore,isStart){return function(node){assertNotDetached(this);assertValidNodeType(node,beforeAfterNodeTypes);assertValidNodeType(getRootContainer(node),rootContainerNodeTypes);var boundary=(isBefore?getBoundaryBeforeNode:getBoundaryAfterNode)(node);(isStart?setRangeStart:setRangeEnd)(this,boundary.node,boundary.offset);};}
function setRangeStart(range,node,offset){var ec=range.endContainer,eo=range.endOffset;if(node!==range.startContainer||offset!==range.startOffset){if(getRootContainer(node)!=getRootContainer(ec)||dom.comparePoints(node,offset,ec,eo)==1){ec=node;eo=offset;}
boundaryUpdater(range,node,offset,ec,eo);}}
function setRangeEnd(range,node,offset){var sc=range.startContainer,so=range.startOffset;if(node!==range.endContainer||offset!==range.endOffset){if(getRootContainer(node)!=getRootContainer(sc)||dom.comparePoints(node,offset,sc,so)==-1){sc=node;so=offset;}
boundaryUpdater(range,sc,so,node,offset);}}
function setRangeStartAndEnd(range,node,offset){if(node!==range.startContainer||offset!==range.startOffset||node!==range.endContainer||offset!==range.endOffset){boundaryUpdater(range,node,offset,node,offset);}}
constructor.prototype=new RangePrototype();api.util.extend(constructor.prototype,{setStart:function(node,offset){assertNotDetached(this);assertNoDocTypeNotationEntityAncestor(node,true);assertValidOffset(node,offset);setRangeStart(this,node,offset);},setEnd:function(node,offset){assertNotDetached(this);assertNoDocTypeNotationEntityAncestor(node,true);assertValidOffset(node,offset);setRangeEnd(this,node,offset);},setStartBefore:createBeforeAfterNodeSetter(true,true),setStartAfter:createBeforeAfterNodeSetter(false,true),setEndBefore:createBeforeAfterNodeSetter(true,false),setEndAfter:createBeforeAfterNodeSetter(false,false),collapse:function(isStart){assertRangeValid(this);if(isStart){boundaryUpdater(this,this.startContainer,this.startOffset,this.startContainer,this.startOffset);}else{boundaryUpdater(this,this.endContainer,this.endOffset,this.endContainer,this.endOffset);}},selectNodeContents:function(node){assertNotDetached(this);assertNoDocTypeNotationEntityAncestor(node,true);boundaryUpdater(this,node,0,node,dom.getNodeLength(node));},selectNode:function(node){assertNotDetached(this);assertNoDocTypeNotationEntityAncestor(node,false);assertValidNodeType(node,beforeAfterNodeTypes);var start=getBoundaryBeforeNode(node),end=getBoundaryAfterNode(node);boundaryUpdater(this,start.node,start.offset,end.node,end.offset);},extractContents:createRangeContentRemover(extractSubtree,boundaryUpdater),deleteContents:createRangeContentRemover(deleteSubtree,boundaryUpdater),canSurroundContents:function(){assertRangeValid(this);assertNodeNotReadOnly(this.startContainer);assertNodeNotReadOnly(this.endContainer);var iterator=new RangeIterator(this,true);var boundariesInvalid=(iterator._first&&(isNonTextPartiallySelected(iterator._first,this))||(iterator._last&&isNonTextPartiallySelected(iterator._last,this)));iterator.detach();return!boundariesInvalid;},detach:function(){detacher(this);},splitBoundaries:function(){assertRangeValid(this);var sc=this.startContainer,so=this.startOffset,ec=this.endContainer,eo=this.endOffset;var startEndSame=(sc===ec);if(dom.isCharacterDataNode(ec)&&eo>0&&eo<ec.length){dom.splitDataNode(ec,eo);}
if(dom.isCharacterDataNode(sc)&&so>0&&so<sc.length){sc=dom.splitDataNode(sc,so);if(startEndSame){eo-=so;ec=sc;}else if(ec==sc.parentNode&&eo>=dom.getNodeIndex(sc)){eo++;}
so=0;}
boundaryUpdater(this,sc,so,ec,eo);},normalizeBoundaries:function(){assertRangeValid(this);var sc=this.startContainer,so=this.startOffset,ec=this.endContainer,eo=this.endOffset;var mergeForward=function(node){var sibling=node.nextSibling;if(sibling&&sibling.nodeType==node.nodeType){ec=node;eo=node.length;node.appendData(sibling.data);sibling.parentNode.removeChild(sibling);}};var mergeBackward=function(node){var sibling=node.previousSibling;if(sibling&&sibling.nodeType==node.nodeType){sc=node;var nodeLength=node.length;so=sibling.length;node.insertData(0,sibling.data);sibling.parentNode.removeChild(sibling);if(sc==ec){eo+=so;ec=sc;}else if(ec==node.parentNode){var nodeIndex=dom.getNodeIndex(node);if(eo==nodeIndex){ec=node;eo=nodeLength;}else if(eo>nodeIndex){eo--;}}}};var normalizeStart=true;if(dom.isCharacterDataNode(ec)){if(ec.length==eo){mergeForward(ec);}}else{if(eo>0){var endNode=ec.childNodes[eo-1];if(endNode&&dom.isCharacterDataNode(endNode)){mergeForward(endNode);}}
normalizeStart=!this.collapsed;}
if(normalizeStart){if(dom.isCharacterDataNode(sc)){if(so==0){mergeBackward(sc);}}else{if(so<sc.childNodes.length){var startNode=sc.childNodes[so];if(startNode&&dom.isCharacterDataNode(startNode)){mergeBackward(startNode);}}}}else{sc=ec;so=eo;}
boundaryUpdater(this,sc,so,ec,eo);},collapseToPoint:function(node,offset){assertNotDetached(this);assertNoDocTypeNotationEntityAncestor(node,true);assertValidOffset(node,offset);setRangeStartAndEnd(this,node,offset);}});copyComparisonConstants(constructor);}
function updateCollapsedAndCommonAncestor(range){range.collapsed=(range.startContainer===range.endContainer&&range.startOffset===range.endOffset);range.commonAncestorContainer=range.collapsed?range.startContainer:dom.getCommonAncestor(range.startContainer,range.endContainer);}
function updateBoundaries(range,startContainer,startOffset,endContainer,endOffset){var startMoved=(range.startContainer!==startContainer||range.startOffset!==startOffset);var endMoved=(range.endContainer!==endContainer||range.endOffset!==endOffset);range.startContainer=startContainer;range.startOffset=startOffset;range.endContainer=endContainer;range.endOffset=endOffset;updateCollapsedAndCommonAncestor(range);dispatchEvent(range,"boundarychange",{startMoved:startMoved,endMoved:endMoved});}
function detach(range){assertNotDetached(range);range.startContainer=range.startOffset=range.endContainer=range.endOffset=null;range.collapsed=range.commonAncestorContainer=null;dispatchEvent(range,"detach",null);range._listeners=null;}
function Range(doc){this.startContainer=doc;this.startOffset=0;this.endContainer=doc;this.endOffset=0;this._listeners={boundarychange:[],detach:[]};updateCollapsedAndCommonAncestor(this);}
createPrototypeRange(Range,updateBoundaries,detach);api.rangePrototype=RangePrototype.prototype;Range.rangeProperties=rangeProperties;Range.RangeIterator=RangeIterator;Range.copyComparisonConstants=copyComparisonConstants;Range.createPrototypeRange=createPrototypeRange;Range.inspect=inspect;Range.getRangeDocument=getRangeDocument;Range.rangesEqual=function(r1,r2){return r1.startContainer===r2.startContainer&&r1.startOffset===r2.startOffset&&r1.endContainer===r2.endContainer&&r1.endOffset===r2.endOffset;};api.DomRange=Range;api.RangeException=RangeException;});rangy.createModule("WrappedRange",function(api,module){api.requireModules(["DomUtil","DomRange"]);var WrappedRange;var dom=api.dom;var DomPosition=dom.DomPosition;var DomRange=api.DomRange;function getTextRangeContainerElement(textRange){var parentEl=textRange.parentElement();var range=textRange.duplicate();range.collapse(true);var startEl=range.parentElement();range=textRange.duplicate();range.collapse(false);var endEl=range.parentElement();var startEndContainer=(startEl==endEl)?startEl:dom.getCommonAncestor(startEl,endEl);return startEndContainer==parentEl?startEndContainer:dom.getCommonAncestor(parentEl,startEndContainer);}
function textRangeIsCollapsed(textRange){return textRange.compareEndPoints("StartToEnd",textRange)==0;}
function getTextRangeBoundaryPosition(textRange,wholeRangeContainerElement,isStart,isCollapsed){var workingRange=textRange.duplicate();workingRange.collapse(isStart);var containerElement=workingRange.parentElement();if(!dom.isAncestorOf(wholeRangeContainerElement,containerElement,true)){containerElement=wholeRangeContainerElement;}
if(!containerElement.canHaveHTML){return new DomPosition(containerElement.parentNode,dom.getNodeIndex(containerElement));}
var workingNode=dom.getDocument(containerElement).createElement("span");var comparison,workingComparisonType=isStart?"StartToStart":"StartToEnd";var previousNode,nextNode,boundaryPosition,boundaryNode;do{containerElement.insertBefore(workingNode,workingNode.previousSibling);workingRange.moveToElementText(workingNode);}while((comparison=workingRange.compareEndPoints(workingComparisonType,textRange))>0&&workingNode.previousSibling);boundaryNode=workingNode.nextSibling;if(comparison==-1&&boundaryNode&&dom.isCharacterDataNode(boundaryNode)){workingRange.setEndPoint(isStart?"EndToStart":"EndToEnd",textRange);var offset;if(/[\r\n]/.test(boundaryNode.data)){var tempRange=workingRange.duplicate();var rangeLength=tempRange.text.replace(/\r\n/g,"\r").length;offset=tempRange.moveStart("character",rangeLength);while((comparison=tempRange.compareEndPoints("StartToEnd",tempRange))==-1){offset++;tempRange.moveStart("character",1);}}else{offset=workingRange.text.length;}
boundaryPosition=new DomPosition(boundaryNode,offset);}else{previousNode=(isCollapsed||!isStart)&&workingNode.previousSibling;nextNode=(isCollapsed||isStart)&&workingNode.nextSibling;if(nextNode&&dom.isCharacterDataNode(nextNode)){boundaryPosition=new DomPosition(nextNode,0);}else if(previousNode&&dom.isCharacterDataNode(previousNode)){boundaryPosition=new DomPosition(previousNode,previousNode.length);}else{boundaryPosition=new DomPosition(containerElement,dom.getNodeIndex(workingNode));}}
workingNode.parentNode.removeChild(workingNode);return boundaryPosition;}
function createBoundaryTextRange(boundaryPosition,isStart){var boundaryNode,boundaryParent,boundaryOffset=boundaryPosition.offset;var doc=dom.getDocument(boundaryPosition.node);var workingNode,childNodes,workingRange=doc.body.createTextRange();var nodeIsDataNode=dom.isCharacterDataNode(boundaryPosition.node);if(nodeIsDataNode){boundaryNode=boundaryPosition.node;boundaryParent=boundaryNode.parentNode;}else{childNodes=boundaryPosition.node.childNodes;boundaryNode=(boundaryOffset<childNodes.length)?childNodes[boundaryOffset]:null;boundaryParent=boundaryPosition.node;}
workingNode=doc.createElement("span");workingNode.innerHTML="&#feff;";if(boundaryNode){boundaryParent.insertBefore(workingNode,boundaryNode);}else{boundaryParent.appendChild(workingNode);}
workingRange.moveToElementText(workingNode);workingRange.collapse(!isStart);boundaryParent.removeChild(workingNode);if(nodeIsDataNode){workingRange[isStart?"moveStart":"moveEnd"]("character",boundaryOffset);}
return workingRange;}
if(api.features.implementsDomRange&&(!api.features.implementsTextRange||!api.config.preferTextRange)){(function(){var rangeProto;var rangeProperties=DomRange.rangeProperties;var canSetRangeStartAfterEnd;function updateRangeProperties(range){var i=rangeProperties.length,prop;while(i--){prop=rangeProperties[i];range[prop]=range.nativeRange[prop];}}
function updateNativeRange(range,startContainer,startOffset,endContainer,endOffset){var startMoved=(range.startContainer!==startContainer||range.startOffset!=startOffset);var endMoved=(range.endContainer!==endContainer||range.endOffset!=endOffset);if(startMoved||endMoved){range.setEnd(endContainer,endOffset);range.setStart(startContainer,startOffset);}}
function detach(range){range.nativeRange.detach();range.detached=true;var i=rangeProperties.length,prop;while(i--){prop=rangeProperties[i];range[prop]=null;}}
var createBeforeAfterNodeSetter;WrappedRange=function(range){if(!range){throw new Error("Range must be specified");}
this.nativeRange=range;updateRangeProperties(this);};DomRange.createPrototypeRange(WrappedRange,updateNativeRange,detach);rangeProto=WrappedRange.prototype;rangeProto.selectNode=function(node){this.nativeRange.selectNode(node);updateRangeProperties(this);};rangeProto.deleteContents=function(){this.nativeRange.deleteContents();updateRangeProperties(this);};rangeProto.extractContents=function(){var frag=this.nativeRange.extractContents();updateRangeProperties(this);return frag;};rangeProto.cloneContents=function(){return this.nativeRange.cloneContents();};rangeProto.surroundContents=function(node){this.nativeRange.surroundContents(node);updateRangeProperties(this);};rangeProto.collapse=function(isStart){this.nativeRange.collapse(isStart);updateRangeProperties(this);};rangeProto.cloneRange=function(){return new WrappedRange(this.nativeRange.cloneRange());};rangeProto.refresh=function(){updateRangeProperties(this);};rangeProto.toString=function(){return this.nativeRange.toString();};var testTextNode=document.createTextNode("test");dom.getBody(document).appendChild(testTextNode);var range=document.createRange();range.setStart(testTextNode,0);range.setEnd(testTextNode,0);try{range.setStart(testTextNode,1);canSetRangeStartAfterEnd=true;rangeProto.setStart=function(node,offset){this.nativeRange.setStart(node,offset);updateRangeProperties(this);};rangeProto.setEnd=function(node,offset){this.nativeRange.setEnd(node,offset);updateRangeProperties(this);};createBeforeAfterNodeSetter=function(name){return function(node){this.nativeRange[name](node);updateRangeProperties(this);};};}catch(ex){canSetRangeStartAfterEnd=false;rangeProto.setStart=function(node,offset){try{this.nativeRange.setStart(node,offset);}catch(ex){this.nativeRange.setEnd(node,offset);this.nativeRange.setStart(node,offset);}
updateRangeProperties(this);};rangeProto.setEnd=function(node,offset){try{this.nativeRange.setEnd(node,offset);}catch(ex){this.nativeRange.setStart(node,offset);this.nativeRange.setEnd(node,offset);}
updateRangeProperties(this);};createBeforeAfterNodeSetter=function(name,oppositeName){return function(node){try{this.nativeRange[name](node);}catch(ex){this.nativeRange[oppositeName](node);this.nativeRange[name](node);}
updateRangeProperties(this);};};}
rangeProto.setStartBefore=createBeforeAfterNodeSetter("setStartBefore","setEndBefore");rangeProto.setStartAfter=createBeforeAfterNodeSetter("setStartAfter","setEndAfter");rangeProto.setEndBefore=createBeforeAfterNodeSetter("setEndBefore","setStartBefore");rangeProto.setEndAfter=createBeforeAfterNodeSetter("setEndAfter","setStartAfter");range.selectNodeContents(testTextNode);if(range.startContainer==testTextNode&&range.endContainer==testTextNode&&range.startOffset==0&&range.endOffset==testTextNode.length){rangeProto.selectNodeContents=function(node){this.nativeRange.selectNodeContents(node);updateRangeProperties(this);};}else{rangeProto.selectNodeContents=function(node){this.setStart(node,0);this.setEnd(node,DomRange.getEndOffset(node));};}
range.selectNodeContents(testTextNode);range.setEnd(testTextNode,3);var range2=document.createRange();range2.selectNodeContents(testTextNode);range2.setEnd(testTextNode,4);range2.setStart(testTextNode,2);if(range.compareBoundaryPoints(range.START_TO_END,range2)==-1&range.compareBoundaryPoints(range.END_TO_START,range2)==1){rangeProto.compareBoundaryPoints=function(type,range){range=range.nativeRange||range;if(type==range.START_TO_END){type=range.END_TO_START;}else if(type==range.END_TO_START){type=range.START_TO_END;}
return this.nativeRange.compareBoundaryPoints(type,range);};}else{rangeProto.compareBoundaryPoints=function(type,range){return this.nativeRange.compareBoundaryPoints(type,range.nativeRange||range);};}
if(api.util.isHostMethod(range,"createContextualFragment")){rangeProto.createContextualFragment=function(fragmentStr){return this.nativeRange.createContextualFragment(fragmentStr);};}
dom.getBody(document).removeChild(testTextNode);range.detach();range2.detach();})();api.createNativeRange=function(doc){doc=doc||document;return doc.createRange();};}else if(api.features.implementsTextRange){WrappedRange=function(textRange){this.textRange=textRange;this.refresh();};WrappedRange.prototype=new DomRange(document);WrappedRange.prototype.refresh=function(){var start,end;var rangeContainerElement=getTextRangeContainerElement(this.textRange);if(textRangeIsCollapsed(this.textRange)){end=start=getTextRangeBoundaryPosition(this.textRange,rangeContainerElement,true,true);}else{start=getTextRangeBoundaryPosition(this.textRange,rangeContainerElement,true,false);end=getTextRangeBoundaryPosition(this.textRange,rangeContainerElement,false,false);}
this.setStart(start.node,start.offset);this.setEnd(end.node,end.offset);};DomRange.copyComparisonConstants(WrappedRange);var globalObj=(function(){return this;})();if(typeof globalObj.Range=="undefined"){globalObj.Range=WrappedRange;}
api.createNativeRange=function(doc){doc=doc||document;return doc.body.createTextRange();};}
if(api.features.implementsTextRange){WrappedRange.rangeToTextRange=function(range){if(range.collapsed){var tr=createBoundaryTextRange(new DomPosition(range.startContainer,range.startOffset),true);return tr;}else{var startRange=createBoundaryTextRange(new DomPosition(range.startContainer,range.startOffset),true);var endRange=createBoundaryTextRange(new DomPosition(range.endContainer,range.endOffset),false);var textRange=dom.getDocument(range.startContainer).body.createTextRange();textRange.setEndPoint("StartToStart",startRange);textRange.setEndPoint("EndToEnd",endRange);return textRange;}};}
WrappedRange.prototype.getName=function(){return"WrappedRange";};api.WrappedRange=WrappedRange;api.createRange=function(doc){doc=doc||document;return new WrappedRange(api.createNativeRange(doc));};api.createRangyRange=function(doc){doc=doc||document;return new DomRange(doc);};api.createIframeRange=function(iframeEl){return api.createRange(dom.getIframeDocument(iframeEl));};api.createIframeRangyRange=function(iframeEl){return api.createRangyRange(dom.getIframeDocument(iframeEl));};api.addCreateMissingNativeApiListener(function(win){var doc=win.document;if(typeof doc.createRange=="undefined"){doc.createRange=function(){return api.createRange(this);};}
doc=win=null;});});rangy.createModule("WrappedSelection",function(api,module){api.requireModules(["DomUtil","DomRange","WrappedRange"]);api.config.checkSelectionRanges=true;var BOOLEAN="boolean",windowPropertyName="_rangySelection",dom=api.dom,util=api.util,DomRange=api.DomRange,WrappedRange=api.WrappedRange,DOMException=api.DOMException,DomPosition=dom.DomPosition,getSelection,selectionIsCollapsed,CONTROL="Control";function getWinSelection(winParam){return(winParam||window).getSelection();}
function getDocSelection(winParam){return(winParam||window).document.selection;}
var implementsWinGetSelection=api.util.isHostMethod(window,"getSelection"),implementsDocSelection=api.util.isHostObject(document,"selection");var useDocumentSelection=implementsDocSelection&&(!implementsWinGetSelection||api.config.preferTextRange);if(useDocumentSelection){getSelection=getDocSelection;api.isSelectionValid=function(winParam){var doc=(winParam||window).document,nativeSel=doc.selection;return(nativeSel.type!="None"||dom.getDocument(nativeSel.createRange().parentElement())==doc);};}else if(implementsWinGetSelection){getSelection=getWinSelection;api.isSelectionValid=function(){return true;};}else{module.fail("Neither document.selection or window.getSelection() detected.");}
api.getNativeSelection=getSelection;var testSelection=getSelection();var testRange=api.createNativeRange(document);var body=dom.getBody(document);var selectionHasAnchorAndFocus=util.areHostObjects(testSelection,["anchorNode","focusNode"]&&util.areHostProperties(testSelection,["anchorOffset","focusOffset"]));api.features.selectionHasAnchorAndFocus=selectionHasAnchorAndFocus;var selectionHasExtend=util.isHostMethod(testSelection,"extend");api.features.selectionHasExtend=selectionHasExtend;var selectionHasRangeCount=(typeof testSelection.rangeCount=="number");api.features.selectionHasRangeCount=selectionHasRangeCount;var selectionSupportsMultipleRanges=false;var collapsedNonEditableSelectionsSupported=true;if(util.areHostMethods(testSelection,["addRange","getRangeAt","removeAllRanges"])&&typeof testSelection.rangeCount=="number"&&api.features.implementsDomRange){(function(){var iframe=document.createElement("iframe");body.appendChild(iframe);var iframeDoc=dom.getIframeDocument(iframe);iframeDoc.open();iframeDoc.write("<html><head></head><body>12</body></html>");iframeDoc.close();var sel=dom.getIframeWindow(iframe).getSelection();var docEl=iframeDoc.documentElement;var iframeBody=docEl.lastChild,textNode=iframeBody.firstChild;var r1=iframeDoc.createRange();r1.setStart(textNode,1);r1.collapse(true);sel.addRange(r1);collapsedNonEditableSelectionsSupported=(sel.rangeCount==1);sel.removeAllRanges();var r2=r1.cloneRange();r1.setStart(textNode,0);r2.setEnd(textNode,2);sel.addRange(r1);sel.addRange(r2);selectionSupportsMultipleRanges=(sel.rangeCount==2);r1.detach();r2.detach();body.removeChild(iframe);})();}
api.features.selectionSupportsMultipleRanges=selectionSupportsMultipleRanges;api.features.collapsedNonEditableSelectionsSupported=collapsedNonEditableSelectionsSupported;var implementsControlRange=false,testControlRange;if(body&&util.isHostMethod(body,"createControlRange")){testControlRange=body.createControlRange();if(util.areHostProperties(testControlRange,["item","add"])){implementsControlRange=true;}}
api.features.implementsControlRange=implementsControlRange;if(selectionHasAnchorAndFocus){selectionIsCollapsed=function(sel){return sel.anchorNode===sel.focusNode&&sel.anchorOffset===sel.focusOffset;};}else{selectionIsCollapsed=function(sel){return sel.rangeCount?sel.getRangeAt(sel.rangeCount-1).collapsed:false;};}
function updateAnchorAndFocusFromRange(sel,range,backwards){var anchorPrefix=backwards?"end":"start",focusPrefix=backwards?"start":"end";sel.anchorNode=range[anchorPrefix+"Container"];sel.anchorOffset=range[anchorPrefix+"Offset"];sel.focusNode=range[focusPrefix+"Container"];sel.focusOffset=range[focusPrefix+"Offset"];}
function updateAnchorAndFocusFromNativeSelection(sel){var nativeSel=sel.nativeSelection;sel.anchorNode=nativeSel.anchorNode;sel.anchorOffset=nativeSel.anchorOffset;sel.focusNode=nativeSel.focusNode;sel.focusOffset=nativeSel.focusOffset;}
function updateEmptySelection(sel){sel.anchorNode=sel.focusNode=null;sel.anchorOffset=sel.focusOffset=0;sel.rangeCount=0;sel.isCollapsed=true;sel._ranges.length=0;}
function getNativeRange(range){var nativeRange;if(range instanceof DomRange){nativeRange=range._selectionNativeRange;if(!nativeRange){nativeRange=api.createNativeRange(dom.getDocument(range.startContainer));nativeRange.setEnd(range.endContainer,range.endOffset);nativeRange.setStart(range.startContainer,range.startOffset);range._selectionNativeRange=nativeRange;range.attachListener("detach",function(){this._selectionNativeRange=null;});}}else if(range instanceof WrappedRange){nativeRange=range.nativeRange;}else if(api.features.implementsDomRange&&(range instanceof dom.getWindow(range.startContainer).Range)){nativeRange=range;}
return nativeRange;}
function rangeContainsSingleElement(rangeNodes){if(!rangeNodes.length||rangeNodes[0].nodeType!=1){return false;}
for(var i=1,len=rangeNodes.length;i<len;++i){if(!dom.isAncestorOf(rangeNodes[0],rangeNodes[i])){return false;}}
return true;}
function getSingleElementFromRange(range){var nodes=range.getNodes();if(!rangeContainsSingleElement(nodes)){throw new Error("getSingleElementFromRange: range "+range.inspect()+" did not consist of a single element");}
return nodes[0];}
function isTextRange(range){return!!range&&typeof range.text!="undefined";}
function updateFromTextRange(sel,range){var wrappedRange=new WrappedRange(range);sel._ranges=[wrappedRange];updateAnchorAndFocusFromRange(sel,wrappedRange,false);sel.rangeCount=1;sel.isCollapsed=wrappedRange.collapsed;}
function updateControlSelection(sel){sel._ranges.length=0;if(sel.docSelection.type=="None"){updateEmptySelection(sel);}else{var controlRange=sel.docSelection.createRange();if(isTextRange(controlRange)){updateFromTextRange(sel,controlRange);}else{sel.rangeCount=controlRange.length;var range,doc=dom.getDocument(controlRange.item(0));for(var i=0;i<sel.rangeCount;++i){range=api.createRange(doc);range.selectNode(controlRange.item(i));sel._ranges.push(range);}
sel.isCollapsed=sel.rangeCount==1&&sel._ranges[0].collapsed;updateAnchorAndFocusFromRange(sel,sel._ranges[sel.rangeCount-1],false);}}}
function addRangeToControlSelection(sel,range){var controlRange=sel.docSelection.createRange();var rangeElement=getSingleElementFromRange(range);var doc=dom.getDocument(controlRange.item(0));var newControlRange=dom.getBody(doc).createControlRange();for(var i=0,len=controlRange.length;i<len;++i){newControlRange.add(controlRange.item(i));}
try{newControlRange.add(rangeElement);}catch(ex){throw new Error("addRange(): Element within the specified Range could not be added to control selection (does it have layout?)");}
newControlRange.select();updateControlSelection(sel);}
var getSelectionRangeAt;if(util.isHostMethod(testSelection,"getRangeAt")){getSelectionRangeAt=function(sel,index){try{return sel.getRangeAt(index);}catch(ex){return null;}};}else if(selectionHasAnchorAndFocus){getSelectionRangeAt=function(sel){var doc=dom.getDocument(sel.anchorNode);var range=api.createRange(doc);range.setStart(sel.anchorNode,sel.anchorOffset);range.setEnd(sel.focusNode,sel.focusOffset);if(range.collapsed!==this.isCollapsed){range.setStart(sel.focusNode,sel.focusOffset);range.setEnd(sel.anchorNode,sel.anchorOffset);}
return range;};}
function WrappedSelection(selection,docSelection,win){this.nativeSelection=selection;this.docSelection=docSelection;this._ranges=[];this.win=win;this.refresh();}
api.getSelection=function(win){win=win||window;var sel=win[windowPropertyName];var nativeSel=getSelection(win),docSel=implementsDocSelection?getDocSelection(win):null;if(sel){sel.nativeSelection=nativeSel;sel.docSelection=docSel;sel.refresh(win);}else{sel=new WrappedSelection(nativeSel,docSel,win);win[windowPropertyName]=sel;}
return sel;};api.getIframeSelection=function(iframeEl){return api.getSelection(dom.getIframeWindow(iframeEl));};var selProto=WrappedSelection.prototype;function createControlSelection(sel,ranges){var doc=dom.getDocument(ranges[0].startContainer);var controlRange=dom.getBody(doc).createControlRange();for(var i=0,el;i<rangeCount;++i){el=getSingleElementFromRange(ranges[i]);try{controlRange.add(el);}catch(ex){throw new Error("setRanges(): Element within the one of the specified Ranges could not be added to control selection (does it have layout?)");}}
controlRange.select();updateControlSelection(sel);}
if(!useDocumentSelection&&selectionHasAnchorAndFocus&&util.areHostMethods(testSelection,["removeAllRanges","addRange"])){selProto.removeAllRanges=function(){this.nativeSelection.removeAllRanges();updateEmptySelection(this);};var addRangeBackwards=function(sel,range){var doc=DomRange.getRangeDocument(range);var endRange=api.createRange(doc);endRange.collapseToPoint(range.endContainer,range.endOffset);sel.nativeSelection.addRange(getNativeRange(endRange));sel.nativeSelection.extend(range.startContainer,range.startOffset);sel.refresh();};if(selectionHasRangeCount){selProto.addRange=function(range,backwards){if(implementsControlRange&&implementsDocSelection&&this.docSelection.type==CONTROL){addRangeToControlSelection(this,range);}else{if(backwards&&selectionHasExtend){addRangeBackwards(this,range);}else{var previousRangeCount;if(selectionSupportsMultipleRanges){previousRangeCount=this.rangeCount;}else{this.removeAllRanges();previousRangeCount=0;}
this.nativeSelection.addRange(getNativeRange(range));this.rangeCount=this.nativeSelection.rangeCount;if(this.rangeCount==previousRangeCount+1){if(api.config.checkSelectionRanges){var nativeRange=getSelectionRangeAt(this.nativeSelection,this.rangeCount-1);if(nativeRange&&!DomRange.rangesEqual(nativeRange,range)){range=new WrappedRange(nativeRange);}}
this._ranges[this.rangeCount-1]=range;updateAnchorAndFocusFromRange(this,range,selectionIsBackwards(this.nativeSelection));this.isCollapsed=selectionIsCollapsed(this);}else{this.refresh();}}}};}else{selProto.addRange=function(range,backwards){if(backwards&&selectionHasExtend){addRangeBackwards(this,range);}else{this.nativeSelection.addRange(getNativeRange(range));this.refresh();}};}
selProto.setRanges=function(ranges){if(implementsControlRange&&ranges.length>1){createControlSelection(this,ranges);}else{this.removeAllRanges();for(var i=0,len=ranges.length;i<len;++i){this.addRange(ranges[i]);}}};}else if(util.isHostMethod(testSelection,"empty")&&util.isHostMethod(testRange,"select")&&implementsControlRange&&useDocumentSelection){selProto.removeAllRanges=function(){try{this.docSelection.empty();if(this.docSelection.type!="None"){var doc;if(this.anchorNode){doc=dom.getDocument(this.anchorNode);}else if(this.docSelection.type==CONTROL){var controlRange=this.docSelection.createRange();if(controlRange.length){doc=dom.getDocument(controlRange.item(0)).body.createTextRange();}}
if(doc){var textRange=doc.body.createTextRange();textRange.select();this.docSelection.empty();}}}catch(ex){}
updateEmptySelection(this);};selProto.addRange=function(range){if(this.docSelection.type==CONTROL){addRangeToControlSelection(this,range);}else{WrappedRange.rangeToTextRange(range).select();this._ranges[0]=range;this.rangeCount=1;this.isCollapsed=this._ranges[0].collapsed;updateAnchorAndFocusFromRange(this,range,false);}};selProto.setRanges=function(ranges){this.removeAllRanges();var rangeCount=ranges.length;if(rangeCount>1){createControlSelection(this,ranges);}else if(rangeCount){this.addRange(ranges[0]);}};}else{module.fail("No means of selecting a Range or TextRange was found");return false;}
selProto.getRangeAt=function(index){if(index<0||index>=this.rangeCount){throw new DOMException("INDEX_SIZE_ERR");}else{return this._ranges[index];}};var refreshSelection;if(useDocumentSelection){refreshSelection=function(sel){var range;if(api.isSelectionValid(sel.win)){range=sel.docSelection.createRange();}else{range=dom.getBody(sel.win.document).createTextRange();range.collapse(true);}
if(sel.docSelection.type==CONTROL){updateControlSelection(sel);}else if(isTextRange(range)){updateFromTextRange(sel,range);}else{updateEmptySelection(sel);}};}else if(util.isHostMethod(testSelection,"getRangeAt")&&typeof testSelection.rangeCount=="number"){refreshSelection=function(sel){if(implementsControlRange&&implementsDocSelection&&sel.docSelection.type==CONTROL){updateControlSelection(sel);}else{sel._ranges.length=sel.rangeCount=sel.nativeSelection.rangeCount;if(sel.rangeCount){for(var i=0,len=sel.rangeCount;i<len;++i){sel._ranges[i]=new api.WrappedRange(sel.nativeSelection.getRangeAt(i));}
updateAnchorAndFocusFromRange(sel,sel._ranges[sel.rangeCount-1],selectionIsBackwards(sel.nativeSelection));sel.isCollapsed=selectionIsCollapsed(sel);}else{updateEmptySelection(sel);}}};}else if(selectionHasAnchorAndFocus&&typeof testSelection.isCollapsed==BOOLEAN&&typeof testRange.collapsed==BOOLEAN&&api.features.implementsDomRange){refreshSelection=function(sel){var range,nativeSel=sel.nativeSelection;if(nativeSel.anchorNode){range=getSelectionRangeAt(nativeSel,0);sel._ranges=[range];sel.rangeCount=1;updateAnchorAndFocusFromNativeSelection(sel);sel.isCollapsed=selectionIsCollapsed(sel);}else{updateEmptySelection(sel);}};}else{module.fail("No means of obtaining a Range or TextRange from the user's selection was found");return false;}
selProto.refresh=function(checkForChanges){var oldRanges=checkForChanges?this._ranges.slice(0):null;refreshSelection(this);if(checkForChanges){var i=oldRanges.length;if(i!=this._ranges.length){return false;}
while(i--){if(!DomRange.rangesEqual(oldRanges[i],this._ranges[i])){return false;}}
return true;}};var removeRangeManually=function(sel,range){var ranges=sel.getAllRanges(),removed=false;sel.removeAllRanges();for(var i=0,len=ranges.length;i<len;++i){if(removed||range!==ranges[i]){sel.addRange(ranges[i]);}else{removed=true;}}
if(!sel.rangeCount){updateEmptySelection(sel);}};if(implementsControlRange){selProto.removeRange=function(range){if(this.docSelection.type==CONTROL){var controlRange=this.docSelection.createRange();var rangeElement=getSingleElementFromRange(range);var doc=dom.getDocument(controlRange.item(0));var newControlRange=dom.getBody(doc).createControlRange();var el,removed=false;for(var i=0,len=controlRange.length;i<len;++i){el=controlRange.item(i);if(el!==rangeElement||removed){newControlRange.add(controlRange.item(i));}else{removed=true;}}
newControlRange.select();updateControlSelection(this);}else{removeRangeManually(this,range);}};}else{selProto.removeRange=function(range){removeRangeManually(this,range);};}
var selectionIsBackwards;if(!useDocumentSelection&&selectionHasAnchorAndFocus&&api.features.implementsDomRange){selectionIsBackwards=function(sel){var backwards=false;if(sel.anchorNode){backwards=(dom.comparePoints(sel.anchorNode,sel.anchorOffset,sel.focusNode,sel.focusOffset)==1);}
return backwards;};selProto.isBackwards=function(){return selectionIsBackwards(this);};}else{selectionIsBackwards=selProto.isBackwards=function(){return false;};}
selProto.toString=function(){var rangeTexts=[];for(var i=0,len=this.rangeCount;i<len;++i){rangeTexts[i]=""+this._ranges[i];}
return rangeTexts.join("");};function assertNodeInSameDocument(sel,node){if(sel.anchorNode&&(dom.getDocument(sel.anchorNode)!==dom.getDocument(node))){throw new DOMException("WRONG_DOCUMENT_ERR");}}
selProto.collapse=function(node,offset){assertNodeInSameDocument(this,node);var range=api.createRange(dom.getDocument(node));range.collapseToPoint(node,offset);this.removeAllRanges();this.addRange(range);this.isCollapsed=true;};selProto.collapseToStart=function(){if(this.rangeCount){var range=this._ranges[0];this.collapse(range.startContainer,range.startOffset);}else{throw new DOMException("INVALID_STATE_ERR");}};selProto.collapseToEnd=function(){if(this.rangeCount){var range=this._ranges[this.rangeCount-1];this.collapse(range.endContainer,range.endOffset);}else{throw new DOMException("INVALID_STATE_ERR");}};selProto.selectAllChildren=function(node){assertNodeInSameDocument(this,node);var range=api.createRange(dom.getDocument(node));range.selectNodeContents(node);this.removeAllRanges();this.addRange(range);};selProto.deleteFromDocument=function(){if(implementsControlRange&&implementsDocSelection&&this.docSelection.type==CONTROL){var controlRange=this.docSelection.createRange();var element;while(controlRange.length){element=controlRange.item(0);controlRange.remove(element);element.parentNode.removeChild(element);}
this.refresh();}else if(this.rangeCount){var ranges=this.getAllRanges();this.removeAllRanges();for(var i=0,len=ranges.length;i<len;++i){ranges[i].deleteContents();}
this.addRange(ranges[len-1]);}};selProto.getAllRanges=function(){return this._ranges.slice(0);};selProto.setSingleRange=function(range){this.setRanges([range]);};selProto.containsNode=function(node,allowPartial){for(var i=0,len=this._ranges.length;i<len;++i){if(this._ranges[i].containsNode(node,allowPartial)){return true;}}
return false;};selProto.toHtml=function(){var html="";if(this.rangeCount){var container=DomRange.getRangeDocument(this._ranges[0]).createElement("div");for(var i=0,len=this._ranges.length;i<len;++i){container.appendChild(this._ranges[i].cloneContents());}
html=container.innerHTML;}
return html;};function inspect(sel){var rangeInspects=[];var anchor=new DomPosition(sel.anchorNode,sel.anchorOffset);var focus=new DomPosition(sel.focusNode,sel.focusOffset);var name=(typeof sel.getName=="function")?sel.getName():"Selection";if(typeof sel.rangeCount!="undefined"){for(var i=0,len=sel.rangeCount;i<len;++i){rangeInspects[i]=DomRange.inspect(sel.getRangeAt(i));}}
return"["+name+"(Ranges: "+rangeInspects.join(", ")+")(anchor: "+anchor.inspect()+", focus: "+focus.inspect()+"]";}
selProto.getName=function(){return"WrappedSelection";};selProto.inspect=function(){return inspect(this);};selProto.detach=function(){this.win[windowPropertyName]=null;this.win=this.anchorNode=this.focusNode=null;};WrappedSelection.inspect=inspect;api.Selection=WrappedSelection;api.selectionPrototype=selProto;api.addCreateMissingNativeApiListener(function(win){if(typeof win.getSelection=="undefined"){win.getSelection=function(){return api.getSelection(this);};}
win=null;});});


rangy.createModule("SaveRestore",function(api,module){api.requireModules(["DomUtil","DomRange","WrappedRange"]);var dom=api.dom;var markerTextChar="\ufeff";function gEBI(id,doc){return(doc||document).getElementById(id);}
function insertRangeBoundaryMarker(range,atStart){var markerId="selectionBoundary_"+(+new Date())+"_"+(""+Math.random()).slice(2);var markerEl;var doc=dom.getDocument(range.startContainer);var boundaryRange=range.cloneRange();boundaryRange.collapse(atStart);markerEl=doc.createElement("span");markerEl.id=markerId;markerEl.style.lineHeight="0";markerEl.style.display="none";markerEl.className="rangySelectionBoundary";markerEl.appendChild(doc.createTextNode(markerTextChar));boundaryRange.insertNode(markerEl);boundaryRange.detach();return markerEl;}
function setRangeBoundary(doc,range,markerId,atStart){var markerEl=gEBI(markerId,doc);if(markerEl){range[atStart?"setStartBefore":"setEndBefore"](markerEl);markerEl.parentNode.removeChild(markerEl);}else{module.warn("Marker element has been removed. Cannot restore selection.");}}
function compareRanges(r1,r2){return r2.compareBoundaryPoints(r1.START_TO_START,r1);}
function saveSelection(win){win=win||window;var doc=win.document;if(!api.isSelectionValid(win)){module.warn("Cannot save selection. This usually happens when the selection is collapsed and the selection document has lost focus.");return;}
var sel=api.getSelection(win);var ranges=sel.getAllRanges();var rangeInfos=[],startEl,endEl,range;ranges.sort(compareRanges);for(var i=0,len=ranges.length;i<len;++i){range=ranges[i];if(range.collapsed){endEl=insertRangeBoundaryMarker(range,false);rangeInfos.push({markerId:endEl.id,collapsed:true});}else{endEl=insertRangeBoundaryMarker(range,false);startEl=insertRangeBoundaryMarker(range,true);rangeInfos[i]={startMarkerId:startEl.id,endMarkerId:endEl.id,collapsed:false,backwards:ranges.length==1&&sel.isBackwards()};}}
for(i=len-1;i>=0;--i){range=ranges[i];if(range.collapsed){range.collapseBefore(gEBI(rangeInfos[i].markerId,doc));}else{range.setEndBefore(gEBI(rangeInfos[i].endMarkerId,doc));range.setStartAfter(gEBI(rangeInfos[i].startMarkerId,doc));}}
sel.setRanges(ranges);return{win:win,doc:doc,rangeInfos:rangeInfos,restored:false};}
function restoreSelection(savedSelection,preserveDirection){if(!savedSelection.restored){var rangeInfos=savedSelection.rangeInfos;var sel=api.getSelection(savedSelection.win);var ranges=[];for(var len=rangeInfos.length,i=len-1,rangeInfo,range;i>=0;--i){rangeInfo=rangeInfos[i];range=api.createRange(savedSelection.doc);if(rangeInfo.collapsed){var markerEl=gEBI(rangeInfo.markerId,savedSelection.doc);if(markerEl){markerEl.style.display="inline";var previousNode=markerEl.previousSibling;if(previousNode&&previousNode.nodeType==3){markerEl.parentNode.removeChild(markerEl);range.collapseToPoint(previousNode,previousNode.length);}else{range.collapseBefore(markerEl);markerEl.parentNode.removeChild(markerEl);}}else{module.warn("Marker element has been removed. Cannot restore selection.");}}else{setRangeBoundary(savedSelection.doc,range,rangeInfo.startMarkerId,true);setRangeBoundary(savedSelection.doc,range,rangeInfo.endMarkerId,false);}
if(len==1){range.normalizeBoundaries();}
ranges[i]=range;}
if(len==1&&preserveDirection&&api.features.selectionHasExtend&&rangeInfos[0].backwards){sel.removeAllRanges();sel.addRange(ranges[0],true);}else{sel.setRanges(ranges);}
savedSelection.restored=true;}}
function removeMarkerElement(doc,markerId){var markerEl=gEBI(markerId,doc);if(markerEl){markerEl.parentNode.removeChild(markerEl);}}
function removeMarkers(savedSelection){var rangeInfos=savedSelection.rangeInfos;for(var i=0,len=rangeInfos.length,rangeInfo;i<len;++i){rangeInfo=rangeInfos[i];if(rangeInfo.collapsed){removeMarkerElement(savedSelection.doc,rangeInfo.markerId);}else{removeMarkerElement(savedSelection.doc,rangeInfo.startMarkerId);removeMarkerElement(savedSelection.doc,rangeInfo.endMarkerId);}}}
api.saveSelection=saveSelection;api.restoreSelection=restoreSelection;api.removeMarkerElement=removeMarkerElement;api.removeMarkers=removeMarkers;});


var Tidy=new Class({stack:[],delay:[],clean:[],usage:new Object,arrAllowedTags:{},arrReplaceTags:{},arrTagRules:{},arrRecursiveRemoveTags:{},handleTagAttributes:function(oElement){var sTag=oElement.tag;this.keepAttributes(oElement,this.arrAllowedTags[sTag]);},handleAllTagAttributes:function(oElement){this.keepAttributes(oElement,this.arrAllowedTags[TIDY_CONST.TAG_ALL]);},keepAttributes:function(oElement,arrAttributes){for(var iAttrIndex=0;iAttrIndex<arrAttributes.length;iAttrIndex++){var sAttrName=arrAttributes[iAttrIndex];var sValue=$(oElement).getProperty(sAttrName);if(sValue!=undefined){$(oElement).set(sAttrName,sValue);}}},recursiveRemove:function(oElement){if($defined(this.arrRecursiveRemoveTags[oElement.tag])){oElement.skip(1);}},filter:function(sSource){var oBaseTransform=new TidyTransformation();oBaseTransform.addRule(TIDY_CONST.TAG_ALL,this.recursiveRemove);for(var sTag in this.arrTagRules){for(var i=0;i<this.arrTagRules[sTag].length;i++){oBaseTransform.addRule(sTag,this.arrTagRules[sTag][i]);}}
for(var sTag in this.arrAllowedTags){var oHandler=(sTag==TIDY_CONST.TAG_ALL)?this.handleAllTagAttributes:this.handleTagAttributes;oBaseTransform.addRule(sTag,oHandler);}
return this.transform(sSource,[oBaseTransform])},transform:function(sSource,arrTidyTransformations){sSource=sSource.replace(/<!--(\n|.)*?-->/gi,'');sSource=sSource.replace(/\r\n|\n|\n\r/g,' ');this.stack.empty();this.delay.empty();this.clean.empty();var iCurr;var arrElements=new Array();var re=new RegExp(/(<([^<>])+>)|([^<>]+)/gi);var arr=sSource.match(re);if(arr){for(iCurr=0;iCurr<arr.length;iCurr++){var oElement=new TidyElement(arr[iCurr]);arrElements[arrElements.length]=oElement;}}
for(iCurr=0;iCurr<arrElements.length;iCurr++){var currElem=arrElements[iCurr];if(currElem.isText){this.insertText(currElem);}
else if(currElem.isClosing){this.insertClosingTag(currElem);}
else{this.insertOpeningTag(currElem);}}
this.finalize();return this.buildClean(arrTidyTransformations);},addTagReplacement:function(sTag,sNewTag){this.arrReplaceTags[sTag]=sNewTag;},addTagToRemoveRecursive:function(sTagName){this.arrRecursiveRemoveTags[sTagName]=1;},addAllowedTag:function(sTagName,arrAttributes){if(isUndefined(this.arrAllowedTags[sTagName])){this.arrAllowedTags[sTagName]=[];}
for(var i=0;i<arrAttributes.length;i++){this.arrAllowedTags[sTagName].push(arrAttributes[i]);}},addTagRule:function(sTagName,fRule){if(isUndefined(this.arrTagRules[sTagName])){this.arrTagRules[sTagName]=[];}
this.arrTagRules[sTagName].push(fRule);},isTagAllowed:function(sTagName){return $defined(this.arrAllowedTags[sTagName]);},insertText:function(oElement){var delay=this.delay;if((!!this.stack.length&&this.stack.getLast().applyDelayedFormatting)||!this.stack.length){while(!!delay.length){var delayed=delay.pop();this.stack.push(delayed);this.clean.push(delayed);}}
this.clean.push(oElement);},insertOpeningTag:function(oElement){var clean=this.clean;var usage=this.usage;if(oElement.isSingle){clean.push(oElement);return;}
if(oElement.isSection){while(!!this.stack.length&&(this.stack.getLast().isFormatting||!this.stack.getLast().canNest(oElement))){this.implicitClose();}}
this.stack.push(oElement);clean.push(oElement);if(usage[oElement.tag]){usage[oElement.tag]++;}
else{usage[oElement.tag]=1;}
var delay=this.delay;if(oElement.applyDelayedFormatting){for(var i=delay.length-1;i>=0;i--){var delayed=delay[i].clone();this.stack.push(delayed);clean.push(delayed);}}},insertClosingTag:function(oElement){var delay=this.delay;if((!this.stack.length||!oElement.isSection&&oElement.tag!=this.stack.getLast().tag)||(oElement.isSection&&!this.usage[oElement.tag])){if(!!delay.length&&oElement.tag==delay.getLast().tag){delay.pop();return;}
return;}
while(!!this.stack.length&&this.stack.getLast().tag!=oElement.tag){this.implicitClose();}
this.clean.push(oElement);this.stack.pop();while(!!delay.length&&delay.getLast().level-1>this.stack.length){var delayed=delay.pop();}},implicitClose:function(){var delay=this.delay;var oElement=this.stack.getLast();if(oElement.isFormatting){oElement.level=this.stack.length;delay.push(oElement);}
if(oElement.isTag){var sChunk='</'+oElement.tag+'>';this.clean.push(new TidyElement(sChunk));}
this.stack.pop();this.usage[oElement.tag]--;},finalize:function(){while(!!this.stack.length){this.implicitClose();}},buildClean:function(arrTidyTransformations){var iCurr,iIndex;var stack=[];var ident=[];var iSkipping=0;for(iCurr=0;iCurr<this.clean.length;iCurr++){var oElement=this.clean[iCurr];if(oElement.isTag){oElement.parseAttributes();if(!this.isTagAllowed(oElement.tag)){oElement.skip();}
if(arrTidyTransformations){for(var iIndex=0;iIndex<arrTidyTransformations.length;iIndex++){arrTidyTransformations[iIndex].apply(oElement,ident);}}
switch(oElement.skipFlag){case 1:continue;case 2:iSkipping+=((oElement.isClosing)?1:-1);};if(iSkipping){continue;}
oElement.buildAttributes();if(oElement.isOpening&&!!ident.length&&!oElement.canBeNestedInTag(ident.getLast())){continue;}
if(oElement.isClosing&&(!ident.length||ident.getLast()!=oElement.tagId)){continue;}
if(oElement.isOpening){if(!oElement.isSingle){ident.push(oElement.tagId);}}
else{ident.pop();}}
if(iSkipping){continue;}
if(!!this.stack.length&&oElement.isClosing&&oElement.isFormatting&&oElement.tagId==this.stack.getLast().tagId&&this.stack.getLast().isOpening){this.stack.pop();}
else{this.stack.push(oElement);}}
var arrTags=new Array(this.stack.length);for(iCurr=0;iCurr<this.stack.length;iCurr++){arrTags[iCurr]=$(this.stack[iCurr]).getValue();}
return arrTags.join('');}});


function TidyElement(sChunk){this.isTag=false;this.isText=false;var sValue,bIsClosing,sTagName,sAttributes;if(sChunk.match(/^(<(\/?)([a-z0-9:?]+)\s*(.*)>)$/im)){sValue=RegExp.$1;bIsClosing=(RegExp.$2=='/');sTagName=RegExp.$3.toUpperCase();sAttributes=RegExp.$4;this.isTag=true;}else{this.isText=true;sValue=sChunk;}
this.sourceChunk=sChunk;if(this.isText){this.value=sValue;this.attributes='';}else{this.value=sValue;this.isClosing=bIsClosing;this.isOpening=!this.isClosing;this.tag=sTagName.toUpperCase();this.attributes=sAttributes;this.skipFlag=0;this.canNest=TidyElement__CanNest;this.canBeNestedInTag=TidyElement__CanBeNestedInTag;this.parseAttributes=TidyElement__ParseAttributes;this.buildAttributes=TidyElement__BuildAttributes;this.getAttribute=TidyElement__GetAttribute;$(this).set=TidyElement__SetAttribute;this.delAttribute=TidyElement__DelAttribute;this.skip=TidyElement__Skip;this.rename=TidyElement__Rename;this.clone=TidyElement__Clone;this.newAttributesCollection=new Object;this.oldAttributesCollection=new Object;this.tagId=TidyTagIds[sTagName];this.isFormatting=TidyTagFormat[this.tagId];this.isSingle=TidyTagSingle[this.tagId];this.isSection=TidyTagSection[this.tagId];this.isTextContainer=TidyTagContainer[this.tagId];this.applyDelayedFormatting=TidyTagDFApply[this.tagId];this.resetDelayedFormatting=TidyTagDFReset[this.tagId];}}
function TidyElement__Clone(){var oNewElem=new TidyElement(this.sourceChunk);for(var prop in this){oNewElem[prop]=this[prop]}
return oNewElem;}
function TidyElement__CanNest(oElement){if(this.isText){return false;}
else if(oElement.isText){return true;}
var bCanNest=false;try{bCanNest=TidyTagNest[this.tagId][oElement.tagId];}catch(e){}
return bCanNest}
function TidyElement__CanBeNestedInTag(iTagId){return TidyTagNest[iTagId][this.tagId];}
function TidyElement__ParseAttributes(){this.oldAttributesCollection=new Object;this.newAttributesCollection=new Object;if(this.isClosing){return;}
var sAttributes;var arrPair;var iIndex;sAttributes=this.attributes.match(/([a-z_\-]+)\s*=\s*("[^"]*"|'[^']*'|[^\s]*)/ig);if(sAttributes!=null){for(iIndex=0;iIndex<sAttributes.length;iIndex++){arrPair=sAttributes[iIndex].match(/^([a-z_\-]+)\s*=\s*("[^"]*"|'[^']*'|[^\s]*)$/i);var sName=arrPair[1];var sValue=arrPair[2];if(sValue.charAt(0)=="'"||sValue.charAt(0)=='"'){sValue=sValue.substr(1,sValue.length-2);}
this.oldAttributesCollection[sName.toLowerCase()]=sValue;}}}
function TidyElement__GetAttribute(sName){sName=sName.toLowerCase();var sValue=(typeof(this.newAttributesCollection[sName])!='undefined')?this.newAttributesCollection[sName]:this.oldAttributesCollection[sName]
return sValue;}
function TidyElement__SetAttribute(sName,sValue){return this.newAttributesCollection[sName]=sValue;}
function TidyElement__DelAttribute(sName){this.newAttributesCollection[sName]=null;this.oldAttributesCollection[sName]=null;}
function TidyElement__BuildAttributes(){if(this.isOpening){var iIndex;var arrChunks=new Array;for(var sName in this.newAttributesCollection){arrChunks[arrChunks.length]=' ';arrChunks[arrChunks.length]=sName;var sAttrValue=this.newAttributesCollection[sName];sQuoteChar="'";if(sAttrValue){sQuoteChar=(sAttrValue.toString().indexOf("'")>-1)?'"':"'";}
arrChunks[arrChunks.length]='='+sQuoteChar;arrChunks[arrChunks.length]=sAttrValue;arrChunks[arrChunks.length]=sQuoteChar;}
this.attributes=arrChunks.join('');}
this.value='<'+(this.isClosing?'/':'')+this.tag+this.attributes+'>';}
function TidyElement__Rename(sTagName){sTagName=sTagName.toUpperCase();this.tag=sTagName;this.tagId=TidyTagIds[sTagName];this.isSingle=TidyTagSingle[this.tagId];}
function TidyElement__Skip(bRecursive){this.skipFlag=(bRecursive)?2:1;}


var TIDY_CONST={TAG_ALL:'*',ELEMENT_TYPE_TEXT:1,ELEMENT_TYPE_TAG:2}


var TidyTags=['A','AREA','B','BLOCKQUOTE','BODY','BR','CENTER','COL','COLGROUP','DIV','EM','FONT','FORM','HR','I','IMG','INPUT','LI','MAP','NOBR','OL','OPTION','P','SELECT','SPAN','STRIKE','STRONG','SUB','SUP','TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TR','U','UL','SCRIPT'];var TidyTagIds={};for(var i=0;i<TidyTags.length;i++){TidyTagIds[TidyTags[i]]=i;}
var TidyTagNest=[];TidyTagNest[0]=[0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0];TidyTagNest[1]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[2]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[3]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[4]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[5]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[6]=[1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[7]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[8]=[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[9]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[10]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[11]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[12]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[13]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[14]=[1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[15]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[16]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[17]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[18]=[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[19]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[20]=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0];TidyTagNest[21]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[22]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[23]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];TidyTagNest[24]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[25]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[26]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[27]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[28]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[29]=[0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0];TidyTagNest[30]=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0];TidyTagNest[31]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[32]=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0];TidyTagNest[33]=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0];TidyTagNest[34]=[1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0];TidyTagNest[35]=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0];TidyTagNest[36]=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0];TidyTagNest[37]=[1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0];TidyTagNest[38]=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0];TidyTagNest[39]=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];var TidyTagFormat=[0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0];var TidyTagSingle=[0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var TidyTagSection=[0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0];var TidyTagDFApply=[0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var TidyTagDFReset=[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0];var TidyTagContainer=[1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0];


var TidyTransformation=new Class({rules:[],addRule:function(sTagName,fHandler){var rules=this.rules;if(sTagName==TIDY_CONST.TAG_ALL){if(typeof(rules[TIDY_CONST.TAG_ALL])=='undefined'){rules[TIDY_CONST.TAG_ALL]=[];}
rules[TIDY_CONST.TAG_ALL].push(fHandler);}else{var iTagId=TidyTagIds[sTagName];if(typeof(iTagId)=='undefined'){return;}
if(!rules[iTagId]){rules[iTagId]=[];}
rules[iTagId].push(fHandler);}},apply:function(oElement,arrStack){var rules=this.rules;var arrTrans=rules[oElement.tagId];if(arrTrans){for(var iCurr=0;iCurr<arrTrans.length;iCurr++){arrTrans[iCurr](oElement,arrStack);}}
for(var iCurr=0;iCurr<rules[TIDY_CONST.TAG_ALL].length;iCurr++){rules[TIDY_CONST.TAG_ALL][iCurr](oElement,arrStack);}}});


RTE_CONST={COMMAND_INSERT_ORDERED_LIST:'InsertOrderedList',COMMAND_INSERT_UNORDERED_LIST:'InsertUnorderedList',COMMAND_BOLD:'Bold',COMMAND_ITALIC:'Italic',COMMAND_UNDERLINE:'Underline',COMMAND_STRIKETHROUGH:'StrikeThrough',COMMAND_ALIGN_RIGHT:'JustifyRight',COMMAND_ALIGN_CENTER:'JustifyCenter',COMMAND_ALIGN_LEFT:'JustifyLeft',COMMAND_ALIGN_JUSTIFY:'JustifyFull',COMMAND_COPY:'Copy',COMMAND_CUT:'Cut',COMMAND_PASTE:'Paste',COMMAND_INSERT_IMAGE:'InsertImage',COMMAND_INSERT_LINK:'CreateLink',COMMAND_UNLINK:'UnLink',COMMAND_INDENT_INCREASE:'Indent',COMMAND_INDENT_DECREASE:'Outdent',COMMAND_UNSELECT:'Unselect',COMMAND_UNDO:'Undo',COMMAND_REDO:'Redo',COMMAND_LIVE_RESIZE:'LiveResize',COMMAND_USE_CSS:'UseCss',COMMAND_SUBSCRIPT:'Subscript',COMMAND_SUPERSCRIPT:'Superscript',COMMAND_DELETE:'Delete',COMMAND_REMOVE_FORMAT:'RemoveFormat',COMMAND_FONT_NAME:'FontName',COMMAND_FORE_COLOR:'ForeColor',EVENT_SELECTION_CHANGED:'rte_selection_changed',EVENT_NEW_CONTENT_SET:'rte_new_content_set',EVENT_EXPORT_CONTENT:'rte_export_content',EVENT_RTE_INSTANTIATED:'rte_instantiated',EVENT_RTE_CONTENT_RESIZED:'rte_content_resized',EVENT_FINISH_EDIT:'rte_finish_edit',EVENT_AFTER_REPLACE:'rte_after_replace',EVENT_BEFORE_INSERT:'rte_before_insert',EVENT_UPLOAD_STARTED:'rte_upload_started',EVENT_UPLOAD_COMPLETE:'rte_upload_complete',EVENT_UPLOAD_CANCELED:'rte_upload_canceled',EVENT_BEFORE_PROPPANEL_CHANGE:'rte_before_property_panel_layout_change',LANG_EN:'en',LANG_BG:'bg',PLUGINS_REL_DIR:'Plugins/',IMAGES_REL_DIR:'Images/',CONTENT_AREA_PREFIX:'ca',TAG_ALL:'*',EDITOR_PREFIX:'rte_editor_',TOOLBAR_PREFIX:'rte_toolbar_',EDITOR_STYLE_HOLDER:'css_style',HELP_KEY_CTRL:1,HELP_KEY_ALT:2,HELP_KEY_SHIFT:3,CTRL_KEY_SHORTCUT:1,PLAIN_SHORTCUT:2,ALT_KEY_SHORTCUT:3,SHIFT_KEY_SHORTCUT:4,DEFAULT_CSS_STYLE:'plain',SELECTED_CSS_STYLE:'selected',PROP_PANEL_LAYOUT_AREA_PREFIX:'ppla',PROP_PANEL_TITLE_AREA_PREFIX:'pplt',BOTTOM_RIGHT_AREA_PREFIX:'bra',TMP_ID:'temp_id',TMP_ID2:'temp_id2',TMP_ID3:'temp_id3',TMP_ID4:'temp_id4',NODE_TYPE_TEXT:3,NODE_TYPE_ELEMENT:1,MESSAGE_TYPE_WARNING:1,MESSAGE_TYPE_INFO:2,MESSAGE_TYPE_WAIT:3,MESSAGE_TYPE_HINT:4,LL_DEBUG:1,LL_ACTION:2,HINT_TEXT_ATTR:'hint_message',HINT_WRAPPER_CLASSNAME:'sk-tips',qqq:'qqq'}
RTE_CONST.DEFAULT_LANGUAGE_ID=RTE_CONST.LANG_EN;


function assert(sMessage,bCondition){if(!bCondition){throw new RTEException('Assert: '+sMessage);}}


var RTE_Config={"ext_file_dep":{"js":["/Scripts/lib/ecma_extensions.js","/Scripts/lib/form_fields_helpers.js","/Scripts/lib/dom_utils.js","/Scripts/lib/Rangy/rangy-core.js","/Scripts/lib/Rangy/rangy-selectionsaverestore.js","/Scripts/Tidy/Tidy.js","/Scripts/Tidy/TidyElement.js","/Scripts/Tidy/Tidy_Constants.js","/Scripts/Tidy/Tidy_Config.js","/Scripts/Tidy/TidyTransformation.js","RTE_CONST.js","assert.js","RTE_Config.js","RTEEventManager.js","RTEException.js","RTEExceptions.js","RTEFeatureSet.js","RTEPlugin.js","RTEPropertyPanel.js","RTEPropertyPanel_Config.js","RTERange.js","RTESelection.js","RTEToolbar.js","RTEToolbar_Config.js","RTEToolbarItem.js","RTEHelpers.js","ToolbarItems/RTEButton.js","ToolbarItems/RTEButton_Config.js","repo://Shared/Scripts/style_drop_down.js","repo://Shared/Scripts/rte_sk_integration.js","repo://Shared/Scripts/popup.js","repo://Shared/Scripts/MooToolsExtensions/element_implement_value.js","repo://Shared/Scripts/MooTools/Interface/Tips.js","RTETips.js"],"html":["templates.htm"]},"editor_width":300,"editor_height":300,"css":["Core/css/rte.css","Core/css/rte_global.css"],"css_editor_style":"","baseDir":"","body_css_class":"rte","icon_info_msg":"rte_icon_info_msg","icon_wait_msg":"rte_icon_wait_msg","icon_warning_msg":"rte_icon_warning_msg","icon_hint_msg":"rte_icon_hint_msg","icon_resize_up":"rte_icon_resize_up","icon_resize_down":"rte_icon_resize_down","time_to_display_status_message":4000,"templates_holder_id":"rte_core_templates"}
RTE_Config.language=RTE_CONST.LANG_BG;RTE_Config.log_level=RTE_CONST.LL_ACTION;


var RTEEventManager=new Class({initialize:function(oRTE){if(isUndefined(oRTE)){throw new IllegalArgumentException('No RTE object passed!');}
this.RTE=oRTE;this.eventHandlers={};},addEventHandler:function(sEventType,oObjHandler,sMethodName,oOptions){if(isUndefined(sEventType)||sEventType==''){throw new IllegalArgumentException('No Event type passed!');}
if(isUndefined(oObjHandler)){throw new IllegalArgumentException('No ObjectHandler passed!');}
if(isUndefined(sMethodName)||sMethodName==''){throw new IllegalArgumentException('No Method name passed!');}
if(isUndefined(oObjHandler[sMethodName])){throw new IllegalArgumentException('Passed Method name ['+sMethodName+'] not found in object !');}
if(isUndefined(this.eventHandlers[sEventType])){this.eventHandlers[sEventType]=[];}
this.eventHandlers[sEventType].push({obj:oObjHandler,method:sMethodName,options:oOptions});},registerEvent:function(sEventType,oDocument){assert('No event type passed',($defined(sEventType)&&sEventType!=''));assert('No document object passed',$defined(oDocument));if(Browser.Engine.trident){var element=sEventType=='beforedeactivate'?this.RTE.editorIframe():this.RTE.rootElement();element.attachEvent('on'+sEventType,new Function('RTE_GetById("'+this.RTE.id+'").handleEvent()'));}else{oDocument.addEventListener(sEventType,new Function('e','RTE_GetById("'+this.RTE.id+'").handleEvent(e)'),true);}},fireEvent:function(sEventType){if(isUndefined(sEventType)||sEventType==''){throw new IllegalArgumentException('No Event type passed!');}
return this.handleEvent({type:sEventType});},stopEvent:function(oEvent){if(isUndefined(oEvent)){throw new IllegalArgumentException('No Event passed!');}
oEvent.canceled=true;},handleEvent:function(oEvent){if(isUndefined(oEvent)||isUndefined(oEvent.type)){throw new IllegalArgumentException('No Event object passed!');}
var sEventType=oEvent.type;if(isUndefined(this.eventHandlers[sEventType])){return;}
for(var i=0;i<this.eventHandlers[sEventType].length;i++){var oObjHandler=this.eventHandlers[sEventType][i].obj;var sMethod=this.eventHandlers[sEventType][i].method;var oOptions=this.eventHandlers[sEventType][i].options;if($defined(oOptions)&&typeof(oOptions.skip_pass_event_object)!='undefined'&&oOptions.skip_pass_event_object){oObjHandler[sMethod]();}else{oObjHandler[sMethod](oEvent);}
if(oEvent.canceled){return false;}}
return true;},init:function(oDocument){if(isUndefined(oDocument)){throw new IllegalArgumentException('No document object passed!');}
for(var i in this.eventHandlers){this.registerEvent(i,oDocument);}},cancelEventBubbling:function(oEvent){if(isUndefined(oEvent)){throw new IllegalArgumentException('No Event object passed!');}
if(Browser.Engine.trident){oEvent.keyCode=0;oEvent.cancelBubble=true;oEvent.returnValue=false;}else{oEvent.preventDefault();if(oEvent.preventBubble){oEvent.preventBubble();}
oEvent.stopPropagation();}}});


var RTEException=new Class({initialize:function(sMessage){this.message=sMessage;if(typeof(RTE_ReportError)!='undefined'){RTE_ReportError(undefined,'RTEException thrown:\n'+'Message:['+this.message+']\n'+'StackTrace:['+this.stackTrace()+']');}},stackTrace:function(){var sTrace='';if(Browser.Engine.trident){var oCallerFunction=RTEException.caller;var MAX_LOOP=5;var i=0;while(!isNull(oCallerFunction)&&i<MAX_LOOP){var re=new RegExp("^function (\\w+)","i");if(re.test(oCallerFunction)){sTrace=' -> '+RegExp.$1+sTrace;}
oCallerFunction=oCallerFunction.caller;i++;}}else{try{foo.bar;}catch(e){var arrStackRaw=e.stack.split('\n');var stack=[];for(var i=0;i<arrStackRaw.length-1;i++){var name=arrStackRaw[i].match(/^(\w*)/)[1];if(!name){name='anonymous';}
if(name=='assert'||name=='RTEException'){continue;}
stack.push(name);}
for(var i=1;i<stack.length;i++){sTrace='-> '+stack[i]+sTrace;}}}
return sTrace;}});


function IllegalArgumentException(sMessage){throw new RTEException(sMessage);}
function RuntimeException(sMessage){throw new RTEException(sMessage);}


var RTEFeatureSet=new Class({config:{},applyPlugins:function(oRTE){if(isUndefined(this.config.plugins)){throw new RuntimeException('No plugins found in config!');}
for(var i=0;i<this.config.plugins.length;i++){oRTE.createAndRegisterPlugin(this.config.plugins[i]);}},apply:function(){}});


var RTEPlugin=new Class({id:'base_plugin',RTE:null,config:{},eventHandlers:[],requiredTags:[],tagRules:[],shortcuts:[],watchTags:[],toolbarItems:{},select:function(){},cleanupContent:function(oRootElement){},processPastedContent:function(oRootElement){},handlePropPanelValueChange:function(sPropName,vPropValue){},buildPropPanelValuesFromElement:function(oElement){var oProps={};var sTagName=oElement.tagName;if($defined(this.mapPanelProps_AttrNames[sTagName])){for(var sPropName in this.mapPanelProps_AttrNames[sTagName]){var sAttrName=this.getAttrNameForPropName(sTagName,sPropName);var sAttrValue=$(oElement).getProperty(sAttrName);oProps[sPropName]=this.getPropValueForAttrValue(sTagName,sAttrName,sAttrValue);}}
return oProps;},setImageHolders:function(sAttrName,sAttrValue,sImageSrc){this.logMessage('setImageHolders','.');var arrAllImages=this.RTE.rootElement().getElementsByTagName('IMG');for(var i=0;i<arrAllImages.length;i++){var oImage=arrAllImages[i];if($(oImage).getAttribute(sAttrName)==sAttrValue){$(oImage).set('src',sImageSrc);}}},buildElementValuesFromPropPanel:function(sTagName){var oProps={};if($defined(this.mapPanelProps_AttrNames[sTagName])){for(var sPropName in this.mapPanelProps_AttrNames[sTagName]){var vPropValue=this.propertyPanel.getPropValue(sPropName);oProps[this.mapPanelProps_AttrNames[sTagName][sPropName]]=this.getAttrValueForPropValue(sTagName,sPropName,vPropValue);}}
return oProps;},getPanelPropertiesList:function(sTagName){var arrPanelProps=[];var oProps=this.mapPanelProps_AttrNames[sTagName];if($defined(oProps)){for(var sPropName in oProps){arrPanelProps.push(sPropName);}}
return arrPanelProps;},getTagNameForPropName:function(sPropName){return this.mapPanelProps_TagNames[sPropName];},getPropNameForAttrName:function(sTagName,sAttrName){assert('Tag name ['+sTagName+'] not found in structure.',$defined(this.mapAttrNames_PanelProps[sTagName]));return this.mapAttrNames_PanelProps[sTagName][sAttrName];},getAttrNameForPropName:function(sTagName,sPropName){assert('Tag name ['+sTagName+'] not found in structure.',$defined(this.mapPanelProps_AttrNames[sTagName]));return this.mapPanelProps_AttrNames[sTagName][sPropName];},getAttrValueForPropValue:function(sTagName,sPropName,vPropValue){if($defined(this.mapPanelProps_AttrValues[sTagName])&&$defined(this.mapPanelProps_AttrValues[sTagName][sPropName])){var vAttrValue=this.mapPanelProps_AttrValues[sTagName][sPropName][vPropValue]
if($defined(vAttrValue)){return vAttrValue;}}
return vPropValue;},getPropValueForAttrValue:function(sTagName,sAttrName,sAttrValue){if($defined(this.mapAttrValue_PanelProps[sTagName])&&$defined(this.mapAttrValue_PanelProps[sTagName][sAttrName])){var vPropValue=this.mapAttrValue_PanelProps[sTagName][sAttrName][sAttrValue];if($defined(vPropValue)){return vPropValue;}}
return sAttrValue;},reversePropertiesMaps:function(){assert('No map found for panel property names <-> attribute names!',$defined(this.mapPanelProps_AttrNames));assert('No map found for panel property values <-> attribute value!',$defined(this.mapPanelProps_AttrValues));this.mapAttrNames_PanelProps={};this.mapPanelProps_TagNames={};for(var sTagName in this.mapPanelProps_AttrNames){this.mapAttrNames_PanelProps[sTagName]={};for(var sPanelPropName in this.mapPanelProps_AttrNames[sTagName]){this.mapAttrNames_PanelProps[sTagName][this.mapPanelProps_AttrNames[sTagName][sPanelPropName]]=sPanelPropName;assert('Duplicated property name ['+sPanelPropName+']',isUndefined(this.mapPanelProps_TagNames[sPanelPropName]));this.mapPanelProps_TagNames[sPanelPropName]=sTagName;}}
this.mapAttrValue_PanelProps={};for(var sTagName in this.mapPanelProps_AttrValues){this.mapAttrValue_PanelProps[sTagName]={};for(var sPropName in this.mapPanelProps_AttrValues[sTagName]){var sAttrName=this.getAttrNameForPropName(sTagName,sPropName);this.mapAttrValue_PanelProps[sTagName][sAttrName]={};for(var sPropValue in this.mapPanelProps_AttrValues[sTagName][sPropName]){var sAttrValue=this.mapPanelProps_AttrValues[sTagName][sPropName][sPropValue];this.mapAttrValue_PanelProps[sTagName][sAttrName][sAttrValue]=sPropValue;}}}},createPropPanel:function(sPanelLayout){this.propertyPanel=new RTEPropertyPanel(this.RTE,this);this.propertyPanel.setTitle(this.getText('prop_panel_title'));var sLayout=($defined(sPanelLayout))?sPanelLayout:this.config.prop_panel_layout;this.propertyPanel.setLayout(sLayout);},hideOtherPanels:function(){if(this.RTE.hasPropertyPanelShown()){var oShownPropPanel=this.RTE.getShownPropertyPanel();if(oShownPropPanel.isPinned()){this.RTE.displayStatusMessage(this.getText('msg_close_other_panel'),RTE_CONST.MESSAGE_TYPE_WARNING);return false;}
this.RTE.hidePropertyPanel();}
return true;},hasPropertyPanel:function(){return(this.propertyPanel!=null);},isLinkSelected:function(){var oLinkElement=this.RTE.searchElement('A',this.RTE.currentElement());if(oLinkElement!=null){return true;}
if(this.RTE.selection.isControl()){return false;}
if(Browser.Engine.trident){var oRng=this.RTE.selectionRange().domRange.duplicate();oRng.collapse(true);var oStartElement=oRng.parentElement();if(this.RTE.searchElement('A',oStartElement)!=null){return true;}
var oRng=this.RTE.selectionRange().domRange.duplicate();oRng.collapse(false);var oEndElement=oRng.parentElement();if(this.RTE.searchElement('A',oEndElement)!=null){return true;}}else{var oFocusNode=this.RTE.selection.domSelection.focusNode;var oAnchorNode=this.RTE.selection.domSelection.anchorNode;if(this.RTE.searchElement('A',oFocusNode)!=null||this.RTE.searchElement('A',oAnchorNode)!=null){return true;}}
return false},init:function(){this.register();},configure:function(oConfig){if(isUndefined(oConfig)){throw new IllegalArgumentException('No Config passed!');}
for(var i in oConfig){this.config[i]=oConfig[i];}},imagesDir:function(){return this.RTE.baseDir()+RTE_CONST.PLUGINS_REL_DIR+this.id+'/'+RTE_CONST.IMAGES_REL_DIR;},getImageUrl:function(sImageUrl){if(sImageUrl.indexOf('http://')==0||sImageUrl.indexOf('/')>-1){return sImageUrl;}else{return this.imagesDir()+sImageUrl;}},getText:function(sTextIdent){if(isUndefined(sTextIdent)||sTextIdent==''){throw new IllegalArgumentException('No Text identifier passed!');}
var arrTextProps=this.textProps();if(isUndefined(arrTextProps[sTextIdent])){throw new RuntimeException('Invalid Text identifier ['+sTextIdent+']!');}
return arrTextProps[sTextIdent];},textProps:function(){var iLanguage=this.RTE.getLanguage();if(isUndefined(this.config.texts[iLanguage])){iLanguage=RTE_CONST.DEFAULT_LANGUAGE_ID;assert('No default language found for plugin ['+this.id+']',$defined(this.config.texts[iLanguage]))}
return this.config.texts[iLanguage];},logMessage:function(sIdent,sMessage,iLogLevel){this.RTE.logMessage(this.id+'::'+sIdent,sMessage,iLogLevel);},register:function(){for(var i=0;i<this.requiredTags.length;i++){this.RTE.addRequiredTag(this.requiredTags[i].tagName,this.requiredTags[i].attributes);}
for(var i=0;i<this.tagRules.length;i++){this.RTE.addTagRule(this.tagRules[i].tagName,this.tagRules[i].handler);}
for(var i=0;i<this.eventHandlers.length;i++){this.RTE.eventManager().addEventHandler(this.eventHandlers[i].type,this,this.eventHandlers[i].method);}
for(var i=0;i<this.shortcuts.length;i++){var iHelpKey=null;if(this.shortcuts[i].ctrlKey){iHelpKey=RTE_CONST.HELP_KEY_CTRL;}else if(this.shortcuts[i].altKey){iHelpKey=RTE_CONST.HELP_KEY_ALT;}else if(this.shortcuts[i].shiftKey){iHelpKey=RTE_CONST.HELP_KEY_SHIFT;}
this.RTE.addShortcut(this.shortcuts[i].key,iHelpKey,this,this.shortcuts[i].method,this.shortcuts[i].skipPreventDefault)}
for(var i in this.toolbarItems){this.RTE.addToolbarItem(this.toolbarItems[i]);}
for(var i=0;i<this.watchTags.length;i++){this.RTE.addWatchTag(this.watchTags[i].tagName,this.watchTags[i].attributes,this)}},shortcut2String:function(oShortcut){if(isUndefined(oShortcut)){throw new IllegalArgumentException('No Shortcut passed!');}
if(isUndefined(oShortcut.key)){throw new IllegalArgumentException('No Shortcut Key passed!');}
var sHelpKeyText='';if(oShortcut.ctrlKey){sHelpKeyText='Ctrl';}else if(oShortcut.altKey){sHelpKeyText='Alt';}else if(oShortcut.shiftKey){sHelpKeyText='Turno';}
if(sHelpKeyText!=''){sHelpKeyText+='+';}
var sKeyText=($defined(oShortcut.charCode))?oShortcut.charCode:String.fromCharCode(oShortcut.key);return sHelpKeyText+sKeyText.toUpperCase();},checkSelection:function(){},initToolbarItems:function(){}});


var RTEPropertyPanel=new Class({initialize:function(oRTE,oPlugin){this.id=oRTE.id+'_'+oPlugin.id;assert('RTE object not passed!',typeof(oRTE)!='undefined');assert('Plugin object not passed!',typeof(oPlugin)!='undefined');assert('Property panel config was not found!',typeof(RTEPropertyPanel_Config)!='undefined');assert('Space image src [SPACE_IMG_SRC global js var ] not set!',typeof(SPACE_IMG_SRC)!='undefined');this.oRTE=oRTE;this.oPlugin=oPlugin;this.sTitle;this.sLayout;this.sComposedLayout;this.bPinned=false;this.oConfig=RTEPropertyPanel_Config;this.sPropNamePreffix='pp_prop_'+this.id+'_';},setTitle:function(s){if(isUndefined(s)){throw new IllegalArgumentException('No Title passed!');}
this.sTitle=s;},getTitle:function(){if(isUndefined(this.sTitle)){throw new RuntimeException('Title not set!');}
return this.sTitle;},setPinned:function(b){if(isUndefined(b)){throw new IllegalArgumentException('No pinned param passed!');}
this.bPinned=b;},isPinned:function(){return this.bPinned;},setLayout:function(s){if(isUndefined(s)){throw new IllegalArgumentException('No Layout passed!');}
this.sLayout=s;},getPropValue:function(sPropName){if(isUndefined(sPropName)||sPropName==''){throw new RuntimeException('No property name passed!');}
var oField=this.getPropElementByName(sPropName);if(oField==null){throw new RuntimeException('No field for property name ['+sPropName+'] found!');}
return $(oField).getValue();},setPropValue:function(sPropName,vValue){if(isUndefined(sPropName)||sPropName==''){throw new RuntimeException('No property name passed!');}
if(isUndefined(vValue)){throw new RuntimeException('No property value for prop name ['+sPropName+'] passed!');}
var oField=this.getPropElementByName(sPropName);if(oField==null){throw new RuntimeException('No field for property name ['+sPropName+'] found!');}
$(oField).setValue(vValue);},getPropElementByName:function(sPropName){if(isUndefined(sPropName)||sPropName==''){throw new RuntimeException('No property name passed!');}
return $(this.getPropElementId(sPropName));},propElementByNameSetDisabledState:function(sPropName,bDisabled){var oField=this.getPropElementByName(sPropName);if(!oField){throw new RuntimeException('No field for property name ['+sPropName+'] found!');}
oField.disabled=bDisabled;},getHtmlElementById:function(sElementId){if(isUndefined(sElementId)||sElementId==''){throw new RuntimeException('No element id passed!');}
return $(this.getHtmlElementId(sElementId));},handlePropValueChange:function(oFormElement){if(isUndefined(oFormElement)){throw new RuntimeException('No Form Element passed!');}
assert('Passed Form Element is with missing ID',oFormElement.id!='');var sPropName=this.getPropNameFromElementId(oFormElement.id);var vPropValue=this.getPropValue(sPropName);var vUserSetValue=vPropValue;if($(oFormElement).getProperty('value_filter')){vPropValue=FilterFieldValue(vPropValue,$(oFormElement).getProperty('value_filter'));$(oFormElement).setValue(vPropValue);}
if($(oFormElement).getProperty('value_validator')){var bValid=ValidateField(oFormElement);if(!bValid){var sInvalidValueMsg=$(oFormElement).getProperty('value_invalid_msg');if(sInvalidValueMsg==null){sInvalidValueMsg=this.oConfig.msg_incorrect_value;sInvalidValueMsg+="\n\nThe field should be validated as:\n"+Validator_GetMessage(oFormElement);}
$(oFormElement).setValue(vUserSetValue);this.decorateInValidField(oFormElement);alert(sInvalidValueMsg);return;}
this.decorateValidField(oFormElement);}
this.oPlugin.handlePropPanelValueChange(sPropName,vPropValue);},getPropElementId:function(sPropName){assert('Property name not passed',$defined(sPropName)&&sPropName!='');return this.sPropNamePreffix+sPropName;},getHtmlElementId:function(sElementId){assert('Element id not passed',$defined(sElementId)&&sElementId!='');return'pp_elem_'+this.id+sElementId;},composeLayout:function(){if(isUndefined(this.sLayout)){throw new RuntimeException('No Layout set!');}
this.oRTE.eventManager().fireEvent(RTE_CONST.EVENT_BEFORE_PROPPANEL_CHANGE);if($defined(this.sComposedLayout)){return this.sComposedLayout;}
var oTmplProps=this.getLayoutProps();this.sComposedLayout=this.sLayout.supplant(oTmplProps,false,this.replaceTmplVariable.bind(this));return this.sComposedLayout;},getLayoutProps:function(){var oTmplProps={};for(var i in this.oConfig.styles){oTmplProps['__style__'+i]=this.oConfig.styles[i];}
var sCodeToExecuteOnPropValueChange='RTE_GetById("'+this.oRTE.id+'").getPluginById("'+this.oPlugin.id+'").propertyPanel.handlePropValueChange(this)';oTmplProps['__action__onchange']=' onchange = \''+sCodeToExecuteOnPropValueChange+'\'';oTmplProps['__action__onblur']=' onblur   = \''+sCodeToExecuteOnPropValueChange+'\'';oTmplProps['__action__onclick']=' onclick  = \''+sCodeToExecuteOnPropValueChange+'\'';oTmplProps['__action__notify_plugin']=sCodeToExecuteOnPropValueChange;oTmplProps['__hint__init_code']='';oTmplProps['__hint__init']=' '+RTE_CONST.HINT_TEXT_ATTR+'="'+RTE_CONST.HINT_TEXT_ATTR+'"';var oPluginTextProps=this.oPlugin.textProps();for(var i in oPluginTextProps){oTmplProps['__text__'+i]=oPluginTextProps[i];}
for(var i in this.oPlugin.toolbarItems){var oTItem=this.oPlugin.toolbarItems[i];oTmplProps['__toolbar_item__'+oTItem.name]=oTItem.getHTML();}
oTmplProps['__rte_id__']=this.oRTE.id;oTmplProps['__plugin_id__']=this.oPlugin.id;oTmplProps['__image__space']=SPACE_IMG_SRC;return oTmplProps;},replaceTmplVariable:function(sVarName,oProps){assert('Variable name not passed',$defined(sVarName));assert('Variables hash not passed',$defined(oProps));if(sVarName.indexOf('__propname__')==0){return this.getPropElementId(sVarName.substring('__propname__'.length));}else if(sVarName.indexOf('__elementid__')==0){return this.getHtmlElementId(sVarName.substring('__elementid__'.length));}
return oProps[sVarName];},getPropNameFromElementId:function(sElementId){assert('Element id not passed',$defined(sElementId)&&sElementId!='');return sElementId.substring(this.sPropNamePreffix.length);},decorateInValidField:function(oField){$(oField).setStyle('backgroundColor',this.oConfig.invalid_field_bckg_color);},decorateValidField:function(oField){$(oField).setStyle('backgroundColor',this.oConfig.valid_field_bckg_color);},hide:function(){if(this.oPlugin.hidePropertyPanelHook){this.oPlugin.hidePropertyPanelHook(this);}},show:function(){if(this.oPlugin.showPropertyPanelHook){this.oPlugin.showPropertyPanelHook(this);}}});


var RTEPropertyPanel_Config={"styles":{"table_fields_holder":" cellpadding='0' cellspacing='2' border='0' style='margin-left:10px;margin-right:10px' align='center'","fielddesc":"class='plain'","fieldholder":"class='plain'","field_text":"class='textfield'          style = 'width:178px;'","field_text_medium":"class='textfield'          style = 'width:106px;'","field_text_small":"class='textfieldsmall'     style = 'width:30px;'","field_select":"class='selectobject'       style = 'width:178px;'","field_select_medium":"class='selectobjectshort'  style = 'width:106px;'","field_select_small":"class='selectobjectshort'  style = 'width:30px;'","field_checkbox":"class='checkbox' style = 'margin-left:0px;margin-right:0px;margin-top:2px;margin-bottom:2px;'","control_default":"class='control'","default":"class='plain'","section_header":"class='plain' style = 'font-weight:bold;padding:5px' align = 'center' "},"msg_incorrect_value":"Incorrect value!\nPlease correct the marked field.","invalid_field_bckg_color":"#FFFFBF","valid_field_bckg_color":"#FFFFFF"}


var RTERange=new Class({initialize:function(oRTESelection){var s=oRTESelection.domSelection;if(isUndefined(oRTESelection)){throw new IllegalArgumentException('No RTESelection instance passed!');}
this.oRTESelection=oRTESelection;this.domRange=null;if(Browser.Engine.trident){this.domRange=s.createRange();}else{try{this.domRange=s.getRangeAt(0);}catch(ex){this.domRange=oRTESelection.window.document.createRange();try{this.domRange.setStart(s.anchorNode,s.anchorOffset);this.domRange.setEnd(s.focusNode,s.focusOffset);}catch(ex){}}}},collapse:function(bStart){if(this.oRTESelection.isControl()||$defined(this.domRange.length))return;if(isUndefined(bStart)){bStart=true;}
if(Browser.Engine.trident){this.domRange.collapse(bStart);this.domRange.select();}else{if(bStart){this.oRTESelection.domSelection.collapseToStart();}else{this.oRTESelection.domSelection.collapseToEnd();}}},currentElement:function(){var r=this.domRange;if(Browser.Engine.trident){if(this.oRTESelection.isControl()||$defined(r.length)){return r.item(0);}else{return r.parentElement();}}else{var oNode=$(r.commonAncestorContainer);if(!oNode)return null;var helpers=new RTEHelpers;var isSafari=helpers.isSafari();var isChrome=helpers.isChrome();while(oNode&&oNode.nodeType!=RTE_CONST.NODE_TYPE_ELEMENT){oNode=$(oNode.parentNode);}
var sContainer=r.startContainer;var sOffset=r.startOffset;var eContainer=r.endContainer;var eOffset=r.endOffset;var sParent=sContainer.parentNode;var eParent=eContainer.parentNode;var sTag=oNode.tagName.toUpperCase();var iNumImages=0;var img=null;var elements=oNode.getChildren();if(((Browser.Engine.webkit)&&['P','A','TD','BODY','DIV'].indexOf(sTag)!=-1)||(isChrome&&['FONT','B','SPAN'].indexOf(sTag)!=-1)){for(var i=0,l=elements.length;i<l;i+=1){var tNode=elements[i];var tagname=tNode.get('tag');if(tagname=='a'){tNode=tNode.getElement('img');if(!tNode){continue;}}else if(tagname=='img'){img=tNode;iNumImages++;}}}
if(iNumImages==1&&img!=null&&((img.style.float=='right'&&img.align=='right')||(img.style.float=='left'&&img.align=='left'))){return img;}
if(sContainer.nodeType==RTE_CONST.NODE_TYPE_TEXT&&sContainer.nodeValue.length<=sOffset){for(sOffset=0;sOffset<sParent.childNodes.length;sOffset++){if(sParent.childNodes[sOffset]==sContainer.nextSibling)break;}
sContainer=sParent;}
if(eContainer.nodeType==RTE_CONST.NODE_TYPE_TEXT&&eOffset==0){for(eOffset=0;eOffset<=eParent.childNodes.length;eOffset++){if(eParent.childNodes[eOffset]==eContainer)break;}
eContainer=eParent;}
if(sContainer.nodeType==RTE_CONST.NODE_TYPE_ELEMENT&&sContainer==eContainer&&sOffset==eOffset-1){oNode=sContainer.childNodes[r.startOffset];}
return oNode;}},moveToElementText:function(oElement){var sel=this.oRTESelection.domSelection;var rng=this.domRange;if(isUndefined(oElement)){throw new IllegalArgumentException('No HTMLElement instance passed!');}
if(Browser.Engine.trident){if(this.oRTESelection.isControl()||$defined(rng.length))return;var oRng=this.oRTESelection.window.document.body.createTextRange();oRng.collapse();oRng.moveToElementText(oElement);oRng.select();this.domRange=oRng;}else{if(sel.setBaseAndExtent){var length=oElement.innerText.length;if(length){sel.setBaseAndExtent(oElement,length,oElement,length);}else{rng.selectNode(oElement);sel.removeAllRanges();sel.addRange(rng);}}else
if(sel.selectAllChildren){sel.selectAllChildren(oElement);}}}});


var RTESelection=new Class({initialize:function(oWindow){if(isUndefined(oWindow)){throw new IllegalArgumentException('No Window instance passed!');}
this.window=oWindow;this.arrControlSelectionTags=['IMG','TABLE'];this.domSelection=(Browser.Engine.trident)?oWindow.document.selection:oWindow.getSelection();},createRange:function(){return new RTERange(this);},clear:function(){if(Browser.Engine.trident){this.selection.clear();}else{this.selection.deleteFromDocument();}},isControl:function(){if(Browser.Engine.trident){return(this.domSelection.type=='Control')}else{if(this.domSelection.toString()!=''){return false}
var oFocusNode=this.domSelection.focusNode;if(!oFocusNode||oFocusNode.nodeType==RTE_CONST.NODE_TYPE_TEXT){return false;}
var arrFocusNodes=[oFocusNode];if(Browser.Engine.webkit){for(var idx=0;idx<oFocusNode.childNodes.length;idx++){arrFocusNodes.push(oFocusNode.childNodes[idx]);}}
for(var idx=0;idx<arrFocusNodes.length;idx++){var oSelectedTag=arrFocusNodes[idx].tagName;for(var i=0;i<this.arrControlSelectionTags.length;i++){if(this.arrControlSelectionTags[i]==oSelectedTag){return true;}}}
return false}},saveSelection:function(){this.removeMarkers();this.saved_selection=rangy.saveSelection(this.window);},restoreSelection:function(){if(this.saved_selection){rangy.restoreSelection(this.saved_selection);this.saved_selection=null;}},removeMarkers:function(){if(this.saved_selection){rangy.removeMarkers(this.saved_selection);this.saved_selection=null;}}});


var RTEToolbar=new Class({initialize:function(id){if(isUndefined(id)){throw new IllegalArgumentException('No ID passed!');}
this.id=id;assert('Config was not found',typeof(RTEToolbar_Config)!='undefined')
this.config=RTEToolbar_Config;this.items=[];this.sLayoutTemplate=null;},isInstantiated:function(){var oDomElement=$(this.id);if(oDomElement==null){return false;}
return true;},disable:function(){for(var i=0;i<this.items.length;i++){this.items[i].disable();}},enable:function(){for(var i=0;i<this.items.length;i++){this.items[i].enable();}},composeLayout:function(){assert('No Layout template set!',$defined(this.sLayoutTemplate));var oProps={__delimiter__:this.config.delimiter};for(var i=0;i<this.items.length;i++){var oItem=this.items[i];var sItemIdent='__'+oItem.plugin.id+'__'+oItem.name;oProps[sItemIdent]=oItem.getHTML();}
return'<span style = "display:block" id = '+this.id+'>'+this.sLayoutTemplate.supplant(oProps)+'</span>';},addItem:function(oToolbarItem){if(isUndefined(oToolbarItem)){throw new IllegalArgumentException('No ToolbarItem passed!');}
this.items.push(oToolbarItem);},setLayoutTemplate:function(sLayout){if(isUndefined(sLayout)||sLayout==''){throw new IllegalArgumentException('No layout passed!');}
this.sLayoutTemplate=sLayout;},hide:function(){if(!this.isInstantiated()){throw new RuntimeException('Toolbar not instantiated!');}
$(this.id).setStyle('display','none');},show:function(){if(!this.isInstantiated()){throw new RuntimeException('Toolbar not instantiated!');}
$(this.id).setStyle('display','block');},isShown:function(){return($(this.id).getStyle('display')=='block');}});


RTEToolbar_Config={layout:'',delimiter:'<img width = 5 height = 1  src = "{__img_space__}">'}


var RTEToolbarItem=new Class({id:null,disabled:false,plugin:null,name:null,disable:ToolbarItem__Disable,enable:ToolbarItem__Enable,getHTML:ToolbarItem__GetHTML});function ToolbarItem__Disable(){}
function ToolbarItem__Enable(){}
function ToolbarItem__GetHTML(){return'';}


var RTEHelpers=new Class({isBrowserSupported:function(){if(Browser.Engine.trident){var version=navigator.appVersion.substr(navigator.appVersion.indexOf('MSIE')+5);if(navigator.userAgent.toLowerCase().indexOf('opera')>-1){return false;}
if(isNaN(parseInt(version))||parseInt(version)<5.5){return false;}}else{var iRV=navigator.userAgent.indexOf('rv:');if(iRV==-1){if(navigator.vendor.indexOf('Apple')!=-1||navigator.vendor.indexOf('Google')!=-1){var version=parseInt(navigator.appVersion.substr(navigator.appVersion.indexOf('Safari')+7));if(version>=500)return true;}
return false;}else{var iVersion=parseFloat(navigator.userAgent.substring(iRV+3));if(iVersion<1.4){return false;}}}
return true;},isIE9:function(){return!!Browser.Engine.trident&&!!window.addEventListener;},isSafari:function(){return(navigator&&navigator.vendor&&navigator.vendor.indexOf('Apple')!=-1);},isSafari3:function(){return(navigator&&navigator.vendor&&navigator.vendor.indexOf('Apple')!=-1&&navigator.userAgent.indexOf("Version/3")!=-1);},isChrome:function(){return(navigator&&navigator.userAgent&&navigator.userAgent.indexOf('Chrome')>-1);}});


var RTEButton=new Class({Extends:RTEToolbarItem,initialize:function(oProps){if(isUndefined(oProps)){throw new IllegalArgumentException('No properties passed!');}
if(isUndefined(oProps.id)){throw new IllegalArgumentException('No ID passed!');}
if(isUndefined(oProps.description)){throw new IllegalArgumentException('No description passed!');}
if(isUndefined(oProps.classname)||oProps.classname==''){throw new IllegalArgumentException('No button classname passed!');}
if(isUndefined(oProps.plugin)){throw new IllegalArgumentException('No plugin passed!');}
if(isUndefined(oProps.method)||oProps.method==''){throw new IllegalArgumentException('No method passed!');}
if(isUndefined(oProps.name)){throw new IllegalArgumentException('No button name passed!');}
assert('No config for RTE button found',typeof(RTEButton_Config)!='undefined')
this.config=RTEButton_Config;this.id=oProps.id;this.plugin=oProps.plugin;this.name=oProps.name;this.command=oProps.command;this.className='rte_button '+oProps.classname;this.sShortcut=oProps.shortcut;this.domImgId='btn_'+this.id;this.description=oProps.description;this.disabled=false;this.method=oProps.method;},select:function(){if(!this.isInstantiated())return;if(this.disabled)return;$(this.domImgId).addClass('selected');},deselect:function(){if(!this.isInstantiated())return;if(this.disabled)return;$(this.domImgId).removeClass('selected');},disable:function(){if(!this.isInstantiated())return;this.disabled=true;$(this.domImgId).addClass('disabled');},enable:function(){if(!this.isInstantiated())return;this.disabled=false;$(this.domImgId).removeClass('disabled');},isEnabled:function(){return(!this.disabled);},hide:function(){if(!this.isInstantiated())return;$(this.domImgId).setStyle('display','none');},show:function(){if(!this.isInstantiated())return;$(this.domImgId).setStyle('display','');},executeAction:function(){if(!this.isInstantiated())return;if(this.disabled)return;this.plugin[this.method]();},isInstantiated:function(){return($(this.domImgId)!=null);},getHTML:function(){var sTitle=this.description.replace('\"','&#34;');if($defined(this.sShortcut)){var sShortcutText='';sShortcutText=' ('+this.sShortcut+')';sTitle+=sShortcutText;}
return'<img hspace="1" src="/Shared/Images/space.gif"'+' id="'+this.domImgId+'"'+' title="'+sTitle+'"'+' class="'+this.className+'"'+' onclick="RTEButton_GetById(\''+this.id+'\').executeAction()"'+'>';}});var arrRTEButtons=[];var RTEButtons_counter=0;function RTEButton_Create(oProps){if(isUndefined(oProps)){throw new IllegalArgumentException('No props passed!');}
RTEButtons_counter++;oProps.id='rb_'+RTEButtons_counter;var oRTEButton=new RTEButton(oProps);arrRTEButtons[oProps.id]=oRTEButton;return oRTEButton;}
function RTEButton_GetById(sID){if(isUndefined(sID)){throw new IllegalArgumentException('No ID passed!');}
if(isUndefined(arrRTEButtons[sID])){throw new RuntimeException('Button with such ID ['+sID+'] not found!');}
return arrRTEButtons[sID];}


var RTEButton_Config={opacity_mouse_over:50,opacity_normal:100,opacity_disabled:40,border_color_selected:'#C6C6C6',border_color_normal:'#F7F7F7',border_width:1,hspace:1,image_width:20,image_height:20}


Element.implement({disableSelection:function(){if(Browser.Engine.trident){this.setAttribute("unselectable",'on');var e,i=0;while((e=this.all[i++])){e.setAttribute("unselectable",'on');}}else if(Browser.Engine.gecko){this.setStyle("MozUserSelect","none");}else if(Browser.Engine.webkit){this.setStyle("KhtmlUserSelect","none");this.addEvent("mousedown",$lambda(false));}else{this.setStyle("userSelect","none");}
return this;},isDisplayed:function(){return this.getStyle('display')!='none';},toggle:function(){return this[this.isDisplayed()?'hide':'show']();},hide:function(){var d;try{if('none'!=this.getStyle('display'))d=this.getStyle('display');}catch(e){}
return this.store('originalDisplay',d||'block').setStyle('display','none');},show:function(display){return this.setStyle('display',display||this.retrieve('originalDisplay')||'block');},swapClass:function(remove,add){return this.removeClass(remove).addClass(add);}});var SK_StyleDropDowm=new Class({Implements:Options,isIe6:$defined(Browser.Engine.trident4),dropDownWidth:null,selectedValue:null,selectedIndex:undefined,isOpen:false,options:{onChange:false,selectControl:false,dropDownCSS:'',maxHeight:300,dropDownHeight:18,dropDownEncoding:'utf-8',getCloseHandlerElements:function(){return[$(document.body)];}},closeHandlerElements:[],optionsMap:[],onControlChange:$lambda(true),initialize:function(options){this.setOptions(options);this.dropdownControl=$(options.selectControl);if($type(options.onChange)=='function'){this.onControlChange=options.onChange;}
if(Browser.loaded){this.onLoaded();}else{window.addEvent('domready',this.onLoaded.bind(this));}},onLoaded:function(){this.bounds={showList:this.showList.bindWithEvent(this),hideList:this.hideList.bindWithEvent(this),keydown:function(event){if(event.key=='esc'){this.hideList(event);}}.bind(this)};this.buildInput();this.buildList();this.listContainer.disableSelection();this.inputContainer.disableSelection();this.closeHandlerElements=this.options.getCloseHandlerElements();},buildInput:function(){this.dropDownWidth=this.dropdownControl.getStyle("width").toInt();this.dropDownHeight=this.options.dropDownHeight;this.inputLabel=new Element('div',{'class':'cdc-input-label'}).setStyle('width',this.dropDownWidth-16).grab(new Element('span'));this.inputButton=new Element('div',{'class':'cdc-input-button'});this.inputContainer=new Element('div',{'class':'cdc-input'}).grab(this.inputLabel).grab(this.inputButton).inject(this.dropdownControl,'after').setStyles({width:this.dropDownWidth,height:this.dropDownHeight}).addEvents({'mouseover':function(){this.addClass('cdc-over');},'mouseout':function(){this.removeClass('cdc-over');},'click':this.bounds.showList});this.dropdownControl.hide();},buildList:function(){this.listContainer=new IFrame({src:'/Shared/Html/style_drop_down.html?encoding='+this.options.dropDownEncoding,'onload':function(IFrameDocument){this.IFrame=IFrameDocument;var styleElement=this.IFrame.newElement('style',{"rel":"stylesheet","type":"text/css"}).inject(this.IFrame.head);if(Browser.Engine.trident){styleElement.styleSheet.cssText=this.options.dropDownCSS;}else{styleElement.appendChild(document.createTextNode(this.options.dropDownCSS));}
this.IFrameWindow=this.IFrame.getWindow();this.list=this.IFrame.newElement('ul').inject(this.IFrameWindow.$(this.IFrame.body).disableSelection());$each($A(this.dropdownControl.options),function(option,index){this.optionsMap[index]=option.value;var list_element=this.IFrame.newElement('li',{id:'cdc-list-item_'+index}).grab(this.IFrame.newElement('span',{'class':option.value}).set('text',option.text)).addEvents({'mouseover':function(){this.addClass('cdc-over');},'mouseout':function(){this.removeClass('cdc-over');},'click':function(e){this.hideList(e);this.setValueByIndex(index);this.setDropdownControlValue(index);}.bind(this)}).inject(this.list);if(option.selected){this.setValueByIndex(index);}},this);this.setContainerStyles.delay(1000,this);if(!$defined(this.selectedIndex)){this.setValue(0);}}.bind(this),"frameborder":"0","class":"cdc-list-iframe","style":"left:-1000px;top:-1000px;position:absolute;z-index:1;border: 1px solid #B7B7A6"}).inject(this.inputContainer,'after');},fixDropDownColors:function(){var color_names=new Hash({'rgba(0, 0, 0, 0)':'transparent','aliceblue':'#f0f8ff','antiquewhite':'#faebd7','aqua':'#00ffff','aquamarine':'#7fffd4','azure':'#f0ffff','beige':'#f5f5dc','bisque':'#ffe4c4','black':'#000000','blanchedalmond':'#ffebcd','blue':'#0000ff','blueviolet':'#8a2be2','brown':'#a52a2a','burlywood':'#deb887','cadetblue':'#5f9ea0','chartreuse':'#7fff00','chocolate':'#d2691e','coral':'#ff7f50','cornflowerblue':'#6495ed','cornsilk':'#fff8dc','crimson':'#dc143c','cyan':'#00ffff','darkblue':'#00008b','darkcyan':'#008b8b','darkgoldenrod':'#b8860b','darkgray':'#a9a9a9','darkgrey':'#a9a9a9','darkgreen':'#006400','darkkhaki':'#bdb76b','darkmagenta':'#8b008b','darkolivegreen':'#556b2f','darkorange':'#ff8c00','darkorchid':'#9932cc','darkred':'#8b0000','darksalmon':'#e9967a','darkseagreen':'#8fbc8f','darkslateblue':'#483d8b','darkslategray':'#2f4f4f','darkslategrey':'#2f4f4f','darkturquoise':'#00ced1','darkviolet':'#9400d3','deeppink':'#ff1493','deepskyblue':'#00bfff','dimgray':'#696969','dimgrey':'#696969','dodgerblue':'#1e90ff','firebrick':'#b22222','floralwhite':'#fffaf0','forestgreen':'#228b22','fuchsia':'#ff00ff','gainsboro':'#dcdcdc','ghostwhite':'#f8f8ff','gold':'#ffd700','goldenrod':'#daa520','gray':'#808080','grey':'#808080','green':'#008000','greenyellow':'#adff2f','honeydew':'#f0fff0','hotpink':'#ff69b4','indianred':'#cd5c5c','indigo':'#4b0082','ivory':'#fffff0','khaki':'#f0e68c','lavender':'#e6e6fa','lavenderblush':'#fff0f5','lawngreen':'#7cfc00','lemonchiffon':'#fffacd','lightblue':'#add8e6','lightcoral':'#f08080','lightcyan':'#e0ffff','lightgoldenrodyellow':'#fafad2','lightgray':'#d3d3d3','lightgrey':'#d3d3d3','lightgreen':'#90ee90','lightpink':'#ffb6c1','lightsalmon':'#ffa07a','lightseagreen':'#20b2aa','lightskyblue':'#87cefa','lightslategray':'#778899','lightslategrey':'#778899','lightsteelblue':'#b0c4de','lightyellow':'#ffffe0','lime':'#00ff00','limegreen':'#32cd32','linen':'#faf0e6','magenta':'#ff00ff','maroon':'#800000','mediumaquamarine':'#66cdaa','mediumblue':'#0000cd','mediumorchid':'#ba55d3','mediumpurple':'#9370d8','mediumseagreen':'#3cb371','mediumslateblue':'#7b68ee','mediumspringgreen':'#00fa9a','mediumturquoise':'#48d1cc','mediumvioletred':'#c71585','midnightblue':'#191970','mintcream':'#f5fffa','mistyrose':'#ffe4e1','moccasin':'#ffe4b5','navajowhite':'#ffdead','navy':'#000080','oldlace':'#fdf5e6','olive':'#808000','olivedrab':'#6b8e23','orange':'#ffa500','orangered':'#ff4500','orchid':'#da70d6','palegoldenrod':'#eee8aa','palegreen':'#98fb98','paleturquoise':'#afeeee','palevioletred':'#d87093','papayawhip':'#ffefd5','peachpuff':'#ffdab9','peru':'#cd853f','pink':'#ffc0cb','plum':'#dda0dd','powderblue':'#b0e0e6','purple':'#800080','red':'#ff0000','rosybrown':'#bc8f8f','royalblue':'#4169e1','saddlebrown':'#8b4513','salmon':'#fa8072','sandybrown':'#f4a460','seagreen':'#2e8b57','seashell':'#fff5ee','sienna':'#a0522d','silver':'#c0c0c0','skyblue':'#87ceeb','slateblue':'#6a5acd','slategray':'#708090','slategrey':'#708090','snow':'#fffafa','springgreen':'#00ff7f','steelblue':'#4682b4','tan':'#d2b48c','teal':'#008080','thistle':'#d8bfd8','tomato':'#ff6347','turquoise':'#40e0d0','violet':'#ee82ee','wheat':'#f5deb3','white':'#ffffff','whitesmoke':'#f5f5f5','yellow':'#ffff00','yellowgreen':'#9acd32'});var body=this.IFrameWindow.$(this.IFrame.body);var background_color=body.getComputedStyle('background-color');if(background_color){if($defined(color_names[background_color])){background_color=color_names[background_color];}
this.list.getElements('span').each(function(span){var color_chanels,color=span.getComputedStyle('color');if($defined(color_names[color])){color=color_names[color];}
if(background_color!=color){return;}
var span_background_color=span.getComputedStyle('background-color');if($defined(color_names[span_background_color])){span_background_color=color_names[span_background_color];}
if(span_background_color!=background_color&&span_background_color!='transparent'){return;}
if(color.match(/rgb/))color_chanels=color.rgbToHex().hexToRgb(true);else if(color.match(/hsb/))color_chanels=color.hsbToRgb();else color_chanels=color.hexToRgb(true);var inverted_color=color_chanels.map(function(value){return 255-value;}).rgbToHex();span.setStyle('background-color',inverted_color);},this);}},setContainerStyles:function(){this.fixDropDownColors();var content_size=this.list.getSize();if(content_size.y>this.options.maxHeight){content_size.y=this.options.maxHeight;}
var container_position=this.inputContainer.getPosition();this.listContainer.setStyles({"position":"absolute","top":container_position.y+this.inputContainer.getHeight(),"left":container_position.x,"width":content_size.x+20,"height":content_size.y,"display":"none","left":"","top":""});},setDropdownControlValue:function(index){var option=this.dropdownControl.options[index];this.dropdownControl.value=option.value;this.onControlChange(option.value);},setValueByIndex:function(index){var option=this.dropdownControl.options[index];if(this.selectedIndex!=index){if($defined(this.selectedIndex)){this.IFrameWindow.$('cdc-list-item_'+this.selectedIndex).removeClass('cdc-selected');}
this.IFrameWindow.$('cdc-list-item_'+index).addClass('cdc-selected');this.selectedIndex=index;this.inputLabel.getElement('span').set('text',option.text);}},setValue:function(value){var index=0;for(var i=0;i<this.optionsMap.length;i++){if(this.optionsMap[i]==value){index=i;break;}}
this.setValueByIndex(index);},showList:function(e){e.stop();if(this.isOpen){this.hideList(e);}else{this.listContainer.show().focus();for(var i=0;i<this.closeHandlerElements.length;i++){this.closeHandlerElements[i].addEvent('click',this.bounds.hideList);this.closeHandlerElements[i].addEvent('keydown',this.bounds.keydown);}
this.isOpen=true;}
return false;},hideList:function(e){if($type(e)=='event'){e.stop();}
for(var i=0;i<this.closeHandlerElements.length;i++){this.closeHandlerElements[i].removeEvent('click',this.bounds.hideList);this.closeHandlerElements[i].removeEvent('keydown',this.bounds.keydown);}
this.listContainer.hide();this.IFrameWindow.$$('li[id^=cdc-list-item_]').removeClass('cdc-over');this.isOpen=false;}});


function ConfigureStyleFormatPlugin(oRTE){var MapClassNameShortcutKey={plain:49,heading1:50,heading2:51,alert:52,plainfixedwidth:53,plainsmall:54,plainlarge:55};var toolbar_items_handlers=[];var method=ConfigureStyleFormatPlugin__extendWithStyleDropDowm();if(typeof(method)=='function'){toolbar_items_handlers.push(method);}
oRTE.getPluginById('StyleFormat').configure({styles:arrSKCSSStyles,shortcuts_map:MapClassNameShortcutKey,toolbar_items_handlers:toolbar_items_handlers});}
function ConfigureStyleFormatPlugin__extendWithStyleDropDowm(){if(typeof(SK_StyleDropDowm)=='function'){return function(oStyleSelector){var oldStyleSelectorSetValue=oStyleSelector.setValue.bind(oStyleSelector);oStyleSelector.setValue=function(value){styleDropDowm.setValue(value);oldStyleSelectorSetValue(value);}
var sCSS='';for(var i=0;i<window.sPageStylesheet.length;i++){sCSS+='@import url("'+window.sPageStylesheet[i]+'");\n';}
sCSS+=window.sCSSEditorStyle;var charset=$try(function(){return SK.Singletons.env.get('encoding');},function(){return window.parent.SK.Singletons.env.get('encoding');},function(){return(Browser.Engine.trident)?document.charset:document.characterSet;});var styleDropDowm=new SK_StyleDropDowm({selectControl:oStyleSelector.id,onChange:oStyleSelector.executeAction,dropDownCSS:sCSS,dropDownEncoding:charset,getCloseHandlerElements:function(){var elements=[];var d=$(document);elements.push($(d.documentElement));return elements;}});};}}
function ConfigureLinkPlugin(oRTE){oRTE.getPluginById('SKLink').configure({obj_id:iObjID,node_id:iNodeID,form_name:RTE_SKI_FORM_NAME});}
function RTE_InitSKLinksUI(oRTE,sPluginName){var oSKLinksUI=oRTE.getPluginById(sPluginName).SKLinksUI;oSKLinksUI.Manager.Init();}
function ConfigureLimitAreaPlugin(rte){rte.getPluginById('LimitArea').configure({width:iWidth});}
function ConfigureFormPlugin(oRTE){var oSKFormPlugin=oRTE.getPluginById('SKForm');oSKFormPlugin.configure({obj_id:iObjID,node_id:iNodeID,form_name:RTE_SKI_FORM_NAME,export_content_callback:SetFormProps,onregister_change_callback:FormPlugin_ActionRegisteredChanged});oSKFormPlugin.configureAction('SendToEmail',{default_email:sLoggedUserEmail,template_holder_element_id:'template_holder'});oSKFormPlugin.configureAction('SubmitToFB',{fb_list:oForumBlogList,template_holder_element_id:'template_holder'});oSKFormPlugin.configureAction('SendConfirmEmail',{default_email:sLoggedUserEmail,template_holder_element_id:'template_holder'});oSKFormPlugin.configureAction('MailingList',{ml_list:oMailingLists});if(oDatabasesList!=null){oSKFormPlugin.configureAction('FormToDB',{databases:oDatabasesList,default_email:sLoggedUserEmail});}}
function InitializeFormPlugin(rte){var form_plugin=rte.getPluginById('SKForm');if(iNodeID>0){var form_props=$('property__FormProps').value;form_plugin.importProperties(form_props);}else{form_plugin.setDefaults();}
form_plugin.select();}
function FormPlugin_ActionRegisteredChanged(sActionName,bRegistered){}
function SetFormProps(form_props){$('property__FormProps').value=form_props;}
function Form_ShowAutoFillOptions(){Popup('autofill',"/Shared/StaticHtml/form_autofill_options.htm",540,320,1,1);}
function ConfigureRadioPlugin(rte){rte.getPluginById('Radio').configure({export_content_callback:SetRadioGroupProps});}
function InitializeRadioPlugin(rte){var radio_plugin=rte.getPluginById('Radio');if(iNodeID>0){var radio_group_props=$('property__RadioGroupProps').value;if(!radio_group_props){radio_plugin.setDefaults();}else{radio_plugin.setRadioGroups(radio_group_props);}}else{radio_plugin.setDefaults();}}
function SetRadioGroupProps(radio_group_props){$('property__RadioGroupProps').value=radio_group_props;}
function ConfigureSavePlugin(oRTE){oRTE.getPluginById('SKSave').configure({save_function:RteInstance.save.bind(RteInstance)});}
function ConfigurePastePlugin(oRTE,type){oRTE.getPluginById('SKPaste').configure({cleanup_type:type});}
function DisplaySpelling(sSpelledHTML,iMispelledCount,sRTEId){var oRTE=RTE_GetById(sRTEId);var oPlugin=oRTE.getPluginById('Spellchecker');oPlugin.spellingDone(sSpelledHTML,iMispelledCount);}
function ErrorSpelling(sRTEId){var oRTE=RTE_GetById(sRTEId);var oPlugin=oRTE.getPluginById('Spellchecker');oPlugin.errorSpelling();}
function DoSpellcheck(sHtmlContent,sRTEId,sPrefix,sAttrName){var oSpellcheckerFrame=document.getElementById('rte_spellchecker_frame').contentWindow;oSpellcheckerFrame.document.getElementById('html_string').value=sHtmlContent;oSpellcheckerFrame.document.getElementById('rte_id').value=sRTEId;oSpellcheckerFrame.document.getElementById('spellchecker').submit();}
function ConfigureSpellcheckerPlugin(oRTE){oRTE.getPluginById('Spellchecker').configure({spellcheck_function:DoSpellcheck});}
function ConfigureTablePlugin(oRTE){oRTE.getPluginById('Table').configure({change_color_function:ToggleColorWidget,recommended_colors:oTemplateColors[iTemplateKey]});}
function AddNewLocalImage(sImageSrc){var oForm=document.forms[RTE_SKI_FORM_NAME];oForm['rte_image_new_files'].value+=sImageSrc+',';}
function ConfigureImagePlugin(oRTE){oRTE.getPluginById('Image').configure({change_color_function:ToggleColorWidget,new_image_added_function:AddNewLocalImage,recommended_colors:oTemplateColors[iTemplateKey]});oRTE.getPluginById('Image').configure(oImageSharedConstants);var oForm=document.forms[RTE_SKI_FORM_NAME];oForm['rte_image_new_files'].value='';}
function AddNewLocalMedia(sImageSrc){var oForm=document.forms[RTE_SKI_FORM_NAME];oForm['rte_media_new_files'].value+=sImageSrc+',';}
function ConfigureMediaPlugin(oRTE){oRTE.getPluginById('Media').configure({change_color_function:ToggleColorWidget,new_media_added_function:AddNewLocalMedia,recommended_colors:oTemplateColors[iTemplateKey]});oRTE.getPluginById('Media').configure(oMediaSharedConstants);var oForm=document.forms[RTE_SKI_FORM_NAME];oForm['rte_media_new_files'].value='';}
function AddNewAnchor(){var oForm=document.forms[RTE_SKI_FORM_NAME];oForm['rte_new_anchor_added'].value=1;}
function ConfigureAnchorPlugin(oRTE){oRTE.getPluginById('Anchor').configure({new_anchor_added_function:AddNewAnchor});oRTE.getPluginById('Anchor').configure(oAnchorSharedConstants);var oForm=document.forms[RTE_SKI_FORM_NAME];oForm['rte_new_anchor_added'].value=0;}
function ConfigureSnippetPlugin(oRTE){oRTE.getPluginById('Snippet').configure(oSnippetSharedConstants);}
function ConfigureColorPickerPlugin(oRTE){oRTE.getPluginById('ColorPicker').configure({recommended_colors:oTemplateColors[iTemplateKey]});}
var oLastCleanupPlugin=null;var oLastUploadFilesPopupWnd=null;var oFilesPopupWndTimeout=null;function UploadLocalFiles(iLocalFilesCount,sLocalFilesSrc,oPlugin){if(!(oLastUploadFilesPopupWnd==null||oLastUploadFilesPopupWnd.closed)){alert('Please first close any opened popup windows with local files upload!');return;}
oLastCleanupPlugin=oPlugin;var sParamFilesSrc=sLocalFilesSrc;if(document.all){sParamFilesSrc=escape(sParamFilesSrc);}
var sUrl=sLocalFilesUploadFileSrc+'?files_cnt='+iLocalFilesCount+'&files_src='+sParamFilesSrc;var FILES_POPUP_WIDTH=490;var FILES_POPUP_HEIGHT=280;oLastUploadFilesPopupWnd=Popup('rte_local_files',sUrl,FILES_POPUP_WIDTH,FILES_POPUP_HEIGHT,true,false);oFilesPopupWndTimeout=window.setInterval('CheckLocalFilesPopup()',500);}
function CheckLocalFilesPopup(){if(oLastUploadFilesPopupWnd==null||oLastUploadFilesPopupWnd.closed){window.clearTimeout(oFilesPopupWndTimeout);LocalFilesUploaded();}}
function LocalFilesUploaded(sFilesSrc){window.clearTimeout(oFilesPopupWndTimeout);if(oLastCleanupPlugin==null){return;}
var sNewFilesStr='';if(isDefined(sFilesSrc)){var sSeparator='|';sFilesSrc=unescape(sFilesSrc);sFilesSrc=sFilesSrc.substr(0,sFilesSrc.length-1);var arrReturnFilesSrc=sFilesSrc.split(sSeparator);for(var i=0;i<arrReturnFilesSrc.length;i++){var sFileSrc=arrReturnFilesSrc[i];AddNewLocalImage(sFileSrc);sNewFilesStr+=sFileSrc+sSeparator;}}
oLastCleanupPlugin.localFilesUploaded(sNewFilesStr);oLastCleanupPlugin=null;}
function ConfigureCleanupPlugin(oRTE){oRTE.getPluginById('Cleanup').configure({upload_local_files_function:UploadLocalFiles});}
function ConfigureHandleErrorPlugin(oRTE){oRTE.getPluginById('HandleError').configure({external_report_function:RTE_ReportError});}
function RTE_ReportError(oRTE,sErrorMessage){if(isUndefined(oRTE)){var oForm=document.forms[RTE_SKI_FORM_NAME];if(oForm!=null){var oRTEIdHolderField=oForm['rte_id'];if(oRTEIdHolderField!=null){oRTE=RTE_GetById(oRTEIdHolderField.value);}}}
if(isDefined(oRTE)){var sLogs=oRTE.getLogMessages();sErrorMessage+='\n\n RTE Logs:['+GetSKEnvironmentString()+'\n'+sLogs+']';}
if(RTE_DEBUG_MODE){alert(sErrorMessage);}
var oLogFrame=document.getElementById('rte_log_frame');if(oLogFrame==null){alert('No Log frame found ....');return;}
oLogFrame.contentWindow.LogError(sErrorMessage);}
function RTE_LogActions(oRTE){var sLogs=oRTE.getLogMessages();var oLogFrame=document.getElementById('rte_log_frame');if(oLogFrame==null){alert('No Log frame found ....');return;}
oLogFrame.contentWindow.LogAction(GetSKEnvironmentString()+'\n'+sLogs);}
function GetSKEnvironmentString(){var sSKENV='SK Environment:\n';sSKENV+='NodeID => ['+iNodeID+']\n';sSKENV+='ObjID => ['+iObjID+']\n';sSKENV+='TmplKey => ['+iTemplateKey+']\n';sSKENV+='CSKey => ['+iColorSchemeKey+']\n';sSKENV+='RTE_DEBUG_MODE => ['+RTE_DEBUG_MODE+']\n';return sSKENV;}
function RTESetBrowserNotSupported(){document.getElementById('rte_holder_id').innerHTML=document.getElementById('rte_env_not_supported').innerHTML;}
oColorWidgets={};oCurrentColorWidget=null;function ToggleColorWidget(oColorSelect){var id=oColorSelect.data.parent;var colors=oColorSelect.data.colors;var parent=document.getElementById(id);var widget=null;if(oColorWidgets[id]){widget=oColorWidgets[id];widget.attach(parent);if(widget.root)widget.root.style.display='block';}else{widget=new ColorWidget(parent,colors,document.getElementById('color_widget_template').innerHTML,128);widget.setManualColor(oColorSelect.getColor());widget.ontoggle=function(extended){CoverElements(oColorSelect.plugin,oColorSelect.data.cover,extended?'extended':'basic');}
widget.onselect=function(color){ToggleColorWidget(oColorSelect);oColorSelect.setNewColor(color);}
widget.oncancel=function(){ToggleColorWidget(oColorSelect);}
oColorWidgets[id]=widget;var clickOutside=function(e){var target=(e.target?e.target:e.srcElement);for(var curr=target,inside=false;curr;curr=curr.parentNode){if(curr==widget.root){inside=true;break;}}
if(!inside&&oCurrentColorWidget&&oCurrentColorWidget==widget){ToggleColorWidget(oColorSelect);}}
var body=document.body;if(body.addEventListener){body.addEventListener('click',clickOutside,false);}else{body.attachEvent('onclick',clickOutside);}}
if(parent.style.visibility=='visible'){parent.style.visibility='hidden';CoverElements(oColorSelect.plugin,oColorSelect.data.cover,'hidden');oCurrentColorWidget=null;}else{CoverElements(oColorSelect.plugin,oColorSelect.data.cover,'basic');if(oCurrentColorWidget){oCurrentColorWidget.oncancel();}
oCurrentColorWidget=widget;parent.style.visibility='visible';if(widget.extended)widget.toggle();}}
function CoverElements(plugin,config,mode){var elems=config?config[mode]:null;if(elems){for(var name in elems){var elem=document.getElementById(name)||document.getElementById(plugin.propertyPanel.getPropElementId(name));if(elem){elem.style.visibility=(elems[name])?'visible':'hidden';}}}}
function ResizeRTEContentArea(height){var iHeight=$pick(height,window.getHeight());var HEIGHT_OF_EDIT_TMPL=77;var MINIMAL_CONTENT_HEIGHT=200;if(iHeight>HEIGHT_OF_EDIT_TMPL){var iContentHeight=iHeight-HEIGHT_OF_EDIT_TMPL;if(iContentHeight<MINIMAL_CONTENT_HEIGHT){iContentHeight=MINIMAL_CONTENT_HEIGHT;}
var oForm=document.forms[RTE_SKI_FORM_NAME];var oRTE=RTE_GetById(oForm['rte_id'].value);oRTE.setContentAreaDimensions(null,iContentHeight);oRTE.setPropertyPanelDimensions(null,iContentHeight);}
document.body.scroll='no';}
function SetRTELogLevel(oRTE){var iLogLevel=RTE_CONST.LL_ACTION;if(RTE_DEBUG_MODE){iLogLevel=RTE_CONST.LL_DEBUG;}
oRTE.configure({log_level:iLogLevel});}
function ConfigureMergeTagsPlugin(rte){rte.getPluginById('MergeTags').configure({attribute_name:FIELD_CONST.ATTRIBUTE_FIELD_ID,param_type:FORM_ACTIONS_CONST.TMPL_FIELD_PARAM_TYPE,label_wrapper:FORM_ACTIONS_CONST.TMPL_FIELD_NAME_PREFIX});}


function Popup(name,url,width,height,scrollbars,resizable,left,top,menubar,toolbar,loc_bar,statusbar,directories){var wnd;var xcen,ycen;var nn=document.layers?1:0;width=width?width:300;height=height?height:300;xcen=(screen.availWidth-width)/2;ycen=(screen.availHeight-height)/2;directories=directories?',directories=yes':',directories=no';loc_bar=loc_bar?',location=yes':',location=no';statusbar=statusbar?',status=yes':',status=no';toolbar=toolbar?',toolbar=yes':',toolbar=no';menubar=menubar?',menubar=yes':',menubar=no';resizable=resizable?',resizable=yes':',resizable=no';scrollbars=scrollbars?',scrollbars=yes':',scrollbars=no';width=width?('width='+width):'width=300';height=height?(',height='+height):',height=300';left=left?((nn?',screenX=':',left=')+left):((nn?',screenX=':',left=')+xcen);top=top?((nn?',screenY=':',top=')+top):((nn?',screenY=':',top=')+ycen);document.body.style.cursor='wait';wnd=window.open(url,name,width+height+scrollbars+resizable+
left+top+menubar+toolbar+loc_bar+statusbar+
directories);document.body.style.cursor='default';if(wnd!=null){wnd.focus();}
return wnd;}


Element.implement({setValue:function(value){var method=this.get('tag').toLowerCase();if(Element.Serializers[method]){Element.Serializers[method](this,$pick(value,''));}
return this;},getValue:function(){var method=this.get('tag').toLowerCase();if(Element.Serializers[method]){return Element.Serializers[method](this);}
return null;}});Element.Serializers={input:function(element,value){switch(element.get('type').toLowerCase()){case'checkbox':case'radio':return Element.Serializers.inputSelector(element,value);default:return Element.Serializers.textarea(element,value);}},inputSelector:function(element,value){if($defined(value)){element.checked=(value==='0'||value==='false')?0:!!value;}else{return element.checked?element.value:0;}},textarea:function(element,value){if($defined(value)){element.value=value;}else{return element.value;}},select:function(element,value){if(!$defined(value)){if(element.type=='select-one'){return this.selectOne(element);}else{return this.selectMany(element);}}else{var opt,current_value;var single=$type(value)!='array';for(var i=0,length=element.length;i<length;i++){opt=element.options[i];current_value=this.optionValue(opt);if(single){if(current_value==value){opt.selected=true;break;}}else{opt.selected=value.contains(current_value);}}}},selectOne:function(element){var index=element.selectedIndex;return index>=0?this.optionValue(element.options[index]):'';},selectMany:function(element){var values=[];var length=element.length;for(var i=0;i<length;i++){var opt=element.options[i];if(opt.selected){values.push(this.optionValue(opt));}}
return values;},optionValue:function(opt){return $(opt).getProperty('value')?opt.value:opt.text;}};


var Tips=new Class({Implements:[Events,Options],options:{onShow:function(tip){tip.setStyle('visibility','visible');},onHide:function(tip){tip.setStyle('visibility','hidden');},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var params=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(params.options||null);this.tip=new Element('div').inject(document.body);if(this.options.className)this.tip.addClass(this.options.className);var top=new Element('div',{'class':'tip-top'}).inject(this.tip);this.container=new Element('div',{'class':'tip'}).inject(this.tip);var bottom=new Element('div',{'class':'tip-bottom'}).inject(this.tip);this.tip.setStyles({position:'absolute',top:0,left:0,visibility:'hidden'});if(params.elements)this.attach(params.elements);},attach:function(elements){$$(elements).each(function(element){var title=element.retrieve('tip:title',element.get('title'));var text=element.retrieve('tip:text',element.get('rel')||element.get('href'));var enter=element.retrieve('tip:enter',this.elementEnter.bindWithEvent(this,element));var leave=element.retrieve('tip:leave',this.elementLeave.bindWithEvent(this,element));element.addEvents({mouseenter:enter,mouseleave:leave});if(!this.options.fixed){var move=element.retrieve('tip:move',this.elementMove.bindWithEvent(this,element));element.addEvent('mousemove',move);}
element.store('tip:native',element.get('title'));element.erase('title');},this);return this;},detach:function(elements){$$(elements).each(function(element){element.removeEvent('mouseenter',element.retrieve('tip:enter')||$empty);element.removeEvent('mouseleave',element.retrieve('tip:leave')||$empty);element.removeEvent('mousemove',element.retrieve('tip:move')||$empty);element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');var original=element.retrieve('tip:native');if(original)element.set('title',original);});return this;},elementEnter:function(event,element){$A(this.container.childNodes).each(Element.dispose);var title=element.retrieve('tip:title');if(title){this.titleElement=new Element('div',{'class':'tip-title'}).inject(this.container);this.fill(this.titleElement,title);}
var text=element.retrieve('tip:text');if(text){this.textElement=new Element('div',{'class':'tip-text'}).inject(this.container);this.fill(this.textElement,text);}
this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);this.position((!this.options.fixed)?event:{page:element.getPosition()});},elementLeave:function(event){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);},elementMove:function(event){this.position(event);},position:function(event){var size=window.getSize(),scroll=window.getScroll();var tip={x:this.tip.offsetWidth,y:this.tip.offsetHeight};var props={x:'left',y:'top'};for(var z in props){var pos=event.page[z]+this.options.offsets[z];if((pos+tip[z]-scroll[z])>size[z])pos=event.page[z]-this.options.offsets[z]-tip[z];this.tip.setStyle(props[z],pos);}},fill:function(element,contents){(typeof contents=='string')?element.set('html',contents):element.adopt(contents);},show:function(){this.fireEvent('show',this.tip);},hide:function(){this.fireEvent('hide',this.tip);}});


var RTETips=new Class({Extends:Tips,elements:null,initialize:function(elements,options){this.parent.apply(this,arguments);this.elements=$$(elements);},restoreOriginal:function(){this.detach(this.elements);},destroy:function(){this.restoreOriginal();$$('.'+this.options.className).destroy();}})


var RTE=new Class({initialize:function(id){if(isUndefined(id)){throw new IllegalArgumentException('No id passed!');}
this.id=id;this.selection=null;this.oEventManager=new RTEEventManager(this);this.iStatusMsgTimerId=null;this.oShownPropertyPanel=null;this.oHelpers=new RTEHelpers;this.config={};this.requiredTags=[];this.watchedTags=[];this.shortcuts=[];this.editor={domId:RTE_CONST.EDITOR_PREFIX+this.id,document:null,window:null}
this.lastSelectedElement=null;this.plugins={};this.toolbar=new RTEToolbar(RTE_CONST.TOOLBAR_PREFIX+this.id);this.tidy=new Tidy();this.sLog='';this.isExportContentRunning=false;this.iTimeoutToShowHidePropPanel=1;this.iTimeoutToShowHidePropPanelId=null;this.isPPanelAvailForHide=false;this.bPreventFFDefaultShortcut=false;this.oMsgIcons={};this.readConfig();this.registerCoreEvents();},setContent:function(sContent){if(isUndefined(sContent)){throw new IllegalArgumentException('No content passed!');}
this.setInternalContent(sContent);this.eventManager().fireEvent(RTE_CONST.EVENT_NEW_CONTENT_SET);},getInternalContent:function(){return this.rootElement().innerHTML;},setInternalContent:function(sContent){if(isUndefined(sContent)){throw new IllegalArgumentException('No content passed!');}
this.LogMessage('setInternalContent','.');this.LogMessage('setInternalContent','Setting Content ['+sContent+']',RTE_CONST.LL_DEBUG);this.rootElement().innerHTML=sContent;},exportContent:function(){var sIdent='exportContent';this.LogMessage(sIdent,'.');if(this.isExportContentRunning){this.LogMessage(sIdent,'Another export still running. Skipping this one.');return{isOK:false,html:''};}
var sInternalContent=this.getInternalContent();this.LogMessage(sIdent,'Got internal content ['+sInternalContent+']',RTE_CONST.LL_ACTION);this.isExportContentRunning=true;var bEventHandledOK=this.eventManager().fireEvent(RTE_CONST.EVENT_EXPORT_CONTENT);if(!bEventHandledOK){this.LogMessage(sIdent,'Export Content Event canceled.');this.isExportContentRunning=false;return{isOK:false,html:''};}
var sInternalContent=this.getInternalContent();var oHTMLElement=document.createElement('SPAN');this.LogMessage(sIdent,'Got internal content after export event ['+sInternalContent+']',RTE_CONST.LL_ACTION);oHTMLElement.innerHTML=sInternalContent;this.LogMessage(sIdent,'Start cleanup of export content.');for(var i in this.plugins){this.plugins[i].cleanupContent(oHTMLElement);}
this.isExportContentRunning=false;this.LogMessage(sIdent,'Done.');this.LogMessage(sIdent,'Exported content is ['+oHTMLElement.innerHTML+']',RTE_CONST.LL_ACTION);return{isOK:true,html:oHTMLElement.innerHTML};},finishEdit:function(){this.eventManager().fireEvent(RTE_CONST.EVENT_FINISH_EDIT);},configure:function(oConfig){if(isUndefined(oConfig)){throw new IllegalArgumentException('No Config passed!');}
this.LogMessage('configure','Configuring['+JSON.encode(oConfig)+']',RTE_CONST.LL_DEBUG);for(var i in oConfig){this.config[i]=oConfig[i];}},instantiate:function(){var sIdent='instantiate';this.LogMessage(sIdent,'.');this.init();this.print();this.initToolbarItems();this.initEditor();assert('No editor window set!',(!isNull(this.editor.window)))
this.selection=new RTESelection(this.editor.window);this.initShortcuts();this.initStatusMessages();assert('No editor document set!',(!isNull(this.editor.document)))
this.eventManager().init(this.editor.document);this.focus();if(!Browser.Engine.trident){this.setInternalContent('<p>&nbsp;</p>');this.selectionRange().moveToElementText(this.rootElement());}
this.eventManager().fireEvent(RTE_CONST.EVENT_RTE_INSTANTIATED);this.LogMessage(sIdent,'Done.');},execCommand:function(sCommand,bDisplayUserInterface,vValue){this.LogMessage('execCommand','Executing Command['+sCommand+'] with Value['+vValue+']');if(isUndefined(sCommand)||sCommand==''){throw new IllegalArgumentException('No command passed!');}
this.focus();assert('No editor document set!',(!isNull(this.editor.document)))
try{var bReturnCode=this.editor.document.execCommand(sCommand,bDisplayUserInterface,vValue);}catch(e){throw new RuntimeException('Error executing command ['+sCommand+'], with value ['+vValue+']. Error thrown:['+e+']!');}
this.eventManager().fireEvent(RTE_CONST.EVENT_SELECTION_CHANGED);return bReturnCode;},focus:function(){assert('No editor window set!',(!isNull(this.editor.window)));this.editor.window.focus();},queryCommandValue:function(sCommand){if(isUndefined(sCommand)||sCommand==''){throw new IllegalArgumentException('No command passed!');}
assert('No editor document set!',(!isNull(this.editor.document)))
var vRes=this.editor.document.queryCommandValue(sCommand)
this.LogMessage('queryCommandValue','Quering Command['+sCommand+'], got Result ['+vRes+']',RTE_CONST.LL_DEBUG);return vRes;},queryCommandState:function(sCommand){if(isUndefined(sCommand)||sCommand==''){throw new IllegalArgumentException('No command passed!');}
assert('No editor document set!',(!isNull(this.editor.document)))
return this.editor.document.queryCommandState(sCommand);},queryCommandSupported:function(sCommand){if(isUndefined(sCommand)||sCommand==''){throw new IllegalArgumentException('No command passed!');}
assert('No editor document set!',(!isNull(this.editor.document)))
return this.editor.document.queryCommandSupported(sCommand);},setContentAreaDimensions:function(sWidth,sHeight){var oContentAreaContainer=$(this.editor.domId);if(sWidth){oContentAreaContainer.width=sWidth;}
if(sHeight){oContentAreaContainer.height=sHeight;}
this.eventManager().fireEvent(RTE_CONST.EVENT_RTE_CONTENT_RESIZED);},setPropertyPanelDimensions:function(sWidth,sHeight){var oPropertyPanelContainer=$(RTE_CONST.PROP_PANEL_LAYOUT_AREA_PREFIX+this.id);if(!oPropertyPanelContainer){return;}
if(sWidth){$(oPropertyPanelContainer).setStyle('width',parseInt(sWidth)+'px');}
if(sHeight){$(oPropertyPanelContainer).setStyle('height',parseInt(sHeight)+'px');}},getContentAreaDimensions:function(){var oContentAreaContainer=$(this.editor.domId);var sWidth=(oContentAreaContainer.width)?oContentAreaContainer.width:this.config.editor_width;var sHeight=(oContentAreaContainer.height)?oContentAreaContainer.height:this.config.editor_height;return{width:sWidth,height:sHeight};},hasPropertyPanelArea:function(){if(!document.getElementById(RTE_CONST.PROP_PANEL_TITLE_AREA_PREFIX+this.id)){return false;}
if(!document.getElementById(RTE_CONST.PROP_PANEL_LAYOUT_AREA_PREFIX+this.id)){return false;}
return true;},canShowPropertyPanel:function(){if(!this.hasPropertyPanelArea()){return false;}
if(this.hasPropertyPanelShown()&&!this.isPPanelAvailForHide){return false;}
return true;},hasPropertyPanelShown:function(){if(this.oShownPropertyPanel==null){return false;}
return true;},getShownPropertyPanel:function(){return this.oShownPropertyPanel;},isPropertyPanelShown:function(oPropPanel){return(this.oShownPropertyPanel!=null&&this.oShownPropertyPanel==oPropPanel);},showPropertyPanel:function(oPropertyPanel){if(isUndefined(oPropertyPanel)){throw new IllegalArgumentException('No prop panel object passed!');}
if(!this.canShowPropertyPanel()){throw new RuntimeException('Can not show property panel ['+oPropertyPanel.getTitle()+']!');}
this.LogMessage('showPropertyPanel','Showing property panel ['+oPropertyPanel.getTitle()+']');$clear(this.iTimeoutToShowHidePropPanelId);if(this.oShownPropertyPanel!=oPropertyPanel){this.oShownPropertyPanel=oPropertyPanel;$(RTE_CONST.PROP_PANEL_TITLE_AREA_PREFIX+this.id).innerHTML=oPropertyPanel.getTitle();$(RTE_CONST.PROP_PANEL_LAYOUT_AREA_PREFIX+this.id).innerHTML=oPropertyPanel.composeLayout();}
this.LogMessage('showPropertyPanel','Done. Showing property panel');this.oShownPropertyPanel.show();this.initTooltips();},hidePropertyPanel:function(bForcePinned){if(!this.hasPropertyPanelArea()||!this.oShownPropertyPanel){return true;}
this.LogMessage('hidePropertyPanel','Hide property panel ['+this.oShownPropertyPanel.getTitle()+']');this.oShownPropertyPanel.hide();if(this.oShownPropertyPanel.isPinned()&&!bForcePinned){return false;}
$(RTE_CONST.PROP_PANEL_TITLE_AREA_PREFIX+this.id).innerHTML='';if(Browser.Engine.trident){$(RTE_CONST.PROP_PANEL_LAYOUT_AREA_PREFIX+this.id).innerHTML='';}else{this.iTimeoutToShowHidePropPanelId=(function(){$(RTE_CONST.PROP_PANEL_LAYOUT_AREA_PREFIX+this.id).innerHTML='';}).delay(this.iTimeoutToShowHidePropPanel,this);}
this.oShownPropertyPanel=null;return true;},insertHTML:function(sHTML){if(isUndefined(sHTML)){throw new IllegalArgumentException('No html string passed!');}
var sIdent='insertHTML';this.LogMessage(sIdent,'.');this.LogMessage(sIdent,'Inserting HTML ['+sHTML+']',RTE_CONST.LL_DEBUG);this.focus();this.eventManager().fireEvent(RTE_CONST.EVENT_BEFORE_INSERT);if(this.selection.isControl()){this.LogMessage(sIdent,'Control Selection detected.');if(Browser.Engine.gecko){var oControlElement=this.currentElement();oControlElement.destroy();}else if(Browser.Engine.trident){this.execCommand(RTE_CONST.COMMAND_DELETE);}}
var oSelectionRange=this.selectionRange();if(oSelectionRange){if(Browser.Engine.trident){try{oSelectionRange.domRange.pasteHTML(sHTML);}catch(e){oSelectionRange.domRange.collapse();oSelectionRange.domRange.pasteHTML(sHTML);}}else{var oRng=oSelectionRange.domRange;oRng.deleteContents();oRng.insertNode(oRng.createContextualFragment(sHTML));}}
this.LogMessage(sIdent,'Done.');},filterHTML:function(sHTML){if(isUndefined(sHTML)){throw new IllegalArgumentException('No html string passed!');}
return sHTML;this.LogMessage('filterHTML','.');this.LogMessage('filterHTML','HTML ['+sHTML+']',RTE_CONST.LL_DEBUG);return this.tidy.filter(sHTML);},processPastedContent:function(oHTMLElement){this.LogMessage('processPastedContent','.');oHTMLElement.innerHTML=this.filterHTML(oHTMLElement.innerHTML);this.LogMessage('processPastedContent','Content before processing ['+oHTMLElement.innerHTML+']');for(var i in this.plugins){this.plugins[i].processPastedContent(oHTMLElement);}
this.LogMessage('processPastedContent','Content after processing ['+oHTMLElement.innerHTML+']');return oHTMLElement.innerHTML;},addTagRule:function(sTagName,fRule){if(isUndefined(sTagName)){throw new IllegalArgumentException('No tag name passed!');}
if(isUndefined(fRule)){throw new IllegalArgumentException('No rule function pointer passed!');}
this.LogMessage('addTagRule','Adding rule for tag ['+sTagName+']',RTE_CONST.LL_DEBUG);this.tidy.addTagRule(sTagName,fRule);},rootElement:function(){if(isNull(this.editor.document)){throw new IllegalArgumentException('Editor document not set!');}
return $(this.editor.document.body);},eventManager:function(){return this.oEventManager;},currentElement:function(){return $(this.selectionRange().currentElement());},getLanguage:function(){return this.config.language;},setLanguage:function(sLanguage){if(isUndefined(sLanguage)||sLanguage==''){throw new IllegalArgumentException('No language passed!');}
this.LogMessage('setLanguage','Setting language to ['+sLanguage+']');this.config.language=sLanguage;},selectionRange:function(){var range=null;try{range=this.selection.createRange();}catch(ex){}
return range;},searchElement:function(sTagName,oFromElement,iMaxIteration){if(!oFromElement){return null;}
if(isUndefined(sTagName)||sTagName==''){throw new IllegalArgumentException('No tag passed!');}
if(isUndefined(oFromElement)){throw new IllegalArgumentException('No from element passed!');}
var oElement=oFromElement;var oRootElement=this.rootElement();if(!iMaxIteration){iMaxIteration=1000000;}
var iCurrentIteration=0;while(oElement.parentNode&&oElement.tagName!=sTagName&&oElement!=oRootElement&&iCurrentIteration<=iMaxIteration){oElement=oElement.parentNode;iCurrentIteration++;}
if(oElement.tagName==sTagName){return $(oElement);}
return null;},createAndRegisterPlugin:function(sPluginName){this.LogMessage('createAndRegisterPlugin','Registering plugin ['+sPluginName+']',RTE_CONST.LL_DEBUG);if(isUndefined(sPluginName)||sPluginName==''){throw new IllegalArgumentException('No plugin name passed!');}
var oPlugin=this.createPlugin(sPluginName);this.registerPlugin(oPlugin);return oPlugin;},getPluginById:function(sPluginId){if(isUndefined(sPluginId)||sPluginId==''){throw new IllegalArgumentException('No plugin id passed!');}
if(isUndefined(this.plugins[sPluginId])){return null;}
return this.plugins[sPluginId];},addShortcut:function(iKeyCode,iHelpKey,oObject,sMethod,bSkipPreventDefault){if(isUndefined(iKeyCode)){throw new IllegalArgumentException('No key passed!');}
if(isUndefined(oObject)){throw new IllegalArgumentException('No object passed!');}
if(isUndefined(sMethod)){throw new IllegalArgumentException('No method passed!');}
if(isUndefined(bSkipPreventDefault)){bSkipPreventDefault=false;}
var iType=RTE_CONST.PLAIN_SHORTCUT;if(iHelpKey!=null){if(iHelpKey==RTE_CONST.HELP_KEY_CTRL){iType=RTE_CONST.CTRL_KEY_SHORTCUT;}else if(iHelpKey==RTE_CONST.HELP_KEY_ALT){iType=RTE_CONST.ALT_KEY_SHORTCUT;}else if(iHelpKey==RTE_CONST.HELP_KEY_SHIFT){iType=RTE_CONST.SHIFT_KEY_SHORTCUT;}}
this.LogMessage('addShortcut','Adding shortcut. Type['+iType+'], KeyCode['+iKeyCode+']',RTE_CONST.LL_DEBUG);if(isUndefined(this.shortcuts[iType])){this.shortcuts[iType]=[];}
if($defined(this.shortcuts[iType][iKeyCode])){throw new RuntimeException('Shortcut already registered. Key['+iKeyCode+'], Type['+iType+'], Method['+this.shortcuts[iType][iKeyCode].method+']');}
this.shortcuts[iType][iKeyCode]={obj:oObject,method:sMethod,skipPreventDefault:bSkipPreventDefault};},addRequiredTag:function(sTagName,arrAttributes){this.LogMessage('addRequiredTag','Adding required tag. TagName['+sTagName+'], Attributes['+JSON.encode(arrAttributes)+']',RTE_CONST.LL_DEBUG);if(isUndefined(sTagName)){throw new IllegalArgumentException('No tag name passed!');}
this.tidy.addAllowedTag(sTagName,arrAttributes);},addTagToRemoveRecursive:function(sTagName){this.LogMessage('addTagToRemoveRecursive','TagName['+sTagName+']',RTE_CONST.LL_DEBUG);if(isUndefined(sTagName)){throw new IllegalArgumentException('No tag name passed!');}
this.tidy.addTagToRemoveRecursive(sTagName);},addWatchTag:function(sTagName,arrAttributes,oPlugin){this.LogMessage('addWatchTag','TagName['+sTagName+'], Attributes['+JSON.encode(arrAttributes)+'], Plugin ['+oPlugin.id+']',RTE_CONST.LL_DEBUG);if(isUndefined(sTagName)||isUndefined(arrAttributes)||isUndefined(oPlugin)){throw new IllegalArgumentException('No tag definition object passed!');}
if(isUndefined(this.watchedTags[sTagName])){this.watchedTags[sTagName]={plugin:null,attributes:[]};}
if(arrAttributes.length==0){if(!isNull(this.watchedTags[sTagName].plugin)){throw new RuntimeException('There is already a default plugin for this tag['
+sTagName+']!');}
this.watchedTags[sTagName].plugin=oPlugin;}else{for(var i=0;i<arrAttributes.length;i++){var sAttrName=arrAttributes[i].name;var sAttrValue=arrAttributes[i].value;if(isUndefined(this.watchedTags[sTagName].attributes[sAttrName])){this.watchedTags[sTagName].attributes[sAttrName]=[];}
if($defined(this.watchedTags[sTagName].attributes[sAttrName][sAttrValue])){throw new RuntimeException('There is already registered plugin for this attr value!'+'tagName  ['+sTagName+'],'+'attrName ['+sAttrName+']'+'attrValue['+sAttrValue+']');}else{this.watchedTags[sTagName].attributes[sAttrName][sAttrValue]={};}
this.watchedTags[sTagName].attributes[sAttrName][sAttrValue].plugin=oPlugin;}}},helpers:function(){return this.oHelpers;},addToolbarItem:function(oToolbarItem){if(isUndefined(oToolbarItem)){throw new IllegalArgumentException('No ToolbarItem object passed!');}
this.toolbar.addItem(oToolbarItem);},getElementById:function(sElementID){if(isUndefined(sElementID)){throw new IllegalArgumentException('No Element ID passed!');}
assert('Editor document not set!',(!isNull(this.editor.document)));return $(this.editor.document.getElementById(sElementID));},editorWindow:function(){return this.editor.window;},editorDocument:function(){return this.editor.document;},editorIframe:function(){return $(this.editor.domId);},editorContainer:function(){return this.editorIframe().parentNode;},bottomRightArea:function(){return $(RTE_CONST.BOTTOM_RIGHT_AREA_PREFIX+this.id);},handleEvent:function(e){var win=this.editorWindow();if(Browser.Engine.trident){e=win.event||win.parent.event;}
this.LogMessage('handleEvent','Handle event ['+e.type+']',RTE_CONST.LL_DEBUG);this.eventManager().handleEvent(e);},setToolbarLayout:function(sLayout){if(isUndefined(sLayout)||sLayout==''){throw new IllegalArgumentException('No toolbar layout passed!');}
this.toolbar.setLayoutTemplate(sLayout);},checkSelection:function(){var oCurrentElement=this.currentElement();this.LogMessage('checkSelection','.',RTE_CONST.LL_DEBUG);if(this.lastSelectedElement==oCurrentElement){this.LogMessage('checkSelection','Return',RTE_CONST.LL_DEBUG);return;}
this.eventManager().fireEvent(RTE_CONST.EVENT_SELECTION_CHANGED);},handleMouseUp:function(oEvent){this.LogMessage('handleMouseUp','.',RTE_CONST.LL_DEBUG);if(!Browser.Engine.trident&&oEvent.target.tagName=='IMG'){this.selectionRange().moveToElementText(oEvent.target);this.LogMessage('handleMouseUp','Moved to image.Current Tag is ['+this.currentElement().tagName+']',RTE_CONST.LL_DEBUG);}
this.LogMessage('handleMouseUp','Current Tag ['+this.currentElement().tagName+']',RTE_CONST.LL_DEBUG);this.checkSelection(oEvent);},handleShortcut:function(oEvent){var iType=RTE_CONST.PLAIN_SHORTCUT;if(this.isModifierKeyOn()){iType=RTE_CONST.CTRL_KEY_SHORTCUT;}else if(oEvent.altKey){iType=RTE_CONST.ALT_KEY_SHORTCUT;}else if(oEvent.shiftKey){iType=RTE_CONST.SHIFT_KEY_SHORTCUT;}
this.bPreventFFDefaultShortcut=false;var iKeyCode=oEvent.keyCode;if($defined(this.shortcuts[iType])&&$defined(this.shortcuts[iType][iKeyCode])){this.LogMessage('handleShortcut','Type ['+iType+'], KeyCode['+iKeyCode+']');var oShortcut=this.shortcuts[iType][iKeyCode];oShortcut.obj[oShortcut.method](oEvent);if(!this.shortcuts[iType][iKeyCode].skipPreventDefault){this.bPreventFFDefaultShortcut=true;this.eventManager().cancelEventBubbling(oEvent);}}},onKeyUp:function(event){if((Browser.Platform.mac&&this.isCmdKey(event))||event.ctrlKey){this.deactivateModifierKey();}},onKeyDown:function(event){if((Browser.Platform.mac&&this.isCmdKey(event))||event.ctrlKey){this.activateModifierKey();}},isModifierKeyOn:function(){return this.modifier_key;},activateModifierKey:function(){this.modifier_key=true;},deactivateModifierKey:function(){this.modifier_key=false;},isCmdKey:function(event){var code=event.keyCode;return(Browser.Engine.gecko&&code==224||Browser.Engine.webkit&&(code==91||code==93)||code==17);},onBeforeDeactivate:function(){this.selection.saveSelection();},onBeforeInsert:function(){this.selection.restoreSelection();},preventDefaultShortcutFF:function(oEvent){if(this.bPreventFFDefaultShortcut){this.eventManager().cancelEventBubbling(oEvent);}},handleSelectionChanged:function(){this.isPPanelAvailForHide=(this.oShownPropertyPanel==null||!this.oShownPropertyPanel.isPinned());this.setSelectedElement();var bPluginWithPPanelFound=this.identifyPlugin();if(!bPluginWithPPanelFound){this.hidePropertyPanel();}},setSelectedElement:function(){var current=this.currentElement();if(!current){return;}
this.LogMessage('setSelectedElement','Setting to ['+this.currentElement().tagName+']',RTE_CONST.LL_DEBUG)
this.lastSelectedElement=this.currentElement();},selectedElement:function(){return this.lastSelectedElement;},baseDir:function(){return this.config.baseDir;},hideToolbar:function(){this.toolbar.hide();},showToolbar:function(){this.toolbar.show();},isToolbarShown:function(){return this.toolbar.isShown();},hasStatusMessagesArea:function(){if(!document.getElementById(RTE_CONST.MESSAGES_AREA_PREFIX+this.id)){return false;}
return true;},initTooltips:function(){var class_name=RTE_CONST.HINT_WRAPPER_CLASSNAME;if(this.sk_tips){this.sk_tips.destroy();}
this.sk_tips=new RTETips($$('['+RTE_CONST.HINT_TEXT_ATTR+']'),{className:class_name});},displayStatusMessage:function(sMessage,iMessageType,bPin,iDisplayInterval){if(!this.hasStatusMessagesArea()){return;}
var sMessageIconClass=this.oMsgIcons["default"];if(iMessageType){sMessageIconClass=this.oMsgIcons[iMessageType];}
assert('No messages area layout found!',$defined(this.config.messages_area_layout));var sMessageAreaHTML=this.config.messages_area_layout.supplant({className:sMessageIconClass,message:sMessage});$(RTE_CONST.MESSAGES_AREA_PREFIX+this.id).innerHTML=sMessageAreaHTML;if(!bPin){var iDisplayTime=($defined(iDisplayInterval))?iDisplayInterval:this.config.time_to_display_status_message;var iOptimalMessageLength=60;if(sMessage.length>iOptimalMessageLength){iDisplayTime*=(sMessage.length/iOptimalMessageLength);}
$clear(this.statusMsgTimerId);var rte=RTE_GetById(this.id);this.statusMsgTimerId=rte.hideStatusMessage.delay(iDisplayTime,rte);}},hideStatusMessage:function(){if(!this.hasStatusMessagesArea()){return;}
$(RTE_CONST.MESSAGES_AREA_PREFIX+this.id).innerHTML='';$clear(this.statusMsgTimerId);},imagesDir:function(){return this.baseDir()+RTE_CONST.IMAGES_REL_DIR;},getImageUrl:function(sImageUrl){if(sImageUrl.indexOf('http://')==0||sImageUrl.indexOf('/')>-1){return sImageUrl;}else{return this.imagesDir()+sImageUrl;}},getLogMessages:function(){return this.sLog;},logMessage:function(sIdent,sMessage,iLogLevel){if(isUndefined(iLogLevel)){iLogLevel=RTE_CONST.LL_ACTION;}
if(iLogLevel<this.config.log_level){return;}
var oDate=new Date();this.sLog='['+oDate.toGMTString()+']'+'::'+'['+sIdent+']'+'::'+sMessage+'\n'+this.sLog;},_checkFFKey:function(oEvent){if(Browser.Engine.trident)return;if(oEvent.keyCode!=46&&oEvent.keyCode!=8){return;}
var currentElement=this.currentElement();if(currentElement.tagName=='IMG'){currentElement.destroy();this.eventManager().cancelEventBubbling(oEvent);}},createPlugin:function(sPluginName){if(isUndefined(sPluginName)||sPluginName==''){throw new IllegalArgumentException('No plugin name passed!');}
try{var fPluginConstructor=eval('RTEPlugin_'+sPluginName);return new fPluginConstructor(this);}catch(e){throw new RuntimeException('RTE Plugin with name ['+sPluginName+'] cannot be constructed!');}},registerPlugin:function(oPlugin){if(isUndefined(oPlugin)){throw new IllegalArgumentException('No plugin passed!');}
assert('A plugin with this id ['+oPlugin.id+'] already exists!',isUndefined(this.plugins[oPlugin.id]));this.plugins[oPlugin.id]=oPlugin;},readConfig:function(){assert('Config was not found',typeof(RTE_Config)!='undefined')
assert('Default width for the editor not found in config',$defined(RTE_Config.editor_width));assert('Default height for the editor not found in config',$defined(RTE_Config.editor_height));assert('Default language not found in config',$defined(RTE_Config.language));assert('Default css not found in config',$defined(RTE_Config.css));assert('Body css class not found in config',$defined(RTE_Config.body_css_class));assert('Default basDir not found in config',$defined(RTE_Config.baseDir));assert('Time to display status message not found in config',$defined(RTE_Config.time_to_display_status_message));assert('Info icon src not found in config[icon_info_msg]',$defined(RTE_Config.icon_info_msg));assert('Wait icon src not found in config[icon_wait_msg]',$defined(RTE_Config.icon_wait_msg));assert('Warning icon src not found in config[icon_warning_msg]',$defined(RTE_Config.icon_warning_msg));assert('ResizeUp icon src not found in config[icon_resize_up]',$defined(RTE_Config.icon_resize_up));assert('ResizeDown icon src not found in config[icon_resize_down]',$defined(RTE_Config.icon_resize_down));assert('No core tempates holder id found in config[templates_holder_id]',$defined(RTE_Config.templates_holder_id));assert('No default log level found in config [log_level]',$defined(RTE_Config.log_level));this.config=RTE_Config;},print:function(){this.LogMessage('Print','.');if($defined(this.config.holder_element_id)){var oHolderElement=$(this.config.holder_element_id);if(!oHolderElement){throw new RuntimeException('Can not get RTE holder Element with ID ['+this.config.holder_element_id+']!');}
oHolderElement.innerHTML=this.composeLayout();}else{document.write(this.composeLayout());}},composeLayout:function(){this.LogMessage('composeLayout','.');assert('Space image src [SPACE_IMG_SRC global js var ] not set!',typeof(SPACE_IMG_SRC)!='undefined');var sToolbarHTML=this.toolbar.composeLayout();if(isUndefined(this.config.layout)){var oTemplatesHolder=$(this.config.templates_holder_id).contentWindow.document;var oDefaultLayoutHolder=oTemplatesHolder.getElementById('rte_default_layout');assert('No default layout found. Element with id [rte_default_layout] not found.',oDefaultLayoutHolder!=null);this.config.layout=$(oDefaultLayoutHolder).getValue();}
var sEditorHTML='<iframe'+' id     = "'+this.editor.domId+'"'+' width  = "'+this.config.editor_width+'"'+' height = "'+this.config.editor_height+'"'+' frameborder = "0" '+
(Browser.Engine.trident?' scrolling="yes"':' style="overflow-y:scroll"')+'></iframe>';var sMessagesHTML='<span id = "'+
RTE_CONST.MESSAGES_AREA_PREFIX+this.id+'"'+'></span>';var sPropPanelLayoutHTML='<div style="overflow-y:auto; overflow-x: hidden" id = "'+
RTE_CONST.PROP_PANEL_LAYOUT_AREA_PREFIX+this.id+'"'+' class="rte-property-panel"></div>';var sPropPanelTitleHTML='<span id = "'+
RTE_CONST.PROP_PANEL_TITLE_AREA_PREFIX+this.id+'"'+'></span>';var sBottomRightHTML='<div id="'+
RTE_CONST.BOTTOM_RIGHT_AREA_PREFIX+this.id+'"'+'></div>';var sHTML=this.config.layout.supplant({__toolbar_area__:sToolbarHTML,__editor_area__:sEditorHTML,__messages_area__:sMessagesHTML,__property_panel_layout_area__:sPropPanelLayoutHTML,__property_panel_title_area__:sPropPanelTitleHTML,__bottom_right_area__:sBottomRightHTML,__rte_id__:this.id,__img_space__:SPACE_IMG_SRC,__icon_resize_up__:this.config.icon_resize_up,__icon_resize_down__:this.config.icon_resize_down});return sHTML;},init:function(){this.LogMessage('init','.');this.initLog();for(var i in this.plugins){this.plugins[i].init();}
this.LogMessage('init','Done.');},initToolbarItems:function(){this.LogMessage('initToolbarItems','.');for(var i in this.plugins){this.plugins[i].initToolbarItems();}
this.LogMessage('initToolbarItems','Done.');},initLog:function(){this.sLog='Log start ['+(new Date()).toGMTString()+']\n'+'Browser ['+navigator.userAgent+']\n'+'================================================\n\n';},LogMessage:function(sIdent,sMessage,iLogLevel){this.logMessage('RTE'+'::'+sIdent,sMessage,iLogLevel);},registerCoreEvents:function(){this.LogMessage('registerCoreEvents','.');var mgr=this.eventManager();if(!Browser.Engine.trident){mgr.addEventHandler('keydown',this,'_checkFFKey');}
mgr.addEventHandler('keydown',this,'onKeyDown');mgr.addEventHandler('keyup',this,'checkSelection');mgr.addEventHandler('keyup',this,'onKeyUp');mgr.addEventHandler('mouseup',this,'handleMouseUp');mgr.addEventHandler(RTE_CONST.EVENT_SELECTION_CHANGED,this,'handleSelectionChanged',{skip_pass_event_object:true});mgr.addEventHandler('focus',this,'deactivateModifierKey');if(Browser.Engine.trident){mgr.addEventHandler('beforedeactivate',this,'onBeforeDeactivate');mgr.addEventHandler(RTE_CONST.EVENT_BEFORE_INSERT,this,'onBeforeInsert');}},initEditor:function(){this.LogMessage('initEditor','.');assert('Editor not instantiated',(document.getElementById(this.editor.domId)!=null))
this.editor.window=$(this.editor.domId).contentWindow;this.editor.document=this.editor.window.document;this.enableEditMode();var sCSS='';for(var i=0;i<this.config.css.length;i++){sCSS+='@import url("'+this.config.css[i]+'");';}
var sCSSEditorStyle='';if(typeof this.config.css_editor_style!='undefined')
sCSSEditorStyle=this.config.css_editor_style;var sEncodingLine="";var sEncoding=document.charset||document.defaultCharset;if(!sEncoding){$$('meta').each(function(e){if(e.get('content')){var pair=e.get('content').split('=');if(pair.length==2&&pair[0].indexOf("charset")!=-1){sEncoding=pair[1];}}});}
if(sEncoding){sEncodingLine='<meta http-equiv="Content-Type" content="text/html; charset='+sEncoding+'">';}
this.editor.document.open();this.editor.document.write('<html><head>'+
sEncodingLine+'<style id = "'+RTE_CONST.EDITOR_STYLE_HOLDER+'">'+
((Browser.Engine.trident)?sCSS:'')+
((Browser.Engine.trident)?sCSSEditorStyle:'')+'</style></head><body '+
(this.oHelpers.isIE9()?'contenteditable="true"':'')+' class="'+this.config.body_css_class+'"></body></html>');this.editor.document.close();if(Browser.Engine.trident){this.editor.document.execCommand(RTE_CONST.COMMAND_LIVE_RESIZE,false,true);}else{this.enableEditMode();$(this.editor.document.getElementById(RTE_CONST.EDITOR_STYLE_HOLDER)).grab(this.editor.document.createTextNode(sCSS+sCSSEditorStyle));this.editor.document.execCommand(RTE_CONST.COMMAND_USE_CSS,false,true);}
this.LogMessage('initEditor','Done.');},initShortcuts:function(){this.LogMessage('initShortcuts','.');this.eventManager().addEventHandler('keydown',this,'handleShortcut');if(!Browser.Engine.trident){this.eventManager().addEventHandler('keypress',this,'preventDefaultShortcutFF');}},initStatusMessages:function(){if(!this.hasStatusMessagesArea()){return;}
this.oMsgIcons[RTE_CONST.MESSAGE_TYPE_INFO]=this.config.icon_info_msg;this.oMsgIcons[RTE_CONST.MESSAGE_TYPE_WAIT]=this.config.icon_wait_msg;this.oMsgIcons[RTE_CONST.MESSAGE_TYPE_WARNING]=this.config.icon_warning_msg;this.oMsgIcons[RTE_CONST.MESSAGE_TYPE_HINT]=this.config.icon_hint_msg;this.oMsgIcons["default"]=this.oMsgIcons[RTE_CONST.INFO_MESSAGE_TYPE];if(isUndefined(this.config.messages_area_layout)){var oTemplatesHolder=$(this.config.templates_holder_id).contentWindow.document;var oDefaultLayoutHolder=oTemplatesHolder.getElementById('rte_default_messages_area_layout');if(oDefaultLayoutHolder!=null){this.config.messages_area_layout=oDefaultLayoutHolder.value.supplant({__rte_id__:this.id,__img_space__:SPACE_IMG_SRC});}}
if(isUndefined(this.config.hint_message_layout)){var oTemplatesHolder=$(this.config.templates_holder_id).contentWindow.document;var oDefaultLayoutHolder=oTemplatesHolder.getElementById('rte_default_hint_area_layout');if(oDefaultLayoutHolder!=null){this.config.hint_message_layout=oDefaultLayoutHolder.value.supplant({__rte_id__:this.id,__img_space__:SPACE_IMG_SRC});}}},enableEditMode:function(){this.LogMessage('enableEditMode','.');assert('Editor document not set!',(!isNull(this.editor.document)));if(this.oHelpers.isIE9()==false){this.editor.document.designMode='on';}
this.editor.document=this.editor.window.document;},identifyPlugin:function(){var oElement=this.currentElement();var oRootElement=this.rootElement();var bPluginWithPPanelFound=false;while(oElement&&oElement!=oRootElement){var oCurrentElement=oElement;oElement=oElement.parentNode;if($defined(this.watchedTags[oCurrentElement.tagName])){var bPluginIdentified=false;var oPlugin=null;for(var sAttrName in this.watchedTags[oCurrentElement.tagName].attributes){if(!isNull($(oCurrentElement).getProperty(sAttrName))){var sAttributeValue=$(oCurrentElement).getAttribute(sAttrName);for(var sAttrValue in this.watchedTags[oCurrentElement.tagName].attributes[sAttrName]){if(sAttributeValue==sAttrValue){oPlugin=this.watchedTags[oCurrentElement.tagName].attributes[sAttrName][sAttrValue].plugin;break;}}}
if(oPlugin!=null){break;}}
if(oPlugin==null&&!isNull(this.watchedTags[oCurrentElement.tagName].plugin)){oPlugin=this.watchedTags[oCurrentElement.tagName].plugin;}
if(oPlugin!=null){if(Browser.Engine.trident){oPlugin.select();if(oPlugin.hasPropertyPanel()){this.isPPanelAvailForHide=false;}}else{this.LogMessage('identifyPlugin','Calling plugin ['+oPlugin.id+'], Curr Elem tag['+oCurrentElement.tagName+'], Real elem tag ['+this.currentElement().tagName+']',RTE_CONST.LL_DEBUG);var plugin=RTE_GetById(this.id).getPluginById(oPlugin.id);plugin.select.delay(this.iTimeoutToShowHidePropPanel,plugin);if(oPlugin.hasPropertyPanel()){var rte=RTE_GetById(this.id);(function(){this.isPPanelAvailForHide=false;}).delay(this.iTimeoutToShowHidePropPanel,rte);}}
if(oPlugin.hasPropertyPanel()){bPluginWithPPanelFound=true;}}}}
return bPluginWithPPanelFound;},getScroll:function(){var body=this.rootElement();return{x:body.scrollLeft,y:body.scrollTop};},scrollTo:function(x,y){var body=this.rootElement();body.scrollLeft=x;body.scrollTop=y;}});var arrRTEs=[];var RTE_Counter=0;function RTE_Create(){RTE_Counter++;var id='rte_'+RTE_Counter;var oRTE=new RTE(id);arrRTEs[id]=oRTE;return oRTE;}
function RTE_GetById(sID){if(isUndefined(sID)){throw new IllegalArgumentException('No ID passed!');}
if(isUndefined(arrRTEs[sID])){throw new RuntimeException('RTE with such ID ['+sID+'] not found!');}
return arrRTEs[sID];}


