if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());var Widgit={};(function(){var userAgent=navigator.userAgent.toLowerCase();function stringContains(str,substr){return str.indexOf(substr)!=-1}Widgit.browser={isIe:
/*@cc_on!@*/
false,isGecko:stringContains(userAgent,"gecko/"),isSafari:stringContains(userAgent," applewebkit/"),isOpera:!!window.opera,isMac:stringContains(userAgent,"macintosh")};Widgit.browser.isIe7=Widgit.browser.isIe&&(parseFloat(userAgent.match(/msie ([\d|\.]+)/)[1])>=7)})();Widgit.Settings={SettingScopeNames:["USER","CONTENT","SITE"],SettingScopes:{USER:"user",CONTENT:"content",SITE:"site"},SettingKeys:{LANGUAGE:"language",BLANK_ALTERNATIVES:"generateBlankAlternatives",SYMSET:"symset",COLOR:"color",BASESIZE:"basesize",LANGUAGE_LEVEL:"languageLevel",QUALIFIER:"qualifierOptions",QUALIFIER_PLURALS:"qualifierOptions_showPlurals",QUALIFIER_TENSES:"qualifierOptions_showTenses",QUALIFIER_SUPERLATIVES:"qualifierOptions_showSuperlatives",FILTER:"conceptFilter",FONT_SIZE:"fontSize"},Setting:function(b,a,c){this.scope=b;this.name=a;this.value=c}};Widgit.Configuration=(function(){function createDefaultConfig(){return{symgate:{symgateUrl:"symgateproxy.php",requestTimeOut:30000,displayHtmlVersion:2,displayHtmlUseSpans:false,displayHtmlHttpsImages:false,useFlashProxy:false,flashProxyUrl:"/insite_3pane/example/insiteproxy.swf",flashMinimumVersion:"9.0.0"},editor:{baseUrl:"",cmlHiddenInputId:"insiteCml",readOnlyCmlHiddenInputId:"insiteReadOnlyCml",cmlElementInfosHiddenInputId:"insiteCmlElementInfos",displayHtmlHiddenInputId:"insiteDisplayHtml",textHiddenInputId:"insiteText",editorContentHiddenInputId:"insiteContent",linkUrlHiddenInputId:"insiteLinkUrl",contentIdHiddenInputId:"insiteContentId",allowExistingHiddenInputs:false,saveCml:true,saveReadOnlyCml:true,saveCmlElementInfos:true,saveLinkUrl:true,saveContentId:true,saveHtml:true,saveText:true,textAreaHeight:100,editPaneWidth:500,editPaneHeight:300,chooserPaneWidth:160,defaultCultureCode:"en-GB",preventEditorCssCaching:true,maxConceptsPerParagraph:8,swallowErrors:false,displayErrorDetail:false,doSpellCheck:false,saveToWidgitServer:false,siteWideSymbolsSpecificToUser:true,editPaneHttpsImages:false,honourSpaces:true,typingSymbolisationDelay:500,extraEditPaneCssFile:null,tools:{save:true,retext:true,bold:true,italic:true,link:true,settings:true,symbolSize:true,textSize:true,symbolColour:true,plurals:true,tenses:true,superlatives:true}}}}function isArray(obj){return(obj instanceof Array)}var objectHasOwnProperty=Object.prototype.hasOwnProperty?function(obj,prop){return obj.hasOwnProperty(prop)}:function(obj,prop){return typeof obj[prop]!="undefined"&&obj.constructor.prototype[prop]!==obj[prop]};function each(obj,callback){if(obj){for(var i in obj){if(objectHasOwnProperty(obj,i)){callback(i,obj)}}}}function extend(obj,props,deep){var o,p;if(props){for(var i in props){if(objectHasOwnProperty(props,i)){o=obj[i];p=props[i];if(deep&&(typeof p=="object")&&!isArray(p)&&(typeof o=="object")&&!isArray(o)){extend(o,p,true)}else{obj[i]=p}}}
/*@cc_on
			if (objectHasOwnProperty(props, "toString")) {
				obj.toString = props.toString;
			}
			@*/
}return obj}function createConfig(config){var baseConfig=createDefaultConfig();if(config){extend(baseConfig,config,true)}return baseConfig}Widgit.Config=createDefaultConfig();return{createConfig:createConfig}})();(function(){Widgit.Logging={createServerLog:function(a){return log4javascript.getLogger("Widgit.serverLog")}}})();(function(){var emptyFunction=function(){};var newLine="\r\n";var showStackTraces=true;var log=log4javascript.getLogger("Widgit.Util");if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!=="undefined"){methodName+=String(Math.floor(1000000*Math.random()))}obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]"}var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue}}if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i]}return this.apply(obj,args)}}function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"")}function array_push(arr){for(var i=1,len=arguments.length;i<len;i++){arr[arr.length]=arguments[i]}return arr.length}function array_pop(arr){if(arr.length>0){var val=arr[arr.length-1];arr.length=arr.length-1;return val}}function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true}}return false}function array_clone(arr){return arr.concat([])}function array_keys(arr,val){var keys=[];for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){array_push(keys,i)}}return keys}function array_shift(arr){if(Array.prototype.shift){return arr.shift()}else{if(arr.length>0){var firstItem=arr[0];for(var i=0,len=arr.length;i<len-1;i++){arr[i]=arr[i+1]}arr.length=arr.length-1;return firstItem}}}function array_splice(arr,startIndex,deleteCount){if(Array.prototype.splice){return arr.splice(startIndex,deleteCount)}else{var itemsAfterDeleted=arr.slice(startIndex+deleteCount);var itemsDeleted=arr.slice(startIndex,startIndex+deleteCount);arr.length=startIndex;var argumentsArray=[];for(var i=1,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i]}var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){array_push(arr,itemsToAppend[i])}return itemsDeleted}}function array_replace(arr,startIndex,deleteCount,newElementsArray){if(startIndex>=arr.length){return arr.concat(newElementsArray)}else{var itemsAfterDeleted=arr.slice(startIndex+deleteCount);var itemsDeleted=arr.slice(startIndex,startIndex+deleteCount);arr.length=startIndex;var itemsToAppend=newElementsArray.concat(itemsAfterDeleted);for(i=0,len=itemsToAppend.length;i<len;i++){array_push(arr,itemsToAppend[i])}return itemsDeleted}}function array_elementsEqual(array1,array2){if(array1.length==array2.length){for(var i=0;i<array1.length;i++){if(array1[i]!=array2[i]){return false}}return true}else{return false}}function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){index=i;break}}if(index>=0){array_splice(arr,index,1);return true}else{return false}}function createElementWithNameAndOrType(tag,name,type,selfClose){return makeCreateElementWithNameAndOrType(tag,name,type,selfClose)}function makeCreateElementWithNameAndOrType(tag,name,type,selfClose){try{var el=document.createElement('<div name="foo">');if("DIV"!=el.tagName||"foo"!=el.name){throw"create element error"}createElementWithNameAndOrType=function(tag,name,type,selfClose){var startTag="<"+tag;if(name){startTag+=' name="'+name+'"'}if(type){startTag+=' type="'+type+'"'}var html=selfClose?startTag+" />":startTag+"></"+tag+">";return document.createElement(html)}}catch(e){createElementWithNameAndOrType=function(tag,name,type){var el=document.createElement(tag);if(name){el.name=name}if(type){el.type=type}return el}}return createElementWithNameAndOrType(tag,name,type,selfClose)}function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass}else{el.className=cssClass}}}function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass)}return false}function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0;i<existingClasses.length;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i]}}el.className=newClasses.join(" ")}}function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass)}function getListenersPropertyName(eventName){return"__listeners__"+eventName}function addDomEventListener(node,eventName,listener,useCapture){if(node.addEventListener){node.addEventListener(eventName,listener,useCapture)}else{if(node.attachEvent){node.attachEvent("on"+eventName,listener)}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=array_clone(this[listenersPropertyName]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt)}}}node[propertyName].push(listener)}}}function removeDomEventListener(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture)}else{if(node.detachEvent){node.detachEvent("on"+eventName,listener)}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){node[propertyName].remove(listener)}}}}function getEvent(evt){return evt?evt:window.event}function getTarget(evt){return evt.target?evt.target:evt.srcElement}function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget}else{if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement}}}}function stopPropagation(evt){evt=getEvent(evt);if(evt.stopPropagation){evt.stopPropagation()}else{if(typeof evt.cancelBubble!=="undefined"){evt.cancelBubble=true}}}function preventDefault(evt){evt=getEvent(evt);if(evt.preventDefault){evt.preventDefault()}else{if(typeof evt.returnValue!=="undefined"){evt.returnValue=false}}}function getDocument(node){if(node.ownerDocument){return node.ownerDocument}else{if(node.nodeType==domNodeType.TEXT_NODE){node=node.parentNode}return node.document}}function getPageOffsetLeft(el){var currentEl=el;var x=0;while(currentEl){x+=currentEl.offsetLeft;currentEl=currentEl.offsetParent}return x}function getPageOffsetTop(el){var currentEl=el;var y=0;while(currentEl){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent}return y}function getNodeAncestorElement(node,tagName){tagName=tagName.toLowerCase();while(node){if(node.nodeType==1&&node.tagName.toLowerCase()==tagName){return node}node=node.parentNode}return null}var objectHasOwnProperty=Object.prototype.hasOwnProperty?function(obj,prop){return obj.hasOwnProperty(prop)}:function(obj,prop){return !isUndefined(obj[prop])&&obj.constructor.prototype[prop]!==obj[prop]};function copyProperties(obj,props,deep){for(var i in props){if(objectHasOwnProperty(props,i)){if(deep&&(typeof props[i]==="object")&&(typeof obj[i]==="object")){copyProperties(obj[i],props[i],true)}else{obj[i]=props[i]}}}}function isUndefined(obj){return typeof obj==="undefined"}function toStr(obj){if(obj&&obj.toString){return obj.toString()}else{return String(obj)}}function getExceptionMessage(ex){if(ex.message){return ex.message}else{if(ex.description){return ex.description}else{return toStr(ex)}}}function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1)}function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber}if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName)}}catch(localEx){}if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack}return exStr}return null}function parseXml(xml){if(window.DOMParser){var parser=new DOMParser();return parser.parseFromString(xml,"text/xml")}else{if(window.ActiveXObject){var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(xml);return xmlDoc}}throw new Error("Browser is unable to parse XML")}function createXmlDocument(){if(document.implementation&&document.implementation.createDocument){return document.implementation.createDocument("","",null)}else{if(window.ActiveXObject){return new ActiveXObject("Microsoft.XMLDOM")}}throw new Error("Browser is unable to create XML document")}function serializeXmlDocument(xmlDoc){if(window.XMLSerializer){var serializer=new XMLSerializer();return serializer.serializeToString(xmlDoc)}else{if(xmlDoc.xml){return xmlDoc.xml}}throw new Error("Browser is unable to serialize XML document")}function actOnChildElements(node,actionFunction){for(var child=node.firstChild;child!==null;child=child.nextSibling){if(child.nodeType==domNodeType.ELEMENT_NODE){actionFunction(child)}}}function hasAttribute(el,attrName){if(typeof el.hasAttribute==="function"){return el.hasAttribute(attrName)}else{return el.getAttribute(attrName)!==null}}var attributeType={STRING:1,INT:2,BOOLEAN:3};var boolRegex=/^\s*(true|yes|1)\s*/i;function extractTypedAttributeValue(attrValue,attrType){switch(attrType){case attributeType.STRING:return toStr(attrValue);case attributeType.INT:var intVal=parseInt(attrValue,10);if(isNaN(intVal)){throw new Error(attrValue+" is not a valid value for an integer attribute")}return intVal;case attributeType.BOOLEAN:return boolRegex.test(boolRegex);default:throw new Error("Attribute type "+attrType+" not recognised")}}function purge(d){var a=d.attributes,i,l,n;if(a){l=a.length;for(i=0;i<l;i+=1){n=a[i].name;if(typeof d[n]==="function"){d[n]=null}}}a=d.childNodes;if(a){l=a.length;for(i=0;i<l;i+=1){purge(d.childNodes[i])}}}function EventHandler(eventType,handlerFunction){this.eventType=eventType;this.handlerFunction=handlerFunction;this.eventHandlerName="on"+this.eventType}var domNodeType={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};function EventSupport(){}EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[]}}else{throw new Error("Widgit.Util.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array")}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){throw new Error("Widgit.Util.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'")}array_push(this.eventListeners[eventType],listener)}else{throw new Error("Widgit.Util.EventSupport ["+this+"]: addEventListener: listener must be a function")}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){throw new Error("Widgit.Util.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'")}array_remove(this.eventListeners[eventType],listener)}else{throw new Error("Widgit.Util.EventSupport ["+this+"]: removeEventListener: listener must be a function")}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs)}}else{throw new Error("Widgit.Util.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'")}}};function getTextAreaSelectionEndPoints(el){var start=0,end=0,normalizedValue,range,textInputRange,len,endRange;if(typeof el.selectionStart=="number"&&typeof el.selectionEnd=="number"){start=el.selectionStart;end=el.selectionEnd}else{range=document.selection.createRange();if(range&&range.parentElement()==el){len=el.value.length;normalizedValue=el.value.replace(/\r\n/g,"\n");textInputRange=el.createTextRange();textInputRange.moveToBookmark(range.getBookmark());endRange=el.createTextRange();endRange.collapse(false);if(textInputRange.compareEndPoints("StartToEnd",endRange)>-1){start=end=len}else{start=-textInputRange.moveStart("character",-len);start+=normalizedValue.slice(0,start).split("\n").length-1;if(textInputRange.compareEndPoints("EndToEnd",endRange)>-1){end=len}else{end=-textInputRange.moveEnd("character",-len);end+=normalizedValue.slice(0,end).split("\n").length-1}}}}return{start:start,end:end}}function extendTextAreaSelectionToWholeWords(textArea){if(document.selection&&document.selection.createRange){textArea.focus();var range=document.selection.createRange();range.expand("word");if(!/^\w$/.test(range.text.charAt(range.text.length-1))){range.moveEnd("character",-1)}range.select()}else{if(typeof textArea.selectionStart!=="undefined"){var moveBoundary=function(initialValue,isForward){var boundary=initialValue;while(boundary>=0&&boundary<textArea.value.length&&/\w/.test(textArea.value.charAt(boundary))){if(isForward){boundary++}else{boundary--}}return isForward?boundary:boundary+1};if(textArea.selectionStart<=textArea.selectionEnd){textArea.selectionStart=moveBoundary(textArea.selectionStart,false);textArea.selectionEnd=moveBoundary(textArea.selectionEnd,true)}else{textArea.selectionStart=moveBoundary(textArea.selectionStart,true);textArea.selectionEnd=moveBoundary(textArea.selectionEnd,false)}}}}var getMargin=(typeof window.getComputedStyle!="undefined")?function(el,side){return parseInt(window.getComputedStyle(el,null).getPropertyValue("margin-"+side.toLowerCase()),10)||0}:function(el,side){if(typeof el.currentStyle!="undefined"){return parseInt(el.currentStyle["margin"+side],10)||0}return 0};function getDocumentDimensions(win){var doc=win.document,body=doc.body||doc.getElementsByTagName("body")[0];var width=0,height=0;if(doc.documentElement&&(!doc.compatMode||doc.compatMode=="CSS1Compat")){width=Math.max(body.offsetWidth+getMargin(body,"Left")+getMargin(body,"Right"),doc.documentElement.clientWidth);height=Math.max(body.offsetHeight+getMargin(body,"Top")+getMargin(body,"Bottom"),doc.documentElement.clientHeight,doc.documentElement.scrollHeight,win.innerHeight||0)}else{width=Math.max(body.clientWidth,body.scrollWidth);height=Math.max(body.clientHeight,body.scrollHeight,win.innerHeight||0)}if(isNaN(width)||width==0){width=win.innerWidth||0}return{width:width,height:height}}function getBodyScrollTop(win){var doc=win.document,body=doc.body||doc.getElementsByTagName("body")[0],docEl=doc.documentElement;if(typeof window.pageYOffset=="number"){return window.pageYOffset}else{if(body&&body.scrollTop){return body.scrollTop}else{if(docEl&&docEl.scrollTop){return docEl.scrollTop}}}return 0}function prompt(title,question,initialText,callback){var el=document.createElement("div"),backgroundEl=el.appendChild(document.createElement("div")),dialogContainerEl=el.appendChild(document.createElement("div")),dialogEl=dialogContainerEl.appendChild(document.createElement("div")),titleEl=dialogEl.appendChild(document.createElement("h1")),contentEl=dialogEl.appendChild(document.createElement("form")),questionEl=contentEl.appendChild(document.createElement("div"));var iframe,useIframe=
/*@cc_on!@*/
false;el.className="insiteModalUiBlocker";if(useIframe){iframe=document.createElement("iframe");iframe.className="modalBackground";iframe.src="about:blank";el.appendChild(iframe)}var sizeBackground=function(){var docSize=getDocumentDimensions(window);el.style.width=docSize.width+"px";el.style.height=docSize.height+"px";dialogContainerEl.style.left=(docSize.width/2-dialogContainerEl.offsetWidth/2)+"px"};var resizeTimer;var resize=function(){if(resizeTimer){window.clearTimeout(resizeTimer)}resizeTimer=window.setTimeout(sizeBackground,50)};if(typeof window.addEventListener!="undefined"){window.addEventListener("resize",resize,false)}else{if(typeof window.attachEvent!="undefined"){window.attachEvent("onresize",resize)}}dialogContainerEl.className="dialogContainer";dialogContainerEl.style.top=(100+getBodyScrollTop(window))+"px";dialogEl.className="dialog";titleEl.className="dialogTitle";titleEl.appendChild(document.createTextNode(title));questionEl.appendChild(document.createTextNode(question));var input=document.createElement("input");input.value=initialText;input.type="text";input.size=30;input.style.width="80%";contentEl.appendChild(input);backgroundEl.className="modalBackground";el.onclick=el.onmouseup=dialogEl.onclick=function(evt){input.focus();stopPropagation(evt)};el.onkeydown=function(evt){evt=evt||window.event;if(evt.keyCode==27){closeDialog()}};var buttonContainerEl=document.createElement("div");buttonContainerEl.className="buttonContainer";function closeDialog(){backgroundEl.onclick=backgroundEl.onmouseup=contentEl.onsubmit=el.onkeydown=function(){};el.parentNode.removeChild(el);confirmButtonEl=cancelButtonEl=null;if(typeof window.removeEventListener!="undefined"){window.removeEventListener("resize",resize,false)}else{if(typeof window.detachEvent!="undefined"){window.detachEvent("onresize",resize)}}}var confirmButtonEl=document.createElement("input");confirmButtonEl.type="submit";confirmButtonEl.value="OK";buttonContainerEl.appendChild(confirmButtonEl);var cancelButtonEl=document.createElement("input");cancelButtonEl.type="button";cancelButtonEl.value="Cancel";cancelButtonEl.onclick=closeDialog;buttonContainerEl.appendChild(cancelButtonEl);contentEl.appendChild(buttonContainerEl);contentEl.onsubmit=function(){closeDialog();callback(input.value);return false};document.body.appendChild(el);sizeBackground();input.focus()}function removeToJSON(obj){if(obj!=null&&typeof obj!="undefined"){if(typeof obj.toJSON=="function"&&!objectHasOwnProperty(obj,"toJSON")){obj.toJSON=null}if(typeof obj=="object"&&obj!=null){for(var i in obj){removeToJSON(obj[i])}}}}function unicodeReplacer(str,match1){return String.fromCharCode(parseInt(match1,16))}function jsonStringify(obj){removeToJSON(obj);return JSON.stringify(obj).replace(/\\u([a-f\d]{4})/gi,unicodeReplacer)}Widgit.Util={newLine:newLine,isUndefined:isUndefined,trim:trim,toStr:toStr,array_contains:array_contains,array_clone:array_clone,array_push:array_push,array_pop:array_pop,array_keys:array_keys,array_shift:array_shift,array_splice:array_splice,array_remove:array_remove,array_replace:array_replace,array_elementsEqual:array_elementsEqual,createElementWithNameAndOrType:createElementWithNameAndOrType,addClass:addClass,hasClass:hasClass,removeClass:removeClass,replaceClass:replaceClass,addDomEventListener:addDomEventListener,removeDomEventListener:removeDomEventListener,getEvent:getEvent,getTarget:getTarget,getRelatedTarget:getRelatedTarget,stopPropagation:stopPropagation,preventDefault:preventDefault,getDocument:getDocument,getPageOffsetLeft:getPageOffsetLeft,getPageOffsetTop:getPageOffsetTop,getNodeAncestorElement:getNodeAncestorElement,objectHasOwnProperty:objectHasOwnProperty,copyProperties:copyProperties,getExceptionMessage:getExceptionMessage,getUrlFileName:getUrlFileName,getExceptionStringRep:getExceptionStringRep,parseXml:parseXml,createXmlDocument:createXmlDocument,serializeXmlDocument:serializeXmlDocument,actOnChildElements:actOnChildElements,hasAttribute:hasAttribute,attributeType:attributeType,extractTypedAttributeValue:extractTypedAttributeValue,purge:purge,EventHandler:EventHandler,domNodeType:domNodeType,EventSupport:EventSupport,getTextAreaSelectionEndPoints:getTextAreaSelectionEndPoints,extendTextAreaSelectionToWholeWords:extendTextAreaSelectionToWholeWords,prompt:prompt,jsonStringify:jsonStringify}})();(function(){var d=log4javascript.getLogger("Widgit.Symgate");var f={SUCCESS:0,BROWSER_UNSUPPORTED:1,SERVER_ERROR:2,TIMED_OUT:3,AUTHENTICATION_FAILED:4,GENERAL:5,UNEXPECTED:6};var c={errorCodes:f};Widgit.Symgate=c;var g=Widgit.Util;var h;if(encodeURIComponent){h=function(j){return encodeURIComponent(j)}}else{alert("Your browser does not support all the features necessary to run Insite")}c.Credentials=function(j){this.account=j};function b(j,k,l){this.userId=j;this.siteId=k;this.contentId=l;this.sessionId=null;this.hasSessionId=function(){return this.sessionId!=null}}b.prototype={hasSessionId:function(){return this.sessionId!=null},hasContentId:function(){return this.contentId!=null},hasUserId:function(){return this.userId!=null}};c.EditorContext=b;function a(){this.vars=[]}a.prototype={add:function(j,k){this.vars[this.vars.length]={name:j,value:k}},getLength:function(){return this.vars.length},toString:function(){var l="";for(var j=0;j<this.vars.length;j++){if(j>0){l+="&"}var k=(typeof this.vars[j].value==="function")?this.vars[j].value():this.vars[j].value;l+=h(this.vars[j].name)+"="+h(k)}return l},toDictionary:function(){var l={};for(var k=0,j=this.vars.length;k<j;k++){l[this.vars[k].name]=this.vars[k].value}return l}};c.PostData=a;function e(l,k,n,m,j){this.httpTransport=l;this.config=k;this.credentials=n;this.context=m;this.serverLog=j}e.prototype={createBasePostData:function(){var j=new a();if(this.context.hasSessionId()){j.add("sessionId",this.context.sessionId)}else{j.add("siteId",this.context.siteId);if(this.context.hasContentId()){j.add("contentId",this.context.contentId)}if(this.context.hasUserId()){j.add("userId",this.context.userId)}}return j},startSession:function(m,q,p,n,k,l,o){d.debug("startSession called");var r;this.serverLog.info("startSession request made");var j=this.createBasePostData();j.add("action","startSession");j.add("omitAltListHashes",q);j.add("userSpecificSiteSymbols",p);j.add("editPaneHttpsImages",n);if(k){r=g.jsonStringify(k);j.add("initialSettings",r)}j.add("cml",m);return this.httpTransport.postRequest(j,l,o)},endSession:function(){d.debug("endSession called with session id "+this.context.sessionId);this.serverLog.info("[session id: "+this.context.sessionId+"] End session request made");var j=this.createBasePostData();j.add("action","endSession");return this.httpTransport.postRequest(j)},symboliseText:function(m,j,l){d.debug("symboliseText called with text "+m);this.serverLog.info("[session id: "+this.context.sessionId+"] Symbolise text request made with text "+m);var k=this.createBasePostData();k.add("action","symboliseText");k.add("text",m);return this.httpTransport.postRequest(k,j,l)},getSymbolsForCml:function(l,j,m){d.debug("getSymbolsForCml called with CML "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] getSymbolsForCml text request made with CML "+l);var k=this.createBasePostData();k.add("action","getSymbols");k.add("cml",l);return this.httpTransport.postRequest(k,j,m)},changeSettings:function(m,o,q,p,l,k,n){var r=g.jsonStringify(m);d.debug("changeSettings from symgateajax.js called with settings "+r);this.serverLog.info("[session id: "+this.context.sessionId+"] changeSettings called with settings "+r);var j=this.createBasePostData();j.add("action","changeSettings");j.add("settings",r);j.add("refreshSymbols",o);j.add("refreshSpellings",q);j.add("refreshCml",p);j.add("cml",l);return this.httpTransport.postRequest(j,k,n)},deleteSettings:function(o,n,m,j,p){var l=g.jsonStringify(o);d.debug("deleteSettings from symgateajax.js called with settings "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] deleteSettings called with settings "+l);var k=this.createBasePostData();k.add("action","deleteSettings");k.add("settings",l);return this.httpTransport.postRequest(k,j,p)},deleteSymbolCache:function(){d.debug("deleteSymbolCache called with session id "+this.context.sessionId);this.serverLog.info("[session id: "+this.context.sessionId+"] deleteSymbolCache request made");var j=this.createBasePostData();j.add("action","deleteSymbolCache");return this.httpTransport.postRequest(j)},refreshSymbolCache:function(l,j,m){d.debug("refreshSymbolCache called with session id "+this.context.sessionId);this.serverLog.info("[session id: "+this.context.sessionId+"] refreshSymbolCache request made");var k=this.createBasePostData();k.add("action","refreshSymbolCache");k.add("cml",l);return this.httpTransport.postRequest(k,j,m)},spellCheck:function(n,k,m){var j=n.join(", ");d.debug("spellCheck called with words "+j);this.serverLog.info("[session id: "+this.context.sessionId+"] spellCheck request made with words "+j);var l=this.createBasePostData();l.add("action","spellCheck");l.add("words",g.jsonStringify(n));return this.httpTransport.postRequest(l,k,m)},setSitePreferredSymbols:function(m,j,n){var l=g.jsonStringify(m);d.debug("setSitePreferredSymbols called with symbols "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] setSitePreferredSymbols request made");var k=this.createBasePostData();k.add("action","setSitePreferredSymbols");k.add("symbols",l);return this.httpTransport.postRequest(k,j,n)},deleteSitePreferredSymbols:function(m,j,n){var l=g.jsonStringify(m);d.debug("deleteSitePreferredSymbol called with symbols "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] deleteSitePreferredSymbols request made");var k=this.createBasePostData();k.add("action","deleteSitePreferredSymbols");k.add("symbols",l);return this.httpTransport.postRequest(k,j,n)},setSiteUserPreferredSymbols:function(m,j,n){var l=g.jsonStringify(m);d.debug("setSiteUserPreferredSymbols called with symbols "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] setSiteUserPreferredSymbols request made");var k=this.createBasePostData();k.add("action","setSiteUserPreferredSymbols");k.add("symbols",l);return this.httpTransport.postRequest(k,j,n)},deleteSiteUserPreferredSymbols:function(m,j,n){var l=g.jsonStringify(m);d.debug("deleteSiteUserPreferredSymbols called with symbols "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] deleteSiteUserPreferredSymbols request made");var k=this.createBasePostData();k.add("action","deleteSiteUserPreferredSymbols");k.add("symbols",l);return this.httpTransport.postRequest(k,j,n)},getDisplayHtml:function(l,m,j,n){d.debug("getDisplayHtml from symgateajax.js called with CML "+l);this.serverLog.info("[session id: "+this.context.sessionId+"] getDisplayHtml called with CML "+l);var k=this.createBasePostData();k.add("action","displayCml");k.add("cml",l);k.add("version",this.config.displayHtmlVersion);k.add("useSpans",this.config.displayHtmlUseSpans);k.add("httpsImages",this.config.displayHtmlHttpsImages);if(m){k.add("link",m)}return this.httpTransport.postRequest(k,j,n)},loadContent:function(j,l){d.debug("loadContent from symgateajax.js called with content ID "+this.context.contentId+" and site ID "+this.context.siteId);var k=new a();k.add("action","getContent");k.add("siteId",this.context.siteId);k.add("contentId",this.context.contentId);return this.httpTransport.postRequest(k,j,l)},saveContent:function(m,q,k,o,n,j,p){d.debug("saveContent from symgateajax.js called");var l=new a();l.add("action","saveContent");l.add("siteId",this.context.siteId);l.add("contentId",this.context.contentId);l.add("cml",m);l.add("readOnlyCml",q);l.add("cmlElementInfos",k);l.add("plainText",o);l.add("link",n);return this.httpTransport.postRequest(l,j,p)},deleteContent:function(j,l){d.debug("deleteContent from symgateajax.js called with content ID "+this.context.contentId+" and site ID "+this.context.siteId);var k=new a();k.add("action","deleteContent");k.add("siteId",this.context.siteId);k.add("contentId",this.context.contentId);return this.httpTransport.postRequest(k,j,l)},getContentDisplayHtml:function(j,l){d.debug("getContentDisplayHtml from symgateajax.js called with content ID "+this.context.contentId+" and site ID "+this.context.siteId);var k=new a();k.add("action","getContentDisplayHtml");k.add("siteId",this.context.siteId);k.add("contentId",this.context.contentId);k.add("version",this.config.displayHtmlVersion);k.add("useSpans",this.config.displayHtmlUseSpans);k.add("httpsImages",this.config.displayHtmlHttpsImages);return this.httpTransport.postRequest(k,j,l)},abortRequest:function(j){return this.httpTransport.abortRequest(j)}};c.SymgateClient=e})();Widgit.Symgate.XhrTransport=(function(){var f=Widgit.Symgate.errorCodes;var k=Widgit.Util;var g=log4javascript.getLogger("Widgit.Symgate.XhrTransport");var d=function(){};var b=false;var j=(function(){var n=[function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP.6.0")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];for(var m=0,l=n.length;m<l;m++){try{if(n[m]()){return n[m]}}catch(o){}}})();function h(m){try{g.debug("Aborting XMLHttpRequest");m.onreadystatechange=d;m.abort()}catch(l){throw l}}function c(l){return(k.isUndefined(l.status)||l.status===0||(l.status>=200&&l.status<300))}function e(m,l){if(l){g.error(m,l)}else{g.error(m)}}function a(l,n){var m=true;this.postRequest=function(r,s,q){try{var t,p=null,u;g.trace("postRequest called with URL "+l+" and post data "+r);var w=j();if(m){if(s||q){w.onreadystatechange=function(){if(w.readyState===4){if(p){window.clearTimeout(p)}if(c(w)){if(s){s(w)}}else{var z="postRequest: XMLHttpRequest request to URL "+l+" returned status code "+w.status;e(z);if(q){q(z,f.SERVER_ERROR)}}w.onreadystatechange=d;w=null}}}w.open("POST",l,true);try{w.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}catch(v){u="postRequest: your browser's XMLHttpRequest implementation does not support setRequestHeader, therefore cannot post data.";e(u);m=false;if(q){q(u,f.BROWSER_UNSUPPORTED)}return}if(n>0){function y(){if(w.readyState>0){h(w);var z="postRequest: request timed out after "+n+"ms (URL: "+l+")";e(z);if(q){q(z,f.TIMED_OUT)}}}p=window.setTimeout(y,n)}var o=(r.getLength()>0)?r.toString():null;t=new Date();w.send(o);return w}else{u="postRequest: browser does not support XMLHttpRequest.";e(u);if(q){q(u,f.BROWSER_UNSUPPORTED)}}}catch(x){u="postRequest: error posting request to "+l;e(u,x);m=false;if(q){q(u+". Details: "+k.getExceptionStringRep(x),f.SERVER_ERROR)}}};this.abortRequest=function(o){h(o)}}return a})();Widgit.Symgate.FlashTransport=(function(){var errorCodes=Widgit.Symgate.errorCodes;var Util=Widgit.Util;var log=log4javascript.getLogger("Widgit.Symgate.FlashTransport");var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);
/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/
return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return}f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return}if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return}}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return}var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return}var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return}AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();function decodeFlashResponse(responseText){return responseText.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")}function FlashTransport(url,timeOutAfter,flashMinimumVersion){var flashMovieName="insiteproxy_"+new Date().getTime()+"_"+Math.floor(Math.random()*10000000);function getFlashMovie(){return window[flashMovieName]||document[flashMovieName]}function createRequest(postData,successCallback,failureCallback){return{postData:postData,successCallback:successCallback,failureCallback:failureCallback}}function doSendRequest(request){log.debug("doSendRequest");var successCallbackName="insite_successCallback_"+new Date().getTime()+"_"+Math.floor(Math.random()*10000000);var failureCallbackName="insite_failureCallback_"+new Date().getTime()+"_"+Math.floor(Math.random()*10000000);var successCallback=request.successCallback;request.successCallback=null;var failureCallback=request.failureCallback;request.failureCallback=null;(function(request,callbackName,callback){window[callbackName]=function(responseText){responseText=decodeFlashResponse(responseText);log.debug("Flash success callback called with response text "+responseText);request.responseText=responseText;callback(request);window[callbackName]=null}})(request,successCallbackName,successCallback);(function(callbackName,callback){window[callbackName]=function(responseText){responseText=decodeFlashResponse(responseText);log.debug("Flash fail callback called with response text "+responseText);callback(responseText,errorCodes.SERVER_ERROR);window[callbackName]=null}})(failureCallbackName,failureCallback);log.info("FlashTransport sending request via Flash.",request.postData.toDictionary(),successCallbackName,failureCallbackName);getFlashMovie().postRequest(request.postData.toDictionary(),timeOutAfter,successCallbackName,failureCallbackName);return request}var queuedRequests=[];function queueRequest(request){log.debug("Queuing request");queuedRequests[queuedRequests.length]=request;return request}function sendQueuedRequests(){log.debug("sendQueuedRequests called with "+queuedRequests.length+" requests waiting");for(var i=0;i<queuedRequests.length;i++){doSendRequest(queuedRequests[i])}}this.flashEmbedded=false;this.flashLoaded=false;this.browserHasValidFlash=true;var that=this;swfobject.addDomLoadEvent(function(){if(swfobject.hasFlashPlayerVersion(flashMinimumVersion)){that.supported=true;var flashContainerDiv=document.createElement("div");flashContainerDiv.className="insiteflashproxy";var flashDiv=document.createElement("div");flashDiv.className="insiteflashproxy";flashDiv.id=flashMovieName;flashContainerDiv.appendChild(flashDiv);document.body.appendChild(flashContainerDiv);var flashvars={};var flashparams={allowscriptaccess:"always"};var flashattributes={name:flashMovieName,styleclass:"insiteflashproxy"};log.debug("Embedding SWF");swfobject.embedSWF(url,flashMovieName,1,1,flashMinimumVersion,null,flashvars,flashparams,flashattributes);function testFlashLoaded(){try{getFlashMovie().testLoaded();that.flashLoaded=true;log.debug("testFlashLoaded succeeded");sendQueuedRequests()}catch(e){log.debug("testFlashLoaded failed",e);window.setTimeout(testFlashLoaded,20)}}that.browserHasValidFlash=true;window.setTimeout(testFlashLoaded,20)}else{alert("You need version "+flashMinimumVersion+" or later of Flash to use Insite");that.browserHasValidFlash=false}that.flashEmbedded=true});this.postRequest=function(postData,successCallback,failureCallback){log.debug("postRequest",this.flashLoaded,this.browserHasValidFlash);var req=createRequest(postData,successCallback,failureCallback);if(this.flashLoaded){return doSendRequest(req)}else{if(this.browserHasValidFlash){return queueRequest(req)}}};this.abortRequest=function(request){if(request.successCallbackName){window[request.successCallbackName]=function(){window[request.successCallbackName]=null}}if(request.failureCallbackName){window[request.failureCallbackName]=function(){window[request.failureCallbackName]=null}}}}return FlashTransport})();(function(){var w="English_UK";var o=["link","br","altlist","cmap","img","control"];var t=Widgit.Util.attributeType;var g=log4javascript.getLogger("Widgit.Cml");function x(A,z,B){A.setAttribute(z,B?B:"")}var v=function(){};v.parse=function(A){var z=Widgit.Util.parseXml(A);return j.fromXml(z.getElementsByTagName("cml")[0])};function m(){}m.prototype={toXml:function(){throw new Error("toXml must be implemented")},toSerializedXml:function(){var z=Widgit.Util.createXmlDocument();z.appendChild(this.toXml(z));return Widgit.Util.serializeXmlDocument(z)},hashCode:null,serializedXmlHashCode:null,destroyed:false,elementIndex:null,getHashCode:function(){if(this.hashCode==null){if(this.serializedXmlHashCode==null){this.serializedXmlHashCode=this.toSerializedXml()}return this.serializedXmlHashCode}else{return this.hashCode}},invalidateHashCode:function(){this.serializedXmlHashCode=null;if(this.cmlParent){this.cmlParent.invalidateHashCode()}},equals:function(z){return Boolean(z)&&(this.getHashCode()==z.getHashCode())},_init:function(){this.children=[];this.attributes={}},destroy:function(){this.destroyed=true;for(var A=0,z=this.children.length;A<z;A++){this.children[A].destroy()}this.removeAllChildren()},addChild:function(z){this.children[this.children.length]=z;z.cmlParent=this;this.invalidateHashCode();return z},addChildren:function(B){for(var A=0,z=B.length;A<z;A++){this.addChild(B[A])}},removeAllChildren:function(){for(var A=0,z=this.children.length;A<z;A++){this.children[A].cmlParent=null}this.invalidateHashCode();this.children.length=0},replaceChild:function(E,A){var D=-1;for(var B=0,z=this.children.length;B<z;B++){if(this.children[B]==E){D=B;break}}var C=(D+1<this.children.length)?this.children.slice(D+1):[];E.cmlParent=null;this.children.length=D;if(A instanceof Array){for(B=0,z=A.length;B<z;B++){this.addChild(A[B])}}else{if(A instanceof m){this.addChild(A)}}this.children=this.children.concat(C);this.invalidateHashCode();return E},removeChild:function(z){this.replaceChild(z,null);return z},cmlParent:null,getCmlRoot:function(){for(var z=this;z.cmlParent!=null;z=z.cmlParent){}return z},getCmlId:function(){var z=this.getCmlRoot();return z?z.id:"[no CML root]"},getXmlTagName:function(){return this.constructor.xmlTagName},getAttributeNames:function(){return this.constructor.attributeNames},getAttributeDefaults:function(){return this.constructor.attributeDefaults},createXmlElement:function(B,z){var A=B.createElement(this.getXmlTagName());if(z){this.childrenToXml(B,A)}return A},childrenToXml:function(B,A){for(var z=0;z<this.children.length;z++){A.appendChild(this.children[z].toXml(B))}},addChildrenFromDom:function(z,A,B){var C=this;Widgit.Util.actOnChildElements(z,function(E){if(Widgit.Util.array_contains(A,E.nodeName)){var D=k[E.nodeName].fromXml(E);if(B){B(E,D)}C.addChild(D)}else{throw new Error(z.nodeName+" element may only contain "+A.join(", ")+" elements (element supplied: "+E.nodeName+")")}})},setAttribute:function(z,A){this[z]=A},removeAttribute:function(z){if(this.isAttributeSet(z)){delete this[z]}},setAttributeFromDom:function(A,z,B,E){var D=Widgit.Util.hasAttribute(A,z);if(D){var C=Widgit.Util.extractTypedAttributeValue(A.getAttribute(z),B);this.setAttribute(z,C)}else{if(E){throw new Error(this.getXmlTagName()+" element must contain a "+z+" attribute")}}return D},isAttributeSet:function(z){return(typeof this[z]!=="undefined")},getAttribute:function(z){return this.isAttributeSet(z)?this[z]:null},getEffectiveAttribute:function(z){return this.isAttributeSet(z)?this.getAttribute(z):this.getAttributeDefaults()[z]},accept:function(z){z.visit(this)},toString:function(){var D="["+this.getXmlTagName();if(this.elementIndex!=null){D+="["+this.elementIndex+"]"}if(this.hashCode){D+="[hashCode: "+this.hashCode+"]"}var C=this.getAttributeNames();if(C.length>0){var A="";for(var B=0,z=C.length;B<z;B++){if(this.isAttributeSet(C[B])){if(A==""){A=" ("}else{A+=", "}A+=C[B]+": "+this.getAttribute(C[B])}}if(A!=""){D+=A+")"}}return D+"]"},dump:function(z,C){if(!z){z=""}var B=z+this.toString();if(C){B+=C(this)}B+="\n";for(var A=0;A<this.children.length;A++){B+=this.children[A].dump(z+" ",C)}return B},cloneProperties:function(){},clone:function(A){var D=new this.constructor();var C=this.getAttributeNames();for(var B=0,z=C.length;B<z;B++){D.setAttribute(C[B],this.getEffectiveAttribute(C[B]))}this.cloneProperties(D);D.hashCode=this.hashCode;if(A){for(B=0,z=this.children.length;B<z;B++){D.addChild(this.children[B].clone(true))}}return D}};v.CmlElement=m;var s=0;function j(){this._init();this.head=null;this.body=null;this.id=s++}j.prototype=new m();j.prototype.constructor=j;j.xmlTagName="cml";j.attributeNames=[];j.prototype.accept=function(z){z.visitCml(this)};j.prototype.toXml=function(z){return this.createXmlElement(z,true)};j.prototype.hasHead=function(){return this.head!=null};j.prototype.hasBody=function(){return this.body!=null};j.fromXml=function(z){var B=new j();var A=function(C,D){switch(C.nodeName){case"body":if(B.hasBody()){throw new Error("cml element may not have two body elements")}else{B.body=D}break;case"head":if(B.hasHead()){throw new Error("cml element may not have two head elements")}else{B.head=D}break}};B.addChildrenFromDom(z,["head","body"],A);return B};v.Cml=j;function r(){this._init()}r.prototype=new m();r.prototype.constructor=r;r.xmlTagName="body";r.attributeNames=[];r.prototype.accept=function(z){z.visitBody(this)};r.prototype.toXml=function(z){return this.createXmlElement(z,true)};r.fromXml=function(A){var z=new r();z.addChildrenFromDom(A,["cp","hr"]);return z};v.Body=r;function n(){this._init()}n.prototype=new m();n.prototype.constructor=r;n.xmlTagName="head";n.attributeNames=[];n.prototype.accept=function(z){z.visitHead(this)};n.prototype.toXml=function(){return null};n.fromXml=function(){return new n()};v.Head=n;function l(){this._init()}l.prototype=new m();l.prototype.constructor=l;l.xmlTagName="cp";l.attributeNames=["language","size"];l.attributeDefaults={language:w,size:0};l.prototype.accept=function(z){z.visitCp(this)};l.prototype.toXml=function(A){var z=this.createXmlElement(A,true);z.setAttribute("language",this.language);if(this.isAttributeSet("size")){x(z,"size",this.size)}return z};l.fromXml=function(z){var A=new l();A.setAttributeFromDom(z,"language",t.STRING,true);A.setAttributeFromDom(z,"size",t.STRING,false);A.addChildrenFromDom(z,["cs"]);return A};v.Cp=l;function b(){this._init()}b.prototype=new m();b.prototype.constructor=b;b.xmlTagName="hr";b.attributeNames=[];b.prototype.accept=function(z){z.visitHr(this)};b.prototype.toXml=function(z){return this.createXmlElement(z,false)};b.fromXml=function(){return new b()};v.Hr=b;function h(){this._init()}h.prototype=new m();h.prototype.constructor=h;h.xmlTagName="cs";h.attributeNames=[];h.prototype.accept=function(z){z.visitCs(this)};h.prototype.toXml=function(z){return this.createXmlElement(z,true)};h.fromXml=function(A){var z=new h();z.addChildrenFromDom(A,o);return z};v.Cs=h;function p(){this._init()}p.prototype=new m();p.prototype.constructor=p;p.xmlTagName="link";p.attributeNames=["uri","accesskey"];p.attributeDefaults={uri:"",accesskey:""};p.prototype.accept=function(z){z.visitLink(this)};p.prototype.toXml=function(A){var z=this.createXmlElement(A,true);z.setAttribute("uri",this.uri);if(this.isAttributeSet("accesskey")){x(z,"accesskey",this.accesskey)}return z};p.fromXml=function(z){var A=new p();A.setAttributeFromDom(z,"uri",t.STRING,true);A.setAttributeFromDom(z,"accesskey",t.STRING,false);A.addChildrenFromDom(z,o);return A};v.Cml_link=p;function c(){this._init()}c.prototype=new m();c.prototype.constructor=c;c.xmlTagName="altlist";c.attributeNames=["dummy"];c.attributeDefaults={dummy:false};c.prototype.accept=function(z){z.visitAltList(this)};c.prototype.getFavouredCAlt=function(){var B=null;for(var A=0;A<this.children.length;A++){var z=this.children[A];if(z.preferred){return z}else{if((B==null)||(B.priority>z.priority)){B=z}}}return B};c.prototype.toXml=function(A){var z=this.createXmlElement(A,true);if(this.isAttributeSet("dummy")){x(z,"dummy",this.dummy)}return z};c.fromXml=function(z){var A=new c();A.setAttributeFromDom(z,"dummy",t.BOOLEAN,false);A.addChildrenFromDom(z,["calt"]);return A};v.AltList=c;function e(){this._init()}e.prototype=new m();e.prototype.constructor=e;e.xmlTagName="calt";e.attributeNames=["priority","preferred"];e.attributeDefaults={priority:0,preferred:false};e.prototype.accept=function(z){z.visitCAlt(this)};e.prototype.getAltIndex=function(){for(var A=0,z=this.cmlParent.children.length;A<z;A++){if(this===this.cmlParent.children[A]){return A}}throw new Error("CAlt "+this+" not found in list of parent's children")};e.prototype.toXml=function(A){var z=this.createXmlElement(A,true);z.setAttribute("priority",this.priority);if(this.isAttributeSet("preferred")){x(z,"preferred",this.preferred.toString())}return z};e.prototype.getAltList=function(){return this.cmlParent};e.fromXml=function(A){var z=new e();z.setAttributeFromDom(A,"priority",t.INT,true);z.setAttributeFromDom(A,"preferred",t.BOOLEAN,false);z.addChildrenFromDom(A,o);return z};v.CAlt=e;function d(){this._init();this.text=null;this.ccs=[]}d.prototype=new m();d.prototype.constructor=d;d.xmlTagName="cmap";d.attributeNames=["emphasis","strong"];d.attributeDefaults={emphasis:false,strong:false};d.prototype.accept=function(z){z.visitCMap(this)};d.prototype.toXml=function(z){var A=this.createXmlElement(z,true);if(this.isAttributeSet("emphasis")){x(A,"emphasis",this.emphasis.toString())}if(this.isAttributeSet("strong")){x(A,"strong",this.strong.toString())}return A};d.fromXml=function(A){var z=new d();if(Widgit.Util.hasAttribute(A,"emphasis")){z.setAttributeFromDom(A,"emphasis",t.BOOLEAN,false)}if(Widgit.Util.hasAttribute(A,"strong")){z.setAttributeFromDom(A,"strong",t.BOOLEAN,false)}var B=function(C,D){switch(C.nodeName){case"cc":z.ccs[z.ccs.length]=D;break;case"text":if(z.text){throw new Error("cmap element may not have two text elements")}else{z.text=D}break}};z.addChildrenFromDom(A,["cc","text"],B);return z};v.CMap=d;function u(){this._init();this.text=""}u.prototype=new m();u.prototype.constructor=u;u.xmlTagName="text";u.attributeNames=[];u.prototype.accept=function(z){z.visitText(this)};u.prototype.toString=function(){return"[text ("+this.text+")]"};u.prototype.toXml=function(A){var z=this.createXmlElement(A,false);z.appendChild(A.createTextNode(this.text));return z};u.prototype.copyProperties=function(z){z.text=this.text};u.fromXml=function(A){var z=new u();for(var B=A.firstChild;B!=null;B=B.nextSibling){if(B.nodeType===Widgit.Util.domNodeType.TEXT_NODE){z.text+=B.nodeValue}}return z};v.Cml_text=u;function f(){this._init()}f.prototype=new m();f.prototype.constructor=f;f.xmlTagName="img";f.attributeNames=["src","width","height","alt","imagemap"];f.attributeDefaults={src:"",width:0,height:0,alt:"",imagemap:""};f.prototype.accept=function(z){z.visitImg(this)};f.prototype.toXml=function(A){var z=this.createXmlElement(A,true);z.setAttribute("src",this.src);if(this.isAttributeSet("width")){x(z,"width",this.width.toString())}if(this.isAttributeSet("height")){x(z,"height",this.height.toString())}if(this.isAttributeSet("alt")){x(z,"alt",this.alt)}if(this.isAttributeSet("imagemap")){x(z,"imagemap",this.imagemap)}return z};f.fromXml=function(A){var z=new f();z.setAttributeFromDom(A,"src",t.STRING,true);z.setAttributeFromDom(A,"width",t.INT,false);z.setAttributeFromDom(A,"height",t.INT,false);z.setAttributeFromDom(A,"alt",t.STRING,false);z.setAttributeFromDom(A,"imagemap",t.STRING,false);return z};v.Img=f;function y(){this._init()}y.prototype=new m();y.prototype.constructor=y;y.xmlTagName="control";y.attributeNames=[];y.prototype.accept=function(z){z.visitControl(this)};y.prototype.toXml=function(z){return null};y.fromXml=function(z){return new y()};v.Control=y;function a(){this._init()}a.prototype=new m();a.prototype.constructor=a;a.xmlTagName="br";a.attributeNames=[];a.prototype.accept=function(z){z.visitBr(this)};a.prototype.toXml=function(z){return this.createXmlElement(z,false)};a.fromXml=function(z){return new a()};v.Br=a;function q(){this._init()}q.prototype=new m();q.prototype.constructor=q;q.xmlTagName="cc";q.attributeNames=["code","base","language","pos","tags","wordlistsource","wordlistentry"];q.attributeDefaults={code:"",base:"",language:w,pos:"",tags:[],wordlistsource:null,wordlistentry:null};q.prototype.getUniqueCodeArray=function(){return[this.getEffectiveAttribute("code"),this.getEffectiveAttribute("base"),this.getEffectiveAttribute("language"),this.getEffectiveAttribute("pos"),this.getEffectiveAttribute("tags"),this.getEffectiveAttribute("wordlistsource"),this.getEffectiveAttribute("wordlistentry")]};q.prototype.getUniqueCode=function(){return Widgit.Util.jsonStringify(this.getUniqueCodeArray())};q.prototype.equals=function(z){return(z instanceof q)&&(this.getUniqueCode()==z.getUniqueCode())};q.prototype.accept=function(z){z.visitCc(this)};q.prototype.toXml=function(A){var z=this.createXmlElement(A,true);z.setAttribute("code",this.code);z.setAttribute("base",this.base);z.setAttribute("pos",this.pos);z.setAttribute("language",this.language);if(this.isAttributeSet("tags")){x(z,"tags",this.tags.join("+"))}if(this.isAttributeSet("wordlistsource")){x(z,"wordlistsource",this.wordlistsource)}if(this.isAttributeSet("wordlistentry")){x(z,"wordlistentry",this.wordlistentry)}return z};q.fromXml=function(z){var A=new q();A.setAttributeFromDom(z,"code",t.STRING,true);A.setAttributeFromDom(z,"base",t.STRING,true);A.setAttributeFromDom(z,"language",t.STRING,true);A.setAttributeFromDom(z,"pos",t.STRING,true);if(Widgit.Util.hasAttribute(z,"tags")){A.setAttribute("tags",z.getAttribute("tags").toString().split("+"))}A.setAttributeFromDom(z,"wordlistsource",t.STRING,false);A.setAttributeFromDom(z,"wordlistentry",t.STRING,false);return A};v.Cc=q;var k={cml:j,body:r,head:n,cp:l,hr:b,cs:h,cc:q,altlist:c,calt:e,cmap:d,text:u,br:a,link:p,img:f,control:y};v.Visitor=function(){};v.Visitor.prototype={visit:function(z){throw new Error("Implementors of Cml.Visitor must implement the visit method")},visitParent:function(z){if(z.cmlParent){z.cmlParent.accept(this)}},visitChildren:function(B){for(var A=0,z=B.children.length;A<z;A++){B.children[A].accept(this)}},visitCp:function(z){this.visit(z)},visitCs:function(z){this.visit(z)},visitCc:function(z){this.visit(z)},visitAltList:function(z){this.visit(z)},visitHr:function(z){this.visit(z)},visitCAlt:function(z){this.visit(z)},visitCMap:function(z){this.visit(z)},visitText:function(z){this.visit(z)},visitBr:function(z){this.visit(z)},visitLink:function(z){this.visit(z)},visitImg:function(z){this.visit(z)},visitControl:function(z){this.visit(z)},visitCml:function(z){this.visit(z)},visitBody:function(z){this.visit(z)},visitHead:function(z){this.visit(z)}};Widgit.Cml=v})();(function(){var f=log4javascript.getLogger("Widgit.CmlUtil");function k(){this.currentElementIndex=0}k.prototype=new Widgit.Cml.Visitor();k.prototype.visit=function(o){o.elementIndex=this.currentElementIndex++;this.visitChildren(o)};function a(){this.insideCMapOrAltList=false;this.topLevelCMapsAndAltLists=[]}a.prototype=new Widgit.Cml.Visitor();Widgit.Util.copyProperties(a.prototype,{visit:function(o){this.visitChildren(o)},visitAltListOrCMap:function(o){Widgit.Util.array_push(this.topLevelCMapsAndAltLists,o)},visitAltList:function(o){this.visitAltListOrCMap(o)},visitCMap:function(o){this.visitAltListOrCMap(o)}});function b(p,o){this.cmlElementType=p;this.firstDescendantOnly=o;this.descendants=[]}b.prototype=new Widgit.Cml.Visitor();b.prototype.visit=function(r){for(var p=0,o=r.children.length;p<o;p++){var q=r.children[p];if(q instanceof this.cmlElementType){Widgit.Util.array_push(this.descendants,q);if(!this.firstDescendantOnly){q.accept(this)}}else{q.accept(this)}}};function j(o,p){this.cmlElementType=o;this.firstAncestorOnly=p;this.ancestors=[]}j.prototype=new Widgit.Cml.Visitor();j.prototype.visit=function(o){if(o.cmlParent!=null){if(o.cmlParent instanceof this.cmlElementType){Widgit.Util.array_push(this.ancestors,o.cmlParent);if(!this.firstAncestorOnly){o.cmlParent.accept(this)}}else{o.cmlParent.accept(this)}}};function g(){this.textBits=[]}g.prototype=new Widgit.Cml.Visitor();Widgit.Util.copyProperties(g.prototype,{visit:function(o){this.visitChildren(o)},visitCp:function(o){if(this.textBits.length>0){this.textBits.push("\n")}this.visit(o)},visitAltList:function(o){this.visitCAlt(o.getFavouredCAlt())},visitText:function(o){this.textBits.push(o.text)},getText:function(){var q="";for(var p=0,o=this.textBits.length;p<o;p++){q+=this.textBits[p];if(p!=o-1&&Widgit.Util.trim(this.textBits[p])!=""){q+=" "}}return q}});function d(o){this.filterFunction=o;this.rootCmlElement=null;this.currentCmlElement=null}d.prototype=new Widgit.Cml.Visitor();Widgit.Util.copyProperties(d.prototype,{visit:function(p){if(this.filterFunction(p)){var o=p.clone(false);if(!this.rootCmlElement){this.rootCmlElement=o}else{this.currentCmlElement.addChild(o)}this.currentCmlElement=o;this.visitChildren(p);this.currentCmlElement=this.currentCmlElement.cmlParent}},visitText:function(o){if(this.filterFunction(o)){var p=o.clone();p.text=Boolean(this.replacementText)?this.replacementText:o.text;this.currentCmlElement.addChild(p)}}});function e(o){return(typeof o==="undefined")}function h(p,s){var r=[];for(var q=0,o=p.length;q<o;q++){if(p[q].equals(s)){Widgit.Util.array_push(r,q)}}return r}function c(z,B,w,y){var A,C={},D,t,q,r=0,x=0,u=0;for(var s=0,F=z.length;s<F;s++){A=w(B,z[s]);for(D=0,t=A.length;D<t;D++){q=A[D];if(!C[s]){C[s]={}}C[s][q]=(!e(C[s-1])&&!e(C[s-1][q-1]))?C[s-1][q-1]+1:1;if(C[s][q]>r){r=C[s][q];x=s+1-r;u=q+1-r}}}var p;if(r===0){p=[{d:z,i:B}]}else{var v,G;for(var E=0;E<r;E++){v=z[x+E];G=B[u+E];f.trace("*** Mapping "+v+" to "+G+" ***");Widgit.Util.array_push(y,[v,G])}p=c(z.slice(0,x),B.slice(0,u),w,y).concat(B.slice(u,u+r),c(z.slice(x+r),B.slice(u+r),w,y))}return p}function l(o,q,p,r){p=p?p:Widgit.Util.array_keys;r=r?r:[];return c(o,q,p,r)}function m(q,p){var o=new d(p);q.accept(o);return o.rootCmlElement}function n(q){var o=false;function p(r){if(r instanceof Widgit.Cml.Cp){if(o){return false}else{o=true}}return true}return m(q,p)}Widgit.CmlUtil={assignElementIndices:function(p){var o=new k();p.accept(o)},extractTopLevelCMapsAndAltLists:function(p){var o=new a();p.accept(o);return o.topLevelCMapsAndAltLists},diffTopLevelCMapsAndAltLists:function(s,q,u){var r=new Date();var t=l(s,q,h,u);var p=new Date();var o=p.getTime()-r.getTime();f.debug("diffTopLevelCMapsAndAltLists done in "+o+"ms.");return t},getAllDescendants:function(q,o){var p=new b(o,false);q.accept(p);return p.descendants},getAllAncestors:function(q,o){var p=new j(o,false);q.accept(p);return p.ancestors},getDescendant:function(q,o){var p=new b(o,true);q.accept(p);return(p.descendants.length>0)?p.descendants[0]:null},getAncestor:function(q,o){var p=new j(o,true);q.accept(p);return(p.ancestors.length>0)?p.ancestors[0]:null},getTopDescendant:function(q,o){var p=this.getAllDescendants(q,o);return(p.length>0)?p[p.length-1]:null},getTopAncestor:function(q,o){var p=this.getAllAncestors(q,o);return(p.length>0)?p[p.length-1]:null},hasDescendant:function(p,o){return this.getDescendant(p,o)!=null},hasAncestor:function(p,o){return this.getAncestor(p,o)!=null},isDescendantOf:function(o,p){for(var q=o;q.cmlParent!=null;q=q.cmlParent){if(q.cmlParent===p){return true}}return false},extractText:function(p){var o=new g();p.accept(o);return o.getText()},filterCml:m,getFirstParagraph:n}})();(function(){var e=log4javascript.getLogger("Widgit.CmlInfo");var a={};var b=function(){};function h(m){this.cmlElement=m;this.visible=false;this.words=[];this.preferredText=null;this.rendered=false}function d(m){this.cmlElement=m}h.prototype={addWord:function(m){Widgit.Util.array_push(this.words,m)},clearWords:function(o){for(var n=0,m=this.words.length;n<m;n++){if(!this.words[n].destroyed){this.words[n].destroy()}}if(o){this.destroyRenderer()}this.words=[]},setCmlElement:d,baseSetCmlElement:d,setRenderer:function(m){this.renderer=m;this.rendered=m.rendered},setPreferredText:function(m){this.preferredText=m},removePreferredText:function(){this.preferredText=null},hasPreferredText:function(){return Boolean(this.preferredText)},hasRenderer:function(){return Boolean(this.renderer)},render:function(m){if(this.rendered){throw new Error("CmlElementInfo '"+this+"' already rendered.")}else{this.renderer.render(m);this.rendered=true}},unrender:function(){this.destroyRenderer()},remove:function(){if(this.rendered){this.renderer.remove();this.rendered=false}},doDestroy:function(){this.destroyRenderer();this.cmlElement=null;this.words=null},destroy:function(){this.doDestroy()},destroyRenderer:function(){e.trace("CmlElementInfo destroyRenderer called on "+this.cmlElement+", renderer "+this.renderer);if(this.rendered){this.renderer.destroy();this.rendered=false}this.renderer=null},toString:function(){return"[CmlElementInfo visible: "+this.visible+", renderer: "+this.renderer+", rendered: "+this.rendered+", words: ("+this.words.join(", ")+"), preferred text: "+this.preferredText+"]"},toBaseJsonObject:function(){var m={type:"CmlElementInfo",cmlElementIndex:this.cmlElement.elementIndex};if(this.hasPreferredText()){m.preferredText=this.preferredText}return m},toJsonObject:function(){return this.toBaseJsonObject()},copyPropertiesFromJson:function(n){if(this.cmlElement.elementIndex===n.cmlElementIndex){if(typeof n.preferredText!=="undefined"){this.preferredText=n.preferredText}}else{var m="Widgit.CmlInfo.CmlElementInfo.copyPropertiesFromJson: Wrong element index on serialized CmlElementInfo. Expected "+this.cmlElement.elementIndex+" but was "+n.cmlElementIndex;e.fatal(m);throw new Error(m)}}};h.fromJson=function(p,o){e.debug("CmlElementInfo.fromJson: JSON: "+Widgit.Util.jsonStringify(p)+", cmlElement: "+o);if(p.type==="CmlElementInfo"){var m=new h(o);m.copyPropertiesFromJson(p);return m}else{var n="Widgit.CmlInfo.CmlElementInfo.fromJson: Wrong type on serialized CmlElementInfo. Expected 'CmlElementInfo' but was '"+p.type+"'";e.fatal(n);throw new Error(n)}};a.CmlElementInfo=h;function j(m){this.cmlElement=m;this.altList=m;this.words=[];this.preferredAltIndex=-1;this.visible=false;this.choosableFrom=true}j.prototype=new h();j.prototype.setCmlElement=function(m){this.baseSetCmlElement(m);this.altList=m};j.prototype.hasPreferredAltIndex=function(){return(this.preferredAltIndex>=0)};j.prototype.toString=function(){return"[AltListInfo visible: "+this.visible+", renderer: "+this.renderer+", rendered: "+this.rendered+", choosableFrom: "+this.choosableFrom+", preferredAltIndex: "+this.preferredAltIndex+", words: ("+this.words.join(", ")+"), preferred text: "+this.preferredText+"]"};j.prototype.destroy=function(){this.doDestroy();this.altList=null};j.prototype.toJsonObject=function(){var m=this.toBaseJsonObject();m.type="AltListInfo";m.hashCode=this.altList.getHashCode();if(this.hasPreferredAltIndex()){m.preferredAltIndex=this.preferredAltIndex}return m};j.prototype.copyAltListInfoPropertiesFromJson=function(m){if(typeof m.preferredAltIndex!=="undefined"){this.preferredAltIndex=m.preferredAltIndex}};j.prototype.hasAlternatives=function(){return this.choosableFrom&&(this.altList.children.length>2)};j.fromJson=function(p,o){e.debug("AltListInfo.fromJson: JSON: "+Widgit.Util.jsonStringify(p)+", altList: "+o);if(p.type==="AltListInfo"){var n=new j(o);n.copyPropertiesFromJson(p);n.copyAltListInfoPropertiesFromJson(p);o.hashCode=p.hashCode;return n}else{var m="Widgit.CmlInfo.AltListInfo.fromJson: Wrong type on serialized AltListInfo. Expected 'AltListInfo' but was '"+p.type+"'";e.fatal(m);throw new Error(m)}};a.AltListInfo=j;function c(m){this.cmlElement=m;this.cMap=m;this.words=[];this.visible=false;this.strong=false;this.emphasis=false}c.prototype=new h();c.prototype.setCmlElement=function(m){this.baseSetCmlElement(m);this.cMap=m};c.prototype.toString=function(){return"[CMapInfo visible: "+this.visible+", renderer: "+this.renderer+", rendered: "+this.rendered+", words: ("+this.words.join(", ")+"), preferred text: "+this.preferredText+", strong: "+this.strong+", emphasis: "+this.emphasis+"]"};c.prototype.setTextDomNode=function(m){this.textDomNode=m};c.prototype.setSymbolsDomNode=function(m){this.symbolsDomNode=m};c.prototype.destroy=function(){this.doDestroy();this.cMap=null};c.prototype.toJsonObject=function(){var m=this.toBaseJsonObject();m.type="CMapInfo";if(this.strong){m.strong=true}if(this.emphasis){m.emphasis=true}return m};c.prototype.copyAltListInfoPropertiesFromJson=function(m){if(typeof m.strong!=="undefined"){this.strong=m.strong}if(typeof m.emphasis!=="undefined"){this.emphasis=m.emphasis}};c.fromJson=function(p,n){e.debug("CMapInfo.fromJson: JSON: "+Widgit.Util.jsonStringify(p)+", cMap: "+n);if(p.type==="CMapInfo"){var m=new c(n);m.copyPropertiesFromJson(p);m.copyAltListInfoPropertiesFromJson(p);return m}else{var o="Widgit.CmlInfo.CMapInfo.fromJson: Wrong type on serialized CMapInfo. Expected 'CMapInfo' but was '"+p.type+"'";e.fatal(o);throw new Error(o)}};a.CMapInfo=c;function l(){}l.prototype={render:b,remove:b,destroy:b};a.CmlElementRenderer=l;function f(o,p,m,n){this.cmlElement=p;this.hasAlternatives=(this.cmlElement instanceof Widgit.Cml.AltList)||Widgit.CmlUtil.hasAncestor(this.cmlElement,Widgit.Cml.AltList);this.isReplacementText=m;this.renderer=n;this.rendered=false;this.destroyed=false;this.visibleCMap=null;this.spellChecked=false;this.isSpelledCorrectly=true;this.setText(o);this.renderer.bindToWord(this)}f.prototype={render:function(m){if(this.rendered){throw new Error("Word '"+this+"' already rendered.")}else{this.renderer.render(m);this.rendered=true}},setText:function(p){var n=p.split(/ +/);this.spellCheckWords=[];for(var o=0,m=n.length;o<m;o++){this.spellCheckWords[o]=new k(n[o],this)}},redraw:function(){this.renderer.redraw()},remove:function(){if(this.rendered){this.renderer.remove();this.rendered=false}},destroy:function(){e.info("Word "+this+" being destroyed");if(this.rendered){this.renderer.destroy();this.renderer=null;this.rendered=false}if(this.spellCheckWords){for(var n=0,m=this.spellCheckWords.length;n<m;n++){this.spellCheckWords[n].destroy()}this.spellCheckWords=null}this.cmlElement=null;this.visibleCMap=null;this.destroyed=true},toString:function(){return this.spellCheckWords.join(" ")},toJsonObject:function(){return{text:this.text,cmlElementIndex:this.cmlElement.elementIndex,isReplacementText:this.isReplacementText}}};a.Word=f;function k(n,m){this.word=m;this.spellChecked=false;this.isSpelledCorrectly=true;this.hyphenated=false;this.suggestions=[];this.setText(n)}k.regex=/^(\W*)\b(.*)\b(\W*)$/;k.hyphenRegex=/^(\w+)(-\w+)+$/;k.prototype={setText:function(n){this.text=n;var m=k.regex.exec(this.text);if(m){this.prefix=m[1];this.wordText=m[2];this.suffix=m[3]}else{this.prefix="";this.wordText=n;this.suffix=""}this.hyphenated=k.hyphenRegex.test(n);e.debug("Created spell check word "+this.text+" with prefix "+this.prefix+", word text "+this.wordText+", suffix "+this.suffix+", hyphenated "+this.hyphenated)},changeText:function(m){this.setText(m)},setSpellChecked:function(o,n){this.isSpelledCorrectly=this.hyphenated||o;this.spellChecked=true;if(o){this.suggestions.length=0}else{for(var p=0,m=n.length;p<m;p++){this.suggestions[p]=this.prefix+n[p]+this.suffix}}},toString:function(){return this.text},destroy:function(){this.word=null}};function g(){}g.prototype={bindToWord:function(m){this.word=m},render:b,redraw:b,changeText:b,remove:b,destroy:b};a.WordRenderer=g;Widgit.CmlInfo=a})();(function(){var h=log4javascript.getLogger("Widgit.EditorUtil");var c=Widgit.Util;var t=Widgit.Cml;var N=Widgit.CmlUtil;var z=Widgit.CmlInfo;function r(R,Q){var S=c.getDocument(R);return R.appendChild(S.createElement(Q))}function u(R,Q){this.cml=R?R:new t.Cml();this.cmlId=this.cml.id;this.cmlElementInfos=Q?Q:{}}function E(R,Q){return R.cmlElementIndex-Q.cmlElementIndex}u.prototype={getCmlElementInfo:function(Q){return this.cmlElementInfos[Q.elementIndex]},dumpCmlElement:function(S){var Q=this;var R=function(U){var T=Q.getCmlElementInfo(U);return T.toString()};return S.dump("",R)},getTopLevelAltListsAndCMaps:function(){if(!this.topLevelAltListsAndCMaps){this.topLevelAltListsAndCMaps=Boolean(this.cml)?N.extractTopLevelCMapsAndAltLists(this.cml):[]}return this.topLevelAltListsAndCMaps},getTopLevelAltListsAndCMapInfos:function(){var S,T=[];if(this.topLevelAltListsAndCMaps){for(var R=0,Q=this.topLevelAltListsAndCMaps.length;R<Q;R++){S=this.getCmlElementInfo(this.topLevelAltListsAndCMaps[R]);c.array_push(T,S)}}return T},getVisibleCMaps:function(R){R=R?R:this.cml;if(R){var Q=new P(this);R.accept(Q);return Q.visibleCMaps}return[]},getParagraphs:function(){if(this.cml){return N.getAllDescendants(this.cml,t.Cp)}return[]},getVisibleConceptCount:function(R){var Q=new F(this);R.accept(Q);return Q.visibleConceptCount},getWords:function(R){R=R?R:this.cml;if(R){var Q=new n(this);R.accept(Q);return Q.words}return[]},createMissingCmlInfos:function(R){var Q=new B(this.cmlElementInfos,R);this.cml.accept(Q)},setCmlElementInfoRendered:function(S,R){var Q=new K(this,R);S.accept(Q)},unrenderCmlElementInfo:function(S,Q){var R=new k(this,Q);S.accept(R)},serializeCmlElementInfos:function(){var R=[];for(var Q in this.cmlElementInfos){h.debug("serializeCmlElementInfos: key is "+Q+", value is "+this.cmlElementInfos[Q]+", "+this.cmlElementInfos[Q].cmlElement);if(this.cmlElementInfos[Q] instanceof z.CmlElementInfo){c.array_push(R,this.cmlElementInfos[Q].toJsonObject())}}R.sort(E);return R},getCmlXml:function(){return this.cml?this.cml.toSerializedXml():""}};Widgit.SymbolEditorContent=u;function j(R,Q,T,S){this.cmlXml=R;this.altListHashes=Q;this.sitePreferredSymbols=T;this.textSymbolised=S}Widgit.EditorCmlDataItem=j;function x(Q){this.editorContent=Q;this.cachedSymbols={};this.cachedSpellChecks={};this.siteAltListPreferences={};this.altListPreferences={};this.replacementTextByText={};this.replacementTextByCmlElement={};this.cachedCmlByText={}}x.prototype={getReplacementTextLookUpKey:function(Q){if(Q instanceof Widgit.Cml.CAlt){return""+Q.getHashCode()+" "+Q.getAltList().getHashCode()}else{return Q.getHashCode()}},applyTextReplacement:function(V,U,R){h.debug("EditorState.applyTextReplacement "+R+", new text: "+U);var T=this.editorContent.getCmlElementInfo(V);if(T.hasPreferredText()&&R){var Q=T.preferredText;this.removeReplacementTextFromLookUpTables(V,Q)}else{var S=new e(this.editorContent,true);V.accept(S)}T.setPreferredText(U);if(R){this.addReplacementTextToLookUpTables(V,U)}},removeTextReplacement:function(U,R){h.debug("EditorState.removeTextReplacement "+R);var T=this.editorContent.getCmlElementInfo(U);if(T.hasPreferredText()){var Q=T.preferredText;T.removePreferredText();var S=new e(this.editorContent,false);U.accept(S);if(R){this.removeReplacementTextFromLookUpTables(U,Q)}}},removeReplacementTextFromLookUpTables:function(S,R){h.debug("EditorState.removeReplacementTextFromLookUpTables");if(this.replacementTextByText[R]){var Q=this.getReplacementTextLookUpKey(S);this.replacementTextByText[R][Q]=false;if(this.replacementTextByCmlElement[Q]){delete this.replacementTextByCmlElement[Q]}}},addReplacementTextToLookUpTables:function(S,R){h.debug("EditorState.addReplacementTextToLookUpTables");if(!this.replacementTextByText[R]){this.replacementTextByText[R]={}}var Q=this.getReplacementTextLookUpKey(S);this.replacementTextByText[R][Q]=true;this.replacementTextByCmlElement[Q]=R},applyStoredTextReplacements:function(R){h.debug("applyStoredTextReplacements called",this.replacementTextByCmlElement);var Q=new d(this);R.accept(Q)},populateLookUpTables:function(R){h.debug("EditorState.populateLookUpTables on "+R);var Q=new a(this);R.accept(Q)},isCAltSiteDefault:function(Q){var S=Q.cmlParent;var R=this.siteAltListPreferences[S.getHashCode()];if(typeof R!="undefined"){return(Q===S.children[R])}return false},getFavouredAlternative:function(T){var S=this.editorContent.getCmlElementInfo(T);if(Boolean(S)&&S.hasPreferredAltIndex()){return T.children[S.preferredAltIndex]}var R=this.altListPreferences[T.getHashCode()];if(typeof R!="undefined"){return T.children[R]}else{var Q=this.siteAltListPreferences[T.getHashCode()];if(typeof Q!="undefined"){return T.children[Q]}else{return T.getFavouredCAlt()}}},setDefaultTopLevelPreferredAlternatives:function(){var R=this.editorContent.getTopLevelAltListsAndCMapInfos();var T;for(var S=0,Q=R.length;S<Q;++S){T=R[S];if((T instanceof z.AltListInfo)&&!T.hasPreferredAltIndex()){T.preferredAltIndex=this.getFavouredAlternative(T.altList).getAltIndex()}}},saveChoiceOfAlternative:function(R){var Q=new w(this);R.accept(Q);return Q.cAltsVisited},getCurrentChosenContainerElement:function(R){var Q=new l(this);R.accept(Q);return Q.chosenElement},updateVisibility:function(R){var Q=new o(this);R.accept(Q)},altListGetReplacedText:function(S){var Q=this.getFavouredAlternative(S);var R=this.editorContent.getCmlElementInfo(Q);return R.preferredText},cMapGetReplacedText:function(R){var Q=this.editorContent.getCmlElementInfo(R);return Q.preferredText},altListHasReplacedText:function(S){var Q=this.getFavouredAlternative(S);var R=this.editorContent.getCmlElementInfo(Q);return R.hasPreferredText()},altListIsIndivisible:function(Q){return !N.hasDescendant(Q,t.AltList)||this.altListHasReplacedText(Q)},clearSymbolCache:function(){this.cachedSymbols={}},getReadOnlyCml:function(){var Q=new H(this);this.editorContent.cml.accept(Q);return Q.rootCmlElement},checkWordSpelling:function(R){var Q=false;if(!R.spellChecked){var S=this.cachedSpellChecks[R.wordText];if(S){R.setSpellChecked(S.correct,S.suggestions);Q=!S.correct}}if(Q){R.word.redraw()}return Q},applySitePreferredSymbols:function(S){this.siteAltListPreferences={};for(var R=0,Q=S.length;R<Q;R++){this.siteAltListPreferences[S[R].altListHash]=S[R].preferredAltIndex}}};Widgit.SymbolEditorState=x;function f(Q,R){this.editorContent=Q;this.destroyCmlElementInfoRenderer=R}f.prototype=new Widgit.Cml.Visitor();c.copyProperties(f.prototype,{visit:function(Q){this.editorContent.getCmlElementInfo(Q).clearWords(this.destroyCmlElementInfoRenderer);this.visitChildren(Q)}});function O(Q,R){this.editorState=Q;this.applyReplacedText=R;this.textBits=[];this.paraTextBits=[this.textBits];this.visitedCp=false}O.prototype=new Widgit.Cml.Visitor();c.copyProperties(O.prototype,{visit:function(Q){this.visitChildren(Q)},visitCp:function(Q){if(this.visitedCp){this.textBits=[];c.array_push(this.paraTextBits,this.textBits)}else{this.visitedCp=true}this.visit(Q)},visitAltList:function(Q){this.visitCAlt(this.editorState.getFavouredAlternative(Q))},visitCAltOrCMap:function(R){if(this.applyReplacedText){var Q=this.editorState.editorContent.getCmlElementInfo(R);if(Q.hasPreferredText()){c.array_push(this.textBits,Q.preferredText);return}}this.visit(R)},visitCAlt:function(Q){this.visitCAltOrCMap(Q)},visitCMap:function(Q){this.visitCAltOrCMap(Q)},visitText:function(Q){c.array_push(this.textBits,Q.text)},getText:function(){var S=[];for(var R=0,Q=this.paraTextBits.length;R<Q;++R){S[R]=this.paraTextBits[R].join(" ")}return S.join("\n")}});function e(Q,R){this.editorContent=Q;this.lock=R}e.prototype=new Widgit.Cml.Visitor();e.prototype.visit=function(Q){this.visitParent(Q)};e.prototype.visitAltList=function(R){var Q=this.editorContent.getCmlElementInfo(R);Q.choosableFrom=!this.lock;this.visit(R)};function d(Q){this.editorState=Q}d.prototype=new Widgit.Cml.Visitor();c.copyProperties(d.prototype,{visit:function(Q){this.visitChildren(Q)},visitAltList:function(T){var Q=this.editorState.getFavouredAlternative(T);var R=this.editorState.getReplacementTextLookUpKey(Q);var S=this.editorState.replacementTextByCmlElement[R];h.debug("StoredTextReplacementsApplier checking for replacement text for key "+R);if(S){h.debug("StoredTextReplacementsApplier found replacement text "+S);this.editorState.applyTextReplacement(Q,S,false)}},visitCMap:function(R){var Q=this.editorState.getReplacementTextLookUpKey(R);var S=this.editorState.replacementTextByCmlElement[Q];if(S){this.editorState.applyTextReplacement(R,S,false)}}});function a(Q){this.editorState=Q}a.prototype=new Widgit.Cml.Visitor();c.copyProperties(a.prototype,{visit:function(Q){this.visitChildren(Q)},visitCAltOrCMap:function(S){var R=this.editorState.editorContent.getCmlElementInfo(S);if(R.hasPreferredText()){var Q=new e(this.editorState.editorContent,true);S.accept(Q);this.editorState.addReplacementTextToLookUpTables(S,R.preferredText)}},visitCAlt:function(Q){this.visitCAltOrCMap(Q)},visitAltList:function(R){var Q=this.editorState.editorContent.getCmlElementInfo(R);if(Q.hasPreferredAltIndex()){h.debug("EditorStateLookUpTablesPopulator.visitAltList setting preference for "+R);this.editorState.saveChoiceOfAlternative(R.children[Q.preferredAltIndex])}this.visit(R)},visitCMap:function(Q){this.visitCAltOrCMap(Q)}});function L(Q){this.editorState=Q;this.inCMap=false;this.foundNonBlankCc=false}L.prototype=new Widgit.Cml.Visitor();c.copyProperties(L.prototype,{visit:function(Q){if(!this.foundNonBlankCc){this.visitChildren(Q)}},visitChildren:function(S){for(var R=0,Q=S.children.length;R<Q&&!this.foundNonBlankCc;R++){S.children[R].accept(this)}},visitCMap:function(Q){this.inCMap=true;this.visit(Q)},visitCc:function(R){if(this.inCMap){var Q=this.editorState.cachedSymbols[R.getUniqueCode()];if(!Q.blank){this.foundNonBlankCc=true}}}});function A(Q){this.editorState=Q;this.jsonArray=[];this.currentJsonCMap=null}A.prototype=new Widgit.Cml.Visitor();c.copyProperties(A.prototype,{visit:function(Q){this.visitChildren(Q)},visitCMap:function(Q){this.currentJsonCMap=[];c.array_push(this.jsonArray,this.currentJsonCMap);this.visit(Q)},visitCc:function(R){var Q=this.editorState.cachedSymbols[R.getUniqueCode()].symbols;c.array_push(this.currentJsonCMap,Q)},getHash:function(){return Widgit.Util.jsonStringify(this.jsonArray)}});function J(Q,R){this.editorState=Q;this.allowOneBlank=R}J.prototype=new Widgit.Cml.Visitor();c.copyProperties(J.prototype,{alternativeIsNonBlank:function(Q){var R=new L(this.editorState);Q.accept(R);return R.foundNonBlankCc},visit:function(Q){this.visitChildren(Q)},visitAltList:function(X){var ab={};var aa=[];var T=null;h.trace("CmlBlankAndDuplicateAltRemover: visitAltList "+X);for(var U=0,W=X.children.length;U<W;U++){var Y=X.children[U];if(this.alternativeIsNonBlank(Y)){var V=new A(this.editorState);Y.accept(V);var Z=V.getHash();h.trace("Got hash "+Z+" for cAlt "+Y);if(!ab[Z]){c.array_push(aa,Y);ab[Z]=true}}else{T=Y}}if(aa.length==X.children.length){h.trace("CmlBlankAndDuplicateAltRemover: no blanks or duplicates")}else{if(aa.length==0){h.trace("CmlBlankAndDuplicateAltRemover: all blanks, replacing with CMap containing text");var S=new Widgit.Cml.CMap();var Q=new Widgit.Cml.Cml_text();Q.text=q(this.editorState,X,false);S.addChild(Q);S.text=Q;X.cmlParent.replaceChild(X,S)}else{if(aa.length==1){h.trace("CmlBlankAndDuplicateAltRemover: one distinct non-blank");if(this.allowOneBlank){X.removeAllChildren();X.addChildren(aa);X.addChild(T)}else{var R=c.array_clone(aa[0].children);X.cmlParent.replaceChild(X,R)}}else{h.trace("CmlBlankAndDuplicateAltRemover: some blanks but still 2 or more distinct non blanks");X.removeAllChildren();X.addChildren(aa);if(this.allowOneBlank){X.addChild(T)}}}}if(N.hasDescendant(X,t.AltList)){this.visit(X)}}});function G(Q,R){this.editorState=Q;this.wordRendererFactory=R}G.prototype=new Widgit.Cml.Visitor();c.copyProperties(G.prototype,{visit:function(Q){this.visitChildren(Q)},visitAltList:function(W){var S,V=this.editorState.altListGetReplacedText(W);if(V){h.trace("WordCreator.visitAltList creating a new word from the replacement text "+V);S=this.createWord(V,W,true);this.editorState.editorContent.getCmlElementInfo(W).addWord(S)}else{var U=q(this.editorState,W,false);if(U.indexOf(" ")==-1){h.trace("WordCreator.visitAltList creating a new word from the text "+U);S=this.createWord(U,W,false);this.editorState.editorContent.getCmlElementInfo(W).addWord(S)}else{if(N.hasDescendant(W,t.AltList)){this.visit(W)}else{h.trace("WordCreator.visitAltList creating new words from the text "+U);var T=U.split(" ");for(var R=0,Q=T.length;R<Q;++R){S=this.createWord(T[R],W,false);this.editorState.editorContent.getCmlElementInfo(W).addWord(S)}this.editorState.editorContent.getCmlElementInfo(W).id=Math.random()}}}},visitCMap:function(Q){var R,S=this.editorState.cMapGetReplacedText(Q);if(S){h.trace("WordCreator.visitCMap creating a new word from the replacement text "+S);R=this.createWord(S,Q,true);this.editorState.editorContent.getCmlElementInfo(Q).addWord(R)}else{if(Q.text.text.indexOf(" ")==-1||!N.hasAncestor(Q,t.CAlt)){h.trace("WordCreator.visitCMap creating a new word from the text "+Q.text.text);R=this.createWord(Q.text.text,Q,false);this.editorState.editorContent.getCmlElementInfo(Q).addWord(R)}}},createWord:function(T,U,Q){var R=this.wordRendererFactory();var S=new z.Word(T,U,Q,R);this.editorState.checkWordSpelling(S);return S}});function l(Q){this.editorState=Q;this.chosenElement=null}l.prototype=new Widgit.Cml.Visitor();c.copyProperties(l.prototype,{visit:function(Q){if(!this.editorState.editorContent.getCmlElementInfo(Q).visible){this.visitParent(Q)}},visitAltList:function(Q){if(this.editorState.editorContent.getCmlElementInfo(Q).visible){this.chosenElement=this.editorState.getFavouredAlternative(Q)}else{this.visitParent(Q)}},visitCAlt:function(Q){if(this.editorState.editorContent.getCmlElementInfo(Q).visible){this.chosenElement=Q}},visitCMap:function(Q){if(N.hasAncestor(Q,Widgit.Cml.AltList)){this.visitParent(Q)}else{this.chosenElement=Q}}});function P(Q){this.editorContent=Q;this.visibleCMaps=[]}P.prototype=new Widgit.Cml.Visitor();c.copyProperties(P.prototype,{visit:function(Q){this.visitChildren(Q)},visitCMap:function(Q){if(this.editorContent.getCmlElementInfo(Q).visible){c.array_push(this.visibleCMaps,Q)}}});function n(Q){this.editorContent=Q;this.words=[]}n.prototype=new Widgit.Cml.Visitor();c.copyProperties(n.prototype,{visit:function(Q){this.visitChildren(Q)},visitCMapOrAltList:function(R){var Q=this.editorContent.getCmlElementInfo(R);if(Q.visible){this.words=this.words.concat(Q.words)}},visitAltList:function(Q){this.visitCMapOrAltList(Q)},visitCMap:function(Q){this.visitCMapOrAltList(Q)}});function w(Q){this.editorState=Q;this.cAltsVisited=[]}w.prototype=new Widgit.Cml.Visitor();w.prototype.visit=function(Q){this.visitParent(Q)};w.prototype.visitCAlt=function(R){var T=this.editorState.editorContent.getCmlElementInfo(R.cmlParent);var S=R.getAltIndex();T.preferredAltIndex=S;var Q=R.cmlParent.getHashCode();this.editorState.altListPreferences[Q]=S;c.array_push(this.cAltsVisited,R);this.visit(R)};function I(Q){this.editorState=Q;this.divisibleAltListStack=[]}I.prototype=new Widgit.Cml.Visitor();c.copyProperties(I.prototype,{visit:function(Q){this.visitChildren(Q)},visitAltList:function(T){if(this.editorState.altListIsIndivisible(T)){var S=this.editorState.editorContent.getCmlElementInfo(T).words;for(var R=0,Q=S.length;R<Q;++R){this.addWord(S[R])}}else{c.array_push(this.divisibleAltListStack,T);this.editorState.editorContent.getCmlElementInfo(T).words=[];this.visit(T);c.array_pop(this.divisibleAltListStack)}},visitCMap:function(S){var T=this.editorState.editorContent.getCmlElementInfo(S).words;if(T.length){for(var R=0,Q=T.length;R<Q;++R){this.addWord(T[R])}}},addWord:function(S){for(var R=0,Q=this.divisibleAltListStack.length;R<Q;R++){this.editorState.editorContent.getCmlElementInfo(this.divisibleAltListStack[R]).addWord(S)}}});function B(Q,R){this.cmlElementInfos=Q;this.jsonCmlElementInfoObjects=R;this.newCreatedCount=0;this.alreadyExistedCount=0}B.prototype=new Widgit.Cml.Visitor();c.copyProperties(B.prototype,{alreadyExists:function(Q){return(typeof this.cmlElementInfos[Q.elementIndex]!=="undefined")},visit:function(Q){if(!this.alreadyExists(Q)){this.newCreatedCount++;this.cmlElementInfos[Q.elementIndex]=Boolean(this.jsonCmlElementInfoObjects)?z.CmlElementInfo.fromJson(this.jsonCmlElementInfoObjects[Q.elementIndex],Q):new z.CmlElementInfo(Q)}else{this.alreadyExistedCount++}this.visitChildren(Q)},visitAltList:function(Q){if(!this.alreadyExists(Q)){this.newCreatedCount++;this.cmlElementInfos[Q.elementIndex]=Boolean(this.jsonCmlElementInfoObjects)?z.AltListInfo.fromJson(this.jsonCmlElementInfoObjects[Q.elementIndex],Q):new z.AltListInfo(Q)}else{this.alreadyExistedCount++}this.visitChildren(Q)},visitCMap:function(Q){if(!this.alreadyExists(Q)){this.newCreatedCount++;this.cmlElementInfos[Q.elementIndex]=Boolean(this.jsonCmlElementInfoObjects)?z.CMapInfo.fromJson(this.jsonCmlElementInfoObjects[Q.elementIndex],Q):new z.CMapInfo(Q)}else{this.alreadyExistedCount++}this.visitChildren(Q)}});function o(Q){this.editorState=Q;this.insideUnfavouredCAlt=false}o.prototype=new Widgit.Cml.Visitor();c.copyProperties(o.prototype,{visit:function(Q){this.editorState.editorContent.getCmlElementInfo(Q).visible=!this.insideUnfavouredCAlt;this.visitChildren(Q)},visitAltList:function(T){if(this.insideUnfavouredCAlt){this.visit(T)}else{this.editorState.editorContent.getCmlElementInfo(T).visible=true;var S=this.editorState.getFavouredAlternative(T);for(var R=0,Q=T.children.length;R<Q;R++){this.insideUnfavouredCAlt=(T.children[R]!==S);T.children[R].accept(this)}this.insideUnfavouredCAlt=false}}});function H(Q){this.editorState=Q;this.rootCmlElement=null;this.currentCmlElement=null;this.replacementText=null}H.prototype=new Widgit.Cml.Visitor();c.copyProperties(H.prototype,{doVisit:function(R){var Q=R.clone(false);h.trace("cmlElementCopy: "+Q+", this.currentCmlElement: "+this.currentCmlElement);if(this.currentCmlElement===null){this.rootCmlElement=Q}else{this.currentCmlElement.addChild(Q)}this.currentCmlElement=Q;this.visitChildren(R);this.currentCmlElement=this.currentCmlElement.cmlParent;return Q},visit:function(Q){this.doVisit(Q)},visitAltList:function(R){var Q=this.editorState.getFavouredAlternative(R);Q.accept(this)},visitCAlt:function(R){var Q=this.editorState.editorContent.getCmlElementInfo(R);if(Q.hasPreferredText()){this.replacementText=Q.preferredText}this.visitChildren(R);if(Q.hasPreferredText()){this.replacementText=null}},visitCMap:function(R){var Q=this.editorState.editorContent.getCmlElementInfo(R);if(Q.hasPreferredText()){this.replacementText=Q.preferredText}var S=this.doVisit(R);if(Q.hasPreferredText()){this.replacementText=null}if(Q.strong){S.strong=true}if(Q.emphasis){S.emphasis=true}},visitText:function(Q){var R=Q.clone();R.text=Boolean(this.replacementText)?this.replacementText:Q.text;this.currentCmlElement.addChild(R)}});function K(Q,R){this.editorContent=Q;this.rendered=R}K.prototype=new Widgit.Cml.Visitor();c.copyProperties(K.prototype,{visit:function(Q){this.editorContent.getCmlElementInfo(Q).rendered=!this.rendered;this.visitChildren(Q)}});function k(R,Q){this.editorContent=R;this.destroyFirstVisited=Q;this.isFirst=true}k.prototype=new Widgit.Cml.Visitor();c.copyProperties(k.prototype,{visit:function(Q){if(this.isFirst){this.isFirst=false;this.visitChildren(Q);if(this.destroyFirstVisited){this.editorContent.getCmlElementInfo(Q).unrender()}}else{this.visitChildren(Q);this.editorContent.getCmlElementInfo(Q).unrender()}}});function F(Q){this.editorContent=Q;this.visibleConceptCount=0}F.prototype=new Widgit.Cml.Visitor();c.copyProperties(F.prototype,{visit:function(Q){this.visitChildren(Q)},visitCMap:function(Q){if(this.editorContent.getCmlElementInfo(Q).visible){this.visit(Q)}},visitCc:function(){this.visibleConceptCount++}});function p(Q){this.serverHashCodesByElementIndex=Q;this.serverHashCodesByJsHashCode={};this.currentElementIndex=0}p.prototype=new Widgit.Cml.Visitor();c.copyProperties(p.prototype,{visit:function(Q){this.currentElementIndex++;this.visitChildren(Q)},visitAltList:function(R){var Q=this.serverHashCodesByElementIndex[this.currentElementIndex.toString()];if(Q){h.info("Assigned hashcode "+Q+" to altlist "+R+" with id "+R.getCmlId());R.hashCode=Q}else{throw new Error("Expected server hash code for AltList with element index "+this.currentElementIndex)}this.visit(R)}});function m(T,Q,R){var S=new f(Q,R);T.accept(S)}function q(Q,T,S){var R=new O(Q,S);T.accept(R);return R.getText()}function y(T,Q,R){var S=new G(Q,R);T.accept(S)}function C(S,Q){var R=new I(Q);S.accept(R)}function s(Q){var R=N.getAncestor(Q,t.AltList);if(R){return N.getAllDescendants(R,t.CMap)}return[Q]}function D(V,Q,S){var T=new Date();h.trace("Removing alternatives with blank and duplicate symbols from CML");var U=new J(Q,S);V.accept(U);var R=new Date();h.debug("Removing alternatives with blank and duplicate symbols from CML completed in "+(R.getTime()-T.getTime())+"ms");return V}function v(T,U,R){var S=T.createElement("div");S.className="cml_symbol";S.title=U;var Q=r(S,"div");Q.className="blanksymbol";Q.style.height=""+R+"px";Q.appendChild(T.createTextNode(" "));return S}function b(S,T,Q){var R=S.createElement("img");R.src=Q+"nosymbol_50.gif";R.alt="No symbol";R.title='Click to select no symbol for "'+T+'"';R.className="cml_symbol";return R}function M(ac,ag,W,ah,X){var ad=ag.createElement("table");ad.className="cml_symbol";ad.cellSpacing=0;ad.cellPadding=0;var Q=r(ad,"tbody");var U=(ac.topleft||ac.bottomleft||ac.topright||ac.bottomright)?2:1;var ae,R,T,S,Y,ab,ai;var aa=0;function Z(){h.trace("Image "+this.src+" loaded");aa--;if(aa==0){h.trace("Symbol loaded",ac);if(typeof X=="function"){X()}}c.removeDomEventListener(this,"load",Z,false)}function af(al,ak){var aj=ag.createElement("img");aj.src=al;aj.alt=(ak?ak:"");c.addDomEventListener(aj,"load",Z,false);aa++;return aj}for(var V=0;V<U;V++){T=r(Q,"tr");if(ac.topleft||ac.bottomleft){S=(V==0)?ac.topleft:ac.bottomleft;Y=r(T,"td");Y.appendChild(af(S))}if(ac.fullleft&&(V==0)){Y=r(T,"td");if(U==2){Y.rowSpan=2}Y.appendChild(af(ac.fullleft))}if(V==0){Y=r(T,"td");if(U==2){Y.rowSpan=2}if(ac.top){h.trace("Rendering top and main");ae=r(Y,"table");ae.cellSpacing=0;ae.cellPadding=0;R=r(ae,"tbody");ab=r(r(R,"tr"),"td");ab.appendChild(af(ac.top));ab=r(r(R,"tr"),"td");ab.appendChild(af(ac.main),W)}else{h.trace("Rendering main "+ac.main);Y.appendChild(af(ac.main,W))}}if(ac.fullright&&(V==0)){Y=r(T,"td");if(U==2){Y.rowSpan=2}Y.appendChild(af(ac.fullright))}if(ac.topright||ac.bottomright){S=(V==0)?ac.topright:ac.bottomright;Y=r(T,"td");Y.appendChild(af(S))}}return ad}function g(S,R){var Q=new p(R);S.accept(Q)}Widgit.SymbolEditorUtil={clearWords:m,extractText:q,createWords:y,updateWords:C,getParallelCMapsForCMap:s,removeBlankAndDuplicateAlternativesFromCml:D,renderBlankSymbol:v,renderSymbol:M,renderBlankChooserSymbol:b,assignAltListHashCodes:g}})();(function(){var g=log4javascript.getLogger("Widgit.SymbolEditor");var E="\r\n";var x=Widgit.SymbolEditorUtil;var b=Widgit.Util;var v=Widgit.Cml;var H=Widgit.CmlUtil;var B=Widgit.CmlInfo;var I=Widgit.Symgate;var n=Widgit.Settings;var K={CHANGE_ACTIVE_CMAP:"changeactivecmap",CHANGE_SELECTED_CMAPS:"changeselectedcmaps",ERROR:"error",LOAD:"load",UNLOAD:"unload",SAVE:"save",COMPLETEALL:"completeall",DISABLE:"disable"};var z=/\s/;function k(M,L){var N=b.getDocument(M);return M.appendChild(N.createElement(L))}Widgit.SymbolEditor=function(M,Q,L,N){this.containerElement=M;this.serverLog=Widgit.Logging.createServerLog(N.symgate.symgateUrl);var P=N.symgate.useFlashProxy?new I.FlashTransport(N.symgate.flashProxyUrl,N.symgate.requestTimeOut,N.symgate.flashMinimumVersion):new I.XhrTransport(N.symgate.symgateUrl,N.symgate.requestTimeOut);this.symgateClient=new I.SymgateClient(P,N.symgate,Q,L,this.serverLog);this.config=N.editor;this.editorState=new Widgit.SymbolEditorState(new Widgit.SymbolEditorContent(null,{}));this.currentTopLevelElementIndex=0;this.lastTextSymbolised="";this.activeCMap=null;this.activeWord=null;this.selectedWords=[];this.selectedCMaps=[];this.saveAsSingleField=true;this.initialCmlXml="";this.initialCmlElementInfos=[];this.initialSettings={};var O=n.SettingScopeNames;for(var R=0,U=O.length;R<U;++R){this.initialSettings[n.SettingScopes[O[R]]]={}}this.initialSettings[n.SettingScopes.CONTENT].collapseWhitespace=!this.config.honourSpaces;this.initialLinkUrl=null;this.settings=null;this.linkUrl=null;this.noTypingTimer=null;this.editPaneDocument=null;this.drawn=false;this.currentSymbolisationRequest=null;this.cultureCode=this.config.defaultCultureCode;this.currentChooserCmlElement=null;this.setEventTypes([K.CHANGE_ACTIVE_CMAP,K.CHANGE_SELECTED_CMAPS,K.LOAD,K.UNLOAD,K.ERROR,K.SAVE,K.DISABLE]);this.fatalErrorOccurred=false;this.errorIsVisible=false;this.endSessionCalled=false;this.startSessionCalled=false;var T=this;this.dialogWindow=null;this.wordEventHandlers=[{eventHandlerName:"click",handlerFunction:function(Y,X){if(!T.fatalErrorOccurred){g.debug("click, spellCheckWord is "+Y+", visibleCMap is "+Y.word.visibleCMap);T.setActiveWord(Y.word);if(!Y.word.isSpelledCorrectly&&(X.button==2||(Boolean(window.opera)&&X.shiftKey))){b.preventDefault(X);T.suggestSpellings(Y)}else{T.displayAlternatives(Y.word,false)}}}},{eventHandlerName:"contextmenu",handlerFunction:function(Y,X){if(!T.fatalErrorOccurred){if(!Y.isSpelledCorrectly){g.debug("contextmenu, spellCheckWord is "+Y);b.preventDefault(X);T.suggestSpellings(Y)}}}}];this.wordRendererFactory=function(){return new j(T.editPaneDocument,T.wordEventHandlers)};var W=function(){if(!V){V=true;var Z=new Date();T.endSession();T.closeDialog();if(T.drawn){T.textArea.onfocus=null;T.textArea.onkeyup=null;T.textArea.onclick=null;b.purge(T.editPaneDocument);b.purge(T.rootElement)}T.dispatchEvent(K.UNLOAD,null);var Y=new Date();var X=Y.getTime()-Z.getTime();g.info("Unload done in "+X+"ms")}};var V=false;var S=("onbeforeunload" in window);if(!S){S=(function(){var X=document.createElement("div");X.setAttribute("onbeforeunload","");return(typeof X.onbeforeunload=="function")})()}if(S){b.addDomEventListener(window,"beforeunload",W)}b.addDomEventListener(window,"unload",W);this.requestStatus=new b.EventSupport();this.requestStatus.setEventTypes([K.COMPLETEALL]);b.copyProperties(this.requestStatus,{symbolising:false,changingSettings:false,startingSession:false,changingSiteDefaultSymbols:false,setStatus:function(Y,X){this[Y]=X;if(!X&&this.allComplete()){this.dispatchEvent(K.COMPLETEALL,null)}},allComplete:function(){return !(this.symbolising||this.changingSettings||this.startingSession||this.changingSiteDefaultSymbols)}})};Widgit.SymbolEditor.prototype=new b.EventSupport();b.copyProperties(Widgit.SymbolEditor.prototype,{draw:function(){var O=new Date();var V=this;this.rootElement=document.createElement("table");this.rootElement.className="symboleditor";this.rootElement.cellSpacing=3;this.rootElement.cellPadding=0;var T=k(this.rootElement,"tbody");var W=k(T,"tr");var R=k(W,"td");R.colSpan=2;this.drawToolBar(R);W=k(T,"tr");R=k(W,"td");R.colSpan=2;R.className="textareacontainer bevelin";this.textArea=k(R,"textarea");this.textArea.disabled=true;this.textArea.style.height=this.config.textAreaHeight+"px";this.textArea.value="Initializing editor, please wait...";this.textAreaValue=this.textArea.value;this.textAreaTimer=null;this.textAreaMouseDown=false;this.textArea.onmousedown=function(){V.textAreaMouseDown=true};this.textArea.onmouseup=function(){V.textAreaMouseDown=false};this.textArea.onfocus=function(){V.closeDialog();V.textAreaSelectionChanged()};this.textArea.onclick=function(){V.closeDialog();V.textAreaSelectionChanged()};var L=null;this.symboliseTextAreaContent=function(){V.symboliseText(V.textArea.value)};var X=function(){try{window.clearTimeout(L);L=null;V.symboliseTextAreaContent()}catch(aa){V.handleError("Symbolisation failed.",I.errorCodes.GENERAL,true,aa)}};this.textArea.onselect=function(aa){aa=b.getEvent(aa);g.debug("onselect, isMouseDown is "+V.textAreaMouseDown+", shift is "+aa.shiftKey);if(!V.textAreaMouseDown&&!aa.shiftKey){V.textAreaSelectionChanged()}};var U=/[ \r\n]/,N=/[\r\n]/;var P="";this.textArea.onkeydown=function(aa){aa=b.getEvent(aa);switch(aa.keyCode){case 8:case 46:if(this.value!=""){}break}P=this.value};this.textArea.onkeypress=function(ab){ab=b.getEvent(ab);var aa=(typeof ab.which=="number")?ab.which:ab.keyCode;if(aa&&(aa>=32||aa==9||aa==10||aa==13)){var ae=V.textArea.value;var ad=String.fromCharCode(aa).toLowerCase();var ac=b.getTextAreaSelectionEndPoints(this);if(U.test(ad)||(ac.end!=ae.length&&!N.test(ae.charAt(ac.end+1)))){window.clearTimeout(L);L=window.setTimeout(X,V.config.typingSymbolisationDelay)}P=this.value.slice(0,ac.start)+ad+this.value.slice(ac.end)}};this.textArea.onkeyup=function(aa){aa=b.getEvent(aa);switch(aa.keyCode){case 37:case 38:case 39:case 40:V.textAreaSelectionChanged();break;default:if(V.noTypingTimer){V.applyCmlWhenTypingStops()}if(this.value!=P){window.clearTimeout(L);L=window.setTimeout(X,V.config.typingSymbolisationDelay)}break}};W=k(T,"tr");R=k(W,"td");R.style.width=(this.config.editPaneWidth+4)+"px";this.infoMessageElement=k(R,"div");this.infoMessageElement.className="infomessage hidden";this.editWindowContainer=k(R,"div");this.editWindowContainer.style.width=(this.config.editPaneWidth+4)+"px";this.editWindowContainer.style.height=(this.config.editPaneHeight+4)+"px";this.editWindowContainer.className="editwindowcontainer bevelin";this.editWindowContainer.vAlign="top";this.loadingIndicatorElement=k(this.editWindowContainer,"div");this.loadingIndicatorElement.className="usermessage loading hidden";this.loadingIndicatorElement.appendChild(document.createTextNode("Loading..."));this.savingIndicatorElement=k(this.editWindowContainer,"div");this.savingIndicatorElement.className="usermessage saving hidden";this.savingIndicatorElement.appendChild(document.createTextNode("Saving, please wait..."));this.errorIndicatorElement=k(this.editWindowContainer,"div");this.errorIndicatorElement.className="usermessage error hidden";this.errorIndicatorElement.appendChild(document.createTextNode("Error!"));this.errorIndicatorElement.onclick=function(){if(!V.fatalErrorOccurred){V.hideError()}};this.chooserPaneContainer=k(W,"td");this.chooserPaneContainer.style.height=(this.config.editPaneHeight+4)+"px";this.chooserPaneContainer.style.width=this.config.chooserPaneWidth+"px";this.chooserPaneContainer.className="chooserpanecontainer bevelin";this.wysiwygIframe=this.editWindowContainer.appendChild(document.createElement("iframe"));this.wysiwygIframe.frameBorder=0;this.wysiwygIframe.scrolling="auto";this.wysiwygIframe.style.width=this.config.editPaneWidth+"px";this.wysiwygIframe.style.height=this.config.editPaneHeight+"px";this.chooserPane=this.chooserPaneContainer.appendChild(document.createElement("div"));this.chooserPane.className="chooserpane";this.chooserPane.appendChild(document.createTextNode(String.fromCharCode(160)));this.containerElement.appendChild(this.rootElement);function M(ab,ad){var ac;var aa=document.getElementById(ab);if(aa){if(!V.config.allowExistingHiddenInputs){V.abort();ac="Unable to initialize: the "+ad+" hidden input id specified is not unique.";alert(ac);throw new Error(ac)}else{g.warn("Hijacking pre-existing hidden input with id '"+ab+"'.")}}else{aa=document.createElement("input");aa.type="hidden";aa.id=ab;aa.name=aa.id;V.containerElement.parentNode.insertBefore(aa,V.containerElement)}if(!aa.form){V.abort();ac="Unable to initialize: the editor must be inside a <form>...</form> element in order to save the output.";alert(ac);throw new Error(ac)}return aa}this.hiddenInputs={};if(this.saveAsSingleField){this.hiddenInputs.editorContent=M(this.config.editorContentHiddenInputId,"content")}else{if(this.config.saveCml){this.hiddenInputs.cml=M(this.config.cmlHiddenInputId,"CML")}if(this.config.saveReadOnlyCml){this.hiddenInputs.readOnlyCml=M(this.config.readOnlyCmlHiddenInputId,"read-only CML")}if(this.config.saveCmlElementInfos){this.hiddenInputs.cmlElementInfos=M(this.config.cmlElementInfosHiddenInputId,"CML element infos")}if(this.config.saveLinkUrl){this.hiddenInputs.linkUrl=M(this.config.linkUrlHiddenInputId,"link URL")}if(this.config.saveContentId){this.hiddenInputs.contentId=M(this.config.contentIdHiddenInputId,"content ID")}if(this.config.saveHtml){this.hiddenInputs.displayHtml=M(this.config.displayHtmlHiddenInputId,"display HTML")}if(this.config.saveText){this.hiddenInputs.text=M(this.config.textHiddenInputId,"text")}}var Z=this.wysiwygIframe.contentWindow.document;if(!Z){alert("ERROR. Could not initialize editor.");this.abort()}this.editPaneDocument=Z;var Q=['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="'+V.config.defaultCultureCode+'" xml:lang="'+V.config.defaultCultureCode+'">',"<head>",'<meta http-equiv="content-type" content="text/html; charset=utf-8" />',"<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->",'<meta http-equiv="X-UA-Compatible" content="IE=7" />',"<title>Edit window</title>","</head>","<body>","</body>","</html>"];Z.open();Z.write(Q.join(E));Z.close();this.addStyleSheets();if(Widgit.browser.isIe){Z.body.style.width=Z.body.offsetWidth-20}this.editPaneRootElement=Z.body;function S(){V.isDocActive=true;g.debug("*** Editor initialized ***")}function Y(){try{g.trace("finalInitialization");V.drawn=true;V.wysiwygIframe.contentWindow.onunload=function(){g.trace("Edit pane iframe window onunload called");this.onunload=null;V.editPaneDocument.body.onclick=null};g.trace("editor.initialCmlXml: "+V.initialCmlXml);var ab=new Date();var aa=ab.getTime()-O.getTime();g.info("Drawing done in "+aa+"ms");if(!V.endSessionCalled){V.startSession()}}catch(ac){V.handleError("Editor initialization failed.",I.errorCodes.GENERAL,true,ac)}}window.setTimeout(Y,1)},addStyleSheets:function(){var M=this;var L=this.editPaneDocument.getElementsByTagName("head")[0];function N(O){var P=M.editPaneDocument.createElement("link");P.rel="stylesheet";P.type="text/css";if(M.config.preventEditorCssCaching){O+=((O.indexOf("?")>-1)?"&":"?")+(new Date()).getTime()}P.href=O;L.appendChild(P);return(P.sheet)?P.sheet:P.styleSheet}N(this.config.baseUrl+"css/editwindow.css");N(this.config.baseUrl+"css/cml.css");if(this.config.extraEditPaneCssFile){N(this.config.extraEditPaneCssFile)}},getImagesUrl:function(){return this.config.baseUrl+"images/"},getButtonImagesUrl:function(){return this.getImagesUrl()+"buttons/"},drawToolBar:function(L){this.toolBarDiv=document.createElement("div");L.appendChild(this.toolBarDiv);this.toolBarDiv.className="symboleditor_toolbar";var R=[];var M=[];var N=["save","retext","bold","italic","link","settings","symbolSize","textSize","symbolColour"];var Q=["plurals","tenses","superlatives"];for(var O=0,P=N.length;O<P;O++){if(this.config.tools[N[O]]){R.push(y[N[O]](this))}}for(O=0,P=Q.length;O<P;O++){if(this.config.tools[Q[O]]){M.push(y[Q[O]](this))}}var T=this.getButtonImagesUrl();for(O=0,P=R.length;O<P;O++){R[O].draw(this.toolBarDiv,T)}if(R.length>0&&M.length>0){var S=k(this.toolBarDiv,"br");S.className="clear"}for(O=0,P=M.length;O<P;O++){M[O].draw(this.toolBarDiv,T)}},openDialog:function(L,M,T,P,U){var O=this;if(!this.openingDialog){this.closeDialog();this.openingDialog=true;var R=Boolean(L);L=R?L+"?"+new Date().getTime():"";this.dialogWindow=window.open(L,"widgitEditorDialog","width="+M+",height="+T+",scrollbars,resizable");function S(){O.dialogCallbackFunctionName="symbolEditor_"+new Date().getTime()+"_"+Math.floor(Math.random()*100000000);O.dialogWindow.callbackFunctionName=O.dialogCallbackFunctionName;if(P){window[O.dialogCallbackFunctionName]=P}O.dialogWindow.focus();O.openingDialog=false}if(R){var N=function(){if(O.dialogWindow&&!O.dialogWindow.closed&&O.dialogWindow.loaded){window.clearInterval(Q);S();if(U){U(O.dialogWindow)}}};var Q=setInterval(N,50)}else{S()}}},closeDialog:function(){if(this.dialogWindow&&!this.dialogWindow.closed){this.dialogWindow.close();this.dialogWindow=null;delete window[this.dialogCallbackFunctionName];this.dialogCallbackFunctionName=null}},updateLoadingIndicator:function(){if(this.requestStatus.allComplete()){b.replaceClass(this.loadingIndicatorElement,"hidden","visible")}else{b.replaceClass(this.loadingIndicatorElement,"visible","hidden")}},showInfoMessage:function(L){this.infoMessageElement.innerHTML=L;b.replaceClass(this.infoMessageElement,"visible","hidden");var M=this.infoMessageElement.offsetHeight;this.editWindowContainer.style.height=(this.config.editPaneHeight+4-M)+"px";this.wysiwygIframe.style.height=(this.config.editPaneHeight-M)+"px"},hideInfoMessage:function(){b.replaceClass(this.infoMessageElement,"hidden","visible");this.editWindowContainer.style.height=(this.config.editPaneHeight+4)+"px";this.wysiwygIframe.style.height=this.config.editPaneHeight+"px"},handleError:function(R,Q,P,L){var O;var M=true;if(P||!this.errorIsVisible){switch(Q){case I.errorCodes.BROWSER_UNSUPPORTED:O="Your browser does not support all the features required by the editor. Please upgrade to a more recent version";M=false;break;case I.errorCodes.SERVER_ERROR:O="ERROR: Server error. Details: "+R;break;case I.errorCodes.TIMED_OUT:O="ERROR: "+R+". Server did not respond in time.";break;case I.errorCodes.AUTHENTICATION_FAILED:O="ERROR: "+R+". Authentication failed. Please check your account and key.";break;case I.errorCodes.GENERAL:O="ERROR: "+R;break;default:O="ERROR. An unexpected error occurred.";break}if(M){O+="<br /><br />";if(P){O+="Please refresh the page to try again."}else{O+="You may be able to continue editing. Click this message to continue."}}if(L&&P&&this.config.displayErrorDetail){O+="<br /><br />Details: "+b.getExceptionStringRep(L)}this.displayError(O,P);var N;if(P){N="Fatal error occurred with error code "+Q+". Message: "+R+". Details: "+b.getExceptionStringRep(L);g.fatal(N);this.serverLog.fatal(N);this.fatalErrorOccurred=true}else{N="Error occurred with error code "+Q+". Message: "+R+". Details: "+b.getExceptionStringRep(L);g.error(N);this.serverLog.error(N)}this.dispatchEvent(K.ERROR,P)}},displayError:function(L,M){if(this.drawn){this.errorIndicatorElement.innerHTML=L;b.replaceClass(this.errorIndicatorElement,"visible","hidden");if(M){this.textArea.disabled=true;b.removeClass(this.errorIndicatorElement,"clickable")}else{b.addClass(this.errorIndicatorElement,"clickable")}this.errorIsVisible=true}},hideError:function(){b.replaceClass(this.errorIndicatorElement,"hidden","visible");this.errorIsVisible=false},abort:function(){b.purge(this.rootElement);this.rootElement.parentNode.removeChild(this.rootElement)},setInitialContent:function(L){if(this.drawn){throw new Error("Too late to set initial editor content")}else{this.saveAsSingleField=true;if((typeof L==="object")&&L.cml){this.initialCmlXml=L.cml;this.initialCmlElementInfos=L.cmlElementInfos;if(L.linkUrl){this.initialLinkUrl=L.linkUrl}}else{if((typeof L==="string")&&(L!=="")){var M=new Date();var O=JSON.parse(L);var P=new Date();var N=P.getTime()-M.getTime();g.info("setInitialContent: JSON parsed in "+N+"ms");this.initialCmlXml=O.cml;this.initialCmlElementInfos=O.cmlElementInfos;if(O.linkUrl){this.initialLinkUrl=O.linkUrl}}}}},setInitialCmlAndInfos:function(M,L){if(this.drawn){throw new Error("Too late to set initial editor content")}else{this.saveAsSingleField=false;this.initialCmlXml=M;if(M!==""){if(typeof L==="string"){if(L!==""){this.initialCmlElementInfos=JSON.parse(L)}}else{this.initialCmlElementInfos=L}}}},setInitialContentSettings:function(M){var N=this.initialSettings[n.SettingScopes.CONTENT];for(var L in M){if(n.SettingKeys[L]){N[L]=M[L]}}},setInitialLanguage:function(L){this.initialSettings[n.SettingScopes.CONTENT][n.SettingKeys.LANGUAGE]=L},disable:function(){this.textArea.disabled=true;this.dispatchEvent(K.DISABLE,null)},save:function(O){var U=this;g.time("Saving");b.replaceClass(this.savingIndicatorElement,"visible","hidden");this.disable();var W,R,Q,V,X,P=null;function M(){var Y={cml:W,readOnlyCml:Q,cmlElementInfos:V,contentId:U.symgateClient.context.contentId};if(U.config.saveHtml){Y.displayHtml=P}if(U.config.saveText){Y.text=X}Y.linkUrl=U.isLink()?U.linkUrl:"";if(U.saveAsSingleField){g.time("Save JSON stringification");var Z=Widgit.Util.jsonStringify(Y);g.timeEnd("Save JSON stringification");U.hiddenInputs.editorContent.value=Z;U.dispatchEvent(K.SAVE,Y);if(O){g.timeEnd("Saving");U.hiddenInputs.editorContent.form.submit()}else{g.timeEnd("Saving");return U.hiddenInputs.editorContent.value}}else{if(U.config.saveCml){U.hiddenInputs.cml.value=W}if(U.config.saveReadOnlyCml){U.hiddenInputs.readOnlyCml.value=Q}if(U.config.saveCmlElementInfos){U.hiddenInputs.cmlElementInfos.value=Widgit.Util.jsonStringify(V)}if(U.config.saveContentId){U.hiddenInputs.contentId.value=U.symgateClient.context.contentId}if(U.config.saveHtml){U.hiddenInputs.displayHtml.value=P}if(U.config.saveText){U.hiddenInputs.text.value=X}if(U.config.saveLinkUrl){U.hiddenInputs.linkUrl.value=U.isLink()?U.linkUrl:""}U.dispatchEvent(K.SAVE,Y);if(O){g.timeEnd("Saving");var aa=b.getNodeAncestorElement(U.containerElement,"form");if(aa){aa.submit()}else{throw new Error("Editor is not inside a <form> element, therefore cannot save")}}else{b.replaceClass(U.savingIndicatorElement,"hidden","visible")}}g.timeEnd("Saving")}function S(){var Z={cml:W,readOnlyCml:Q,cmlElementInfos:V,text:X,linkUrl:U.isLink()?U.linkUrl:"",contentId:U.symgateClient.context.contentId};if(U.config.saveHtml){Z.displayHtml=P}function Y(){b.replaceClass(U.savingIndicatorElement,"hidden","visible");U.dispatchEvent(K.SAVE,Z)}function aa(ac,ab){b.replaceClass(U.savingIndicatorElement,"hidden","visible");U.handleError("Content was not saved",ab,false)}U.symgateClient.saveContent(Z.cml,Z.readOnlyCml,Widgit.Util.jsonStringify(Z.cmlElementInfos),Z.text,Z.linkUrl,Y,aa)}function L(Y){P=Y;M()}function N(Y){P=Y;S()}function T(){W=U.editorState.editorContent.cml.hasBody()?U.editorState.editorContent.cml.toSerializedXml():"";R=U.editorState.getReadOnlyCml();Q=R.toSerializedXml();V=U.editorState.editorContent.serializeCmlElementInfos();X=U.config.saveText?H.extractText(R):null;if(U.config.saveToWidgitServer){if(U.config.saveHtml){U.getDisplayHtml(Q,U.linkUrl,N)}else{S()}}else{if(U.config.saveHtml){U.getDisplayHtml(Q,U.linkUrl,L)}else{M()}}}if(this.requestStatus.allComplete()){if(this.textArea.value===this.lastTextSymbolised){T()}else{this.symboliseTextAreaContent();this.requestStatus.addEventListener(K.COMPLETEALL,T)}}else{this.requestStatus.addEventListener(K.COMPLETEALL,T)}},updateTextAreaWordMapping:function(){var R=this.editorState.editorContent.getWords();this.wordsByTextAreaCharIndex=[];var P=this.textArea.value;var N=0;g.debug("updateTextAreaWordMapping. Words: "+R.join(","));for(var Q=0,L=R.length;Q<L;Q++){for(;z.test(P.charAt(N));N++){this.wordsByTextAreaCharIndex[N]=null}var O=x.extractText(this.editorState,R[Q].cmlElement,false);for(var S=0,M=O.length;S<M;S++){this.wordsByTextAreaCharIndex[N++]=R[Q]}}},getWordFromCharIndex:function(L){return this.wordsByTextAreaCharIndex[L]},textAreaSelectionChanged:function(){if(!this.requestStatus.symbolising){var R=b.getTextAreaSelectionEndPoints(this.textArea);var Q=R.start;var L=R.end;g.info("textAreaSelectionChanged. selection boundaries: ",R);var M=[];var O,N=null;if(Q===L){O=this.getWordFromCharIndex(Q);if(O&&O.rendered){M[0]=O}}else{for(var P=Q;P<L;P++){O=this.getWordFromCharIndex(P);if(O&&O.rendered&&O!==N){b.array_push(M,O);N=O}}}g.info("Selected words: "+M);this.setSelectedWords(M)}},getEffectiveSettingValue:function(M){var L=this.settings[n.SettingScopes.CONTENT][M];if(L!=null){return L}else{return this.settings[n.SettingScopes.SITE][M]}},changeSettings:function(O,R,U,W,V){var S=this;var T=new Date();function N(ac){var ab=new Date();var aa=ab.getTime()-T.getTime();g.info("changeSettings response received in "+aa+" milliseconds");var Y=JSON.parse(ac.responseText);S.settings=Y.settings;if(U){S.editorState.clearSymbolCache();S.storeConceptData(Y.concepts);S.rerenderSymbols()}if(W){S.editorState.cachedSpellChecks={};if(!R){S.spellCheck()}}if(R){S.editorState.cachedCmlByText={};S.symboliseText(S.textArea.value)}var Z=new Date();var X=Z.getTime()-ab.getTime();S.requestStatus.setStatus("changingSettings",false);S.updateLoadingIndicator();g.info("changeSettings response processed in "+X+" milliseconds")}function L(Y,X){S.handleError("Settings were not saved",X,false)}var M=U?this.editorState.editorContent.getCmlXml():null;this.symgateClient.changeSettings(O,U,W,V,M,N,L);for(var P=0,Q=O.length;P<Q;P++){this.settings[O[P].scope][O[P].name]=O[P].value}this.requestStatus.setStatus("changingSettings",true);this.updateLoadingIndicator()},getDisplayHtml:function(P,M,Q){var N=this;g.time("getDisplayHtml response received");function L(R){g.timeEnd("getDisplayHtml response received");if(Q){Q(R.responseText)}}function O(S,R){N.handleError("Could not retrieve display HTML",R,false)}this.symgateClient.getDisplayHtml(P,M,L,O)},loadContentFromWidgitServer:function(O){var M=this;g.time("loadContentFromWidgitServer response received");function L(Q){g.timeEnd("loadContentFromWidgitServer response received");g.debug("request.responseText: "+Q.responseText);var P=JSON.parse(Q.responseText);M.setInitialCmlAndInfos(P.cml,P.cmlElementInfos);M.initialLinkUrl=P.link;if(O){O(P)}}function N(Q,P){M.handleError("Could not load content",P,false)}this.symgateClient.loadContent(L,N)},setLinkUrl:function(L){this.linkUrl=L;if(this.isLink()){b.addClass(this.editPaneDocument.body,"linked")}else{b.removeClass(this.editPaneDocument.body,"linked")}},isLink:function(){return Boolean(this.linkUrl)},startSession:function(){g.debug("Start session");var S=this;var T=new Date();var Z,W,Q,Y;if(this.initialCmlXml!=""){Z=b.parseXml(S.initialCmlXml);W=v.Cml.fromXml(Z.getElementsByTagName("cml")[0]);H.assignElementIndices(W);Q=this.initialCmlElementInfos;this.editorState.editorContent=new Widgit.SymbolEditorContent(W,{});this.editorState.editorContent.createMissingCmlInfos(Q);var U=H.getDescendant(W,v.AltList);Y=(U==null)?true:Boolean(U.hashCode)}function O(ad){var aa=new Date();var aj=aa.getTime()-T.getTime();g.info("startSession response received in "+aj+" milliseconds");g.debug("request.responseText: "+ad.responseText);var ak=JSON.parse(ad.responseText);if(ak.error){if(ak.isAuthenticationError){S.handleError("Unable to create server session",I.errorCodes.AUTHENTICATION_FAILED,true)}else{S.handleError("Unable to create server session. Server message: "+ak.message,I.errorCodes.SERVER_ERROR,true)}return}S.symgateClient.context.sessionId=ak.sessionId;if(!S.symgateClient.context.hasContentId()){S.symgateClient.context.contentId=ak.contentId}S.settings=ak.settings;S.storeConceptData(ak.concepts);if(W){S.editorState.populateLookUpTables(W)}S.editorState.applySitePreferredSymbols(ak.sitePreferredSymbols);var ab=S.editorState.editorContent.getTopLevelAltListsAndCMaps();for(var ae=0,ai=ab.length;ae<ai;ae++){var ag=ab[ae];g.debug("*** Setting up new top-level element "+ag);x.createWords(ag,S.editorState,S.wordRendererFactory);x.updateWords(ag,S.editorState);S.editorState.updateVisibility(ag)}if(S.initialCmlXml!=""){var ah=new o(S,S.editPaneRootElement);W.accept(ah);S.textArea.value=x.extractText(S.editorState,W,false);this.lastTextSymbolised=S.textArea.value}else{S.textArea.value="";this.lastTextSymbolised=S.textArea.value}S.textAreaValue=S.textArea.value;S.isDocActive=true;S.updateTextAreaWordMapping();S.textArea.disabled=false;S.dispatchEvent(K.LOAD,null);var af=new Date();var ac=af.getTime()-aa.getTime();g.info("startSession response processed in "+ac+" milliseconds");S.spellCheck();S.setLinkUrl(S.initialLinkUrl);S.checkParagraphConceptCount();S.requestStatus.setStatus("startingSession",false);S.updateLoadingIndicator()}function L(ab,aa){S.handleError("Unable to create session with the server",aa,true)}var P=[];var V=n.SettingScopeNames;var R=V.length,X,N;while(R--){X=n.SettingScopes[V[R]];N=this.initialSettings[X];for(var M in N){if(b.objectHasOwnProperty(N,M)){b.array_push(P,{scope:X,name:M,value:N[M]})}}}this.symgateClient.startSession(this.initialCmlXml,Y,this.config.siteWideSymbolsSpecificToUser,this.config.editPaneHttpsImages,P,O,L);this.requestStatus.setStatus("startingSession",true);this.updateLoadingIndicator();this.startSessionCalled=true},symboliseText:function(R){var O=this;var N=new Date();g.trace("symboliseText called with text "+R);function L(X){var W=new Date();var V=W.getTime()-N.getTime();g.info("symboliseText response received in "+V+" milliseconds");var T=JSON.parse(X.responseText);g.info("Server processing time: "+T.timeTaken+" milliseconds");O.storeConceptData(T.concepts);if(X===O.currentSymbolisationRequest){g.debug("CML: "+T.cml);if(O.pendingCmlDataItem){g.debug("*** Discarding previously pending CML ***")}O.pendingCmlDataItem=new Widgit.EditorCmlDataItem(T.cml,T.altListHashes,T.sitePreferredSymbols,R);O.editorState.cachedCmlByText[R]=O.pendingCmlDataItem;O.applyCmlWhenTypingStops();var U=new Date();var S=U.getTime()-W.getTime();g.info("symboliseText response processed in "+S+" milliseconds")}}function Q(T,S){O.requestStatus.setStatus("symbolising",false);O.handleError("Unable to symbolise text",S,false)}var P=this.editorState.cachedCmlByText[R];if(P){g.debug("Retrieved CML from client cache");this.pendingCmlDataItem=P;this.applyCmlWhenTypingStops()}else{g.debug("No cached CML for text, so requesting from server");var M=R.replace(/\r\n/g,"\r\n\r\n").replace(/([^\r]\n)/g,"$1\n").replace(/(\r[^\n])/g,"\r$1");this.currentSymbolisationRequest=this.symgateClient.symboliseText(M,L,Q)}this.lastTextSymbolised=R;this.requestStatus.setStatus("symbolising",true);this.updateLoadingIndicator()},spellCheck:function(){function M(X){var V=new Date();var Z,ab;var ac=V.getTime()-R.getTime();g.info("spellCheck response received in "+ac+" milliseconds");var af=JSON.parse(X.responseText);for(Z=0,ab=af.words.length;Z<ab;Z++){P.editorState.cachedSpellChecks[af.words[Z].word]=af.words[Z]}if(!P.requestStatus.symbolising){var ad=P.editorState.editorContent.getWords();for(Z=0,ab=ad.length;Z<ab;Z++){for(var Y=0,ae=ad[Z].spellCheckWords.length;Y<ae;Y++){P.editorState.checkWordSpelling(ad[Z].spellCheckWords[Y])}}}var aa=new Date();var W=aa.getTime()-V.getTime();g.info("spellCheck response processed in "+W+" milliseconds")}function L(W,V){P.handleError("Unable to perform spell check",V,false)}if(this.config.doSpellCheck){var P=this;var R=new Date();var S=[];var T=this.editorState.editorContent.getWords();for(var O=0,Q=T.length;O<Q;O++){for(var N=0,U=T[O].spellCheckWords.length;N<U;N++){b.array_push(S,T[O].spellCheckWords[N].wordText)}}this.symgateClient.spellCheck(S,M,L)}},suggestSpellings:function(M){if(this.config.doSpellCheck){g.debug("suggestSpellings called");if(M.suggestions.length>0){var O=this;var Q=function(V){var R=M.text;M.changeText(V);M.setSpellChecked(true);M.word.redraw();if(M.word.isReplacementText||(M.word.spellCheckWords.length>1)){var S=O.editorState.getCurrentChosenContainerElement(M.word.visibleCMap);var T=O.getCmlElementInfo(M.word.visibleCMap);O.editText(S,M.word.toString(),T.renderer.textContainer)}g.trace("old text: "+R);var U=new RegExp("[\\b^]*"+R+"[\\b$]*");O.textArea.value=O.textArea.value.replace(U,V);O.symboliseText(O.textArea.value)};this.openDialog("",200,300,Q);var P=this.dialogWindow.document;P.open();P.write("<html><head><title>Did you mean... ?</title>");P.write('<script type="text/javascript">function selectSuggestion(el) {opener.'+this.dialogCallbackFunctionName+"(el.innerHTML);close();}<\/script>");P.write('<style type="text/css">body {font-family: tahoma, arial, helvetica, sans-serif; font-size: 75%} h1 {font-size: 125%} div {cursor: pointer; cursor: hand;}</style></head><body><h1>Did you mean... ?</h1>');for(var N=0,L=M.suggestions.length;N<L;N++){P.write('<div onclick="selectSuggestion(this)">'+M.suggestions[N]+"</div>")}P.write("</body></html>");P.close()}}},setSitePreferredSymbols:function(R){var S=this;var T,V;var U=new Date();function N(ac){var ab=new Date();var aa,X;var Z=ab.getTime()-U.getTime();g.info("setSitePreferredSymbols response received in "+Z+" milliseconds");var Y=new Date();var W=Y.getTime()-ab.getTime();g.info("setSitePreferredSymbols response processed in "+W+" milliseconds");S.requestStatus.setStatus("changingSiteDefaultSymbols",false);S.rerenderEditPane();if(S.activeWord){S.displayAlternatives(S.activeWord,true)}S.updateLoadingIndicator()}function L(X,W){S.handleError("Unable to set site-wide symbol preferences",W,false)}var M=[],O;for(var P=0,Q=R.length;P<Q;P++){T=R[P].cmlParent;V=R[P].getAltIndex();O=T.getHashCode();S.editorState.siteAltListPreferences[O]=V;M[P]={altListHash:O,preferredAltIndex:V}}if(this.config.siteWideSymbolsSpecificToUser){this.symgateClient.setSiteUserPreferredSymbols(M,N,L)}else{this.symgateClient.setSitePreferredSymbols(M,N,L)}this.requestStatus.setStatus("changingSiteDefaultSymbols",true);this.updateLoadingIndicator()},deleteSitePreferredSymbols:function(R){var S=this;var T;var U=new Date();function N(ab){var aa=new Date();var Z,W;var Y=aa.getTime()-U.getTime();g.info("deleteSitePreferredSymbols response received in "+Y+" milliseconds");var X=new Date();var V=X.getTime()-aa.getTime();g.info("deleteSitePreferredSymbols response processed in "+V+" milliseconds");S.changingSiteDefaultSymbols=false;S.rerenderEditPane();if(S.activeWord){S.displayAlternatives(S.activeWord,true)}S.updateLoadingIndicator()}function L(W,V){S.handleError("Unable to delete site-wide symbol preferences",V,false)}var M=[],O;for(var P=0,Q=R.length;P<Q;P++){T=R[P].cmlParent;O=T.getHashCode();delete S.editorState.siteAltListPreferences[O];M[P]={altListHash:O}}if(this.config.siteWideSymbolsSpecificToUser){this.symgateClient.deleteSiteUserPreferredSymbols(M,N,L)}else{this.symgateClient.deleteSitePreferredSymbols(M,N,L)}this.requestStatus.setStatus("changingSiteDefaultSymbols",true);this.updateLoadingIndicator()},updateFontSize:function(){var L=this.getEffectiveSettingValue(n.SettingKeys.FONT_SIZE);g.debug("Changing font size to "+L);this.editPaneRootElement.style.fontSize=L+"em"},openSettingsDialog:function(M){g.debug("openSettingsDialog called with initial setting scope "+M);var L=this;var O=function(P,S,R,Q,T){g.debug("Settings dialog returned setting changes ",P,S,R,Q,T);L.changeSettings(P,S,R,Q,T)};var N=function(){L.dialogWindow.init(L.settings,M)};this.openDialog(this.config.baseUrl+"settings.html",400,450,O,N)},rerenderSymbols:function(){g.debug("rerenderSymbols called");var L=new m(this);this.editorState.editorContent.cml.accept(L);if(this.activeWord){this.displayAlternatives(this.activeWord,true)}},storeConceptData:function(N){for(var M=0,L=N.length;M<L;M++){this.editorState.cachedSymbols[N[M].uniqueCode]=N[M]}},getCml:function(){return this.editorState.editorContent.cml},getText:function(){return x.extractText(this.editorState,this.editorState.editorContent.cml,true)},endSession:function(){g.info("endSession called");if(this.startSessionCalled&&!this.endSessionCalled){this.symgateClient.endSession()}this.endSessionCalled=true},displayAlternatives:function(R,Q){g.debug("displayAlternatives called");var M;if(Q||(R.cmlElement!=this.currentChooserCmlElement)){this.clearElementContents(this.chooserPane);var P=new c(this,R);if(R.isReplacementText){M=this.chooserPane.appendChild(document.createElement("div"));M.className="altlist altlist1";P.setRootNode(M);R.cmlElement.accept(P)}else{this.currentChooserCmlElement=R.cmlElement;var O=[R.cmlElement].concat(H.getAllAncestors(R.cmlElement,v.AltList));for(var L=O.length,N=L-1;N>=0;N--){M=this.chooserPane.appendChild(document.createElement("div"));M.className="altlist altlist"+(L-N);P.setRootNode(M);g.debug("Showing alternatives for "+O[N]);O[N].accept(P)}}}},makeCMapActive:function(M){var L=this.getCmlElementInfo(M);g.debug("makeCMapActive called with element "+M+" with renderer "+L.renderer);if(L.hasRenderer()){g.debug("Has a renderer!");L.renderer.setActive()}},makeCMapInactive:function(M){var L=this.getCmlElementInfo(M);if(L.hasRenderer()){L.renderer.setInactive()}},setActiveCMap:function(L){g.debug("setActiveCMap called with cmap "+L);if(this.activeCMap){this.makeCMapInactive(this.activeCMap)}this.activeCMap=L;this.makeCMapActive(L);this.dispatchEvent(K.CHANGE_ACTIVE_CMAP,L)},setActiveWord:function(L){if(!this.fatalErrorOccurred&&(L!=this.activeWord)){if(!b.array_contains(this.selectedWords,L)){this.setSelectedWords([L])}else{this.setActiveCMap(L.visibleCMap);this.activeWord=L;this.displayAlternatives(L,true)}}},setNoActiveCMap:function(){if(this.activeCMap){this.makeCMapInactive(this.activeCMap)}this.activeCMap=null;this.dispatchEvent(K.CHANGE_ACTIVE_CMAP,null)},setNoActiveWord:function(){this.setNoActiveCMap();this.activeWord=null;this.clearElementContents(this.chooserPane)},refreshSelectedCMaps:function(){var O,L,N;var M=this.selectedCMaps;this.selectedCMaps=[];for(O=0,L=this.selectedWords.length;O<L;O++){N=this.selectedWords[O].visibleCMap;this.makeCMapSelected(N);if(!b.array_contains(this.selectedCMaps,N)){b.array_push(this.selectedCMaps,N)}}if(!b.array_elementsEqual(M,this.selectedCMaps)){this.dispatchEvent(K.CHANGE_SELECTED_CMAPS,this.selectedCMaps)}},setSelectedWords:function(N){if(!this.fatalErrorOccurred&&(!b.array_elementsEqual(N,this.selectedWords))){var M,L;this.selectedCMaps=[];for(M=0,L=this.selectedWords.length;M<L;M++){if(!b.array_contains(N,this.selectedWords[M])){this.makeCMapUnselected(this.selectedWords[M].visibleCMap)}}for(M=0,L=N.length;M<L;M++){if(!b.array_contains(this.selectedWords,N[M])){this.makeCMapSelected(N[M].visibleCMap)}if(!b.array_contains(this.selectedCMaps,N[M].visibleCMap)){b.array_push(this.selectedCMaps,N[M].visibleCMap)}}this.selectedWords=N;if(N.length>0){this.setActiveWord(N[N.length-1])}else{this.setNoActiveWord()}this.dispatchEvent(K.CHANGE_SELECTED_CMAPS,this.selectedCMaps)}},setNoSelectedWords:function(){this.setSelectedWords([])},makeCMapSelected:function(M){var L=this.getCmlElementInfo(M);if(L.hasRenderer()){L.renderer.setSelected()}},makeCMapUnselected:function(M){g.warn("makeCMapUnselected "+M);var L=this.getCmlElementInfo(M);if(L.hasRenderer()){L.renderer.setUnselected()}},checkParagraphConceptCount:function(){g.debug("checkParagraphConceptCount called");var P=this.editorState.editorContent.getParagraphs();var S,R=0,O;for(var Q=0,N=P.length;Q<N;Q++){S=this.editorState.editorContent.getVisibleConceptCount(P[Q]);g.debug("checkParagraphConceptCount found "+S+" visible concepts for paragraph "+P[Q]);O=this.getCmlElementInfo(P[Q]);if(S>this.config.maxConceptsPerParagraph){R++;if(O.hasRenderer()){O.renderer.setTooManySymbols()}}else{if(O.hasRenderer()){O.renderer.setNotTooManySymbols()}}}if(R>0){var M=(R==1)?" has":"s have";var L=(R==1)?"this paragraph":"these paragraphs";this.showInfoMessage("It is recommended that paragraphs should not contain more than "+this.config.maxConceptsPerParagraph+" symbols. "+R+" paragraph"+M+" more than this number of symbols, so you should consider reducing the length of "+L+".")}else{this.hideInfoMessage()}},choose:function(O){if(!this.fatalErrorOccurred){g.trace("choose called with cmlElement"+O);this.setNoActiveCMap();this.editorState.saveChoiceOfAlternative(O);var N=H.getTopAncestor(O,v.AltList);g.trace("topAltList: "+N);if(N!==null){var L=this.editorState.editorContent.getCmlElementInfo(N);var M=this.rerenderAltList(N,true);this.setActiveCMap(L.words[M].visibleCMap)}else{this.setActiveCMap(O)}this.refreshSelectedCMaps();this.checkParagraphConceptCount()}},setDefaultSymbol:function(N){if(!this.fatalErrorOccurred){g.trace("setDefaultSymbol called with cmlElement"+N);var M=H.getAllAncestors(N,v.CAlt);var L=(N instanceof v.CAlt)?[N].concat(M):M;H.getTopAncestor(N,v.AltList);this.setSitePreferredSymbols(L)}},unsetDefaultSymbol:function(N){if(!this.fatalErrorOccurred){g.trace("setDefaultSymbol called with cmlElement"+N);var M=H.getAllAncestors(N,v.CAlt);var L=(N instanceof v.CAlt)?[N].concat(M):M;H.getTopAncestor(N,v.AltList);this.deleteSitePreferredSymbols(L)}},rerenderAltList:function(S,R){var Q=this.editorState.editorContent.getCmlElementInfo(S);var P=Q.words;var N=0;for(var M=0,L=P.length;M<L;M++){if(P[M]===this.activeWord){N=M}P[M].remove()}this.editorState.editorContent.unrenderCmlElementInfo(S,false);var O=new o(this,Q.renderer.altListContainerDiv,true);S.accept(O);this.editorState.updateVisibility(S);if(R){this.updateTextAreaWordMapping()}return N},clearEditPane:function(N){for(var M=0,L=N.length;M<L;M++){N[M].remove()}this.clearElementContents(this.editPaneRootElement)},rerenderEditPane:function(){var N=this.editorState.editorContent.getTopLevelAltListsAndCMaps();for(var M=0,L=N.length;M<L;M++){if(N[M] instanceof v.AltList){this.rerenderAltList(N[M],false)}}this.updateTextAreaWordMapping()},updateWord:function(M,T){var P;if(M instanceof v.CMap){P=M}else{if(M instanceof v.CAlt){P=M.getAltList()}else{throw new Error("Widgit.SymbolEditor.updateWord: only valid elements are calt and cmap (found "+M+")")}}var L=this.getCmlElementInfo(P);var N=L.words[0].visibleCMap;g.trace("visibleCMap: "+N+" from word "+L.words[0]);this.setNoSelectedWords();x.clearWords(P,this.editorState.editorContent,false);x.createWords(P,this.editorState,this.wordRendererFactory);var U=H.getTopAncestor(M,v.AltList);if(U){x.updateWords(U,this.editorState)}var S;for(var O=0,R=L.words.length;O<R;O++){if(O>0){T.appendChild(this.editPaneDocument.createTextNode(" "))}S=L.words[O];g.debug("Rendering new word "+S+" in DOM node "+T.parentNode.innerHTML);S.render(T);S.visibleCMap=N}var Q=new m(this);N.accept(Q);this.displayAlternatives(S,true);this.spellCheck()},editText:function(N,M,L){this.editorState.applyTextReplacement(N,M,true);this.updateWord(N,L)},removeReplacementText:function(M,L){this.editorState.removeTextReplacement(M,true);this.updateWord(M,L)},applyCmlWhenTypingStops:function(){var M=this;function L(){try{if(M.textArea.value!=M.lastTextSymbolised){M.symboliseTextAreaContent()}else{M.noTypingTimer=null;M.applyCml(M.pendingCmlDataItem);M.requestStatus.setStatus("symbolising",false);M.updateLoadingIndicator()}}catch(N){M.handleError("Editor update failed.",I.errorCodes.GENERAL,true,N)}}if(this.noTypingTimer){window.clearTimeout(this.noTypingTimer)}this.noTypingTimer=window.setTimeout(L,500)},applyCml:function(M){g.debug("*** APPLYING NEW CML ***");g.info("this.editorState.altListPreferences",this.editorState.altListPreferences);this.setNoActiveWord();this.setNoSelectedWords();var V=v.parse(M.cmlXml);var aa,ab;if(V.equals(this.editorState.editorContent.cml)){g.debug("New CML is equal to current CML, so doing nothing")}else{g.debug("New CML is not equal to current CML, so applying new CML");var W=new Date();x.assignAltListHashCodes(V,M.altListHashes);x.removeBlankAndDuplicateAlternativesFromCml(V,this.editorState,this.getEffectiveSettingValue(n.SettingKeys.BLANK_ALTERNATIVES));H.assignElementIndices(V);var Y={};var T=new Widgit.SymbolEditorContent(V,Y);var Z=T.getTopLevelAltListsAndCMaps();var ae=this.editorState.editorContent.cmlElementInfos;var S=this.editorState.editorContent.getTopLevelAltListsAndCMapInfos();var N=this.editorState.editorContent.cml;var X=[];H.diffTopLevelCMapsAndAltLists(this.editorState.editorContent.getTopLevelAltListsAndCMaps(),Z,X);for(aa=0,ab=X.length;aa<ab;aa++){this.copyChildCmlElementInfos(X[aa][0],X[aa][1],ae,Y)}var P=[],ac=[],O;for(aa=0,ab=Z.length;aa<ab;aa++){O=Z[aa];if(T.getCmlElementInfo(O)){b.array_push(ac,O)}else{b.array_push(P,O)}}T.createMissingCmlInfos();this.editorState.editorContent=T;this.editorState.applySitePreferredSymbols(M.sitePreferredSymbols);for(aa=0,ab=P.length;aa<ab;aa++){var Q=P[aa];g.debug("*** Setting up new top-level element "+Q);this.editorState.updateVisibility(Q)}for(aa=0,ab=ac.length;aa<ab;aa++){x.clearWords(ac[aa],this.editorState.editorContent,true)}for(aa=0,ab=Z.length;aa<ab;aa++){var U=Z[aa];x.createWords(U,this.editorState,this.wordRendererFactory);x.updateWords(U,this.editorState)}this.editorState.setDefaultTopLevelPreferredAlternatives();this.clearEditPane(S);this.clearElementContents(this.chooserPane);var ad=new o(this,this.editPaneRootElement);V.accept(ad);N.destroy();this.updateTextAreaWordMapping();this.checkParagraphConceptCount();this.spellCheck();var R=new Date();var L=R.getTime()-W.getTime();g.debug("Applying new CML completed in "+L+" milliseconds")}},copyChildCmlElementInfos:function(M,N,Q,P){g.trace("copying info for old CML element index "+M.elementIndex+" to new CML element index "+N.elementIndex+": "+Q[M.elementIndex]);P[N.elementIndex]=Q[M.elementIndex];P[N.elementIndex].setCmlElement(N);for(var O=0,L=M.children.length;O<L;O++){this.copyChildCmlElementInfos(M.children[O],N.children[O],Q,P)}},getCmlElementInfo:function(L){return this.editorState.editorContent.getCmlElementInfo(L)},clearElementContents:function(L){b.purge(L);L.innerHTML=""}});function s(ad,O,Y){var ag=O.getCmlElementInfo(ad);var S=ag.words;var af=b.getDocument(Y);var ac=H.getAncestor(ad,v.AltList);var Q=ac?O.getCmlElementInfo(ac):null;if(S.length===0){if(ac){S=O.getCmlElementInfo(ac).words}else{g.error("CMap has no words and is not contained in an altlist",O.editorState.editorContent.dumpCmlElement(ad))}g.trace("Words: "+S.join(",")+O.getCmlElementInfo(ac))}var W=ad.ccs.length;if(W==0){Y.appendChild(x.renderBlankSymbol(af,ad.text.text,O.getEffectiveSettingValue(n.SettingKeys.BASESIZE)))}else{var R=Q?Q.hasAlternatives():false;var U=(R||(W>1));var Z,L,N,M;if(U){Z=k(Y,"table");Z.cellPadding=0;Z.cellSpacing=0;Z.className="cml_symbol";L=k(k(Z,"tbody"),"tr")}else{M=k(Y,"div");M.className="cml_symbol"}for(var X=0;X<W;X++){N=U?k(L,"td"):M;var ab=O.editorState.cachedSymbols[ad.ccs[X].getUniqueCode()];if(!ab.blank){for(var V=0,aa=ab.symbols.length;V<aa;V++){var T=N.appendChild(x.renderSymbol(ab.symbols[V],af,ad.text.text,'Click to display alternatives for "'+ad.text.text+'"'));T.onclick=function(){O.setActiveWord(S[0])}}}else{g.warn("Blank symbol found! ",ab)}}if(R){var P=k(L,"td");P.className="hasalternativesicon";P.vAlign="bottom";var ae=k(P,"img");ae.src=O.config.baseUrl+"images/arrow.gif";ae.alt="Arrow";ae.title="Click for alternatives to this symbol";ae.onclick=function(){O.setActiveWord(S[0])};P.appendChild(ae)}}return S}function o(N,L,M){this.editor=N;this.rootNode=L;this.rerender=M;this.currentNode=L;this.doc=this.editor.editPaneDocument;this.insideAltList=false;this.containingCMap=null}o.prototype=new v.Visitor();b.copyProperties(o.prototype,{visit:function(L){},visitCml:function(L){this.visitChildren(L)},visitBody:function(L){this.visitChildren(L)},visitCp:function(N){var M=this.editor.getCmlElementInfo(N);if(!this.rerender&&M.hasRenderer()){g.trace("cp "+N+" already has renderer");if(M.rendered){g.trace("cp "+N+" already rendered")}else{g.trace("Rendering cp "+N);M.render(this.currentNode)}}else{var L=new u(this.editor);M.setRenderer(L);L.render(this.currentNode);this.currentNode=L.conceptContainer;this.visitChildren(N);this.currentNode=this.rootNode}},visitCs:function(L){this.visitChildren(L)},visitHr:function(L){this.rootNode.appendChild(this.doc.createElement("hr"))},visitAltList:function(Q){var P=this.editor.getCmlElementInfo(Q);if(!this.rerender&&P.hasRenderer()){g.trace("altlist "+Q+" already has renderer");if(P.rendered){g.trace("altlist "+Q+" already rendered")}else{g.trace("Rendering altlist "+Q);P.render(this.currentNode)}}else{var L=this.insideAltList;this.insideAltList=true;var N=this.currentNode;if(!L&&(this.currentNode!=P.domNode)){var O=new f(this.editor);P.setRenderer(O);P.render(this.currentNode);this.currentNode=O.altListContainerDiv}var M=this.editor.editorState.getFavouredAlternative(Q);this.visitCAlt(M);this.currentNode=N;this.insideAltList=L}},visitCAlt:function(L){this.visitChildren(L)},visitCMap:function(O){var M=this.editor.getCmlElementInfo(O);var N,L;this.containingCMap=O;if(!this.rerender&&M.hasRenderer()){g.trace("cMap "+O+" already has renderer");if(M.rendered){g.trace("cMap "+O+" already rendered")}else{g.trace("Rendering cMap "+O);M.render(this.currentNode)}}else{var Q=new A(this.editor);var P=this.currentNode;this.currentNode=Q.symbolsContainer;var R=s(O,this.editor,this.currentNode);g.trace("Rendering CMap in edit pane: "+O+" with words "+R);if(M.emphasis){b.addClass(Q.textContainer,"em")}if(M.strong){b.addClass(Q.textContainer,"strong")}this.currentNode=Q.textContainer;for(N=0,L=R.length;N<L;N++){if(N>0){Q.textContainer.appendChild(this.doc.createTextNode(" "))}R[N].visibleCMap=O;R[N].render(Q.textContainer)}this.currentNode=P;M.setRenderer(Q);M.render(this.currentNode);g.debug("cMapInfo "+M.cMap+" has renderer "+M.renderer)}this.containingCMap=O},visitBr:function(L){this.currentNode.appendChild(this.doc.createElement("br"))},visitLink:function(L){this.visitChildren(L)},visitImg:function(L){var M=this.currentNode.appendChild(this.doc.createElement("img"));M.src=L.src;if(L.hasAttribute("width")){M.width=width}if(L.hasAttribute("height")){M.height=height}if(L.hasAttribute("alt")){M.alt=alt}if(L.hasAttribute("imagemap")){}}});function m(L){this.editor=L;this.currentNode=null;this.doc=this.editor.editPaneDocument}m.prototype=new v.Visitor();b.copyProperties(m.prototype,{visit:function(L){this.visitChildren(L)},visitCMap:function(M){var L=this.editor.getCmlElementInfo(M);if(L.visible){var N=L.renderer.symbolsContainer;this.editor.clearElementContents(N);s(M,this.editor,N)}}});function c(L,M){this.editor=L;this.word=M;this.currentNode=this.editor.chooserPane;this.currentChosenDomNode=null;this.insideChoosable=false;this.cMapsRenderedCount=0}c.prototype=new v.Visitor();b.copyProperties(c.prototype,{setRootNode:function(L){g.debug("CmlChooserPaneRenderer setRootNode");this.currentNode=L},visit:function(L){},visitAltList:function(L){g.debug("CmlChooserPaneRenderer visitAltList "+L);if(this.editor.getCmlElementInfo(L).choosableFrom){this.visitChildren(L)}else{this.editor.editorState.getFavouredAlternative(L).accept(this)}},createChooserElement:function(P,X,Y){g.debug("CmlChooserPaneRenderer createChooserElement for "+P);var S=this;var T=document.createElement("div");T.className="choosable choosersymbols";var Z=this.insideChoosable;this.insideChoosable=true;var aa=k(T,"table");aa.cellPadding=0;aa.cellSpacing=0;aa.className="cml_symbol";var R=k(aa,"tbody");var M=k(R,"tr");var W=this.currentNode;this.currentNode=M;X();this.currentNode=W;if((P instanceof v.CAlt)&&!this.word.isReplacementText){var U=k(R,"tr");var O=k(U,"td");O.colSpan=M.cells.length;O.className="makedefault clickable";var N=this.editor.editorState.isCAltSiteDefault(P);var L=N?"default_on.gif":"default_off.gif";var Q=k(O,"img");Q.src=this.editor.getImagesUrl()+L;Q.alt="globe";Q.title=N?"Click to make this no longer the default symbol for '"+Y+"'":"Click to make this the default symbol for '"+this.word+"'";Q.onclick=function(ab){ab=b.getEvent(ab);b.stopPropagation(ab);if(N){S.editor.unsetDefaultSymbol(P)}else{S.editor.setDefaultSymbol(P)}}}T.onclick=function(ab){if(!S.editor.fatalErrorOccurred){ab=b.getEvent(ab);if(this!==S.currentChosenDomNode){S.editor.choose(P,false);if(S.currentChosenDomNode!=null){b.removeClass(S.currentChosenDomNode,"chosen")}b.addClass(this,"chosen");S.currentChosenDomNode=this}}};T.onmouseover=function(){if(!S.editor.fatalErrorOccurred){b.addClass(this,"hover")}};T.onmouseout=function(){if(!S.editor.fatalErrorOccurred){b.removeClass(this,"hover")}};var V=this.editor.getCmlElementInfo(P);if(V.visible){this.currentChosenDomNode=T;b.addClass(T,"chosen")}this.insideChoosable=Z;this.currentNode.appendChild(T);return T},visitCAlt:function(L){if(!H.hasDescendant(L,v.AltList)){var M=this;if(!this.insideChoosable){this.createChooserElement(L,function(){M.visitChildren(L)},H.getDescendant(L,v.CMap).text.text)}}},visitCMap:function(L){var N=this;function M(){var S=L.ccs.length;var T;g.debug("CmlChooserPaneRenderer visiting cMap "+L+" with "+S+" ccs");if(L.ccs.length>0){for(var Q=0;Q<S;Q++){T=k(N.currentNode,"td");var O=N.editor.editorState.cachedSymbols[L.ccs[Q].getUniqueCode()];if(!O.blank){for(var P=0,R=O.symbols.length;P<R;P++){T.appendChild(x.renderSymbol(O.previewSymbols[P],document,L.text.text,'Click to select this symbol for "'+L.text.text+'"'))}}else{g.warn("Blank symbol found!",O)}}}else{T=k(N.currentNode,"td");T.appendChild(x.renderBlankChooserSymbol(document,L.text.text,N.editor.getImagesUrl()))}N.cMapsRenderedCount++}if(this.insideChoosable){M()}else{this.createChooserElement(L,M,L.text.text)}},visitLink:function(L){this.visitChildren(L)}});function J(P,R,N){this.spellCheckWord=P;this.renderer=R;this.containerDomNode=N;this.eventHandlersByName={};this.domElement=N.appendChild(R.doc.createElement("span"));this.textNode=this.domElement.appendChild(R.doc.createTextNode(P.text));var M=this;this.eventListener=function(S){S=b.getEvent(S);M.eventHandlersByName[S.type](P,S)};var O;for(var Q=0,L=R.eventHandlers.length;Q<L;Q++){O=R.eventHandlers[Q].eventHandlerName;this.eventHandlersByName[O]=R.eventHandlers[Q].handlerFunction;b.addDomEventListener(this.domElement,O,this.eventListener,false)}}J.prototype={destroy:function(){for(var M=0,L=this.renderer.eventHandlers.length;M<L;M++){b.removeDomEventListener(this.domElement,this.renderer.eventHandlers[M].eventHandlerName,this.eventListener,false)}b.purge(this.domElement);this.containerDomNode.removeChild(this.domElement);this.spellCheckWord=null;this.renderer=null;this.domElement=null;this.textNode=null;this.eventHandlersByName=null;this.containerDomNode=null},redraw:function(){this.textNode.nodeValue=this.spellCheckWord.text;if(this.spellCheckWord.isSpelledCorrectly){b.removeClass(this.domElement,"incorrectlySpelledWord");this.domElement.title="Click to display alternatives"}else{b.addClass(this.domElement,"incorrectlySpelledWord");if(this.spellCheckWord.suggestions.length>0){var L=window.opera?"Shift click":"Right click";this.domElement.title="Word not found in dictionary. "+L+" to display suggestions"}else{this.domElement.title="Word not found in dictionary. No suggestions."}}}};function j(M,L){this.doc=M;this.eventHandlers=L;this.eventHandlersByName={}}j.prototype=new B.WordRenderer();b.copyProperties(j.prototype,{bindToWord:function(N){this.word=N;this.rendered=false;this.destroyed=false;this.mainDomElement=this.doc.createElement("span");this.mainDomElement.className="word wordWithAlternatives";this.mainDomElement.title="Click to display alternatives";this.spellCheckWordRenderers=[];for(var M=0,L=N.spellCheckWords.length;M<L;M++){if(M>0){this.mainDomElement.appendChild(this.doc.createTextNode(" "))}this.spellCheckWordRenderers[M]=new J(N.spellCheckWords[M],this,this.mainDomElement)}},render:function(L){L.appendChild(this.mainDomElement);this.rendered=true},redraw:function(){for(var M=0,L=this.spellCheckWordRenderers.length;M<L;M++){this.spellCheckWordRenderers[M].redraw()}},remove:function(){this.mainDomElement.parentNode.removeChild(this.mainDomElement);this.rendered=false},destroy:function(){if(!this.destroyed){for(var M=0,L=this.spellCheckWordRenderers.length;M<L;M++){this.spellCheckWordRenderers[M].destroy()}b.purge(this.mainDomElement);this.remove();this.eventHandlersByName=null;this.mainDomElement=null;this.domElements=null;this.textNodes=null;this.word=null;this.destroyed=true}}});function f(L){this.editor=L;this.doc=L.editPaneDocument;this.altListContainerDiv=this.doc.createElement("div");this.altListContainerDiv.className="altlist cml_floatedcontainer"}f.prototype=new B.CmlElementRenderer();b.copyProperties(f.prototype,{render:function(L){L.appendChild(this.altListContainerDiv);this.rendered=true},remove:function(){b.purge(this.altListContainerDiv);this.altListContainerDiv.parentNode.removeChild(this.altListContainerDiv);this.rendered=false},destroy:function(){this.remove();this.altListContainerDiv=null},setActive:function(){b.addClass(this.altListContainerDiv,"active")},setInactive:function(){b.removeClass(this.altListContainerDiv,"active")},setSelected:function(){b.addClass(this.altListContainerDiv,"selected")},setUnselected:function(){b.removeClass(this.altListContainerDiv,"selected")},toString:function(){return"[AltListEditPaneRenderer]"}});function A(L){this.editor=L;this.doc=L.editPaneDocument;this.conceptContainer=this.doc.createElement("div");this.conceptContainer.className="cml_cmap cml_floatedcontainer";this.symbolsContainer=k(this.conceptContainer,"div");this.symbolsContainer.className="cml_symbols";this.textContainer=k(this.conceptContainer,"div");this.textContainer.className="cml_cmap_text"}A.prototype=new B.CmlElementRenderer();b.copyProperties(A.prototype,{render:function(L){L.appendChild(this.conceptContainer);this.rendered=true},remove:function(){if(this.rendered){b.purge(this.conceptContainer);this.conceptContainer.parentNode.removeChild(this.conceptContainer);this.rendered=false}},destroy:function(){g.debug("CMapEditPaneRenderer destroy called with conceptContainer "+this.conceptContainer.innerHTML);this.remove();this.conceptContainer=null;this.symbolsContainer=null;this.textContainer=null;this.destroyed=true},setActive:function(){b.addClass(this.conceptContainer,"active")},setInactive:function(){b.removeClass(this.conceptContainer,"active")},setSelected:function(){b.addClass(this.conceptContainer,"selected")},setUnselected:function(){b.removeClass(this.conceptContainer,"selected")},toString:function(){return"[CMapEditPaneRenderer]"}});function u(L){this.editor=L;this.doc=L.editPaneDocument;this.domElement=this.doc.createElement("div");this.domElement.className="editor_paragraph";this.conceptContainer=k(this.domElement,"div");this.br=k(this.domElement,"br");this.br.className="clear"}u.prototype=new B.CmlElementRenderer();b.copyProperties(u.prototype,{render:function(L){L.appendChild(this.domElement);this.rendered=true},remove:function(){if(this.rendered){b.purge(this.domElement);this.domElement.parentNode.removeChild(this.domElement);this.rendered=false}},destroy:function(){g.debug("CpEditPaneRenderer destroy called");this.remove();this.domElement=null;this.conceptContainer=null;this.br=null;this.destroyed=true},setTooManySymbols:function(){b.addClass(this.domElement,"tooManySymbols")},setNotTooManySymbols:function(){b.removeClass(this.domElement,"tooManySymbols")},toString:function(){return"[CpEditPaneRenderer]"}});function p(){}p.prototype={init:function(O){var R=this;if(this.loadHandler){var Q=function(){R.loadHandler()};O.addEventListener(K.LOAD,Q)}if(this.unloadHandler){var M=function(){R.unloadHandler()};O.addEventListener(K.UNLOAD,M)}if(this.errorHandler){var L=function(U,T,S){R.errorHandler(S)};O.addEventListener(K.ERROR,L)}if(this.activeCMapChangeHandler){var N=function(U,T,S){R.activeCMapChangeHandler(S)};O.addEventListener(K.CHANGE_ACTIVE_CMAP,N)}if(this.selectedCMapsChangeHandler){var P=function(U,T,S){R.selectedCMapsChangeHandler(S)};O.addEventListener(K.CHANGE_SELECTED_CMAPS,P)}if(this.disable){O.addEventListener(K.DISABLE,function(){R.disable()})}},draw:function(L){},loadHandler:null,activeCMapChangeHandler:null,selectedCMapsChangeHandler:null,errorHandler:null,unloadHandler:null,disable:null};function q(L,M,N){this.imgSrc=L;this.alt=M;this.title=N;this.enabled=false;this.hovering=false;this.pressed=false}q.prototype=new p();b.copyProperties(q.prototype,{cssClasses:{enabled:"button clickable flat inactive unpressedbutton",disabled:"button unclickable flat inactive unpressedbutton disabled",pressed:"button clickable bevelin inactive pressedbutton",hover:"button clickable bevelout inactive unpressedbutton",active:"button clickable bevelin active pressedbutton",active_hover:"button clickable bevelin active pressedbutton"},draw:function(L,M){this.domElement=k(L,"div");this.domElement.className="button unpressedbutton";this.image=k(this.domElement,"img");this.image.src=M+this.imgSrc;this.image.alt=this.alt;this.image.title=this.title;this.image.width=16;this.image.height=16;var N=this;this.domElement.onmouseover=function(){if(N.enabled){N.setHover(true,true)}};this.domElement.onmouseout=function(){N.setPressed(false,false);N.setHover(false,true)};this.domElement.onmousedown=function(O){if(N.enabled&&N.state!="active"){N.setPressed(true,true)}b.stopPropagation(b.getEvent(O))};this.domElement.onmouseup=function(){if(N.enabled&&N.state!="active"){N.setPressed(false,true)}};this.domElement.onclick=function(){if(N.enabled){N.press()}};this.image.ondragstart=function(){return false}},setEnabled:function(L,M){this.enabled=L;this.pressed=false;this.active=false;if(M){this.updateState()}},setActive:function(L,M){this.active=L;if(M){this.updateState()}},setHover:function(L,M){this.hover=L;if(M){this.updateState()}},setPressed:function(L,M){this.pressed=L;if(M){this.updateState()}},updateState:function(){var L;if(!this.enabled){L="disabled"}else{if(this.pressed){L="pressed"}else{if(this.active){L=this.hover?"active_hover":"active"}else{if(this.hover){L="hover"}else{L="enabled"}}}}if(L!=this.currentState){this.domElement.className=this.cssClasses[L];this.currentState=L}},press:function(){},loadHandler:function(){this.updateState()},cleanImage:function(){this.image.onmouseover=null;this.image.onmouseout=null;this.image.onmousedown=null;this.image.onmouseup=null;this.image.onclick=null;this.image=null},errorHandler:function(L){if(L){this.setEnabled(false,true)}},unloadHandler:function(){this.cleanImage()},disable:function(){this.setEnabled(false,true)},activeCMapChangeHandler:null,selectedCMapsChangeHandler:null});function d(N,L,O,P,M){this.infoPropertyName=N;this.cssClass=L;this.alt=O;this.title=P;this.imgSrc=M}d.prototype=new q();b.copyProperties(d.prototype,{selectedCMapsChangeHandler:function(O){if(O.length>0){var M;var P=true;for(var N=0,L=O.length;N<L;N++){M=this.editor.getCmlElementInfo(O[N]);if(!M[this.infoPropertyName]){P=false;break}}this.setEnabled(true,false);this.setActive(P,true)}else{this.setEnabled(false,true)}},press:function(){if(this.editor.selectedCMaps){g.info("press. this.editor.selectedCMaps: "+this.editor.selectedCMaps);var N,P,S;var R=!this.active;for(var O=0,L=this.editor.selectedCMaps.length;O<L;O++){N=this.editor.getCmlElementInfo(this.editor.selectedCMaps[O]);P=x.getParallelCMapsForCMap(this.editor.selectedCMaps[O]);for(var M=0,Q=P.length;M<Q;M++){S=this.editor.getCmlElementInfo(P[M]);S[this.infoPropertyName]=R}if(R){b.addClass(N.renderer.textContainer,this.cssClass)}else{b.removeClass(N.renderer.textContainer,this.cssClass)}}this.setActive(!this.active,true)}}});function w(L){this.editor=L;this.init(L)}w.prototype=new d("strong","strong","Bold","Bold","bold.gif");function t(L){this.editor=L;this.init(L)}t.prototype=new d("emphasis","emphasis","Italic","Italic","italic.gif");function a(M){var L=this;this.editor=M;this.init(M);this.editorKeyDownHandler=function(N){N=b.getEvent(N);g.trace("TextChangeButton.editorKeyDownHandler: keyCode: "+N.keyCode);if(N.keyCode===122){L.press();b.preventDefault(N)}}}a.prototype=new q("changetext.gif","Change text","Change text");b.copyProperties(a.prototype,{press:function(){var O=this.editor;if(O.activeCMap){var N=O.editorState.getCurrentChosenContainerElement(O.activeCMap);var M=O.getCmlElementInfo(O.activeCMap);g.debug("Editing, cmap is "+O.activeCMap+", currentChosenElement is "+N);g.debug("Going to edit text, chosen element is "+O.editorState.editorContent.dumpCmlElement(N));var L="Please enter the new text";var Q=x.extractText(O.editorState,N,false);var P=x.extractText(O.editorState,N,true);if(P!==Q){L+=" or leave blank to revert to original text ('"+Q+"')"}b.prompt("Change Text",L,P,function(R){var S=b.trim(R);if(S===""||S===Q){O.removeReplacementText(N,M.renderer.textContainer)}else{if(S!==P){O.editText(N,S,M.renderer.textContainer)}}})}},activeCMapChangeHandler:function(L){if(L){this.setEnabled(true,false);this.setActive(false,true)}else{this.setEnabled(false,true)}},loadHandler:function(){b.addDomEventListener(this.editor.rootElement,"keydown",this.editorKeyDownHandler,false);b.addDomEventListener(this.editor.editPaneRootElement,"keydown",this.editorKeyDownHandler,false);this.updateState()},unloadHandler:function(){b.removeDomEventListener(this.editor.rootElement,"keydown",this.editorKeyDownHandler,false);b.removeDomEventListener(this.editor.editPaneRootElement,"keydown",this.editorKeyDownHandler,false);this.cleanImage()}});function h(L){this.editor=L;this.init(L)}h.prototype=new q("link.gif","Link","Link");b.copyProperties(h.prototype,{press:function(){var N=this;var M="Please enter the the address to link to (note: the whole content will be a link) or leave blank to have no link";var L=this.editor.isLink()?this.editor.linkUrl:"";b.prompt("Create link",M,L,function(O){N.editor.setLinkUrl(O)})},loadHandler:function(){this.setEnabled(true,true)}});function G(L){this.editor=L;this.init(L)}G.prototype=new q("save.gif","Save","Save");b.copyProperties(G.prototype,{press:function(){this.editor.save(true)},loadHandler:function(){this.setEnabled(true,true)}});function l(L){this.editor=L;this.init(L)}l.prototype=new q("settings.gif","Advanced settings","Advanced settings");b.copyProperties(l.prototype,{press:function(){this.editor.openSettingsDialog(n.SettingScopes.CONTENT)},loadHandler:function(){this.setEnabled(true,true)}});function D(M,N,L){this.labelText=M;this.desc=N;this.settingKey=L;this.resymbolise=false;this.refreshSymbols=false;this.refreshSpellings=false;this.refreshCml=false}D.prototype=new p();D.prototype.draw=function(N){var M=this;this.mainDomElement=k(N,"label");this.mainDomElement.className="toolbarcontrol";this.mainDomElement.appendChild(document.createTextNode(this.labelText));this.selectorDropDown=k(this.mainDomElement,"select");this.selectorDropDown.disabled=true;this.selectorDropDown.options[0]=new Option("[default]","",true,true);for(var O=0,L=this.options.length;O<L;O++){var P=this.options[O];this.selectorDropDown.options[O+1]=new Option(P[0],P[1],false,false)}this.selectorDropDown.onchange=function(){var Q=M.extractSettingValue(this.options[this.selectedIndex].value);M.changeHandler(Q)}};D.prototype.extractSettingValue=function(L){return(L==="")?null:L};D.prototype.changeSetting=function(L){this.editor.changeSettings([new n.Setting(n.SettingScopes.CONTENT,this.settingKey,L)],this.resymbolise,this.refreshSymbols,this.refreshSpellings,this.refreshCml)};D.prototype.changeHandler=function(L){g.debug("Changing "+this.desc+" to "+L);this.changeSetting(L)};D.prototype.initFromSettings=function(){this.selectorDropDown.disabled=false;var N=String(this.editor.settings[n.SettingScopes.CONTENT][this.settingKey]);for(var M=0,L=this.selectorDropDown.options.length;M<L;M++){if(this.selectorDropDown.options[M].value==N){this.selectorDropDown.selectedIndex=M;return N}}return N};D.prototype.loadHandler=function(){this.initFromSettings()};D.prototype.errorHandler=function(L){if(L){this.selectorDropDown.disabled=true}};D.prototype.unloadHandler=function(){this.selectorDropDown.onchange=null;this.selectorDropDown=null};D.prototype.disable=function(){this.selectorDropDown.disabled=true};function C(L){this.editor=L;this.init(L);this.refreshSymbols=true}C.prototype=new D("Symbol size:","symbol size",n.SettingKeys.BASESIZE);C.prototype.options=[["5","30"],["6","40"],["8","50"],["9","60"],["12","80"],["16","100"],["20","125"],["24","150"],["28","175"],["32","200"],["40","250"]];function e(L){this.editor=L;this.init(L);this.refreshSymbols=true}e.prototype=new D("Symbol colour:","symbol colours",n.SettingKeys.COLOR);e.prototype.options=[["Coloured","Colored"],["Black","Black"],["Dark grey","DarkGrey"],["Light grey","LightGrey"],["White","White"],["Red","Red"],["Green","Green"],["Blue","Blue"],["Yellow","Yellow"],["Cyan","Cyan"],["Magenta","Magenta"]];function F(L){this.editor=L;this.init(L)}F.prototype=new D("Text size:","text size",n.SettingKeys.FONT_SIZE);F.prototype.options=[["Smallest","0.625"],["Smaller","0.75"],["Small","0.875"],["Medium","1"],["Big","1.25"],["Bigger","1.5"],["Biggest","2"]];F.prototype.loadHandler=function(M){var L=this.initFromSettings();this.editor.updateFontSize()};F.prototype.changeHandler=function(L){this.changeSetting(L);this.editor.updateFontSize()};function r(L,N,O,M){this.editor=L;this.labelText=N;this.desc=O;this.settingKey=M;this.resymbolise=true;this.refreshSymbols=true;this.init(L)}r.prototype=new D();r.prototype.options=[["Yes","true"],["No","false"]];r.prototype.extractSettingValue=function(L){return(L==="")?null:(L==="true")};var y={save:function(L){return new G(L)},retext:function(L){return new a(L)},bold:function(L){return new w(L)},italic:function(L){return new t(L)},link:function(L){return new h(L)},settings:function(L){return new l(L)},symbolSize:function(L){return new C(L)},textSize:function(L){return new F(L)},symbolColour:function(L){return new e(L)},plurals:function(L){return new r(L,"Show plurals:","show plurals",n.SettingKeys.QUALIFIER_PLURALS)},tenses:function(L){return new r(L,"Show tenses:","show tenses",n.SettingKeys.QUALIFIER_TENSES)},superlatives:function(L){return new r(L,"Show superlatives:","show superlatives",n.SettingKeys.QUALIFIER_SUPERLATIVES)}}})();
