]> git.donarmstrong.com Git - roundcube.git/blobdiff - program/js/googiespell.js
Imported Upstream version 0.3.1
[roundcube.git] / program / js / googiespell.js
index eb103e7acef938d3753c7a3b40b8b52874d8fc96..48e8407fcb7e670e9c630d625c8a5e3d12037dc3 100644 (file)
-var AJS={getElement:function(id){
-if(typeof (id)=="string"){
-return document.getElementById(id);
-}else{
-return id;
-}
-},getElements:function(){
-var _2=new Array();
-for(var i=0;i<arguments.length;i++){
-var _4=this.getElement(arguments[i]);
-_2.push(_4);
-}
-return _2;
-},getQueryArgument:function(_5){
-var _6=window.location.search.substring(1);
-var _7=_6.split("&");
-for(var i=0;i<_7.length;i++){
-var _9=_7[i].split("=");
-if(_9[0]==_5){
-return _9[1];
-}
-}
-return null;
-},isIe:function(){
-return (navigator.userAgent.toLowerCase().indexOf("msie")!=-1&&navigator.userAgent.toLowerCase().indexOf("opera")==-1);
-},getBody:function(){
-return this.getElementsByTagAndClassName("body")[0];
-},getElementsByTagAndClassName:function(_a,_b,_c){
-var _d=new Array();
-if(!this.isDefined(_c)){
-_c=document;
-}
-if(!this.isDefined(_a)){
-_a="*";
-}
-var _e=_c.getElementsByTagName(_a);
-var _f=_e.length;
-var _10=new RegExp("(^|\\s)"+_b+"(\\s|$)");
-for(i=0,j=0;i<_f;i++){
-if(_10.test(_e[i].className)||_b==null){
-_d[j]=_e[i];
-j++;
-}
-}
-return _d;
-},appendChildNodes:function(_11){
-if(arguments.length>=2){
-for(var i=1;i<arguments.length;i++){
-var n=arguments[i];
-if(typeof (n)=="string"){
-n=document.createTextNode(n);
-}
-if(this.isDefined(n)){
-_11.appendChild(n);
-}
-}
-}
-return _11;
-},replaceChildNodes:function(_14){
-var _15;
-while((_15=_14.firstChild)){
-_14.removeChild(_15);
-}
-if(arguments.length<2){
-return _14;
-}else{
-return this.appendChildNodes.apply(this,arguments);
-}
-},insertAfter:function(_16,_17){
-_17.parentNode.insertBefore(_16,_17.nextSibling);
-},insertBefore:function(_18,_19){
-_19.parentNode.insertBefore(_18,_19);
-},showElement:function(elm){
-elm.style.display="";
-},hideElement:function(elm){
-elm.style.display="none";
-},isElementHidden:function(elm){
-return elm.style.visibility=="hidden";
-},swapDOM:function(_1d,src){
-_1d=this.getElement(_1d);
-var _1f=_1d.parentNode;
-if(src){
-src=this.getElement(src);
-_1f.replaceChild(src,_1d);
-}else{
-_1f.removeChild(_1d);
-}
-return src;
-},removeElement:function(elm){
-this.swapDOM(elm,null);
-},isDict:function(o){
-var _22=String(o);
-return _22.indexOf(" Object")!=-1;
-},createDOM:function(_23,_24){
-var i=0;
-elm=document.createElement(_23);
-if(this.isDict(_24[i])){
-for(k in _24[0]){
-if(k=="style"){
-elm.style.cssText=_24[0][k];
-}else{
-if(k=="class"){
-elm.className=_24[0][k];
-}else{
-elm.setAttribute(k,_24[0][k]);
-}
-}
-}
-i++;
-}
-if(_24[0]==null){
-i=1;
-}
-for(i;i<_24.length;i++){
-var n=_24[i];
-if(this.isDefined(n)){
-if(typeof (n)=="string"){
-n=document.createTextNode(n);
-}
-elm.appendChild(n);
-}
-}
-return elm;
-},UL:function(){
-return this.createDOM.apply(this,["ul",arguments]);
-},LI:function(){
-return this.createDOM.apply(this,["li",arguments]);
-},TD:function(){
-return this.createDOM.apply(this,["td",arguments]);
-},TR:function(){
-return this.createDOM.apply(this,["tr",arguments]);
-},TH:function(){
-return this.createDOM.apply(this,["th",arguments]);
-},TBODY:function(){
-return this.createDOM.apply(this,["tbody",arguments]);
-},TABLE:function(){
-return this.createDOM.apply(this,["table",arguments]);
-},INPUT:function(){
-return this.createDOM.apply(this,["input",arguments]);
-},SPAN:function(){
-return this.createDOM.apply(this,["span",arguments]);
-},B:function(){
-return this.createDOM.apply(this,["b",arguments]);
-},A:function(){
-return this.createDOM.apply(this,["a",arguments]);
-},DIV:function(){
-return this.createDOM.apply(this,["div",arguments]);
-},IMG:function(){
-return this.createDOM.apply(this,["img",arguments]);
-},BUTTON:function(){
-return this.createDOM.apply(this,["button",arguments]);
-},H1:function(){
-return this.createDOM.apply(this,["h1",arguments]);
-},H2:function(){
-return this.createDOM.apply(this,["h2",arguments]);
-},H3:function(){
-return this.createDOM.apply(this,["h3",arguments]);
-},BR:function(){
-return this.createDOM.apply(this,["br",arguments]);
-},TEXTAREA:function(){
-return this.createDOM.apply(this,["textarea",arguments]);
-},FORM:function(){
-return this.createDOM.apply(this,["form",arguments]);
-},P:function(){
-return this.createDOM.apply(this,["p",arguments]);
-},SELECT:function(){
-return this.createDOM.apply(this,["select",arguments]);
-},OPTION:function(){
-return this.createDOM.apply(this,["option",arguments]);
-},TN:function(_27){
-return document.createTextNode(_27);
-},IFRAME:function(){
-return this.createDOM.apply(this,["iframe",arguments]);
-},SCRIPT:function(){
-return this.createDOM.apply(this,["script",arguments]);
-},getXMLHttpRequest:function(){
-var _28=[function(){
-return new XMLHttpRequest();
-},function(){
-return new ActiveXObject("Msxml2.XMLHTTP");
-},function(){
-return new ActiveXObject("Microsoft.XMLHTTP");
-},function(){
-return new ActiveXObject("Msxml2.XMLHTTP.4.0");
-},function(){
-throw "Browser does not support XMLHttpRequest";
-}];
-for(var i=0;i<_28.length;i++){
-var _2a=_28[i];
-try{
-return _2a();
-}
-catch(e){
-}
-}
-},doSimpleXMLHttpRequest:function(url){
-var req=this.getXMLHttpRequest();
-req.open("GET",url,true);
-return this.sendXMLHttpRequest(req);
-},getRequest:function(url,_2e){
-var req=this.getXMLHttpRequest();
-req.open("POST",url,true);
-req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
-return this.sendXMLHttpRequest(req);
-},sendXMLHttpRequest:function(req,_31){
-var d=new AJSDeferred(req);
-var _33=function(){
-if(req.readyState==4){
-try{
-var _34=req.status;
-}
-catch(e){
+var SPELL_CUR_LANG=null;
+var GOOGIE_DEFAULT_LANG="en";
+function GoogieSpell(_1,_2){
+var _3=this;
+this.array_keys=function(_4){
+var _5=[];
+for(var _6 in _4){
+_5.push([_6]);
+}
+return _5;
+};
+var _7=getCookie("language");
+GOOGIE_CUR_LANG=_7!=null?_7:GOOGIE_DEFAULT_LANG;
+this.img_dir=_1;
+this.server_url=_2;
+this.org_lang_to_word={"da":"Dansk","de":"Deutsch","en":"English","es":"Espa&#241;ol","fr":"Fran&#231;ais","it":"Italiano","nl":"Nederlands","pl":"Polski","pt":"Portugu&#234;s","fi":"Suomi","sv":"Svenska"};
+this.lang_to_word=this.org_lang_to_word;
+this.langlist_codes=this.array_keys(this.lang_to_word);
+this.show_change_lang_pic=true;
+this.change_lang_pic_placement="right";
+this.report_state_change=true;
+this.ta_scroll_top=0;
+this.el_scroll_top=0;
+this.lang_chck_spell="Check spelling";
+this.lang_revert="Revert to";
+this.lang_close="Close";
+this.lang_rsm_edt="Resume editing";
+this.lang_no_error_found="No spelling errors found";
+this.lang_no_suggestions="No suggestions";
+this.show_spell_img=false;
+this.decoration=true;
+this.use_close_btn=true;
+this.edit_layer_dbl_click=true;
+this.report_ta_not_found=true;
+this.custom_ajax_error=null;
+this.custom_no_spelling_error=null;
+this.custom_menu_builder=[];
+this.custom_item_evaulator=null;
+this.extra_menu_items=[];
+this.custom_spellcheck_starter=null;
+this.main_controller=true;
+this.lang_state_observer=null;
+this.spelling_state_observer=null;
+this.show_menu_observer=null;
+this.all_errors_fixed_observer=null;
+this.use_focus=false;
+this.focus_link_t=null;
+this.focus_link_b=null;
+this.cnt_errors=0;
+this.cnt_errors_fixed=0;
+$(document).bind("click",function(e){
+if($(e.target).attr("googie_action_btn")!="1"&&_3.isLangWindowShown()){
+_3.hideLangWindow();
+}
+if($(e.target).attr("googie_action_btn")!="1"&&_3.isErrorWindowShown()){
+_3.hideErrorWindow();
+}
+});
+this.decorateTextarea=function(id){
+this.text_area=typeof (id)=="string"?document.getElementById(id):id;
+if(this.text_area){
+if(!this.spell_container&&this.decoration){
+var _a=document.createElement("table");
+var _b=document.createElement("tbody");
+var tr=document.createElement("tr");
+var _d=document.createElement("td");
+var _e=this.isDefined(this.force_width)?this.force_width:this.text_area.offsetWidth;
+var _f=this.isDefined(this.force_height)?this.force_height:16;
+tr.appendChild(_d);
+_b.appendChild(tr);
+$(_a).append(_b).insertBefore(this.text_area).width("100%").height(_f);
+$(_d).height(_f).width(_e).css("text-align","right");
+this.spell_container=_d;
 }
-if(_34==200||_34==304||req.responseText==null){
-d.callback(req,_31);
+this.checkSpellingState();
 }else{
-d.errback();
+if(this.report_ta_not_found){
+alert("Text area not found");
 }
 }
 };
-req.onreadystatechange=_33;
-return d;
-},reprString:function(o){
-return ("\""+o.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
-},serializeJSON:function(o){
-var _37=typeof (o);
-if(_37=="undefined"){
-return "undefined";
-}else{
-if(_37=="number"||_37=="boolean"){
-return o+"";
-}else{
-if(o===null){
-return "null";
-}
-}
-}
-if(_37=="string"){
-return this.reprString(o);
-}
-var me=arguments.callee;
-var _39;
-if(typeof (o.__json__)=="function"){
-_39=o.__json__();
-if(o!==_39){
-return me(_39);
-}
-}
-if(typeof (o.json)=="function"){
-_39=o.json();
-if(o!==_39){
-return me(_39);
-}
-}
-if(_37!="function"&&typeof (o.length)=="number"){
-var res=[];
-for(var i=0;i<o.length;i++){
-var val=me(o[i]);
-if(typeof (val)!="string"){
-val="undefined";
-}
-res.push(val);
-}
-return "["+res.join(",")+"]";
-}
-res=[];
-for(var k in o){
-var _3e;
-if(typeof (k)=="number"){
-_3e="\""+k+"\"";
-}else{
-if(typeof (k)=="string"){
-_3e=this.reprString(k);
-}else{
-continue;
-}
-}
-val=me(o[k]);
-if(typeof (val)!="string"){
-continue;
-}
-res.push(_3e+":"+val);
-}
-return "{"+res.join(",")+"}";
-},loadJSONDoc:function(url){
-var d=this.getRequest(url);
-var _41=function(req){
-var _43=req.responseText;
-return eval("("+_43+")");
+this.setSpellContainer=function(id){
+this.spell_container=typeof (id)=="string"?document.getElementById(id):id;
 };
-d.addCallback(_41);
-return d;
-},keys:function(obj){
-var _45=[];
-for(var _46 in obj){
-_45.push(_46);
-}
-return _45;
-},urlencode:function(str){
-return encodeURIComponent(str.toString());
-},isDefined:function(o){
-return (o!="undefined"&&o!=null);
-},isArray:function(obj){
+this.setLanguages=function(_11){
+this.lang_to_word=_11;
+this.langlist_codes=this.array_keys(_11);
+};
+this.setCurrentLanguage=function(_12){
+GOOGIE_CUR_LANG=_12;
+var now=new Date();
+now.setTime(now.getTime()+365*24*60*60*1000);
+setCookie("language",_12,now);
+};
+this.setForceWidthHeight=function(_14,_15){
+this.force_width=_14;
+this.force_height=_15;
+};
+this.setDecoration=function(_16){
+this.decoration=_16;
+};
+this.dontUseCloseButtons=function(){
+this.use_close_btn=false;
+};
+this.appendNewMenuItem=function(_17,_18,_19){
+this.extra_menu_items.push([_17,_18,_19]);
+};
+this.appendCustomMenuBuilder=function(_1a,_1b){
+this.custom_menu_builder.push([_1a,_1b]);
+};
+this.setFocus=function(){
 try{
-return (typeof (obj.length)=="undefined")?false:true;
+this.focus_link_b.focus();
+this.focus_link_t.focus();
+return true;
 }
 catch(e){
 return false;
 }
-},isObject:function(obj){
-return (obj&&typeof obj=="object");
-},exportDOMElements:function(){
-UL=this.UL;
-LI=this.LI;
-TD=this.TD;
-TR=this.TR;
-TH=this.TH;
-TBODY=this.TBODY;
-TABLE=this.TABLE;
-INPUT=this.INPUT;
-SPAN=this.SPAN;
-B=this.B;
-A=this.A;
-DIV=this.DIV;
-IMG=this.IMG;
-BUTTON=this.BUTTON;
-H1=this.H1;
-H2=this.H2;
-H3=this.H3;
-BR=this.BR;
-TEXTAREA=this.TEXTAREA;
-FORM=this.FORM;
-P=this.P;
-SELECT=this.SELECT;
-OPTION=this.OPTION;
-TN=this.TN;
-IFRAME=this.IFRAME;
-SCRIPT=this.SCRIPT;
-},exportToGlobalScope:function(){
-getElement=this.getElement;
-getQueryArgument=this.getQueryArgument;
-isIe=this.isIe;
-$=this.getElement;
-getElements=this.getElements;
-getBody=this.getBody;
-getElementsByTagAndClassName=this.getElementsByTagAndClassName;
-appendChildNodes=this.appendChildNodes;
-ACN=appendChildNodes;
-replaceChildNodes=this.replaceChildNodes;
-RCN=replaceChildNodes;
-insertAfter=this.insertAfter;
-insertBefore=this.insertBefore;
-showElement=this.showElement;
-hideElement=this.hideElement;
-isElementHidden=this.isElementHidden;
-swapDOM=this.swapDOM;
-removeElement=this.removeElement;
-isDict=this.isDict;
-createDOM=this.createDOM;
-this.exportDOMElements();
-getXMLHttpRequest=this.getXMLHttpRequest;
-doSimpleXMLHttpRequest=this.doSimpleXMLHttpRequest;
-getRequest=this.getRequest;
-sendXMLHttpRequest=this.sendXMLHttpRequest;
-reprString=this.reprString;
-serializeJSON=this.serializeJSON;
-loadJSONDoc=this.loadJSONDoc;
-keys=this.keys;
-isDefined=this.isDefined;
-isArray=this.isArray;
-}};
-AJSDeferred=function(req){
-this.callbacks=[];
-this.req=req;
-this.callback=function(res){
-while(this.callbacks.length>0){
-var fn=this.callbacks.pop();
-res=fn(res);
-}
-};
-this.errback=function(e){
-alert("Error encountered:\n"+e);
-};
-this.addErrback=function(fn){
-this.errback=fn;
-};
-this.addCallback=function(fn){
-this.callbacks.unshift(fn);
-};
-this.addCallbacks=function(fn1,fn2){
-this.addCallback(fn1);
-this.addErrback(fn2);
-};
-this.sendReq=function(_53){
-if(AJS.isObject(_53)){
-var _54=[];
-for(k in _53){
-_54.push(k+"="+AJS.urlencode(_53[k]));
-}
-_54=_54.join("&");
-this.req.send(_54);
-}else{
-if(AJS.isDefined(_53)){
-this.req.send(_53);
-}else{
-this.req.send("");
-}
-}
-};
 };
-AJSDeferred.prototype=new AJSDeferred();
-var GOOGIE_CUR_LANG="en";
-function GoogieSpell(_55,_56){
-var _57;
-var _58;
-_57=getCookie("language");
-if(_57!=null){
-GOOGIE_CUR_LANG=_57;
+this.setStateChanged=function(_1c){
+this.state=_1c;
+if(this.spelling_state_observer!=null&&this.report_state_change){
+this.spelling_state_observer(_1c,this);
 }
-this.img_dir=_55;
-this.server_url=_56;
-this.lang_to_word={"da":"Dansk","de":"Deutsch","en":"English","es":"Espa&#241;ol","fr":"Fran&#231;ais","it":"Italiano","nl":"Nederlands","pl":"Polski","pt":"Portugu&#234;s","fi":"Suomi","sv":"Svenska"};
-this.langlist_codes=AJS.keys(this.lang_to_word);
-this.show_change_lang_pic=true;
-this.lang_state_observer=null;
-this.spelling_state_observer=null;
-this.request=null;
-this.error_window=null;
-this.language_window=null;
-this.edit_layer=null;
-this.orginal_text=null;
-this.results=null;
-this.text_area=null;
-this.gselm=null;
-this.ta_scroll_top=0;
-this.el_scroll_top=0;
-this.lang_chck_spell="Check spelling";
-this.lang_rsm_edt="Resume editing";
-this.lang_close="Close";
-this.lang_no_error_found="No spelling errors found";
-this.lang_revert="Revert to";
-this.show_spell_img=false;
 };
-GoogieSpell.prototype.setStateChanged=function(_59){
-if(this.spelling_state_observer!=null){
-this.spelling_state_observer(_59);
-}
+this.setReportStateChange=function(_1d){
+this.report_state_change=_1d;
 };
-GoogieSpell.item_onmouseover=function(e){
-var elm=GoogieSpell.getEventElm(e);
-if(elm.className!="googie_list_close"&&elm.className!="googie_list_revert"){
-elm.className="googie_list_onhover";
-}else{
-elm.parentNode.className="googie_list_onhover";
-}
+this.getUrl=function(){
+return this.server_url+GOOGIE_CUR_LANG;
 };
-GoogieSpell.item_onmouseout=function(e){
-var elm=GoogieSpell.getEventElm(e);
-if(elm.className!="googie_list_close"&&elm.className!="googie_list_revert"){
-elm.className="googie_list_onout";
-}else{
-elm.parentNode.className="googie_list_onout";
-}
+this.escapeSpecial=function(val){
+return val.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
 };
-GoogieSpell.prototype.getGoogleUrl=function(){
-return this.server_url+GOOGIE_CUR_LANG;
+this.createXMLReq=function(_1f){
+return "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+"<spellrequest textalreadyclipped=\"0\" ignoredups=\"0\" ignoredigits=\"1\" ignoreallcaps=\"1\">"+"<text>"+_1f+"</text></spellrequest>";
 };
-GoogieSpell.prototype.spellCheck=function(elm,_5f){
+this.spellCheck=function(_20){
+this.cnt_errors_fixed=0;
+this.cnt_errors=0;
+this.setStateChanged("checking_spell");
+if(this.main_controller){
+this.appendIndicator(this.spell_span);
+}
+this.error_links=[];
 this.ta_scroll_top=this.text_area.scrollTop;
-this.appendIndicator(elm);
-try{
+this.ignore=_20;
 this.hideLangWindow();
+if($(this.text_area).val()==""||_20){
+if(!this.custom_no_spelling_error){
+this.flashNoSpellingErrorState();
+}else{
+this.custom_no_spelling_error(this);
 }
-catch(e){
+this.removeIndicator();
+return;
 }
-this.gselm=elm;
 this.createEditLayer(this.text_area.offsetWidth,this.text_area.offsetHeight);
 this.createErrorWindow();
-AJS.getBody().appendChild(this.error_window);
+$("body").append(this.error_window);
 try{
 netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
 }
 catch(e){
 }
-this.gselm.onclick=null;
-this.orginal_text=this.text_area.value;
-var me=this;
-var d=AJS.getRequest(this.getGoogleUrl());
-var _62=function(req){
-var _64=req.responseText;
-if(_64.match(/<c.*>/)!=null){
-var _65=GoogieSpell.parseResult(_64);
-me.results=_65;
-me.showErrorsInIframe(_65);
-me.resumeEditingState();
-}else{
-me.flashNoSpellingErrorState();
+if(this.main_controller){
+$(this.spell_span).unbind("click");
 }
-me.removeIndicator();
-};
-var _66=function(req){
+this.orginal_text=$(this.text_area).val();
+var _21=this.escapeSpecial(this.orginal_text);
+var ref=this;
+$.ajax({type:"POST",url:this.getUrl(),data:this.createXMLReq(_21),dataType:"text",error:function(o){
+if(ref.custom_ajax_error){
+ref.custom_ajax_error(ref);
+}else{
 alert("An error was encountered on the server. Please try again later.");
-AJS.removeElement(me.gselm);
-me.checkSpellingState();
-me.removeIndicator();
-};
-d.addCallback(_62);
-d.addErrback(_66);
-var _68=GoogieSpell.escapeSepcial(this.orginal_text);
-d.sendReq(GoogieSpell.createXMLReq(_68));
-};
-GoogieSpell.escapeSepcial=function(val){
-return val.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
-};
-GoogieSpell.createXMLReq=function(_6a){
-return "<?xml version=\"1.0\" encoding=\"utf-8\" ?><spellrequest textalreadyclipped=\"0\" ignoredups=\"0\" ignoredigits=\"1\" ignoreallcaps=\"1\"><text>"+_6a+"</text></spellrequest>";
-};
-GoogieSpell.parseResult=function(_6b){
-var _6c=/\w="\d+"/g;
-var _6d=/\t/g;
-var _6e=_6b.match(/<c[^>]*>[^<]*<\/c>/g);
-var _6f=new Array();
-for(var i=0;i<_6e.length;i++){
-var _71=new Array();
-_71["attrs"]=new Array();
-var _72=_6e[i].match(_6c);
-for(var j=0;j<_72.length;j++){
-var _74=_72[j].split(/=/);
-_71["attrs"][_74[0]]=parseInt(_74[1].replace("\"",""));
-}
-_71["suggestions"]=new Array();
-var _75=_6e[i].replace(/<[^>]*>/g,"");
-var _76=_75.split(_6d);
-for(var k=0;k<_76.length;k++){
-if(_76[k]!=""){
-_71["suggestions"].push(_76[k]);
-}
-}
-_6f.push(_71);
-}
-return _6f;
-};
-GoogieSpell.prototype.createErrorWindow=function(){
-this.error_window=AJS.DIV();
-this.error_window.className="googie_window";
-};
-GoogieSpell.prototype.hideErrorWindow=function(){
-this.error_window.style.visibility="hidden";
-};
-GoogieSpell.prototype.updateOrginalText=function(_78,_79,_7a,id){
-var _7c=this.orginal_text.substring(0,_78);
-var _7d=this.orginal_text.substring(_78+_79.length);
-this.orginal_text=_7c+_7a+_7d;
-var _7e=_7a.length-_79.length;
+}
+if(ref.main_controller){
+$(ref.spell_span).remove();
+ref.removeIndicator();
+}
+ref.checkSpellingState();
+},success:function(_24){
+var _25=_24;
+ref.results=ref.parseResult(_25);
+if(_25.match(/<c.*>/)!=null){
+ref.showErrorsInIframe();
+ref.resumeEditingState();
+}else{
+if(!ref.custom_no_spelling_error){
+ref.flashNoSpellingErrorState();
+}else{
+ref.custom_no_spelling_error(ref);
+}
+}
+ref.removeIndicator();
+}});
+};
+this.parseResult=function(_26){
+var _27=/\w+="(\d+|true)"/g;
+var _28=/\t/g;
+var _29=_26.match(/<c[^>]*>[^<]*<\/c>/g);
+var _2a=new Array();
+if(_29==null){
+return _2a;
+}
+for(var i=0;i<_29.length;i++){
+var _2c=new Array();
+this.errorFound();
+_2c["attrs"]=new Array();
+var _2d=_29[i].match(_27);
+for(var j=0;j<_2d.length;j++){
+var _2f=_2d[j].split(/=/);
+var val=_2f[1].replace(/"/g,"");
+_2c["attrs"][_2f[0]]=val!="true"?parseInt(val):val;
+}
+_2c["suggestions"]=new Array();
+var _31=_29[i].replace(/<[^>]*>/g,"");
+var _32=_31.split(_28);
+for(var k=0;k<_32.length;k++){
+if(_32[k]!=""){
+_2c["suggestions"].push(_32[k]);
+}
+}
+_2a.push(_2c);
+}
+return _2a;
+};
+this.createErrorWindow=function(){
+this.error_window=document.createElement("div");
+$(this.error_window).addClass("googie_window").attr("googie_action_btn","1");
+};
+this.isErrorWindowShown=function(){
+return $(this.error_window).is(":visible");
+};
+this.hideErrorWindow=function(){
+$(this.error_window).css("visibility","hidden");
+$(this.error_window_iframe).css("visibility","hidden");
+};
+this.updateOrginalText=function(_34,_35,_36,id){
+var _38=this.orginal_text.substring(0,_34);
+var _39=this.orginal_text.substring(_34+_35.length);
+this.orginal_text=_38+_36+_39;
+$(this.text_area).val(this.orginal_text);
+var _3a=_36.length-_35.length;
 for(var j=0;j<this.results.length;j++){
 if(j!=id&&j>id){
-this.results[j]["attrs"]["o"]+=_7e;
-}
+this.results[j]["attrs"]["o"]+=_3a;
+}
+}
+};
+this.saveOldValue=function(elm,_3d){
+elm.is_changed=true;
+elm.old_value=_3d;
+};
+this.createListSeparator=function(){
+var td=document.createElement("td");
+var tr=document.createElement("tr");
+$(td).html(" ").attr("googie_action_btn","1").css({"cursor":"default","font-size":"3px","border-top":"1px solid #ccc","padding-top":"3px"});
+tr.appendChild(td);
+return tr;
+};
+this.correctError=function(id,elm,_42,_43){
+var _44=elm.innerHTML;
+var _45=_42.nodeType==3?_42.nodeValue:_42.innerHTML;
+var _46=this.results[id]["attrs"]["o"];
+if(_43){
+var _47=elm.previousSibling.innerHTML;
+elm.previousSibling.innerHTML=_47.slice(0,_47.length-1);
+_44=" "+_44;
+_46--;
+}
+this.hideErrorWindow();
+this.updateOrginalText(_46,_44,_45,id);
+$(elm).html(_45).css("color","green").attr("is_corrected",true);
+this.results[id]["attrs"]["l"]=_45.length;
+if(!this.isDefined(elm.old_value)){
+this.saveOldValue(elm,_44);
+}
+this.errorFixed();
+};
+this.showErrorWindow=function(elm,id){
+if(this.show_menu_observer){
+this.show_menu_observer(this);
+}
+var ref=this;
+var pos=$(elm).offset();
+pos.top-=this.edit_layer.scrollTop;
+$(this.error_window).css({"visibility":"visible","top":(pos.top+20)+"px","left":(pos.left)+"px"}).html("");
+var _4c=document.createElement("table");
+var _4d=document.createElement("tbody");
+$(_4c).addClass("googie_list").attr("googie_action_btn","1");
+var _4e=false;
+if(this.custom_menu_builder!=[]){
+for(var k=0;k<this.custom_menu_builder.length;k++){
+var eb=this.custom_menu_builder[k];
+if(eb[0]((this.results[id]))){
+_4e=eb[1](this,_4d,elm);
+break;
+}
+}
+}
+if(!_4e){
+var _51=this.results[id]["suggestions"];
+var _52=this.results[id]["attrs"]["o"];
+var len=this.results[id]["attrs"]["l"];
+if(_51.length==0){
+var row=document.createElement("tr");
+var _55=document.createElement("td");
+var _56=document.createElement("span");
+$(_56).text(this.lang_no_suggestions);
+$(_55).attr("googie_action_btn","1").css("cursor","default");
+_55.appendChild(_56);
+row.appendChild(_55);
+_4d.appendChild(row);
+}
+for(i=0;i<_51.length;i++){
+var row=document.createElement("tr");
+var _55=document.createElement("td");
+var _56=document.createElement("span");
+$(_56).html(_51[i]);
+$(_55).bind("mouseover",this.item_onmouseover).bind("mouseout",this.item_onmouseout).bind("click",function(e){
+ref.correctError(id,elm,e.target.firstChild);
+});
+_55.appendChild(_56);
+row.appendChild(_55);
+_4d.appendChild(row);
+}
+if(elm.is_changed&&elm.innerHTML!=elm.old_value){
+var _58=elm.old_value;
+var _59=document.createElement("tr");
+var _5a=document.createElement("td");
+var _5b=document.createElement("span");
+$(_5b).addClass("googie_list_revert").html(this.lang_revert+" "+_58);
+$(_5a).bind("mouseover",this.item_onmouseover).bind("mouseout",this.item_onmouseout).bind("click",function(e){
+ref.updateOrginalText(_52,elm.innerHTML,_58,id);
+$(elm).attr("is_corrected",true).css("color","#b91414").html(_58);
+ref.hideErrorWindow();
+});
+_5a.appendChild(_5b);
+_59.appendChild(_5a);
+_4d.appendChild(_59);
+}
+var _5d=document.createElement("tr");
+var _5e=document.createElement("td");
+var _5f=document.createElement("input");
+var _60=document.createElement("img");
+var _61=document.createElement("form");
+var _62=function(){
+if(_5f.value!=""){
+if(!ref.isDefined(elm.old_value)){
+ref.saveOldValue(elm,elm.innerHTML);
+}
+ref.updateOrginalText(_52,elm.innerHTML,_5f.value,id);
+$(elm).attr("is_corrected",true).css("color","green").html(_5f.value);
+ref.hideErrorWindow();
 }
+return false;
 };
-GoogieSpell.prototype.saveOldValue=function(id,_81){
-this.results[id]["is_changed"]=true;
-this.results[id]["old_value"]=_81;
+$(_5f).width(120).css({"margin":0,"padding":0});
+$(_5f).val(elm.innerHTML).attr("googie_action_btn","1");
+$(_5e).css("cursor","default").attr("googie_action_btn","1");
+$(_60).attr("src",this.img_dir+"ok.gif").width(32).height(16).css({"cursor":"pointer","margin-left":"2px","margin-right":"2px"}).bind("click",_62);
+$(_61).attr("googie_action_btn","1").css({"margin":0,"padding":0,"cursor":"default","white-space":"nowrap"}).bind("submit",_62);
+_61.appendChild(_5f);
+_61.appendChild(_60);
+_5e.appendChild(_61);
+_5d.appendChild(_5e);
+_4d.appendChild(_5d);
+if(this.extra_menu_items.length>0){
+_4d.appendChild(this.createListSeparator());
+}
+var _63=function(i){
+if(i<ref.extra_menu_items.length){
+var _65=ref.extra_menu_items[i];
+if(!_65[2]||_65[2](elm,ref)){
+var _66=document.createElement("tr");
+var _67=document.createElement("td");
+$(_67).html(_65[0]).bind("mouseover",ref.item_onmouseover).bind("mouseout",ref.item_onmouseout).bind("click",function(){
+return _65[1](elm,ref);
+});
+_66.appendChild(_67);
+_4d.appendChild(_66);
+}
+_63(i+1);
+}
+};
+_63(0);
+_63=null;
+if(this.use_close_btn){
+_4d.appendChild(this.createCloseButton(this.hideErrorWindow));
+}
+}
+_4c.appendChild(_4d);
+this.error_window.appendChild(_4c);
+if($.browser.msie){
+if(!this.error_window_iframe){
+var _68=$("<iframe>").css("position","absolute").css("z-index",0);
+$("body").append(_68);
+this.error_window_iframe=_68;
+}
+$(this.error_window_iframe).css({"visibility":"visible","top":this.error_window.offsetTop,"left":this.error_window.offsetLeft,"width":this.error_window.offsetWidth,"height":this.error_window.offsetHeight});
+}
+};
+this.createEditLayer=function(_69,_6a){
+this.edit_layer=document.createElement("div");
+$(this.edit_layer).addClass("googie_edit_layer").width(_69-10).height(_6a);
+if(this.text_area.nodeName.toLowerCase()!="input"||$(this.text_area).val()==""){
+$(this.edit_layer).css("overflow","auto").height(_6a-4);
+}else{
+$(this.edit_layer).css("overflow","hidden");
+}
+var ref=this;
+if(this.edit_layer_dbl_click){
+$(this.edit_layer).bind("click",function(e){
+if(e.target.className!="googie_link"&&!ref.isErrorWindowShown()){
+ref.resumeEditing();
+var fn1=function(){
+$(ref.text_area).focus();
+fn1=null;
 };
-GoogieSpell.prototype.showErrorWindow=function(elm,id){
-var me=this;
-var _85=GoogieSpell.absolutePosition(elm);
-_85.y-=this.edit_layer.scrollTop;
-this.error_window.style.visibility="visible";
-this.error_window.style.top=(_85.y+20)+"px";
-this.error_window.style.left=(_85.x)+"px";
-this.error_window.innerHTML="";
-var _86=AJS.TABLE({"class":"googie_list"});
-var _87=AJS.TBODY();
-var _88=this.results[id]["suggestions"];
-var _89=this.results[id]["attrs"]["o"];
-var len=this.results[id]["attrs"]["l"];
-if(_88.length==0){
-var row=AJS.TR();
-var _8c=AJS.TD();
-var _8d=AJS.SPAN();
-_8c.appendChild(AJS.TN("No suggestions :("));
-row.appendChild(_8c);
-_87.appendChild(row);
-}
-for(i=0;i<_88.length;i++){
-var row=AJS.TR();
-var _8c=AJS.TD();
-var _8d=AJS.SPAN();
-_8d.innerHTML=_88[i];
-_8c.appendChild(AJS.TN(_8d.innerHTML));
-_8c.onclick=function(e){
-var _8f=GoogieSpell.getEventElm(e);
-var _90=elm.innerHTML;
-var _91=_8f.innerHTML;
-elm.style.color="green";
-elm.innerHTML=_8f.innerHTML;
-me.hideErrorWindow();
-me.updateOrginalText(_89,_90,_91,id);
-me.results[id]["attrs"]["l"]=_91.length;
-me.saveOldValue(id,_90);
-};
-_8c.onmouseover=GoogieSpell.item_onmouseover;
-_8c.onmouseout=GoogieSpell.item_onmouseout;
-row.appendChild(_8c);
-_87.appendChild(row);
-}
-if(this.results[id]["is_changed"]){
-var _92=this.results[id]["old_value"];
-var _89=this.results[id]["attrs"]["o"];
-var _93=AJS.TR();
-var _94=AJS.TD();
-_94.onmouseover=GoogieSpell.item_onmouseover;
-_94.onmouseout=GoogieSpell.item_onmouseout;
-var _95=AJS.SPAN({"class":"googie_list_revert"});
-_95.innerHTML=this.lang_revert+" "+_92;
-_94.appendChild(_95);
-_94.onclick=function(e){
-me.updateOrginalText(_89,elm.innerHTML,_92,id);
-elm.style.color="#b91414";
-elm.innerHTML=_92;
-me.hideErrorWindow();
-};
-_93.appendChild(_94);
-_87.appendChild(_93);
-}
-var _97=AJS.TR();
-var _98=AJS.TD();
-var _99=AJS.INPUT({"style":"width: 120px; margin:0; padding:0"});
-var _9a=function(){
-if(_99.value!=""){
-me.saveOldValue(id,elm.innerHTML);
-me.updateOrginalText(_89,elm.innerHTML,_99.value,id);
-elm.style.color="green";
-elm.innerHTML=_99.value;
-me.hideErrorWindow();
+window.setTimeout(fn1,10);
+}
 return false;
+});
 }
 };
-var _9b=AJS.IMG({"src":this.img_dir+"ok.gif","style":"width: 32px; height: 16px; margin-left: 2px; margin-right: 2px;"});
-var _9c=AJS.FORM({"style":"margin: 0; padding: 0"},_99,_9b);
-_9b.onclick=_9a;
-_9c.onsubmit=_9a;
-_98.appendChild(_9c);
-_97.appendChild(_98);
-_87.appendChild(_97);
-var _9d=AJS.TR();
-var _9e=AJS.TD();
-_9e.onmouseover=GoogieSpell.item_onmouseover;
-_9e.onmouseout=GoogieSpell.item_onmouseout;
-var _9f=AJS.SPAN({"class":"googie_list_close"});
-_9f.innerHTML=this.lang_close;
-_9e.appendChild(_9f);
-_9e.onclick=function(){
-me.hideErrorWindow();
-};
-_9d.appendChild(_9e);
-_87.appendChild(_9d);
-_86.appendChild(_87);
-this.error_window.appendChild(_86);
-};
-GoogieSpell.prototype.createEditLayer=function(_a0,_a1){
-this.edit_layer=AJS.DIV({"class":"googie_edit_layer"});
-this.edit_layer.className=this.text_area.className;
-this.edit_layer.style.border="1px solid #999";
-this.edit_layer.style.overflow="auto";
-this.edit_layer.style.backgroundColor="#F1EDFE";
-this.edit_layer.style.padding="3px";
-this.edit_layer.style.width=(_a0-8)+"px";
-this.edit_layer.style.height=_a1+"px";
-};
-GoogieSpell.prototype.resumeEditing=function(e,me){
-this.setStateChanged("check_spelling");
-me.switch_lan_pic.style.display="inline";
-this.el_scroll_top=me.edit_layer.scrollTop;
-var elm=GoogieSpell.getEventElm(e);
-AJS.replaceChildNodes(elm,this.createSpellDiv());
-elm.onclick=function(e){
-me.spellCheck(elm,me.text_area.id);
-};
-me.hideErrorWindow();
-me.edit_layer.parentNode.removeChild(me.edit_layer);
-me.text_area.value=me.orginal_text;
-AJS.showElement(me.text_area);
-me.gselm.className="googie_no_style";
-me.text_area.scrollTop=this.el_scroll_top;
-elm.onmouseout=null;
-};
-GoogieSpell.prototype.createErrorLink=function(_a6,id){
-var elm=AJS.SPAN({"class":"googie_link"});
-var me=this;
-elm.onclick=function(){
-me.showErrorWindow(elm,id);
-};
-elm.innerHTML=_a6;
-return elm;
-};
-GoogieSpell.createPart=function(_aa){
-if(_aa==" "){
-return AJS.TN(" ");
-}
-var _ab=AJS.SPAN();
-var _ac=true;
-var _ad=(navigator.userAgent.toLowerCase().indexOf("safari")!=-1);
-var _ae=AJS.SPAN();
-_aa=GoogieSpell.escapeSepcial(_aa);
-_aa=_aa.replace(/\n/g,"<br>");
-_aa=_aa.replace(/  /g," &nbsp;");
-_aa=_aa.replace(/^ /g,"&nbsp;");
-_aa=_aa.replace(/ $/g,"&nbsp;");
-_ae.innerHTML=_aa;
-return _ae;
-};
-GoogieSpell.prototype.showErrorsInIframe=function(_af){
-var _b0=AJS.DIV();
-_b0.style.textAlign="left";
-var _b1=0;
-for(var i=0;i<_af.length;i++){
-var _b3=_af[i]["attrs"]["o"];
-var len=_af[i]["attrs"]["l"];
-var _b5=this.orginal_text.substring(_b1,_b3);
-var _b6=GoogieSpell.createPart(_b5);
-_b0.appendChild(_b6);
-_b1+=_b3-_b1;
-_b0.appendChild(this.createErrorLink(this.orginal_text.substr(_b3,len),i));
-_b1+=len;
-}
-var _b7=this.orginal_text.substr(_b1,this.orginal_text.length);
-var _b8=GoogieSpell.createPart(_b7);
-_b0.appendChild(_b8);
-this.edit_layer.appendChild(_b0);
-AJS.hideElement(this.text_area);
-this.text_area.parentNode.insertBefore(this.edit_layer,this.text_area.nextSibling);
-this.edit_layer.scrollTop=this.ta_scroll_top;
-};
-GoogieSpell.Position=function(x,y){
-this.x=x;
-this.y=y;
-};
-GoogieSpell.absolutePosition=function(_bb){
-var _bc=new GoogieSpell.Position(_bb.offsetLeft,_bb.offsetTop);
-if(_bb.offsetParent){
-var _bd=GoogieSpell.absolutePosition(_bb.offsetParent);
-_bc.x+=_bd.x;
-_bc.y+=_bd.y;
+this.resumeEditing=function(){
+this.setStateChanged("ready");
+if(this.edit_layer){
+this.el_scroll_top=this.edit_layer.scrollTop;
 }
-return _bc;
-};
-GoogieSpell.getEventElm=function(e){
-var _bf;
-if(!e){
-var e=window.event;
+this.hideErrorWindow();
+if(this.main_controller){
+$(this.spell_span).removeClass().addClass("googie_no_style");
 }
-if(e.target){
-_bf=e.target;
-}else{
-if(e.srcElement){
-_bf=e.srcElement;
+if(!this.ignore){
+if(this.use_focus){
+$(this.focus_link_t).remove();
+$(this.focus_link_b).remove();
 }
+$(this.edit_layer).remove();
+$(this.text_area).show();
+if(this.el_scroll_top!=undefined){
+this.text_area.scrollTop=this.el_scroll_top;
 }
-if(_bf.nodeType==3){
-_bf=_bf.parentNode;
 }
-return _bf;
+this.checkSpellingState(false);
 };
-GoogieSpell.prototype.removeIndicator=function(elm){
-if(window.rcube_webmail_client){
-rcube_webmail_client.set_busy(false);
-}
+this.createErrorLink=function(_6e,id){
+var elm=document.createElement("span");
+var ref=this;
+var d=function(e){
+ref.showErrorWindow(elm,id);
+d=null;
+return false;
 };
-GoogieSpell.prototype.appendIndicator=function(elm){
-if(window.rcube_webmail_client){
-rcube_webmail_client.set_busy(true,"checking");
-}
+$(elm).html(_6e).addClass("googie_link").bind("click",d).attr({"googie_action_btn":"1","g_id":id,"is_corrected":false});
+return elm;
 };
-GoogieSpell.prototype.createLangWindow=function(){
-this.language_window=AJS.DIV({"class":"googie_window"});
-this.language_window.style.width="130px";
-var _c2=AJS.TABLE({"class":"googie_list"});
-var _c3=AJS.TBODY();
+this.createPart=function(_74){
+if(_74==" "){
+return document.createTextNode(" ");
+}
+_74=this.escapeSpecial(_74);
+_74=_74.replace(/\n/g,"<br>");
+_74=_74.replace(/    /g," &nbsp;");
+_74=_74.replace(/^ /g,"&nbsp;");
+_74=_74.replace(/ $/g,"&nbsp;");
+var _75=document.createElement("span");
+$(_75).html(_74);
+return _75;
+};
+this.showErrorsInIframe=function(){
+var _76=document.createElement("div");
+var _77=0;
+var _78=this.results;
+if(_78.length>0){
+for(var i=0;i<_78.length;i++){
+var _7a=_78[i]["attrs"]["o"];
+var len=_78[i]["attrs"]["l"];
+var _7c=this.orginal_text.substring(_77,_7a);
+var _7d=this.createPart(_7c);
+_76.appendChild(_7d);
+_77+=_7a-_77;
+var _7e=this.createErrorLink(this.orginal_text.substr(_7a,len),i);
+this.error_links.push(_7e);
+_76.appendChild(_7e);
+_77+=len;
+}
+var _7f=this.orginal_text.substr(_77,this.orginal_text.length);
+var _80=this.createPart(_7f);
+_76.appendChild(_80);
+}else{
+_76.innerHTML=this.orginal_text;
+}
+$(_76).css("text-align","left");
+var me=this;
+if(this.custom_item_evaulator){
+$.map(this.error_links,function(elm){
+me.custom_item_evaulator(me,elm);
+});
+}
+$(this.edit_layer).append(_76);
+$(this.text_area).hide();
+$(this.edit_layer).insertBefore(this.text_area);
+if(this.use_focus){
+this.focus_link_t=this.createFocusLink("focus_t");
+this.focus_link_b=this.createFocusLink("focus_b");
+$(this.focus_link_t).insertBefore(this.edit_layer);
+$(this.focus_link_b).insertAfter(this.edit_layer);
+}
+};
+this.createLangWindow=function(){
+this.language_window=document.createElement("div");
+$(this.language_window).addClass("googie_window").width(100).attr("googie_action_btn","1");
+var _83=document.createElement("table");
+var _84=document.createElement("tbody");
+var ref=this;
+$(_83).addClass("googie_list").width("100%");
 this.lang_elms=new Array();
 for(i=0;i<this.langlist_codes.length;i++){
-var row=AJS.TR();
-var _c5=AJS.TD();
-_c5.googieId=this.langlist_codes[i];
-this.lang_elms.push(_c5);
-var _c6=AJS.SPAN();
-_c6.innerHTML=this.lang_to_word[this.langlist_codes[i]];
-_c5.appendChild(AJS.TN(_c6.innerHTML));
-var me=this;
-_c5.onclick=function(e){
-var elm=GoogieSpell.getEventElm(e);
-me.deHighlightCurSel();
-me.setCurrentLanguage(elm.googieId);
-if(me.lang_state_observer!=null){
-me.lang_state_observer();
-}
-me.highlightCurSel();
-me.hideLangWindow();
-};
-_c5.onmouseover=function(e){
-var _cb=GoogieSpell.getEventElm(e);
-if(_cb.className!="googie_list_selected"){
-_cb.className="googie_list_onhover";
-}
-};
-_c5.onmouseout=function(e){
-var _cd=GoogieSpell.getEventElm(e);
-if(_cd.className!="googie_list_selected"){
-_cd.className="googie_list_onout";
-}
-};
-row.appendChild(_c5);
-_c3.appendChild(row);
+var row=document.createElement("tr");
+var _87=document.createElement("td");
+var _88=document.createElement("span");
+$(_88).text(this.lang_to_word[this.langlist_codes[i]]);
+this.lang_elms.push(_87);
+$(_87).attr("googieId",this.langlist_codes[i]).bind("click",function(e){
+ref.deHighlightCurSel();
+ref.setCurrentLanguage($(this).attr("googieId"));
+if(ref.lang_state_observer!=null){
+ref.lang_state_observer();
+}
+ref.highlightCurSel();
+ref.hideLangWindow();
+}).bind("mouseover",function(e){
+if(this.className!="googie_list_selected"){
+this.className="googie_list_onhover";
+}
+}).bind("mouseout",function(e){
+if(this.className!="googie_list_selected"){
+this.className="googie_list_onout";
+}
+});
+_87.appendChild(_88);
+row.appendChild(_87);
+_84.appendChild(row);
+}
+if(this.use_close_btn){
+_84.appendChild(this.createCloseButton(function(){
+ref.hideLangWindow.apply(ref);
+}));
 }
 this.highlightCurSel();
-var _ce=AJS.TR();
-var _cf=AJS.TD();
-_cf.onmouseover=GoogieSpell.item_onmouseover;
-_cf.onmouseout=GoogieSpell.item_onmouseout;
-var _d0=AJS.SPAN({"class":"googie_list_close"});
-_d0.innerHTML=this.lang_close;
-_cf.appendChild(_d0);
-var me=this;
-_cf.onclick=function(e){
-me.hideLangWindow();
-GoogieSpell.item_onmouseout(e);
-};
-_ce.appendChild(_cf);
-_c3.appendChild(_ce);
-_c2.appendChild(_c3);
-this.language_window.appendChild(_c2);
+_83.appendChild(_84);
+this.language_window.appendChild(_83);
 };
-GoogieSpell.prototype.setCurrentLanguage=function(_d2){
-GOOGIE_CUR_LANG=_d2;
-var now=new Date();
-now.setTime(now.getTime()+365*24*60*60*1000);
-setCookie("language",_d2,now);
+this.isLangWindowShown=function(){
+return $(this.language_window).is(":hidden");
 };
-GoogieSpell.prototype.hideLangWindow=function(){
-this.language_window.style.visibility="hidden";
-this.switch_lan_pic.className="googie_lang_3d_on";
+this.hideLangWindow=function(){
+$(this.language_window).css("visibility","hidden");
+$(this.switch_lan_pic).removeClass().addClass("googie_lang_3d_on");
 };
-GoogieSpell.prototype.deHighlightCurSel=function(){
-this.lang_cur_elm.className="googie_list_onout";
+this.deHighlightCurSel=function(){
+$(this.lang_cur_elm).removeClass().addClass("googie_list_onout");
 };
-GoogieSpell.prototype.highlightCurSel=function(){
+this.highlightCurSel=function(){
+if(GOOGIE_CUR_LANG==null){
+GOOGIE_CUR_LANG=GOOGIE_DEFAULT_LANG;
+}
 for(var i=0;i<this.lang_elms.length;i++){
-if(this.lang_elms[i].googieId==GOOGIE_CUR_LANG){
+if($(this.lang_elms[i]).attr("googieId")==GOOGIE_CUR_LANG){
 this.lang_elms[i].className="googie_list_selected";
 this.lang_cur_elm=this.lang_elms[i];
 }else{
@@ -854,130 +579,170 @@ this.lang_elms[i].className="googie_list_onout";
 }
 }
 };
-GoogieSpell.prototype.showLangWindow=function(elm,_d6,_d7){
-if(!AJS.isDefined(_d6)){
-_d6=20;
-}
-if(!AJS.isDefined(_d7)){
-_d7=50;
+this.showLangWindow=function(elm){
+if(this.show_menu_observer){
+this.show_menu_observer(this);
 }
 this.createLangWindow();
-AJS.getBody().appendChild(this.language_window);
-var _d8=GoogieSpell.absolutePosition(elm);
-AJS.showElement(this.language_window);
-this.language_window.style.top=(_d8.y+_d6)+"px";
-this.language_window.style.left=(_d8.x+_d7-this.language_window.offsetWidth)+"px";
+$("body").append(this.language_window);
+var pos=$(elm).offset();
+var top=pos.top+$(elm).height();
+var _90=this.change_lang_pic_placement=="right"?pos.left-100+$(elm).width():pos.left+$(elm).width();
+$(this.language_window).css({"visibility":"visible","top":top+"px","left":_90+"px"});
 this.highlightCurSel();
-this.language_window.style.visibility="visible";
-};
-GoogieSpell.prototype.flashNoSpellingErrorState=function(){
-this.setStateChanged("no_error_found");
-var me=this;
-AJS.hideElement(this.switch_lan_pic);
-this.gselm.innerHTML=this.lang_no_error_found;
-this.gselm.className="googie_check_spelling_ok";
-this.gselm.style.textDecoration="none";
-this.gselm.style.cursor="default";
-var fu=function(){
-AJS.removeElement(me.gselm);
-me.checkSpellingState();
-};
-setTimeout(fu,1000);
-};
-GoogieSpell.prototype.resumeEditingState=function(){
-this.setStateChanged("resume_editing");
-var me=this;
-AJS.hideElement(me.switch_lan_pic);
-me.gselm.innerHTML=this.lang_rsm_edt;
-me.gselm.onclick=function(e){
-me.resumeEditing(e,me);
 };
-me.gselm.className="googie_check_spelling_ok";
-me.edit_layer.scrollTop=me.ta_scroll_top;
+this.createChangeLangPic=function(){
+var img=$("<img>").attr({src:this.img_dir+"change_lang.gif","alt":"Change language","googie_action_btn":"1"});
+var _92=document.createElement("span");
+var ref=this;
+$(_92).addClass("googie_lang_3d_on").append(img).bind("click",function(e){
+var elm=this.tagName.toLowerCase()=="img"?this.parentNode:this;
+if($(elm).hasClass("googie_lang_3d_click")){
+elm.className="googie_lang_3d_on";
+ref.hideLangWindow();
+}else{
+elm.className="googie_lang_3d_click";
+ref.showLangWindow(elm);
+}
+});
+return _92;
 };
-GoogieSpell.prototype.createChangeLangPic=function(){
-var _dd=AJS.A({"class":"googie_lang_3d_on","style":"padding-left: 6px;"},AJS.IMG({"src":this.img_dir+"change_lang.gif","alt":"Change language"}));
-_dd.onmouseover=function(){
-if(this.className!="googie_lang_3d_click"){
-this.className="googie_lang_3d_on";
+this.createSpellDiv=function(){
+var _96=document.createElement("span");
+$(_96).addClass("googie_check_spelling_link").text(this.lang_chck_spell);
+if(this.show_spell_img){
+$(_96).append(" ").append($("<img>").attr("src",this.img_dir+"spellc.gif"));
 }
+return _96;
 };
-var me=this;
-_dd.onclick=function(){
-if(this.className=="googie_lang_3d_click"){
-me.hideLangWindow();
+this.flashNoSpellingErrorState=function(_97){
+this.setStateChanged("no_error_found");
+var ref=this;
+if(this.main_controller){
+var _99;
+if(_97){
+var fn=function(){
+_97();
+ref.checkSpellingState();
+};
+_99=fn;
 }else{
-me.showLangWindow(_dd);
-this.className="googie_lang_3d_click";
-}
+_99=function(){
+ref.checkSpellingState();
 };
-return _dd;
+}
+var rsm=$("<span>").text(this.lang_no_error_found);
+$(this.switch_lan_pic).hide();
+$(this.spell_span).empty().append(rsm).removeClass().addClass("googie_check_spelling_ok");
+window.setTimeout(_99,1000);
+}
 };
-GoogieSpell.prototype.createSpellDiv=function(){
-var _df=AJS.SPAN({"class":"googie_check_spelling_link"});
-_df.innerHTML=this.lang_chck_spell;
-var _e0=null;
-if(this.show_spell_img){
-_e0=AJS.IMG({"src":this.img_dir+"spellc.gif"});
+this.resumeEditingState=function(){
+this.setStateChanged("resume_editing");
+if(this.main_controller){
+var rsm=$("<span>").text(this.lang_rsm_edt);
+var ref=this;
+$(this.switch_lan_pic).hide();
+$(this.spell_span).empty().unbind().append(rsm).bind("click",function(){
+ref.resumeEditing();
+}).removeClass().addClass("googie_resume_editing");
+}
+try{
+this.edit_layer.scrollTop=this.ta_scroll_top;
+}
+catch(e){
 }
-return AJS.SPAN(_e0," ",_df);
 };
-GoogieSpell.prototype.checkSpellingState=function(){
-this.setStateChanged("check_spelling");
-var me=this;
+this.checkSpellingState=function(_9e){
+if(_9e){
+this.setStateChanged("ready");
+}
 if(this.show_change_lang_pic){
 this.switch_lan_pic=this.createChangeLangPic();
 }else{
-this.switch_lan_pic=AJS.SPAN();
+this.switch_lan_pic=document.createElement("span");
+}
+var _9f=this.createSpellDiv();
+var ref=this;
+if(this.custom_spellcheck_starter){
+$(_9f).bind("click",function(e){
+ref.custom_spellcheck_starter();
+});
+}else{
+$(_9f).bind("click",function(e){
+ref.spellCheck();
+});
+}
+if(this.main_controller){
+if(this.change_lang_pic_placement=="left"){
+$(this.spell_container).empty().append(this.switch_lan_pic).append(" ").append(_9f);
+}else{
+$(this.spell_container).empty().append(_9f).append(" ").append(this.switch_lan_pic);
+}
+}
+this.spell_span=_9f;
+};
+this.isDefined=function(o){
+return (o!="undefined"&&o!=null);
+};
+this.errorFixed=function(){
+this.cnt_errors_fixed++;
+if(this.all_errors_fixed_observer){
+if(this.cnt_errors_fixed==this.cnt_errors){
+this.hideErrorWindow();
+this.all_errors_fixed_observer();
+}
 }
-var _e2=this.createSpellDiv();
-_e2.onclick=function(){
-me.spellCheck(_e2);
 };
-AJS.appendChildNodes(this.spell_container,_e2," ",this.switch_lan_pic);
-this.check_link=_e2;
+this.errorFound=function(){
+this.cnt_errors++;
 };
-GoogieSpell.prototype.setLanguages=function(_e3){
-this.lang_to_word=_e3;
-this.langlist_codes=AJS.keys(_e3);
+this.createCloseButton=function(_a4){
+return this.createButton(this.lang_close,"googie_list_close",_a4);
 };
-GoogieSpell.prototype.decorateTextarea=function(id,_e5,_e6){
-var me=this;
-if(typeof (id)=="string"){
-this.text_area=AJS.getElement(id);
+this.createButton=function(_a5,_a6,_a7){
+var _a8=document.createElement("tr");
+var btn=document.createElement("td");
+var _aa;
+if(_a6){
+_aa=document.createElement("span");
+$(_aa).addClass(_a6).html(_a5);
 }else{
-this.text_area=id;
+_aa=document.createTextNode(_a5);
 }
-var _e8;
-if(this.text_area!=null){
-if(AJS.isDefined(_e5)){
-if(typeof (_e5)=="string"){
-this.spell_container=AJS.getElement(_e5);
-}else{
-this.spell_container=_e5;
+$(btn).bind("click",_a7).bind("mouseover",this.item_onmouseover).bind("mouseout",this.item_onmouseout);
+btn.appendChild(_aa);
+_a8.appendChild(btn);
+return _a8;
+};
+this.removeIndicator=function(elm){
+if(window.rcmail){
+rcmail.set_busy(false);
 }
+};
+this.appendIndicator=function(elm){
+if(window.rcmail){
+rcmail.set_busy(true,"checking");
+}
+};
+this.createFocusLink=function(_ad){
+var _ae=document.createElement("a");
+$(_ae).attr({"href":"javascript:;","name":_ad});
+return _ae;
+};
+this.item_onmouseover=function(e){
+if(this.className!="googie_list_revert"&&this.className!="googie_list_close"){
+this.className="googie_list_onhover";
 }else{
-var _e9=AJS.TABLE();
-var _ea=AJS.TBODY();
-var tr=AJS.TR();
-if(AJS.isDefined(_e6)){
-_e8=_e6;
-}else{
-_e8=this.text_area.offsetWidth+"px";
-}
-var _ec=AJS.TD();
-this.spell_container=_ec;
-tr.appendChild(_ec);
-_ea.appendChild(tr);
-_e9.appendChild(_ea);
-AJS.insertBefore(_e9,this.text_area);
-_e9.style.width="100%";
-_ec.style.width=_e8;
-_ec.style.textAlign="right";
+this.parentNode.className="googie_list_onhover";
 }
-this.checkSpellingState();
+};
+this.item_onmouseout=function(e){
+if(this.className!="googie_list_revert"&&this.className!="googie_list_close"){
+this.className="googie_list_onout";
 }else{
-alert("Text area not found");
+this.parentNode.className="googie_list_onout";
 }
 };
+};