<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://verns.net/mediawiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AAVIM.js</id>
		<title>MediaWiki:AVIM.js - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://verns.net/mediawiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AAVIM.js"/>
		<link rel="alternate" type="text/html" href="http://verns.net/mediawiki/index.php?title=MediaWiki:AVIM.js&amp;action=history"/>
		<updated>2026-05-25T11:54:54Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>http://verns.net/mediawiki/index.php?title=MediaWiki:AVIM.js&amp;diff=5141&amp;oldid=prev</id>
		<title>Vsingleton: Created page with '/* =============================================================================  * LƯU Ý: Xem hướng dẫn update him.js: [[Thảo luận MediaWiki:Him.js#Notes on upgrading…'</title>
		<link rel="alternate" type="text/html" href="http://verns.net/mediawiki/index.php?title=MediaWiki:AVIM.js&amp;diff=5141&amp;oldid=prev"/>
				<updated>2010-12-01T19:01:27Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;#039;/* =============================================================================  * LƯU Ý: Xem hướng dẫn update him.js: [[Thảo luận MediaWiki:Him.js#Notes on upgrading…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* =============================================================================&lt;br /&gt;
 * LƯU Ý: Xem hướng dẫn update him.js: [[Thảo luận MediaWiki:Him.js#Notes on upgrading him.js]].&lt;br /&gt;
 * =============================================================================&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 *  AVIM JavaScript Vietnamese Input Method Source File dated 02-11-2007&lt;br /&gt;
 *&lt;br /&gt;
 *	Copyright (C) 2004-2007 Hieu Tran Dang &amp;lt;lt2hieu2004 (at) users (dot) sf (dot) net&amp;gt;&lt;br /&gt;
 *	Website:	http://hdang.co.uk&lt;br /&gt;
 *&lt;br /&gt;
 *	You are allowed to use this software in any way you want providing:&lt;br /&gt;
 *		1. You must retain this copyright notice at all time&lt;br /&gt;
 *		2. You must not claim that you or any other third party is the author&lt;br /&gt;
 *		   of this software in any way.&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
va=&amp;quot;wpUserEmail&amp;quot;.split(',') //Put the ID of the fields you DON'T want to let users type Vietnamese in, multiple fields allowed, separated by a comma (,)&lt;br /&gt;
method=0 //Default input method, 0=Auto, 1=Telex, 2=VNI, 3=VIQR, 4=VIQR*&lt;br /&gt;
on_off=0 //Start AVIM off&lt;br /&gt;
dockspell=1 //Start AVIM with spell checking on&lt;br /&gt;
dauCu=1 //Start AVIM with old way of marking accent (o`a, o`e, u`y)&lt;br /&gt;
useCookie=1 //Set this to 0 to NOT use cookies&lt;br /&gt;
radioID=&amp;quot;him_auto,him_telex,him_vni,him_viqr,him_viqr2,him_off,him_ckspell,him_daucu&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
var agt=navigator.userAgent.toLowerCase(),alphabet=&amp;quot;QWERTYUIOPASDFGHJKLZXCVBNM\ &amp;quot;,them,spellerr,setCookie,getCookie,attached=new Array()&lt;br /&gt;
var is_ie=((agt.indexOf(&amp;quot;msie&amp;quot;)!=-1)&amp;amp;&amp;amp;(agt.indexOf(&amp;quot;opera&amp;quot;)==-1)),S,F,J,R,X,D,oc,sk,saveStr,wi,frame,is_opera=false,D2,isKHTML=false&lt;br /&gt;
var ver=0,support=true,changed=false,specialChange=false,uni,uni2,g,h,SFJRX,DAWEO,Z,AEO,moc,trang,kl=0,tw5,range=null,fID=document.getElementsByTagName(&amp;quot;iframe&amp;quot;)&lt;br /&gt;
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)&lt;br /&gt;
var skey2=&amp;quot;a,a,a,e,e,i,o,o,o,u,u,y,A,A,A,E,E,I,O,O,O,U,U,Y&amp;quot;.split(','),A,E,O,whit=false,english=&amp;quot;ĐÂĂƠƯÊÔ&amp;quot;,lowen=&amp;quot;đâăơưêô&amp;quot;,ds1=&amp;quot;d,D&amp;quot;.split(&amp;quot;,&amp;quot;),db1=new Array(273,272)&lt;br /&gt;
os1=&amp;quot;o,O,ơ,Ơ,ó,Ó,ò,Ò,ọ,Ọ,ỏ,Ỏ,õ,Õ,ớ,Ớ,ờ,Ờ,ợ,Ợ,ở,Ở,ỡ,Ỡ&amp;quot;.split(&amp;quot;,&amp;quot;),ob1=&amp;quot;ô,Ô,ô,Ô,ố,Ố,ồ,Ồ,ộ,Ộ,ổ,Ổ,ỗ,Ỗ,ố,Ố,ồ,Ồ,ộ,Ộ,ổ,Ổ,ỗ,Ỗ&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
mocs1=&amp;quot;o,O,ô,Ô,u,U,ó,Ó,ò,Ò,ọ,Ọ,ỏ,Ỏ,õ,Õ,ú,Ú,ù,Ù,ụ,Ụ,ủ,Ủ,ũ,Ũ,ố,Ố,ồ,Ồ,ộ,Ộ,ổ,Ổ,ỗ,Ỗ&amp;quot;.split(&amp;quot;,&amp;quot;);mocb1=&amp;quot;ơ,Ơ,ơ,Ơ,ư,Ư,ớ,Ớ,ờ,Ờ,ợ,Ợ,ở,Ở,ỡ,Ỡ,ứ,Ứ,ừ,Ừ,ự,Ự,ử,Ử,ữ,Ữ,ớ,Ớ,ờ,Ờ,ợ,Ợ,ở,Ở,ỡ,Ỡ&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
trangs1=&amp;quot;a,A,â,Â,á,Á,à,À,ạ,Ạ,ả,Ả,ã,Ã,ấ,Ấ,ầ,Ầ,ậ,Ậ,ẩ,Ẩ,ẫ,Ẫ&amp;quot;.split(&amp;quot;,&amp;quot;);trangb1=&amp;quot;ă,Ă,ă,Ă,ắ,Ắ,ằ,Ằ,ặ,Ặ,ẳ,Ẳ,ẵ,Ẵ,ắ,Ắ,ằ,Ằ,ặ,Ặ,ẳ,Ẳ,ẵ,Ẵ&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
as1=&amp;quot;a,A,ă,Ă,á,Á,à,À,ạ,Ạ,ả,Ả,ã,Ã,ắ,Ắ,ằ,Ằ,ặ,Ặ,ẳ,Ẳ,ẵ,Ẵ,ế,Ế,ề,Ề,ệ,Ệ,ể,Ể,ễ,Ễ&amp;quot;.split(&amp;quot;,&amp;quot;);ab1=&amp;quot;â,Â,â,Â,ấ,Ấ,ầ,Ầ,ậ,Ậ,ẩ,Ẩ,ẫ,Ẫ,ấ,Ấ,ầ,Ầ,ậ,Ậ,ẩ,Ẩ,ẫ,Ẫ,é,É,è,È,ẹ,Ẹ,ẻ,Ẻ,ẽ,Ẽ&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
es1=&amp;quot;e,E,é,É,è,È,ẹ,Ẹ,ẻ,Ẻ,ẽ,Ẽ&amp;quot;.split(&amp;quot;,&amp;quot;);eb1=&amp;quot;ê,Ê,ế,Ế,ề,Ề,ệ,Ệ,ể,Ể,ễ,Ễ&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
arA=&amp;quot;á,à,ả,ã,ạ,a,Á,À,Ả,Ã,Ạ,A&amp;quot;.split(',');mocrA=&amp;quot;ó,ò,ỏ,õ,ọ,o,ú,ù,ủ,ũ,ụ,u,Ó,Ò,Ỏ,Õ,Ọ,O,Ú,Ù,Ủ,Ũ,Ụ,U&amp;quot;.split(',');erA=&amp;quot;é,è,ẻ,ẽ,ẹ,e,É,È,Ẻ,Ẽ,Ẹ,E&amp;quot;.split(',');orA=&amp;quot;ó,ò,ỏ,õ,ọ,o,Ó,Ò,Ỏ,Õ,Ọ,O&amp;quot;.split(',')&lt;br /&gt;
aA=&amp;quot;ấ,ầ,ẩ,ẫ,ậ,â,Ấ,Ầ,Ẩ,Ẫ,Ậ,Â&amp;quot;.split(',');mocA=&amp;quot;ớ,ờ,ở,ỡ,ợ,ơ,ứ,ừ,ử,ữ,ự,ư,Ớ,Ờ,Ở,Ỡ,Ợ,Ơ,Ứ,Ừ,Ử,Ữ,Ự,Ư&amp;quot;.split(',');trangA=&amp;quot;ắ,ằ,ẳ,ẵ,ặ,ă,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ă&amp;quot;.split(',');eA=&amp;quot;ế,ề,ể,ễ,ệ,ê,Ế,Ề,Ể,Ễ,Ệ,Ê&amp;quot;.split(',');oA=&amp;quot;ố,ồ,ổ,ỗ,ộ,ô,Ố,Ồ,Ổ,Ỗ,Ộ,Ô&amp;quot;.split(',')&lt;br /&gt;
 &lt;br /&gt;
function notWord(w) {&lt;br /&gt;
	var str=&amp;quot;\ \r\n#,\\;.:-_()&amp;lt;&amp;gt;+-*/=?!\&amp;quot;$%{}[]\'~|^\@\&amp;amp;\t&amp;quot;+fcc(160)&lt;br /&gt;
	return (str.indexOf(w)&amp;gt;=0)&lt;br /&gt;
}&lt;br /&gt;
function nan(w) {&lt;br /&gt;
	if ((isNaN(w))||(w=='e')) return true&lt;br /&gt;
	else return false&lt;br /&gt;
}&lt;br /&gt;
function mozGetText(obj) {&lt;br /&gt;
	var v,pos,w=&amp;quot;&amp;quot;;g=1&lt;br /&gt;
	v=(obj.data)?obj.data:obj.value&lt;br /&gt;
	if(v.length&amp;lt;=0) return false&lt;br /&gt;
	if(!obj.data) {&lt;br /&gt;
		if(!obj.setSelectionRange) return false&lt;br /&gt;
		pos=obj.selectionStart&lt;br /&gt;
	} else pos=obj.pos&lt;br /&gt;
	if(obj.selectionStart!=obj.selectionEnd) return new Array(&amp;quot;&amp;quot;,pos)&lt;br /&gt;
	while(1) {&lt;br /&gt;
		if(pos-g&amp;lt;0) break&lt;br /&gt;
		else if(notWord(v.substr(pos-g,1))) { if(v.substr(pos-g,1)==&amp;quot;\\&amp;quot;) w=v.substr(pos-g,1)+w; break }&lt;br /&gt;
		else w=v.substr(pos-g,1)+w; g++&lt;br /&gt;
	}&lt;br /&gt;
	return new Array(w,pos)&lt;br /&gt;
}&lt;br /&gt;
function start(obj,key) {&lt;br /&gt;
	var w=&amp;quot;&amp;quot;,nnc;oc=obj;uni2=false&lt;br /&gt;
	if(method==0) { uni=&amp;quot;D,A,E,O,W,W&amp;quot;.split(','); uni2=&amp;quot;9,6,6,6,7,8&amp;quot;.split(','); D2=&amp;quot;DAWEO6789&amp;quot; }&lt;br /&gt;
	else if(method==1) { uni=&amp;quot;D,A,E,O,W,W&amp;quot;.split(','); D2=&amp;quot;DAWEO&amp;quot; }&lt;br /&gt;
	else if(method==2) { uni=&amp;quot;9,6,6,6,7,8&amp;quot;.split(','); D2=&amp;quot;6789&amp;quot; }&lt;br /&gt;
	else if(method==3) { uni=&amp;quot;D,^,^,^,+,(&amp;quot;.split(','); D2=&amp;quot;D^+(&amp;quot; }&lt;br /&gt;
	else if(method==4) { uni=&amp;quot;D,^,^,^,*,(&amp;quot;.split(','); D2=&amp;quot;D^*(&amp;quot; }&lt;br /&gt;
	if(!is_ie) {&lt;br /&gt;
		key=fcc(key.which)&lt;br /&gt;
		w=mozGetText(obj)&lt;br /&gt;
		if(D2.indexOf(up(key))&amp;gt;=0) nnc=true&lt;br /&gt;
		else nnc=false&lt;br /&gt;
		if((!w)||(obj.sel)) return&lt;br /&gt;
		main(w[0],key,w[1],uni,nnc)&lt;br /&gt;
		if(!dockspell) w=mozGetText(obj)&lt;br /&gt;
		if((w)&amp;amp;&amp;amp;(uni2)&amp;amp;&amp;amp;(!changed)) main(w[0],key,w[1],uni2,nnc)&lt;br /&gt;
	} else {&lt;br /&gt;
		obj=ieGetText(obj)&lt;br /&gt;
		if(obj) {&lt;br /&gt;
			var sT=obj.cW.text&lt;br /&gt;
			w=main(obj.cW.text,key,0,uni,false)&lt;br /&gt;
			if((uni2)&amp;amp;&amp;amp;((w==sT)||(typeof(w)=='undefined'))) w=main(obj.cW.text,key,0,uni2,false)&lt;br /&gt;
			if(w) obj.cW.text=w&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(D2.indexOf(up(key))&amp;gt;=0) {&lt;br /&gt;
		if(!is_ie) {&lt;br /&gt;
			w=mozGetText(obj)&lt;br /&gt;
			if(!w) return&lt;br /&gt;
			normC(w[0],key,w[1])&lt;br /&gt;
		} else if(typeof(obj)==&amp;quot;object&amp;quot;) { &lt;br /&gt;
			obj=ieGetText(obj)&lt;br /&gt;
			if(obj) {&lt;br /&gt;
				w=obj.cW.text&lt;br /&gt;
				if(!changed) { w+=key; changed=true }&lt;br /&gt;
				obj.cW.text=w&lt;br /&gt;
				w=normC(w,key,0)&lt;br /&gt;
				if(w) { obj=ieGetText(obj); obj.cW.text=w }&lt;br /&gt;
			}&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function ieGetText(obj) {&lt;br /&gt;
	var caret=obj.document.selection.createRange(),w=&amp;quot;&amp;quot;&lt;br /&gt;
	if(caret.text) caret.text=&amp;quot;&amp;quot;&lt;br /&gt;
	else {&lt;br /&gt;
		while(1) {&lt;br /&gt;
			caret.moveStart(&amp;quot;character&amp;quot;,-1)&lt;br /&gt;
			if(w.length==caret.text.length) break&lt;br /&gt;
			w=caret.text&lt;br /&gt;
			if(notWord(w.charAt(0))) {&lt;br /&gt;
				if(w.charCodeAt(0)==13) w=w.substr(2)&lt;br /&gt;
				else if(w.charAt(0)!=&amp;quot;\\&amp;quot;) w=w.substr(1)&lt;br /&gt;
				break&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(w.length) {&lt;br /&gt;
		caret.collapse(false)&lt;br /&gt;
		caret.moveStart(&amp;quot;character&amp;quot;,-w.length)&lt;br /&gt;
		obj.cW=caret.duplicate()&lt;br /&gt;
		return obj&lt;br /&gt;
	} else return false&lt;br /&gt;
}&lt;br /&gt;
function ie_replaceChar(w,pos,c) {&lt;br /&gt;
	var r=&amp;quot;&amp;quot;,uc=0&lt;br /&gt;
	if(isNaN(c)) uc=up(c)&lt;br /&gt;
	if((whit)&amp;amp;&amp;amp;(up(w.substr(w.length-pos-1,1))=='U')&amp;amp;&amp;amp;(pos!=1)&amp;amp;&amp;amp;(up(w.substr(w.length-pos-2,1))!='Q')) {&lt;br /&gt;
		whit=false&lt;br /&gt;
		if((up(unV(fcc(c)))==&amp;quot;Ơ&amp;quot;)||(uc==&amp;quot;O&amp;quot;)) {&lt;br /&gt;
			if(w.substr(w.length-pos-1,1)=='u') r=fcc(432)&lt;br /&gt;
			else r=fcc(431)&lt;br /&gt;
		}&lt;br /&gt;
		if(uc==&amp;quot;O&amp;quot;) {&lt;br /&gt;
			if(c==&amp;quot;o&amp;quot;) c=417&lt;br /&gt;
			else c=416&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(!isNaN(c)) {&lt;br /&gt;
		changed=true;r+=fcc(c)&lt;br /&gt;
		return w.substr(0,w.length-pos-r.length+1)+r+w.substr(w.length-pos+1)&lt;br /&gt;
	} else return w.substr(0,w.length-pos)+c+w.substr(w.length-pos+1)&lt;br /&gt;
}&lt;br /&gt;
function tr(k,w,by,sf,i) {&lt;br /&gt;
	var r,pos=findC(w,k,sf)&lt;br /&gt;
	if(pos) {&lt;br /&gt;
		if(pos[1]) {&lt;br /&gt;
			if(is_ie) return ie_replaceChar(w,pos[0],pos[1])&lt;br /&gt;
			else return replaceChar(oc,i-pos[0],pos[1])&lt;br /&gt;
		} else {&lt;br /&gt;
			var c,pC=w.substr(w.length-pos,1),cmp;r=sf&lt;br /&gt;
			for(g=0;g&amp;lt;r.length;g++) {&lt;br /&gt;
				if((nan(r[g]))||(r[g]==&amp;quot;e&amp;quot;)) cmp=pC&lt;br /&gt;
				else cmp=pC.charCodeAt(0)&lt;br /&gt;
				if(cmp==r[g]) {&lt;br /&gt;
					if(!nan(by[g])) c=by[g]&lt;br /&gt;
					else c=by[g].charCodeAt(0)&lt;br /&gt;
					if(is_ie) return ie_replaceChar(w,pos,c)&lt;br /&gt;
					else return replaceChar(oc,i-pos,c)&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return false&lt;br /&gt;
}&lt;br /&gt;
function main(w,k,i,a,nnc) {&lt;br /&gt;
	var uk=up(k),bya=new Array(db1,ab1,eb1,ob1,mocb1,trangb1),got=false,t=&amp;quot;d,D,a,A,a,A,o,O,u,U,e,E,o,O&amp;quot;.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
	var sfa=new Array(ds1,as1,es1,os1,mocs1,trangs1),by=new Array(),sf=new Array()&lt;br /&gt;
	if((method==2)||((method==0)&amp;amp;&amp;amp;(a[0]==&amp;quot;9&amp;quot;))) {&lt;br /&gt;
		DAWEO=&amp;quot;6789&amp;quot;;SFJRX=&amp;quot;12534&amp;quot;;S=&amp;quot;1&amp;quot;;F=&amp;quot;2&amp;quot;;J=&amp;quot;5&amp;quot;;R=&amp;quot;3&amp;quot;;X=&amp;quot;4&amp;quot;;Z=&amp;quot;0&amp;quot;;D=&amp;quot;9&amp;quot;;FRX=&amp;quot;234&amp;quot;;AEO=&amp;quot;6&amp;quot;;moc=&amp;quot;7&amp;quot;;trang=&amp;quot;8&amp;quot;;them=&amp;quot;678&amp;quot;;A=&amp;quot;^&amp;quot;;E=&amp;quot;^&amp;quot;;O=&amp;quot;^&amp;quot;&lt;br /&gt;
	} else if(method==3) {&lt;br /&gt;
		DAWEO=&amp;quot;^+(D&amp;quot;;SFJRX=&amp;quot;'`.?~&amp;quot;;S=&amp;quot;'&amp;quot;;F=&amp;quot;`&amp;quot;;J=&amp;quot;.&amp;quot;;R=&amp;quot;?&amp;quot;;X=&amp;quot;~&amp;quot;;Z=&amp;quot;-&amp;quot;;D=&amp;quot;D&amp;quot;;FRX=&amp;quot;`?~&amp;quot;;AEO=&amp;quot;^&amp;quot;;moc=&amp;quot;+&amp;quot;;trang=&amp;quot;(&amp;quot;;them=&amp;quot;^+(&amp;quot;;A=&amp;quot;^&amp;quot;;E=&amp;quot;^&amp;quot;;O=&amp;quot;^&amp;quot;&lt;br /&gt;
	} else if(method==4) {&lt;br /&gt;
		DAWEO=&amp;quot;^*(D&amp;quot;;SFJRX=&amp;quot;'`.?~&amp;quot;;S=&amp;quot;'&amp;quot;;F=&amp;quot;`&amp;quot;;J=&amp;quot;.&amp;quot;;R=&amp;quot;?&amp;quot;;X=&amp;quot;~&amp;quot;;Z=&amp;quot;-&amp;quot;;D=&amp;quot;D&amp;quot;;FRX=&amp;quot;`?~&amp;quot;;AEO=&amp;quot;^&amp;quot;;moc=&amp;quot;*&amp;quot;;trang=&amp;quot;(&amp;quot;;them=&amp;quot;^*(&amp;quot;;A=&amp;quot;^&amp;quot;;E=&amp;quot;^&amp;quot;;O=&amp;quot;^&amp;quot;&lt;br /&gt;
	} else if((method==1)||((method==0)&amp;amp;&amp;amp;(a[0]==&amp;quot;D&amp;quot;))) {&lt;br /&gt;
		SFJRX=&amp;quot;SFJRX&amp;quot;;DAWEO=&amp;quot;DAWEO&amp;quot;;D='D';S='S';F='F';J='J';R='R';X='X';Z='Z';FRX=&amp;quot;FRX&amp;quot;;them=&amp;quot;AOEW&amp;quot;;trang=&amp;quot;W&amp;quot;;moc=&amp;quot;W&amp;quot;;A=&amp;quot;A&amp;quot;;E=&amp;quot;E&amp;quot;;O=&amp;quot;O&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	if(SFJRX.indexOf(uk)&amp;gt;=0) {&lt;br /&gt;
		var ret=sr(w,k,i); got=true&lt;br /&gt;
		if(ret) return ret&lt;br /&gt;
	} else if(uk==Z) {&lt;br /&gt;
		sf=repSign(null)&lt;br /&gt;
		for(h=0;h&amp;lt;english.length;h++) {&lt;br /&gt;
			sf[sf.length]=lowen.charCodeAt(h)&lt;br /&gt;
			sf[sf.length]=english.charCodeAt(h)&lt;br /&gt;
		}&lt;br /&gt;
		for(h=0;h&amp;lt;5;h++) for(g=0;g&amp;lt;skey.length;g++) by[by.length]=skey[g]&lt;br /&gt;
		for(h=0;h&amp;lt;t.length;h++) by[by.length]=t[h]&lt;br /&gt;
		got=true&lt;br /&gt;
	}&lt;br /&gt;
	else for(h=0;h&amp;lt;a.length;h++) if(a[h]==uk) { got=true; by=by.concat(bya[h]); sf=sf.concat(sfa[h]) }&lt;br /&gt;
	if(uk==moc) whit=true;&lt;br /&gt;
	if(!got) {&lt;br /&gt;
		if(nnc) return&lt;br /&gt;
		return normC(w,k,i)&lt;br /&gt;
	}&lt;br /&gt;
	return DAWEOZ(k,w,by,sf,i,uk)&lt;br /&gt;
}&lt;br /&gt;
function DAWEOZ(k,w,by,sf,i,uk) { if((DAWEO.indexOf(uk)&amp;gt;=0)||(Z.indexOf(uk)&amp;gt;=0)) return tr(k,w,by,sf,i) }&lt;br /&gt;
function normC(w,k,i) {&lt;br /&gt;
	var uk=up(k),u=repSign(null),fS,c,j,space=(k.charCodeAt(0)==32)?true:false&lt;br /&gt;
	if((!is_ie)&amp;amp;&amp;amp;(space)) return&lt;br /&gt;
	for(j=1;j&amp;lt;=w.length;j++) {&lt;br /&gt;
		for(h=0;h&amp;lt;u.length;h++) {&lt;br /&gt;
			if(u[h]==w.charCodeAt(w.length-j)) {&lt;br /&gt;
				if(h&amp;lt;=23) fS=S&lt;br /&gt;
				else if(h&amp;lt;=47) fS=F&lt;br /&gt;
				else if(h&amp;lt;=71) fS=J&lt;br /&gt;
				else if(h&amp;lt;=95) fS=R&lt;br /&gt;
				else fS=X&lt;br /&gt;
				c=skey[h%24]; if((alphabet.indexOf(uk)&amp;lt;0)&amp;amp;&amp;amp;(D2.indexOf(uk)&amp;lt;0)) return w; w=unV(w)&lt;br /&gt;
				if((!space)&amp;amp;&amp;amp;(!changed)) w+=k&lt;br /&gt;
				if(!is_ie) {&lt;br /&gt;
					var sp=oc.selectionStart,pos=sp&lt;br /&gt;
					if(!changed) {&lt;br /&gt;
						var sst=oc.scrollTop;pos+=k.length&lt;br /&gt;
						if(!oc.data) { oc.value=oc.value.substr(0,sp)+k+oc.value.substr(oc.selectionEnd);changed=true;oc.scrollTop=sst }&lt;br /&gt;
						else { oc.insertData(oc.pos,k);oc.pos++;range.setEnd(oc,oc.pos);specialChange=true }&lt;br /&gt;
					}&lt;br /&gt;
					if(!oc.data) oc.setSelectionRange(pos,pos)&lt;br /&gt;
					if(!ckspell(w,fS)) {&lt;br /&gt;
						replaceChar(oc,i-j,c)&lt;br /&gt;
						if(!oc.data) {&lt;br /&gt;
							var a=new Array(D)&lt;br /&gt;
							main(w,fS,pos,a,false)&lt;br /&gt;
						} else {&lt;br /&gt;
							var ww=mozGetText(oc)&lt;br /&gt;
							var a=new Array(D)&lt;br /&gt;
							main(ww[0],fS,ww[1],a,false)&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					var ret=sr(w,fS,0)&lt;br /&gt;
					if((space)&amp;amp;&amp;amp;(ret)) ret+=fcc(32)&lt;br /&gt;
					if(ret) return ret&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function nospell(w,k) { return false }&lt;br /&gt;
function ckspell(w,k) {&lt;br /&gt;
	w=unV(w); var exc=&amp;quot;UOU,IEU&amp;quot;.split(','),z,next=true,noE=&amp;quot;UU,UOU,UOI,IEU,AO,IA,AI,AY,AU,AO&amp;quot;.split(','),noBE=&amp;quot;YEU&amp;quot;,test,a,b&lt;br /&gt;
	var check=true,noM=&amp;quot;UE,UYE,IU,EU,UY&amp;quot;.split(','),noMT=&amp;quot;AY,AU&amp;quot;.split(','),noT=&amp;quot;UA&amp;quot;,t=-1,notV2=&amp;quot;IAO&amp;quot;&lt;br /&gt;
	var uw=up(w),tw=uw,update=false,gi=&amp;quot;IO&amp;quot;,noAOEW=&amp;quot;OE,OO,AO,EO,IA,AI&amp;quot;.split(','),noAOE=&amp;quot;OA&amp;quot;&lt;br /&gt;
	var notViet=&amp;quot;AA,AE,EE,OU,YY,YI,IY,EY,EA,EI,II,IO,YO,YA,OOO&amp;quot;.split(','),uk=up(k),twE,uw2=unV2(uw)&lt;br /&gt;
	var vSConsonant=&amp;quot;B,C,D,G,H,K,L,M,N,P,Q,R,S,T,V,X&amp;quot;.split(','),vDConsonant=&amp;quot;CH,GI,KH,NGH,GH,NG,NH,PH,QU,TH,TR&amp;quot;.split(',')&lt;br /&gt;
	var vDConsonantE=&amp;quot;CH,NG,NH&amp;quot;.split(','),sConsonant=&amp;quot;C,P,T,CH&amp;quot;.split(','),vSConsonantE=&amp;quot;C,M,N,P,T&amp;quot;.split(',')&lt;br /&gt;
	var noNHE=&amp;quot;O,U,IE,Ô,Ơ,Ư,IÊ,Ă,Â,UYE,UYÊ,UO,ƯƠ,ƯO,UƠ,UA,ƯA,OĂ,OE,OÊ&amp;quot;.split(','),oMoc=&amp;quot;UU,UOU&amp;quot;.split(',')&lt;br /&gt;
	if(FRX.indexOf(uk)&amp;gt;=0) for(a=0;a&amp;lt;sConsonant.length;a++) if(uw.substr(uw.length-sConsonant[a].length,sConsonant[a].length)==sConsonant[a]) return true&lt;br /&gt;
	for(a=0;a&amp;lt;uw.length;a++) {&lt;br /&gt;
		if(&amp;quot;FJZW1234567890&amp;quot;.indexOf(uw.substr(a,1))&amp;gt;=0) return true&lt;br /&gt;
		for(b=0;b&amp;lt;notViet.length;b++) {&lt;br /&gt;
			if(uw2.substr(a,notViet[b].length)==notViet[b]) {&lt;br /&gt;
				for(z=0;z&amp;lt;exc.length;z++) if(uw2.indexOf(exc[z])&amp;gt;=0) next=false&lt;br /&gt;
				if((next)&amp;amp;&amp;amp;((gi.indexOf(notViet[b])&amp;lt;0)||(a&amp;lt;=0)||(uw2.substr(a-1,1)!='G'))) return true&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	for(b=0;b&amp;lt;vDConsonant.length;b++) if(tw.indexOf(vDConsonant[b])==0){tw=tw.substr(vDConsonant[b].length);update=true;t=b;break}&lt;br /&gt;
	if(!update) for(b=0;b&amp;lt;vSConsonant.length;b++) if(tw.indexOf(vSConsonant[b])==0){tw=tw.substr(1);break}&lt;br /&gt;
	update=false;twE=tw&lt;br /&gt;
	for(b=0;b&amp;lt;vDConsonantE.length;b++) {&lt;br /&gt;
		if(tw.substr(tw.length-vDConsonantE[b].length)==vDConsonantE[b]) {&lt;br /&gt;
			tw=tw.substr(0,tw.length-vDConsonantE[b].length)&lt;br /&gt;
			if(b==2){&lt;br /&gt;
				for(z=0;z&amp;lt;noNHE.length;z++) if(tw==noNHE[z]) return true&lt;br /&gt;
				if((uk==trang)&amp;amp;&amp;amp;((tw==&amp;quot;OA&amp;quot;)||(tw==&amp;quot;A&amp;quot;))) return true&lt;br /&gt;
			}&lt;br /&gt;
			update=true;break&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(!update) for(b=0;b&amp;lt;vSConsonantE.length;b++) if(tw.substr(tw.length-1)==vSConsonantE[b]){tw=tw.substr(0,tw.length-1);break}&lt;br /&gt;
	if(tw) {&lt;br /&gt;
		for(a=0;a&amp;lt;vDConsonant.length;a++) {&lt;br /&gt;
			for(b=0;b&amp;lt;tw.length;b++) { if(tw.substr(b,vDConsonant[a].length)==vDConsonant[a]) return true }&lt;br /&gt;
		}&lt;br /&gt;
		for(a=0;a&amp;lt;vSConsonant.length;a++) { if(tw.indexOf(vSConsonant[a])&amp;gt;=0) return true }&lt;br /&gt;
	}&lt;br /&gt;
	test=tw.substr(0,1)&lt;br /&gt;
	if((t==3)&amp;amp;&amp;amp;((test==&amp;quot;A&amp;quot;)||(test==&amp;quot;O&amp;quot;)||(test==&amp;quot;U&amp;quot;)||(test==&amp;quot;Y&amp;quot;))) return true&lt;br /&gt;
	if((t==5)&amp;amp;&amp;amp;((test==&amp;quot;E&amp;quot;)||(test==&amp;quot;I&amp;quot;)||(test==&amp;quot;Y&amp;quot;))) return true&lt;br /&gt;
	uw2=unV2(tw)&lt;br /&gt;
	if(uw2==notV2) return true&lt;br /&gt;
	if(tw!=twE) for(z=0;z&amp;lt;noE.length;z++) if(uw2==noE[z]) return true&lt;br /&gt;
	if((tw!=uw)&amp;amp;&amp;amp;(uw2==noBE)) return true&lt;br /&gt;
	if(uk!=moc) for(z=0;z&amp;lt;oMoc.length;z++) if(tw==oMoc[z]) return true&lt;br /&gt;
	if((uw2.indexOf('UYE')&amp;gt;0)&amp;amp;&amp;amp;(uk=='E')) check=false&lt;br /&gt;
	if((them.indexOf(uk)&amp;gt;=0)&amp;amp;&amp;amp;(check)) {&lt;br /&gt;
		for(a=0;a&amp;lt;noAOEW.length;a++) if(uw2.indexOf(noAOEW[a])&amp;gt;=0) return true&lt;br /&gt;
		if(uk!=trang) if(uw2==noAOE) return true&lt;br /&gt;
		if((uk==trang)&amp;amp;&amp;amp;(trang!='W')) if(uw2==noT) return true&lt;br /&gt;
		if(uk==moc) for(a=0;a&amp;lt;noM.length;a++) if(uw2==noM[a]) return true&lt;br /&gt;
		if((uk==moc)||(uk==trang)) for(a=0;a&amp;lt;noMT.length;a++) if(uw2==noMT[a]) return true&lt;br /&gt;
	}&lt;br /&gt;
	tw5=tw&lt;br /&gt;
	if((uw2.charCodeAt(0)==272)||(uw2.charCodeAt(0)==273)) { if(uw2.length&amp;gt;4) return true }&lt;br /&gt;
	else if(uw2.length&amp;gt;3) return true&lt;br /&gt;
	return false&lt;br /&gt;
}&lt;br /&gt;
function DAWEOF(cc,k) {&lt;br /&gt;
	var ret=new Array(),kA=new Array(A,moc,trang,E,O),z,a;ret[0]=g&lt;br /&gt;
	var ccA=new Array(aA,mocA,trangA,eA,oA),ccrA=new Array(arA,mocrA,arA,erA,orA)&lt;br /&gt;
	for(a=0;a&amp;lt;kA.length;a++) if(k==kA[a]) for(z=0;z&amp;lt;ccA[a].length;z++) if(cc==ccA[a][z]) ret[1]=ccrA[a][z]&lt;br /&gt;
	if(ret[1]) return ret&lt;br /&gt;
	else return false&lt;br /&gt;
}&lt;br /&gt;
function findC(w,k,sf) {&lt;br /&gt;
	if(((method==3)||(method==4))&amp;amp;&amp;amp;(w.substr(w.length-1,1)==&amp;quot;\\&amp;quot;)) return new Array(1,k.charCodeAt(0))&lt;br /&gt;
	var str=&amp;quot;&amp;quot;,res,cc=&amp;quot;&amp;quot;,pc=&amp;quot;&amp;quot;,tE=&amp;quot;&amp;quot;,vowA=new Array(),s=&amp;quot;ÂĂÊÔƠƯêâăơôư&amp;quot;,c=0,dn=false,uw=up(w),tv&lt;br /&gt;
	var DAWEOFA=aA.join()+eA.join()+mocA.join()+trangA.join()+oA.join()+english;DAWEOFA=up(DAWEOFA)&lt;br /&gt;
	for(g=0;g&amp;lt;sf.length;g++) {&lt;br /&gt;
		if(nan(sf[g])) str+=sf[g]&lt;br /&gt;
		else str+=fcc(sf[g])&lt;br /&gt;
	}&lt;br /&gt;
	var uk=up(k),i=w.length,uni_array=repSign(k),w2=up(unV2(unV(w))),dont=&amp;quot;ƯA,ƯU&amp;quot;.split(',')&lt;br /&gt;
	if (DAWEO.indexOf(uk)&amp;gt;=0) {&lt;br /&gt;
		if(uk==moc) {&lt;br /&gt;
			if((w2.indexOf(&amp;quot;UU&amp;quot;)&amp;gt;=0)&amp;amp;&amp;amp;(tw5!=dont[1])) {&lt;br /&gt;
				if(w2.indexOf(&amp;quot;UU&amp;quot;)==(w.length-2)) res=2&lt;br /&gt;
				else return false&lt;br /&gt;
			} else if(w2.indexOf(&amp;quot;UOU&amp;quot;)&amp;gt;=0) {&lt;br /&gt;
				if(w2.indexOf(&amp;quot;UOU&amp;quot;)==(w.length-3)) res=2&lt;br /&gt;
				else return false&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(!res) {&lt;br /&gt;
			for(g=1;g&amp;lt;=w.length;g++) {&lt;br /&gt;
				cc=w.substr(w.length-g,1)&lt;br /&gt;
				pc=up(w.substr(w.length-g-1,1))&lt;br /&gt;
				uc=up(cc)&lt;br /&gt;
				for(h=0;h&amp;lt;dont.length;h++) if((tw5==dont[h])&amp;amp;&amp;amp;(tw5==unV(pc+uc))) dn=true&lt;br /&gt;
				if(dn) { dn=false; continue }&lt;br /&gt;
				if(str.indexOf(uc)&amp;gt;=0) {&lt;br /&gt;
					if(((uk==moc)&amp;amp;&amp;amp;(unV(uc)==&amp;quot;U&amp;quot;)&amp;amp;&amp;amp;(up(unV(w.substr(w.length-g+1,1)))==&amp;quot;A&amp;quot;))||((uk==trang)&amp;amp;&amp;amp;(unV(uc)=='A')&amp;amp;&amp;amp;(unV(pc)=='U'))) {&lt;br /&gt;
						if(unV(uc)==&amp;quot;U&amp;quot;) tv=1&lt;br /&gt;
						else tv=2&lt;br /&gt;
						ccc=up(w.substr(w.length-g-tv,1))&lt;br /&gt;
						if(ccc!=&amp;quot;Q&amp;quot;) res=g+tv-1&lt;br /&gt;
						else if(uk==trang) res=g&lt;br /&gt;
						else if(moc!=trang) return false&lt;br /&gt;
					} else res=g&lt;br /&gt;
					if((!whit)||(uw.indexOf(&amp;quot;Ư&amp;quot;)&amp;lt;0)||(uw.indexOf(&amp;quot;W&amp;quot;)&amp;lt;0)) break&lt;br /&gt;
				} else if(DAWEOFA.indexOf(uc)&amp;gt;=0) {&lt;br /&gt;
					if(uk==D) {&lt;br /&gt;
						if(cc==&amp;quot;đ&amp;quot;) res=new Array(g,'d')&lt;br /&gt;
						else if(cc==&amp;quot;Đ&amp;quot;) res=new Array(g,'D')&lt;br /&gt;
					} else res=DAWEOF(cc,uk)&lt;br /&gt;
					if(res) break&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if((uk!=Z)&amp;amp;&amp;amp;(DAWEO.indexOf(uk)&amp;lt;0)) { var tEC=retKC(uk); for (g=0;g&amp;lt;tEC.length;g++) tE+=fcc(tEC[g]) }&lt;br /&gt;
	for(g=1;g&amp;lt;=w.length;g++) {&lt;br /&gt;
		if(DAWEO.indexOf(uk)&amp;lt;0) {&lt;br /&gt;
			cc=up(w.substr(w.length-g,1))&lt;br /&gt;
			pc=up(w.substr(w.length-g-1,1))&lt;br /&gt;
			if(str.indexOf(cc)&amp;gt;=0) {&lt;br /&gt;
				if(cc=='U') {&lt;br /&gt;
					if(pc!='Q') { c++;vowA[vowA.length]=g }&lt;br /&gt;
				} else if(cc=='I') {&lt;br /&gt;
					if((pc!='G')||(c&amp;lt;=0)) { c++;vowA[vowA.length]=g }&lt;br /&gt;
				} else { c++;vowA[vowA.length]=g }&lt;br /&gt;
			} else if(uk!=Z) {&lt;br /&gt;
				for(h=0;h&amp;lt;uni_array.length;h++) if(uni_array[h]==w.charCodeAt(w.length-g)) {&lt;br /&gt;
					if(spellerr(w,k)) return false&lt;br /&gt;
					return new Array(g,tEC[h%24])&lt;br /&gt;
				}&lt;br /&gt;
				for(h=0;h&amp;lt;tEC.length;h++) if(tEC[h]==w.charCodeAt(w.length-g)) return new Array(g,fcc(skey[h]))&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if((uk!=Z)&amp;amp;&amp;amp;(typeof(res)!='object')) if(spellerr(w,k)) return false&lt;br /&gt;
	if(DAWEO.indexOf(uk)&amp;lt;0) {&lt;br /&gt;
		for(g=1;g&amp;lt;=w.length;g++) {&lt;br /&gt;
			if((uk!=Z)&amp;amp;&amp;amp;(s.indexOf(w.substr(w.length-g,1))&amp;gt;=0)) return g&lt;br /&gt;
			else if(tE.indexOf(w.substr(w.length-g,1))&amp;gt;=0) {&lt;br /&gt;
				for(h=0;h&amp;lt;tEC.length;h++) {&lt;br /&gt;
					if(w.substr(w.length-g,1).charCodeAt(0)==tEC[h]) return new Array(g,fcc(skey[h]))&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(res) return res&lt;br /&gt;
	if((c==1)||(uk==Z)) return vowA[0]&lt;br /&gt;
	else if(c==2) {&lt;br /&gt;
		var v=2&lt;br /&gt;
		if(w.substr(w.length-1)==&amp;quot; &amp;quot;) v=3&lt;br /&gt;
		var ttt=up(w.substr(w.length-v,2))&lt;br /&gt;
		if((dauCu==0)&amp;amp;&amp;amp;((ttt==&amp;quot;UY&amp;quot;)||(ttt==&amp;quot;OA&amp;quot;)||(ttt==&amp;quot;OE&amp;quot;))) return vowA[0]&lt;br /&gt;
		var c2=0,fdconsonant,sc=&amp;quot;BCD&amp;quot;+fcc(272)+&amp;quot;GHKLMNPQRSTVX&amp;quot;,dc=&amp;quot;CH,GI,KH,NGH,GH,NG,NH,PH,QU,TH,TR&amp;quot;.split(',')&lt;br /&gt;
		for(h=1;h&amp;lt;=w.length;h++) {&lt;br /&gt;
			fdconsonant=false&lt;br /&gt;
			for(g=0;g&amp;lt;dc.length;g++) {&lt;br /&gt;
				if(up(w.substr(w.length-h-dc[g].length+1,dc[g].length)).indexOf(dc[g])&amp;gt;=0) {&lt;br /&gt;
					c2++;fdconsonant=true&lt;br /&gt;
					if(dc[g]!='NGH') h++&lt;br /&gt;
					else h+=2&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if(!fdconsonant) {&lt;br /&gt;
				if(sc.indexOf(up(w.substr(w.length-h,1)))&amp;gt;=0) c2++&lt;br /&gt;
				else break&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if((c2==1)||(c2==2)) return vowA[0]&lt;br /&gt;
		else return vowA[1]&lt;br /&gt;
	} else if(c==3) return vowA[1]&lt;br /&gt;
	else return false&lt;br /&gt;
}&lt;br /&gt;
function unV(w) {&lt;br /&gt;
	var u=repSign(null),b,a&lt;br /&gt;
	for(a=1;a&amp;lt;=w.length;a++) {&lt;br /&gt;
		for(b=0;b&amp;lt;u.length;b++) {&lt;br /&gt;
			if(u[b]==w.charCodeAt(w.length-a)) {&lt;br /&gt;
				w=w.substr(0,w.length-a)+fcc(skey[b%24])+w.substr(w.length-a+1)&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return w&lt;br /&gt;
}&lt;br /&gt;
function unV2(w) {&lt;br /&gt;
	var a,b&lt;br /&gt;
	for(a=1;a&amp;lt;=w.length;a++) {&lt;br /&gt;
		for(b=0;b&amp;lt;skey.length;b++) {&lt;br /&gt;
			if(skey[b]==w.charCodeAt(w.length-a)) w=w.substr(0,w.length-a)+skey2[b]+w.substr(w.length-a+1)&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return w&lt;br /&gt;
}&lt;br /&gt;
function repSign(k) {&lt;br /&gt;
	var t=new Array(),u=new Array(),a,b&lt;br /&gt;
	for(a=0;a&amp;lt;5;a++) {&lt;br /&gt;
		if((k==null)||(SFJRX.substr(a,1)!=up(k))) {&lt;br /&gt;
			t=retKC(SFJRX.substr(a,1))&lt;br /&gt;
			for(b=0;b&amp;lt;t.length;b++) u[u.length]=t[b]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return u&lt;br /&gt;
}&lt;br /&gt;
function sr(w,k,i) {&lt;br /&gt;
	var sf=getSF()&lt;br /&gt;
	pos=findC(w,k,sf)&lt;br /&gt;
	if(pos) {&lt;br /&gt;
		if(pos[1]) {&lt;br /&gt;
			if(!is_ie) replaceChar(oc,i-pos[0],pos[1])&lt;br /&gt;
			else return ie_replaceChar(w,pos[0],pos[1])&lt;br /&gt;
		} else {&lt;br /&gt;
			var c=retUni(w,k,pos)&lt;br /&gt;
			if (!is_ie) replaceChar(oc,i-pos,c)&lt;br /&gt;
			else return ie_replaceChar(w,pos,c)&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return false&lt;br /&gt;
}&lt;br /&gt;
function retUni(w,k,pos) {&lt;br /&gt;
	var u=retKC(up(k)),uC,lC,c=w.charCodeAt(w.length-pos),a&lt;br /&gt;
	for(a=0;a&amp;lt;skey.length;a++) if(skey[a]==c) {&lt;br /&gt;
		if(a&amp;lt;12) { lC=a;uC=a+12 }&lt;br /&gt;
		else { lC=a-12;uC=a }&lt;br /&gt;
		t=fcc(c);if(t!=up(t)) return u[lC]&lt;br /&gt;
		return u[uC]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function replaceChar(o,pos,c) {&lt;br /&gt;
	var bb=false; if(!nan(c)) { var replaceBy=fcc(c),wfix=up(unV(fcc(c))); changed=true }&lt;br /&gt;
	else { var replaceBy=c; if((up(c)==&amp;quot;O&amp;quot;)&amp;amp;&amp;amp;(whit)) bb=true }&lt;br /&gt;
	if(!o.data) {&lt;br /&gt;
		var savePos=o.selectionStart,sst=o.scrollTop&lt;br /&gt;
		if ((up(o.value.substr(pos-1,1))=='U')&amp;amp;&amp;amp;(pos&amp;lt;savePos-1)&amp;amp;&amp;amp;(up(o.value.substr(pos-2,1))!='Q')) {&lt;br /&gt;
			if((wfix==&amp;quot;Ơ&amp;quot;)||(bb))&lt;br /&gt;
			{&lt;br /&gt;
				if (o.value.substr(pos-1,1)=='u') var r=fcc(432)&lt;br /&gt;
				else var r=fcc(431)&lt;br /&gt;
			}&lt;br /&gt;
			if(bb) {&lt;br /&gt;
				changed=true; if(c==&amp;quot;o&amp;quot;) replaceBy=&amp;quot;ơ&amp;quot;&lt;br /&gt;
				else replaceBy=&amp;quot;Ơ&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		o.value=o.value.substr(0,pos)+replaceBy+o.value.substr(pos+1)&lt;br /&gt;
		if(r) o.value=o.value.substr(0,pos-1)+r+o.value.substr(pos)&lt;br /&gt;
		o.setSelectionRange(savePos,savePos);o.scrollTop=sst&lt;br /&gt;
	} else {&lt;br /&gt;
		if ((up(o.data.substr(pos-1,1))=='U')&amp;amp;&amp;amp;(pos&amp;lt;o.pos-1)) {&lt;br /&gt;
			if((wfix==&amp;quot;Ơ&amp;quot;)||(bb))&lt;br /&gt;
			{&lt;br /&gt;
				if (o.data.substr(pos-1,1)=='u') var r=fcc(432)&lt;br /&gt;
				else var r=fcc(431)&lt;br /&gt;
			}&lt;br /&gt;
			if(bb) {&lt;br /&gt;
				changed=true; if(c==&amp;quot;o&amp;quot;) replaceBy=&amp;quot;ơ&amp;quot;&lt;br /&gt;
				else replaceBy=&amp;quot;Ơ&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		o.deleteData(pos,1);o.insertData(pos,replaceBy)&lt;br /&gt;
		if(r) { o.deleteData(pos-1,1);o.insertData(pos-1,r) }&lt;br /&gt;
	}&lt;br /&gt;
	if(whit) whit=false&lt;br /&gt;
}&lt;br /&gt;
function retKC(k) {&lt;br /&gt;
	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)&lt;br /&gt;
	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)&lt;br /&gt;
	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)&lt;br /&gt;
	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)&lt;br /&gt;
	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)&lt;br /&gt;
}&lt;br /&gt;
function getEL(id) { return document.getElementById(id) }&lt;br /&gt;
function getSF() { var sf=new Array(),x; for(x=0;x&amp;lt;skey.length;x++) sf[sf.length]=fcc(skey[x]); return sf }&lt;br /&gt;
function statusMessage() {&lt;br /&gt;
	var str='Kiểu gõ: '&lt;br /&gt;
	if(on_off==0) str+='Tắt'&lt;br /&gt;
	else if(method==1) str+='Telex'&lt;br /&gt;
	else if(method==2) str+='VNI'&lt;br /&gt;
	else if(method==3) str+='VIQR'&lt;br /&gt;
	else if(method==4) str+='VIQR*'&lt;br /&gt;
	else if(method==0) str+='Tự động'&lt;br /&gt;
	if(isKHTML) str+=&amp;quot; [Alt-F9]&amp;quot;&lt;br /&gt;
	else str+=&amp;quot; [F9]&amp;quot;&lt;br /&gt;
	str+=&amp;quot; | Chính tả: &amp;quot;&lt;br /&gt;
	str+=(dockspell==0)?&amp;quot;Tắt&amp;quot;:&amp;quot;Bật&amp;quot;&lt;br /&gt;
	if(isKHTML) str+=&amp;quot; [Alt-F8]&amp;quot;&lt;br /&gt;
	else str+=&amp;quot; [F8]&amp;quot;&lt;br /&gt;
	str+=&amp;quot; | Bỏ dấu: &amp;quot;&lt;br /&gt;
	str+=(dauCu==1)?&amp;quot;Cũ&amp;quot;:&amp;quot;Mới&amp;quot;&lt;br /&gt;
	if(isKHTML) str+=&amp;quot; [Alt-F7]&amp;quot;&lt;br /&gt;
	else str+=&amp;quot; [F7]&amp;quot;&lt;br /&gt;
	str+=&amp;quot; | Bật/Tắt [F12] \u2013 AVIM&amp;quot;&lt;br /&gt;
	window.status=str&lt;br /&gt;
}&lt;br /&gt;
function updateInfo() { setCookie(); if(support) statusMessage() }&lt;br /&gt;
function setMethod(m) {&lt;br /&gt;
	if(m==-1) { on_off=0;if(getEL(radioID[5])) getEL(radioID[5]).checked=true }&lt;br /&gt;
	else { on_off=1;method=m;if(getEL(radioID[m])) getEL(radioID[m]).checked=true }&lt;br /&gt;
	setSpell(dockspell);setDauCu(dauCu);updateInfo()&lt;br /&gt;
}&lt;br /&gt;
function setDauCu(box) {&lt;br /&gt;
	if(typeof(box)==&amp;quot;number&amp;quot;) {&lt;br /&gt;
		dauCu=box;if(getEL(radioID[7])) getEL(radioID[7]).checked=box&lt;br /&gt;
	} else dauCu=(box.checked)?1:0&lt;br /&gt;
	updateInfo()&lt;br /&gt;
}&lt;br /&gt;
function setSpell(box) {&lt;br /&gt;
	if(typeof(box)==&amp;quot;number&amp;quot;) { &lt;br /&gt;
		spellerr=(box==1)?ckspell:nospell&lt;br /&gt;
		if(getEL(radioID[6])) getEL(radioID[6]).checked=box&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		if(box.checked) { spellerr=ckspell;dockspell=1 }&lt;br /&gt;
		else { spellerr=nospell;dockspell=0 }&lt;br /&gt;
	}&lt;br /&gt;
	updateInfo()&lt;br /&gt;
}&lt;br /&gt;
function onKeyDown(e) {&lt;br /&gt;
	if (e=='iframe') { frame=findF();var key=frame.event.keyCode }&lt;br /&gt;
	else var key=(!is_ie)?e.which:window.event.keyCode&lt;br /&gt;
	if((key==120)||(key==123)||(key==119)||(key==118)) {&lt;br /&gt;
		if(key==120) { on_off=1;setMethod(((method==4)?0:++method)) }&lt;br /&gt;
		else if(key==118) { setDauCu(((dauCu==1)?0:1)) }&lt;br /&gt;
		else if(key==119) { dockspell=(dockspell==0)?1:0;setSpell(dockspell) }&lt;br /&gt;
		else if(key==123) {&lt;br /&gt;
			on_off=(on_off==0)?1:0&lt;br /&gt;
			if(on_off==0) setMethod(-1)&lt;br /&gt;
			else setMethod(method)&lt;br /&gt;
		}&lt;br /&gt;
		updateInfo()&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function ifInit(w) {&lt;br /&gt;
	var sel=w.getSelection()&lt;br /&gt;
	range=sel?sel.getRangeAt(0):document.createRange()&lt;br /&gt;
}&lt;br /&gt;
function ifMoz(e) {&lt;br /&gt;
	var code=e.which,cwi=e.target.parentNode.wi&lt;br /&gt;
	if(typeof(cwi)==&amp;quot;undefined&amp;quot;) cwi=e.target.parentNode.parentNode.wi&lt;br /&gt;
	if((e.ctrlKey)||((e.altKey)&amp;amp;&amp;amp;(code!=92)&amp;amp;&amp;amp;(code!=126))) return;ifInit(cwi)&lt;br /&gt;
	var node=range.endContainer,newPos;sk=fcc(code);saveStr=&amp;quot;&amp;quot;&lt;br /&gt;
	if(checkCode(code)||(!range.startOffset)||(typeof(node.data)=='undefined')) return;node.sel=false&lt;br /&gt;
	if(node.data) {&lt;br /&gt;
		saveStr=node.data.substr(range.endOffset)&lt;br /&gt;
		if(range.startOffset!=range.endOffset) node.sel=true&lt;br /&gt;
		node.deleteData(range.startOffset,node.data.length)&lt;br /&gt;
	}&lt;br /&gt;
	range.setEnd(node,range.endOffset)&lt;br /&gt;
	range.setStart(node,0)&lt;br /&gt;
	if(!node.data) return&lt;br /&gt;
	node.value=node.data; node.pos=node.data.length; node.which=code&lt;br /&gt;
	start(node,e)&lt;br /&gt;
	node.insertData(node.data.length,saveStr)&lt;br /&gt;
	newPos=node.data.length-saveStr.length+kl&lt;br /&gt;
	range.setEnd(node,newPos);range.setStart(node,newPos);kl=0&lt;br /&gt;
	if(specialChange) { specialChange=false; changed=false; node.deleteData(node.pos-1,1) }&lt;br /&gt;
	if(changed) { changed=false; e.preventDefault() }&lt;br /&gt;
}&lt;br /&gt;
function FKeyPress() {&lt;br /&gt;
	var obj=findF()&lt;br /&gt;
	sk=fcc(obj.event.keyCode)&lt;br /&gt;
	if(checkCode(obj.event.keyCode)||((obj.event.ctrlKey)&amp;amp;&amp;amp;(obj.event.keyCode!=92)&amp;amp;&amp;amp;(obj.event.keyCode!=126))) return&lt;br /&gt;
	start(obj,fcc(obj.event.keyCode))&lt;br /&gt;
	if (changed) { changed=false; return false }&lt;br /&gt;
}&lt;br /&gt;
function checkCode(code) { if(((on_off==0)||((code&amp;lt;45)&amp;amp;&amp;amp;(code!=42)&amp;amp;&amp;amp;(code!=32)&amp;amp;&amp;amp;(code!=39)&amp;amp;&amp;amp;(code!=40)&amp;amp;&amp;amp;(code!=43))||(code==145)||(code==255))) return true; return false }&lt;br /&gt;
function fcc(x) { return String.fromCharCode(x) }&lt;br /&gt;
if(useCookie==1) { setCookie=doSetCookie; getCookie=doGetCookie }&lt;br /&gt;
else { setCookie=noCookie; getCookie=noCookie }&lt;br /&gt;
function noCookie() {}&lt;br /&gt;
function doSetCookie() {&lt;br /&gt;
	var exp=new Date(11245711156480).toGMTString(),end=';expires='+exp+';path=/'&lt;br /&gt;
	document.cookie='AVIM_on_off='+on_off+end&lt;br /&gt;
	document.cookie='AVIM_method='+method+end&lt;br /&gt;
	document.cookie='AVIM_ckspell='+dockspell+end&lt;br /&gt;
	document.cookie='AVIM_daucu='+dauCu+end&lt;br /&gt;
}&lt;br /&gt;
function doGetCookie() {&lt;br /&gt;
	var ck=document.cookie, res=/AVIM_method/.test(ck)&lt;br /&gt;
	if((!res)||(ck.indexOf('AVIM_ckspell')&amp;lt;0)) { setCookie(); return }&lt;br /&gt;
	var p,ckA=ck.split(';')&lt;br /&gt;
	for(var i=0;i&amp;lt;ckA.length;i++) {&lt;br /&gt;
		p=ckA[i].split('='); p[0]=p[0].replace(/^\s+/g,&amp;quot;&amp;quot;); p[1]=parseInt(p[1])&lt;br /&gt;
		if(p[0]=='AVIM_on_off') on_off=p[1]&lt;br /&gt;
		else if(p[0]=='AVIM_method') method=p[1]&lt;br /&gt;
		else if(p[0]=='AVIM_ckspell') {&lt;br /&gt;
			if(p[1]==0) { dockspell=0; spellerr=nospell }&lt;br /&gt;
			else { dockspell=1; spellerr=ckspell }&lt;br /&gt;
		} else if(p[0]=='AVIM_daucu') dauCu=parseInt(p[1])&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(!is_ie) {&lt;br /&gt;
	if(agt.indexOf(&amp;quot;opera&amp;quot;)&amp;gt;=0) {&lt;br /&gt;
		operaV=agt.split(&amp;quot; &amp;quot;);operaVersion=parseInt(operaV[operaV.length-1])&lt;br /&gt;
		if(operaVersion&amp;gt;=8) is_opera=true&lt;br /&gt;
		else {&lt;br /&gt;
			operaV=operaV[0].split(&amp;quot;/&amp;quot;);operaVersion=parseInt(operaV[1])&lt;br /&gt;
			if(operaVersion&amp;gt;=8) is_opera=true&lt;br /&gt;
		}&lt;br /&gt;
	} else if(agt.indexOf(&amp;quot;khtml&amp;quot;)&amp;gt;=0) isKHTML=true&lt;br /&gt;
	else {&lt;br /&gt;
		ver=agt.substr(agt.indexOf(&amp;quot;rv:&amp;quot;)+3)&lt;br /&gt;
		ver=parseFloat(ver.substr(0,ver.indexOf(&amp;quot; &amp;quot;)))&lt;br /&gt;
		if(agt.indexOf(&amp;quot;mozilla&amp;quot;)&amp;lt;0) ver=0&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function up(w) {&lt;br /&gt;
	w=w.toUpperCase()&lt;br /&gt;
	if(isKHTML) {&lt;br /&gt;
		str=&amp;quot;êôơâăưếốớấắứềồờầằừễỗỡẫẵữệộợậặự&amp;quot;,rep=&amp;quot;ÊÔƠÂĂƯẾỐỚẤẮỨỀỒỜẦẰỪỄỖỠẪẴỮỆỘỢẶỰ&amp;quot;&lt;br /&gt;
		for(z=0;z&amp;lt;w.length;z++) {&lt;br /&gt;
			io=str.indexOf(w.substr(z,1))&lt;br /&gt;
			if(io&amp;gt;=0) w=w.substr(0,z)+rep.substr(io,1)+w.substr(z+1)&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return w&lt;br /&gt;
}&lt;br /&gt;
function findIgnore(el) {&lt;br /&gt;
	for(i=0;i&amp;lt;va.length;i++) if((el.id==va[i])&amp;amp;&amp;amp;(va[i].length&amp;gt;0)) return true&lt;br /&gt;
}&lt;br /&gt;
if((is_ie)||(ver&amp;gt;=1.3)||(is_opera)||(isKHTML)) {&lt;br /&gt;
	getCookie()&lt;br /&gt;
	if(on_off==0) setMethod(-1)&lt;br /&gt;
	else setMethod(method)&lt;br /&gt;
	setSpell(dockspell);setDauCu(dauCu);statusMessage()&lt;br /&gt;
} else support=false&lt;br /&gt;
function onKeyPress(e) {&lt;br /&gt;
	if(!support) return&lt;br /&gt;
	if(!is_ie) { var el=e.target,code=e.which; if(e.ctrlKey) return; if((e.altKey)&amp;amp;&amp;amp;(code!=92)&amp;amp;&amp;amp;(code!=126)) return }&lt;br /&gt;
	else { var el=window.event.srcElement,code=window.event.keyCode; if((event.ctrlKey)&amp;amp;&amp;amp;(code!=92)&amp;amp;&amp;amp;(code!=126)) return }&lt;br /&gt;
	if(((el.type!='textarea')&amp;amp;&amp;amp;(el.type!='text')&amp;amp;&amp;amp;(el.type!='search'))||checkCode(code)) return&lt;br /&gt;
	sk=fcc(code); if (findIgnore(el)) return&lt;br /&gt;
	if(!is_ie) start(el,e)&lt;br /&gt;
	else start(el,sk)&lt;br /&gt;
	if(changed) { &lt;br /&gt;
		changed=false&lt;br /&gt;
		if (!is_ie) e.preventDefault()&lt;br /&gt;
		else return false&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function attachEvt(obj,evt,handle,capture) {&lt;br /&gt;
	if(is_ie) { obj.attachEvent(&amp;quot;on&amp;quot;+evt,handle); obj.attachEvent(&amp;quot;on&amp;quot;+evt,getCookie) }&lt;br /&gt;
	else { obj.addEventListener(evt,handle,capture); obj.addEventListener(evt,getCookie,capture) }&lt;br /&gt;
}&lt;br /&gt;
attachEvt(document,&amp;quot;keydown&amp;quot;,onKeyDown,false)&lt;br /&gt;
attachEvt(document,&amp;quot;keypress&amp;quot;,onKeyPress,false)&lt;br /&gt;
function findF() {&lt;br /&gt;
	for(g=0;g&amp;lt;fID.length;g++) {&lt;br /&gt;
		if(findIgnore(fID[g])) continue;frame=fID[g]&lt;br /&gt;
		if(typeof(frame)!=&amp;quot;undefined&amp;quot;) {&lt;br /&gt;
			try { if((frame.contentWindow.document)&amp;amp;&amp;amp;(frame.contentWindow.event)) return frame.contentWindow }&lt;br /&gt;
			catch(e) { if((frame.document)&amp;amp;&amp;amp;(frame.event)) return frame }&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function onKeyDownI() { onKeyDown(&amp;quot;iframe&amp;quot;) }&lt;br /&gt;
function init() {&lt;br /&gt;
var kkk=false&lt;br /&gt;
if((support)&amp;amp;&amp;amp;(!isKHTML)) {&lt;br /&gt;
	if(is_opera) { if(operaVersion&amp;lt;9) return }&lt;br /&gt;
	for(g=0;g&amp;lt;fID.length;g++) {&lt;br /&gt;
		if(findIgnore(fID[g])) continue&lt;br /&gt;
		if(is_ie) {&lt;br /&gt;
			var doc&lt;br /&gt;
			try {&lt;br /&gt;
				frame=fID[g];if(typeof(frame)!=&amp;quot;undefined&amp;quot;) {&lt;br /&gt;
					if(frame.contentWindow.document) doc=frame.contentWindow.document&lt;br /&gt;
					else if(frame.document) doc=frame.document&lt;br /&gt;
				}&lt;br /&gt;
				if((doc)&amp;amp;&amp;amp;((up(doc.designMode)==&amp;quot;ON&amp;quot;)||(doc.body.contentEditable))) {&lt;br /&gt;
					for(l=0;l&amp;lt;attached.length;l++) if(doc==attached[l]) { kkk=true; break }&lt;br /&gt;
					if(!kkk) {&lt;br /&gt;
						attached[attached.length]=doc&lt;br /&gt;
						attachEvt(doc,&amp;quot;keydown&amp;quot;,onKeyDownI,false)&lt;br /&gt;
						attachEvt(doc,&amp;quot;keypress&amp;quot;,FKeyPress,false)&lt;br /&gt;
					} else kkk=false&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			catch(e) { }&lt;br /&gt;
		} else {&lt;br /&gt;
			var iframedit&lt;br /&gt;
			try {&lt;br /&gt;
				wi=fID[g].contentWindow;iframedit=wi.document;iframedit.wi=wi&lt;br /&gt;
				if((iframedit)&amp;amp;&amp;amp;(up(iframedit.designMode)==&amp;quot;ON&amp;quot;)) {&lt;br /&gt;
					attachEvt(iframedit,&amp;quot;keypress&amp;quot;,ifMoz,false)&lt;br /&gt;
					attachEvt(iframedit,&amp;quot;keydown&amp;quot;,onKeyDown,true)&lt;br /&gt;
				}&lt;br /&gt;
			} catch(e) { }&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
function uglyF() { ugly=50;while(ugly&amp;lt;5000) {setTimeout(&amp;quot;init()&amp;quot;,ugly);ugly+=50} }&lt;br /&gt;
uglyF();attachEvt(document,&amp;quot;mousedown&amp;quot;,uglyF,false)&lt;/div&gt;</summary>
		<author><name>Vsingleton</name></author>	</entry>

	</feed>