User:Mxn/him.js

/*

This code powers HIM, a Vietnamese-language IME for websites, written in JavaScript. It is taken verbatim from the Vietnamese Wikipedia and poses no security or privacy risks to and Wikimedia project. Although the author has included the following copyright notice, the fact that he has placed it on Wikipedia means that he has released it under the GFDL.

I have copied it to my userspace at the English Wiktionary to make it easier to add Vietnamese translations of words here.

Upgrading: See the Guide to updating him.js. */

/* * AVIM JavaScript Vietnamese Input Method Source File dated 27-11-2006 * *	Copyright (C) 2004 Hieu Tran Dang  *	Website:	http://hdang.co.uk *				http://hieu.acunett.com * *	You are allowed to use this software in any way you want providing: *		1. You must retain this copyright notice at all time *		2. You must not claim that you or any other third party is the author *		  of this software in any way.

va="email".split(',') //Put the ID of the fields you DON'T want to let users type Vietnamese in, multiple fields allowed, separated by a comma method=0 //Default input method, 0=AUTO, 1=TELEX, 2=VNI, 3=VIQR on_off=0 //Start H.I.M on dockspell=1 //Start H.I.M with spell checking on dauCu=1 //Start H.I.M with old way of marking accent (o`a, o`e, u`y) useCookie=1 //Set this to 0 to NOT use cookies radioID="him_auto,him_telex,him_vni,him_viqr,him_viqr2,him_off,him_ckspell,him_daucu".split(",") var agt=navigator.userAgent.toLowerCase,alphabet="QWERTYUIOPASDFGHJKLZXCVBNM\ ",them,spellerr,setCookie,getCookie var is_ie=((agt.indexOf("msie")!=-1)&&(agt.indexOf("opera")==-1)),S,F,J,R,X,D,oc,sk,saveStr,wi,frame,is_opera=false,D2,isKHTML=false var ver=0,support=true,changed=false,uni,uni2,g,h,SFJRX,DAWEO,Z,AEO,moc,trang,kl=0,tw5,range=null,doc,fID=document.getElementsByTagName("iframe") skey=new Array(97,226,259,101,234,105,111,244,417,117,432,121,65,194,258,69,202,73,79,212,416,85,431,89) var skey2="a,a,a,e,e,i,o,o,o,u,u,y,A,A,A,E,E,I,O,O,O,U,U,Y".split(','),A,E,O,whit=false,english="ĐÂĂƠƯÊÔ",lowen="đâăơưêô",ds1="d,D".split(","),db1=new Array(273,272) os1="o,O,ơ,Ơ,ó,Ó,ò,Ò,ọ,Ọ,ỏ,Ỏ,õ,Õ,ớ,Ớ,ờ,Ờ,ợ,Ợ,ở,Ở,ỡ,Ỡ".split(","),ob1="ô,Ô,ô,Ô,ố,Ố,ồ,Ồ,ộ,Ộ,ổ,Ổ,ỗ,Ỗ,ố,Ố,ồ,Ồ,ộ,Ộ,ổ,Ổ,ỗ,Ỗ".split(",") mocs1="o,O,ô,Ô,u,U,ó,Ó,ò,Ò,ọ,Ọ,ỏ,Ỏ,õ,Õ,ú,Ú,ù,Ù,ụ,Ụ,ủ,Ủ,ũ,Ũ,ố,Ố,ồ,Ồ,ộ,Ộ,ổ,Ổ,ỗ,Ỗ".split(",");mocb1="ơ,Ơ,ơ,Ơ,ư,Ư,ớ,Ớ,ờ,Ờ,ợ,Ợ,ở,Ở,ỡ,Ỡ,ứ,Ứ,ừ,Ừ,ự,Ự,ử,Ử,ữ,Ữ,ớ,Ớ,ờ,Ờ,ợ,Ợ,ở,Ở,ỡ,Ỡ".split(",") trangs1="a,A,â,Â,á,Á,à,À,ạ,Ạ,ả,Ả,ã,Ã,ấ,Ấ,ầ,Ầ,ậ,Ậ,ẩ,Ẩ,ẫ,Ẫ".split(",");trangb1="ă,Ă,ă,Ă,ắ,Ắ,ằ,Ằ,ặ,Ặ,ẳ,Ẳ,ẵ,Ẵ,ắ,Ắ,ằ,Ằ,ặ,Ặ,ẳ,Ẳ,ẵ,Ẵ".split(",") as1="a,A,ă,Ă,á,Á,à,À,ạ,Ạ,ả,Ả,ã,Ã,ắ,Ắ,ằ,Ằ,ặ,Ặ,ẳ,Ẳ,ẵ,Ẵ,ế,Ế,ề,Ề,ệ,Ệ,ể,Ể,ễ,Ễ".split(",");ab1="â,Â,â,Â,ấ,Ấ,ầ,Ầ,ậ,Ậ,ẩ,Ẩ,ẫ,Ẫ,ấ,Ấ,ầ,Ầ,ậ,Ậ,ẩ,Ẩ,ẫ,Ẫ,é,É,è,È,ẹ,Ẹ,ẻ,Ẻ,ẽ,Ẽ".split(",") es1="e,E,é,É,è,È,ẹ,Ẹ,ẻ,Ẻ,ẽ,Ẽ".split(",");eb1="ê,Ê,ế,Ế,ề,Ề,ệ,Ệ,ể,Ể,ễ,Ễ".split(",") arA="á,à,ả,ã,ạ,a,Á,À,Ả,Ã,Ạ,A".split(',');mocrA="ó,ò,ỏ,õ,ọ,o,ú,ù,ủ,ũ,ụ,u,Ó,Ò,Ỏ,Õ,Ọ,O,Ú,Ù,Ủ,Ũ,Ụ,U".split(',');erA="é,è,ẻ,ẽ,ẹ,e,É,È,Ẻ,Ẽ,Ẹ,E".split(',');orA="ó,ò,ỏ,õ,ọ,o,Ó,Ò,Ỏ,Õ,Ọ,O".split(',') aA="ấ,ầ,ẩ,ẫ,ậ,â,Ấ,Ầ,Ẩ,Ẫ,Ậ,Â".split(',');mocA="ớ,ờ,ở,ỡ,ợ,ơ,ứ,ừ,ử,ữ,ự,ư,Ớ,Ờ,Ở,Ỡ,Ợ,Ơ,Ứ,Ừ,Ử,Ữ,Ự,Ư".split(',');trangA="ắ,ằ,ẳ,ẵ,ặ,ă,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ă".split(',');eA="ế,ề,ể,ễ,ệ,ê,Ế,Ề,Ể,Ễ,Ệ,Ê".split(',');oA="ố,ồ,ổ,ỗ,ộ,ô,Ố,Ồ,Ổ,Ỗ,Ộ,Ô".split(',')

function notWord(w) { var str="\ \r\n#,\\;.:-_<>+-*/=?!\"$%{}[]\'~|^\@\&\t"+fcc(160)	return (str.indexOf(w)>=0) } function nan(w) {	if ((isNaN(w))||(w=='e')) return true	else return false } function mozGetText(obj) {	var v,pos,w="";g=1	v=(obj.data)?obj.data:obj.value	if(v.length<=0) return false	if(!obj.data) {		if(!obj.setSelectionRange) return false		pos=obj.selectionStart	} else pos=obj.pos	if(obj.selectionStart!=obj.selectionEnd) return new Array("",pos)	while(1) {		if(pos-g<0) break		else if(notWord(v.substr(pos-g,1))) { if(v.substr(pos-g,1)=="\\") w=v.substr(pos-g,1)+w; break }		else w=v.substr(pos-g,1)+w; g++	}	return new Array(w,pos) } function start(obj,key) {	var w="";oc=obj;uni2=false;fixed=false	if(method==0) { uni="D,A,E,O,W,W".split(','); uni2="9,6,6,6,7,8".split(','); D2="DAWEO6789" }	else if(method==1) { uni="D,A,E,O,W,W".split(','); D2="DAWEO" }	else if(method==2) { uni="9,6,6,6,7,8".split(','); D2="6789" } else if(method==3) { uni="D,^,^,^,+,(".split(','); D2="D^+(" } else if(method==4) { uni="D,^,^,^,*,(".split(','); D2="D^*(" } if(!is_ie) { key=fcc(key.which) w=mozGetText(obj) if((!w)||(obj.sel)) return main(w[0],key,w[1],uni) if(!dockspell) w=mozGetText(obj) if((w)&&(uni2)&&(!changed)) main(w[0],key,w[1],uni2) } else { obj=ieGetText(obj) if(obj) { var sT=obj.cW.text w=main(obj.cW.text,key,0,uni) if((uni2)&&((w==sT)||(typeof(w)=='undefined'))) w=main(obj.cW.text,key,0,uni2) if(w) obj.cW.text=w }	}	if(D2.indexOf(up(key))>=0) { if(!is_ie) { w=mozGetText(obj) if(!w) return normC(w[0],key,w[1]) } else if(typeof(obj)=="object") { obj=ieGetText(obj) if(obj) { w=obj.cW.text if(!changed) { w+=key; changed=true } obj.cW.text=w w=normC(w,key,0) if(w) { obj=ieGetText(obj); obj.cW.text=w } }		} 	} } function ieGetText(obj) { var caret=obj.document.selection.createRange,w="" if(caret.text) caret.text="" else { while(1) { caret.moveStart("character",-1) if(w.length==caret.text.length) break w=caret.text if(notWord(w.charAt(0))) { if(w.charCodeAt(0)==13) w=w.substr(2) else if(w.charAt(0)!="\\") w=w.substr(1) break }		}	}	if(w.length) { caret.collapse(false) caret.moveStart("character",-w.length) obj.cW=caret.duplicate return obj } else return false } function ie_replaceChar(w,pos,c) { var r="",uc=0 if(isNaN(c)) uc=up(c) if((whit)&&(up(w.substr(w.length-pos-1,1))=='U')&&(pos!=1)&&(up(w.substr(w.length-pos-2,1))!='Q')) { whit=false if((up(unV(fcc(c)))=="Ơ")||(uc=="O")) { if(w.substr(w.length-pos-1,1)=='u') r=fcc(432) else r=fcc(431) }		if(uc=="O") { if(c=="o") c=417 else c=416 }	}	if(!isNaN(c)) { changed=true;r+=fcc(c) return w.substr(0,w.length-pos-r.length+1)+r+w.substr(w.length-pos+1) } else return w.substr(0,w.length-pos)+c+w.substr(w.length-pos+1) } function tr(k,w,by,sf,i) { var r,pos=findC(w,k,sf) if(pos) { if(pos[1]) { if(is_ie) return ie_replaceChar(w,pos[0],pos[1]) else return replaceChar(oc,i-pos[0],pos[1]) } else { var c,pC=w.substr(w.length-pos,1),cmp;r=sf for(g=0;g<r.length;g++) { if((nan(r[g]))||(r[g]=="e")) cmp=pC else cmp=pC.charCodeAt(0) if(cmp==r[g]) { if(!nan(by[g])) c=by[g] else c=by[g].charCodeAt(0) if(is_ie) return ie_replaceChar(w,pos,c) else return replaceChar(oc,i-pos,c) }			}		}	}	return false } function main(w,k,i,a) { var uk=up(k),bya=new Array(db1,ab1,eb1,ob1,mocb1,trangb1),got=false,t="d,D,a,A,a,A,o,O,u,U,e,E,o,O".split(",") var sfa=new Array(ds1,as1,es1,os1,mocs1,trangs1),by=new Array,sf=new Array if((method==2)||((method==0)&&(a[0]=="9"))) { DAWEO="6789";SFJRX="12534";S="1";F="2";J="5";R="3";X="4";Z="0";D="9";FRX="234";AEO="6";moc="7";trang="8";them="678";A="^";E="^";O="^" } else if(method==3) { DAWEO="^+(D";SFJRX="'`.?~";S="'";F="`";J=".";R="?";X="~";Z="-";D="D";FRX="`?~";AEO="^";moc="+";trang="(";them="^+(";A="^";E="^";O="^"	} else if(method==4) {		DAWEO="^*(D";SFJRX="'`.?~";S="'";F="`";J=".";R="?";X="~";Z="-";D="D";FRX="`?~";AEO="^";moc="*";trang="(";them="^*(";A="^";E="^";O="^" } else if((method==1)||((method==0)&&(a[0]=="D"))) { SFJRX="SFJRX";DAWEO="DAWEO";D='D';S='S';F='F';J='J';R='R';X='X';Z='Z';FRX="FRX";them="AOEW";trang="W";moc="W";A="A";E="E";O="O" }	if(SFJRX.indexOf(uk)>=0) { var ret=sr(w,k,i); got=true if(ret) return ret } else if(uk==Z) { sf=repSign(null) for(h=0;h=0)||(Z.indexOf(uk)>=0)) return tr(k,w,by,sf,i) } function normC(w,k,i) { var uk=up(k),u=repSign(null),fS,c,j,space=(k.charCodeAt(0)==32)?true:false if((!is_ie)&&(space)) return for(j=1;j<=w.length;j++) { for(h=0;h<u.length;h++) { if(u[h]==w.charCodeAt(w.length-j)) { if(h<=23) fS=S else if(h<=47) fS=F else if(h<=71) fS=J else if(h<=95) fS=R else fS=X c=skey[h%24]; if((alphabet.indexOf(uk)<0)&&(D2.indexOf(uk)<0)) return w; w=unV(w) if((!space)&&(!changed)) w+=k if(!is_ie) { var sp=oc.selectionStart,pos=sp if(!changed) { var sst=oc.scrollTop;pos+=k.length if(!oc.data) { oc.value=oc.value.substr(0,sp)+k+oc.value.substr(oc.selectionEnd);changed=true;oc.scrollTop=sst } else { oc.insertData(oc.pos,k);range.setEnd(oc,oc.pos+1);oc.pos++;changed=true } }					if(!oc.data) oc.setSelectionRange(pos,pos) if(!ckspell(w,fS)) { replaceChar(oc,i-j,c) if(!oc.data) { var a=new Array(D) main(w,fS,pos,a) } else { var ww=mozGetText(oc) var a=new Array(D) main(ww[0],fS,ww[1],a) }					}				} else { var ret=sr(w,fS,0) if((space)&&(ret)) ret+=fcc(32) if(ret) return ret }			}		}	} } function nospell(w,k) { return false } function ckspell(w,k) { w=unV(w); var exc="UOU,IEU".split(','),z,next=true,noE="UU,UOU,UOI,IEU,AO,IA,AI,AY,AU,AO".split(','),noBE="YEU",test,a,b var check=true,noM="UE,UYE,IU,EU,UY".split(','),noMT="AY,AU".split(','),noT="UA",t=-1,notV2="IAO" var uw=up(w),tw=uw,update=false,gi="IO",noAOEW="OE,OO,AO,EO,IA,AI".split(','),noAOE="OA" var notViet="AA,AE,EE,OU,YY,YI,IY,EY,EA,EI,II,IO,YO,YA,YU,OOO".split(','),uk=up(k),twE,uw2=unV2(uw) var vSConsonant="B,C,D,G,H,K,L,M,N,P,Q,R,S,T,V,X".split(','),vDConsonant="CH,GI,KH,NGH,GH,NG,NH,PH,QU,TH,TR".split(',') var vDConsonantE="CH,NG,NH".split(','),sConsonant="C,P,T,CH".split(','),vSConsonantE="C,M,N,P,T".split(',') var noNHE="O,U,IE,Ô,Ơ,Ư,IÊ,Ă,Â,UYE,UYÊ,UO,ƯƠ,ƯO,UƠ,UA,ƯA,OĂ,OE,OÊ".split(','),oMoc="UU,UOU".split(',') if(FRX.indexOf(uk)>=0) for(a=0;a=0) return true for(b=0;b=0) next=false if((next)&&((gi.indexOf(notViet[b])<0)||(a<=0)||(uw2.substr(a-1,1)!='G'))) return true }		}	}	for(b=0;b<vDConsonant.length;b++) if(tw.indexOf(vDConsonant[b])==0){tw=tw.substr(vDConsonant[b].length);update=true;t=b;break} if(!update) for(b=0;b<vSConsonant.length;b++) if(tw.indexOf(vSConsonant[b])==0){tw=tw.substr(1);break} update=false;twE=tw for(b=0;b<vDConsonantE.length;b++) { if(tw.substr(tw.length-vDConsonantE[b].length)==vDConsonantE[b]) { tw=tw.substr(0,tw.length-vDConsonantE[b].length) if(b==2){ for(z=0;z=0) return true } }	test=tw.substr(0,1) if((t==3)&&((test=="A")||(test=="O")||(test=="U")||(test=="Y"))) return true if((t==5)&&((test=="E")||(test=="I")||(test=="Y"))) return true uw2=unV2(tw) if(uw2==notV2) return true if(tw!=twE) for(z=0;z0)&&(uk=='E')) check=false if((them.indexOf(uk)>=0)&&(check)) { for(a=0;a=0) return true if(uk!=trang) if(uw2==noAOE) return true if((uk==trang)&&(trang!='W')) if(uw2==noT) return true if(uk==moc) for(a=0;a4) return true } else if(uw2.length>3) return true return false } function DAWEOF(cc,k) { var ret=new Array,kA=new Array(A,moc,trang,E,O),z,a;ret[0]=g var ccA=new Array(aA,mocA,trangA,eA,oA),ccrA=new Array(arA,mocrA,arA,erA,orA) for(a=0;a<kA.length;a++) if(k==kA[a]) for(z=0;z<ccA[a].length;z++) if(cc==ccA[a][z]) ret[1]=ccrA[a][z] if(ret[1]) return ret else return false } function findC(w,k,sf) { if(((method==3)||(method==4))&&(w.substr(w.length-1,1)=="\\")) return new Array(1,k.charCodeAt(0)) var str="",res,cc="",pc="",tE="",vowA=new Array,s="ÂĂÊÔƠƯêâăơôư",c=0,dn=false,uw=up(w),tv;spellerr(w,k) var DAWEOFA=aA.join+eA.join+mocA.join+trangA.join+oA.join+english;DAWEOFA=up(DAWEOFA) for(g=0;g=0) { if(uk==moc) { if((w2.indexOf("UU")>=0)&&(tw5!=dont[1])) { if(w2.indexOf("UU")==(w.length-2)) res=2 else return false } else if(w2.indexOf("UOU")>=0) { if(w2.indexOf("UOU")==(w.length-3)) res=2 else return false }		}		if(!res) { for(g=1;g<=w.length;g++) { cc=w.substr(w.length-g,1) pc=up(w.substr(w.length-g-1,1)) uc=up(cc) for(h=0;h=0) { if(((uk==moc)&&(unV(uc)=="U")&&(up(unV(w.substr(w.length-g+1,1)))=="A"))||((uk==trang)&&(unV(uc)=='A')&&(unV(pc)=='U'))) { if(unV(uc)=="U") tv=1 else tv=2 ccc=up(w.substr(w.length-g-tv,1)) if(ccc!="Q") res=g+tv-1 else if(uk==trang) res=g else if(moc!=trang) return false } else res=g if((!whit)||(uw.indexOf("Ư")<0)||(uw.indexOf("W")<0)) break } else if(DAWEOFA.indexOf(uc)>=0) { if(uk==D) { if(cc=="đ") res=new Array(g,'d') else if(cc=="Đ") res=new Array(g,'D') } else res=DAWEOF(cc,uk) if(res) break }			}		}	}	if((uk!=Z)&&(DAWEO.indexOf(uk)<0)) { var tEC=retKC(uk); for (g=0;g=0) { if(cc=='U') { if(pc!='Q') { c++;vowA[vowA.length]=g } } else if(cc=='I') { if((pc!='G')||(c<=0)) { c++;vowA[vowA.length]=g } } else { c++;vowA[vowA.length]=g } } else if(uk!=Z) { for(h=0;h=0)) return g			else if(tE.indexOf(w.substr(w.length-g,1))>=0) { for(h=0;h<tEC.length;h++) { if(w.substr(w.length-g,1).charCodeAt(0)==tEC[h]) return new Array(g,fcc(skey[h])) }			}		}	}	if(res) return res if((c==1)||(uk==Z)) return vowA[0] else if(c==2) { var v=2 if(w.substr(w.length-1)==" ") v=3 var ttt=up(w.substr(w.length-v,2)) if((dauCu==0)&&((ttt=="UY")||(ttt=="OA")||(ttt=="OE"))) return vowA[0] var c2=0,fdconsonant,sc="BCD"+fcc(272)+"GHKLMNPQRSTVX",dc="CH,GI,KH,NGH,GH,NG,NH,PH,QU,TH,TR".split(',') for(h=1;h<=w.length;h++) { fdconsonant=false for(g=0;g=0) { c2++;fdconsonant=true if(dc[g]!='NGH') h++ else h+=2 }			}			if(!fdconsonant) { if(sc.indexOf(up(w.substr(w.length-h,1)))>=0) c2++ else break }		}		if((c2==1)||(c2==2)) return vowA[0] else return vowA[1] } else if(c==3) return vowA[1] else return false } function unV(w) { var u=repSign(null),b,a for(a=1;a<=w.length;a++) { for(b=0;b<u.length;b++) { if(u[b]==w.charCodeAt(w.length-a)) { w=w.substr(0,w.length-a)+fcc(skey[b%24])+w.substr(w.length-a+1) }		}	}	return w } function unV2(w) { var a,b for(a=1;a<=w.length;a++) { for(b=0;b<skey.length;b++) { if(skey[b]==w.charCodeAt(w.length-a)) w=w.substr(0,w.length-a)+skey2[b]+w.substr(w.length-a+1) }	}	return w } function repSign(k) { var t=new Array,u=new Array,a,b for(a=0;a<5;a++) { if((k==null)||(SFJRX.substr(a,1)!=up(k))) { t=retKC(SFJRX.substr(a,1)) for(b=0;b<t.length;b++) u[u.length]=t[b] }	}	return u } function sr(w,k,i) { var sf=getSF pos=findC(w,k,sf) if(pos) { if(pos[1]) { if(!is_ie) replaceChar(oc,i-pos[0],pos[1]) else return ie_replaceChar(w,pos[0],pos[1]) } else { var c=retUni(w,k,pos) if (!is_ie) replaceChar(oc,i-pos,c) else return ie_replaceChar(w,pos,c) }	}	return false } function retUni(w,k,pos) { var u=retKC(up(k)),uC,lC,c=w.charCodeAt(w.length-pos),a for(a=0;a<skey.length;a++) if(skey[a]==c) { if(a<12) { lC=a;uC=a+12 } else { lC=a-12;uC=a } t=fcc(c);if(t!=up(t)) return u[lC] return u[uC] } } function replaceChar(o,pos,c) { var bb=false; if(!nan(c)) { var replaceBy=fcc(c),wfix=up(unV(fcc(c))); changed=true } else { var replaceBy=c; if((up(c)=="O")&&(whit)) bb=true } if(!o.data) { var savePos=o.selectionStart,sst=o.scrollTop if ((up(o.value.substr(pos-1,1))=='U')&&(pos<savePos-1)&&(up(o.value.substr(pos-2,1))!='Q')) { if((wfix=="Ơ")||(bb)) {				if (o.value.substr(pos-1,1)=='u') var r=fcc(432) else var r=fcc(431) }			if(bb) { changed=true; if(c=="o") replaceBy="ơ" else replaceBy="Ơ" }		}		o.value=o.value.substr(0,pos)+replaceBy+o.value.substr(pos+1) if(r) o.value=o.value.substr(0,pos-1)+r+o.value.substr(pos) o.setSelectionRange(savePos,savePos);o.scrollTop=sst } else { if ((up(o.data.substr(pos-1,1))=='U')&&(pos<o.pos-1)) { if((wfix=="Ơ")||(bb)) {				if (o.data.substr(pos-1,1)=='u') var r=fcc(432) else var r=fcc(431) }			if(bb) { changed=true; if(c=="o") replaceBy="ơ" else replaceBy="Ơ" }		}		o.deleteData(pos,1);o.insertData(pos,replaceBy) if(r) { o.deleteData(pos-1,1);o.insertData(pos-1,r) } }	if(whit) whit=false } function retKC(k) { if(k==S) return new Array(225,7845,7855,233,7871,237,243,7889,7899,250,7913,253,193,7844,7854,201,7870,205,211,7888,7898,218,7912,221) if(k==F) return new Array(224,7847,7857,232,7873,236,242,7891,7901,249,7915,7923,192,7846,7856,200,7872,204,210,7890,7900,217,7914,7922) if(k==J) return new Array(7841,7853,7863,7865,7879,7883,7885,7897,7907,7909,7921,7925,7840,7852,7862,7864,7878,7882,7884,7896,7906,7908,7920,7924) if(k==R) return new Array(7843,7849,7859,7867,7875,7881,7887,7893,7903,7911,7917,7927,7842,7848,7858,7866,7874,7880,7886,7892,7902,7910,7916,7926) if(k==X) return new Array(227,7851,7861,7869,7877,297,245,7895,7905,361,7919,7929,195,7850,7860,7868,7876,296,213,7894,7904,360,7918,7928) } function getEL(id) { return document.getElementById(id) } function getSF { var sf=new Array,x; for(x=0;x<skey.length;x++) sf[sf.length]=fcc(skey[x]); return sf } function statusMessage { var str='Kiểu gõ: ' if(on_off==0) str+='Tắt' else if(method==1) str+='Telex' else if(method==2) str+='VNI' else if(method==3) str+='VIQR' else if(method==4) str+='VIQR*' else if(method==0) str+='Tự động' if(isKHTML) str+=" [Alt-F9]" else str+=" [F9]" str+=" | Chính tả: " str+=(dockspell==0)?"Tắt":"Bật" if(isKHTML) str+=" [Alt-F8]" else str+=" [F8]" str+=" | Bỏ dấu: " str+=(dauCu==1)?"Cũ":"Mới" if(isKHTML) str+=" [Alt-F7]" else str+=" [F7]" str+=" | Bật/Tắt [F12] - AVIM" window.status=str } function updateInfo { setCookie; if(support) statusMessage } function setMethod(m) { if(m==-1) { on_off=0;if(getEL(radioID[5])) getEL(radioID[5]).checked=true } else { on_off=1;method=m;if(getEL(radioID[m])) getEL(radioID[m]).checked=true } setSpell(dockspell);setDauCu(dauCu);updateInfo } function setDauCu(box) { if(typeof(box)=="number") { dauCu=box;if(getEL(radioID[7])) getEL(radioID[7]).checked=box } else dauCu=(box.checked)?1:0 updateInfo } function setSpell(box) { if(typeof(box)=="number") { spellerr=(box==1)?ckspell:nospell if(getEL(radioID[6])) getEL(radioID[6]).checked=box }	else { if(box.checked) { spellerr=ckspell;dockspell=1 } else { spellerr=nospell;dockspell=0 } }	updateInfo } function onKeyDown(e) { if (e=='iframe') { frame=findF;var key=frame.event.keyCode } else var key=(!is_ie)?e.which:window.event.keyCode if((key==120)||(key==123)||(key==119)||(key==118)) { if(key==120) { on_off=1;setMethod(((method==4)?0:++method)) } else if(key==118) { setDauCu(((dauCu==1)?0:1)) } else if(key==119) { dockspell=(dockspell==0)?1:0;setSpell(dockspell) } else if(key==123) { on_off=(on_off==0)?1:0 if(on_off==0) setMethod(-1) else setMethod(method) }		updateInfo } } function ifInit(w) { var sel=w.getSelection;w.focus range=sel?sel.getRangeAt(0):document.createRange } function ifMoz(e) { if((e.ctrlKey)||((e.altKey)&&(code!=92)&&(code!=126))) return;ifInit(e.target.parentNode.wi) var code=e.which,node=range.endContainer;sk=fcc(code);saveStr="" if(checkCode(code)||(!range.startOffset)||(typeof(node.data)=='undefined')) return;node.sel=false if(node.data) { saveStr=node.data.substr(range.endOffset) if(range.startOffset!=range.endOffset) node.sel=true node.deleteData(range.startOffset,node.data.length) }	range.setEnd(node,range.endOffset) range.setStart(node,0) if(!node.data) return node.value=node.data; node.pos=node.data.length; node.which=code start(node,e) node.insertData(node.data.length,saveStr) range.setEnd(node,node.data.length-saveStr.length+kl) range.setStart(node,node.data.length-saveStr.length+kl); kl=0 if(changed) { changed=false; e.preventDefault } } function FKeyPress { var obj=findF sk=fcc(obj.event.keyCode) if(checkCode(obj.event.keyCode)||((obj.event.ctrlKey)&&(obj.event.keyCode!=92)&&(obj.event.keyCode!=126))) return start(obj,fcc(obj.event.keyCode)) } function checkCode(code) { if(((on_off==0)||((code<45)&&(code!=42))||(code==145)||(code==255))&&(code!=32)&&(code!=39)&&(code!=40)&&(code!=43)) return true } function fcc(x) { return String.fromCharCode(x) } if(useCookie==1) { setCookie=doSetCookie; getCookie=doGetCookie } else { setCookie=noCookie; getCookie=noCookie } function noCookie {} function doSetCookie { var exp=new Date(11245711156480).toGMTString document.cookie='HIM_on_off='+on_off+';expires='+exp document.cookie='HIM_method='+method+';expires='+exp document.cookie='HIM_ckspell='+dockspell+';expires='+exp document.cookie='HIM_daucu='+dauCu+';expires='+exp } function doGetCookie { var ck=document.cookie, res=/HIM_method/.test(ck) if((!res)||(ck.indexOf('HIM_ckspell')<0)) { setCookie; return } var p,ckA=ck.split(';') for(var i=0;i=0) { operaV=agt.split(" ") if(parseInt(operaV[operaV.length-1])>=8) is_opera=true else { operaV=operaV[0].split("/") if(parseInt(operaV[1])>=8) is_opera=true }	} else if(agt.indexOf("khtml")>=0) isKHTML=true else { ver=agt.substr(agt.indexOf("rv:")+3) ver=parseFloat(ver.substr(0,ver.indexOf(" "))) if(agt.indexOf("mozilla")<0) ver=0 } } function up(w) { w=w.toUpperCase if(isKHTML) { str="êôơâăưếốớấắứềồờầằừễỗỡẫẵữệộợậặự",rep="ÊÔƠÂĂƯẾỐỚẤẮỨỀỒỜẦẰỪỄỖỠẪẴỮỆỘỢẶỰ" for(z=0;z=0) w=w.substr(0,z)+rep.substr(io,1)+w.substr(z+1) }	}	return w } function findIgnore(el) { for(i=0;i0)) return true } if((is_ie)||(ver>=1.3)||(is_opera)||(isKHTML)) { getCookie if(on_off==0) setMethod(-1) else setMethod(method) setSpell(dockspell);setDauCu(dauCu);statusMessage } else support=false document.onkeydown=function(e) { onKeyDown(e) } document.onkeypress=function(e) { if(!support) return if(!is_ie) { var el=e.target,code=e.which; if(e.ctrlKey) return; if((e.altKey)&&(code!=92)&&(code!=126)) return } else { var el=window.event.srcElement,code=window.event.keyCode; if((event.ctrlKey)&&(code!=92)&&(code!=126)) return } if(((el.type!='textarea')&&(el.type!='text'))||checkCode(code)) return sk=fcc(code); if (findIgnore(el)) return if(!is_ie) start(el,e) else start(el,sk) if(changed) { changed=false; return false } } function findF { for(g=0;g<fID.length;g++) { if(findIgnore(fID[g])) return;frame=document.frames[fID[g].id];if((frame.document)&&(frame.event)) return frame } } function init { if((support)&&(!is_opera)&&(!isKHTML)) { for(g=0;g<fID.length;g++) { if(is_ie) { if(findIgnore(fID[g])) return;frame=document.frames[fID[g].id];doc=frame.document if((doc)&&(up(doc.designMode)=="ON")) { doc.onkeydown=function { onKeyDown('iframe') } doc.onkeypress=function { FKeyPress; if(changed) { changed=false; return false } } }		} else { if(findIgnore(fID[g])) return;wi=fID[g].contentWindow;iframedit=wi.document;iframedit.wi=wi if(up(iframedit.designMode)=="ON") { iframedit.addEventListener("keypress",ifMoz,false) iframedit.addEventListener("keydown",onKeyDown,true) }		}	} } } function uglyF { ugly=50;while(ugly<5000) {setTimeout("init",ugly);ugly+=50} } uglyF;document.onmousedown=function(e) { uglyF } /* */