[20070522] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Cái này ko liên quan đến AVIM, cũng chẳng liên quan gì đến Telex hay VNI gì cả. Chỉnh lại cái keyboard layout của Windows sang keyboard layout US, UK,... tùy cái đang dùng. cái kiểu 1 = â, 2 = ă, 3 = ê là keyboard Việt Nam.
Win2kLang5.gif
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

à đúng rồi ̉̉, cảm ơn anh :D
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Lúc nào poz bài trên HAO mà dùng Unikey 4 NT là em lại phải tắt nó đi, vì hình như IE 6 trở về trước đọc font của Unikey 4 NT lỗi hết cả dấu.:| Mà tắt cái đó đi lại vướng vào keyboard VN của windows.@-) Lại tắt nó đi lần nữa nên càng rắc rối.@-)
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Bỏ VN keyboard layout

(hoặc)

Tắt AVIM, lần sau vào nó sẽ tự động nhớ lựa chọn.
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Xin choo hoỏir hieeeenj twwoowwngj mìnhf đdaang gaawwpj laaf hieen tuoong gìf?

Xin cho hoi hien tuong tren la` do lam` sao?

Minh` dung` unikey, moi' lan` dau` bi. Mot so' forum bi, mot so' khong.

Xin bổ xung thêm là hiện tượng trên chỉ xẩy ra khi mình dùng IE7, dùng FireFox thì vô tư.
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Nếu đã biết là tại Unikey thì cứ tắt Unikey đi là xong.

Mà con bé/chị/em/bạn nào trong ava của bác trông ngon phết nhờ.
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Bó tay ông anh :)) vẫn chứng nào tật nấy b-)
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Bó tay ông anh vẫn chứng nào tật nấy
Con bé nào trong ava của em trông cũng ngon phết nhờ.
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Ah con bé đấy ý ah, nó hỏi anh là hè này có về VN ko thì rủ đi uống cafe đấy :)) :p
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Thế thì hè nếu về được VN anh sẽ liên lạc với em. b-)
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Cái này không có vấn đề gì. Bởi vì bên trong file nguồn họ vẫn để nguyên dòng thông báo bản quyền ở đầu file. Mặc dù đổi tên file thành viettyping.js làm nhiều người tưởng là họ đang dùng VietTyping trong khi đang dùng AVIM. Mà cái này xếp vào hàng honest mistakes được vì họ thấy nó dùng để gõ được tiếng Việt thì sửa tên thành VietTyping thôi chứ ko có chủ ý. Có thể bỏ qua được.
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Lỗi mới phát hiện: Sử dụng Internet Explorer, AVIM bị xung đột với code của GoogleAdsense, trong khi HIM 14-10-2005 (chứ không phải HIM 27.11.2006, hôm đó báo nhầm phiên bản HIM) không bị. Demo: http://mangvn.org/nukeviet/nv2/index.php
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Đã test trên site http://mangvn.org/nukeviet/nv2/index.php, không bị lỗi (AVIM 20061205). Hoạt động tốt.

Nếu nói AVIM bị lỗi với Google Adsense, ngoại trừ bản 20061127 tức là có bao gồm cả AVIM 20070119. Mà giữa 2 bản 20061127 và bản 20070119 hầu như không hề có thay đổi. Chỉ có duy nhất xóa đi UYU trong danh sách không phải tiếng Việt. Nếu AVIM 20061127 hoạt động tốt thì AVIM 20070119 cũng phải hoạt động tốt.
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

cái này hình như mới làm forum hay được au đó cho bản forum mà trong phần template đã mặc định sẳn tên bộ gõ là viettyping nên người ta rename nó qua viettyping mopeis xàu được ấy mà :D nên thông cảm!
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

To Hiếu
Hôm đó mình nhầm ngày của phiên bản HIM, đúng ra phải là:
Sử dụng Internet Explorer, AVIM bị xung đột với code của GoogleAdsense, trong khi HIM 14-10-2005 không bị.


http://mangvn.org/nukeviet/nv2/
Bạn xem kỹ lại đi, khi gõ tiếng Việt thì vẫn gõ được nhưng thanh trạng thái của trình duyệt báo có lỗi JavaScript đó. (nhớ xem bằng Internet Explorer 6 nhé)

Code HIM 14-10-2005
Mã:
/*
 *  H.I.M JavaScript Vietnamese Input Method Source File dated 14-10-2005
 *
 *	Copyright (C) 2004 Hieu Tran Dang <lt2hieu2004 (at) sf (dot) net>
 *	Website:	http://hieu.acunett.com
 *				http://rhos.sf.net
 *
 *	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.
*/

var notV="" //Put the ID of the field you DON'T want to let users type Vietnamese in, multiple fields allowed, separated by a comma (,)
var fID="vB_Editor_001_iframe" //Put the ID of the iframe you want to let users type Vietnamese in
var method=0 //Default input method, 0=AUTO, 1=TELEX, 2=VNI, 3=VIQR
var on_off=1 //Start H.I.M on
var dockspell=1 //Start H.I.M with spell checking on
var dauCu=1 //Start H.I.M with old way of marking accent (o`a, o`e, u`y)
var useCookie=1 //Set this to 0 to NOT use cookies
var radioID=new Array("him_auto","him_telex","him_vni","him_viqr","him_off","him_ckspell","him_daucu")
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,iwindow,frame,is_opera=false,D2
var ver=0,support=true,changed=false,uni,uni2,g,h,SFJRX,DAWEO,Z,AEO,moc,trang,kl=0,tw5,range
var 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
var english=fcc(272)+fcc(194)+fcc(258)+fcc(416)+fcc(431)+fcc(202)+fcc(212),ds1=new Array('d','D'),db1=new Array(273,272)
var os1=new Array('o','O',417,416,243,211,242,210,7885,7884,7887,7886,245,213,7898,7900,7906,7902,7904)
var ob1=new Array(244,212,244,212,7889,7888,7891,7890,7897,7896,7893,7892,7895,7894,7888,7890,7896,7892,7894)
var mocs1=new Array('o','O',244,212,'u','U',243,211,242,210,7885,7884,7887,7886,245,213,250,218,249,217,7909,7908,7911,7910,361,360,7888,7890,7896,7892,7894)
var mocb1=new Array(417,416,417,416,432,431,7899,7898,7901,7900,7907,7906,7903,7902,7905,7904,7913,7912,7915,7914,7921,7920,7917,7916,7919,7918,7898,7900,7906,7902,7904)
var trangs1=new Array('a','A',226,194,225,193,224,192,7841,7840,7843,7842,227,195,7844,7846,7852,7848,7850)
var trangb1=new Array(259,258,259,258,7855,7854,7857,7856,7863,7862,7859,7858,7861,7860,7854,7856,7862,7858,7860)
var as1=new Array('a','A',259,258,225,193,224,192,7841,7840,7843,7842,227,195,7854,7856,7862,7858,7860,7870,7872,7878,7874,7876)
var ab1=new Array(226,194,226,194,7845,7844,7847,7846,7853,7852,7849,7848,7851,7850,7844,7846,7852,7848,7850,201,200,7864,7866,7868)
var es1=new Array('e','E',233,201,232,200,7865,7864,7867,7866,7869,7868),eb1=new Array(234,202,7871,7870,7873,7872,7879,7878,7875,7874,7877,7876)

function notWord(w) {
	var str="\ \r\n#,\\;.:-_()<>+-*/=?!\"$%{}[]\'~|^\@\&\t"+fcc(160)
	return (str.indexOf(w)>=0)
}
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
	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^+(" }
	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(key.toUpperCase())>=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=""
	if (((c==417)||(c==416))&&(w.substr(w.length-pos-1,1).toUpperCase()=='U')&&(pos!=1)&&(w.substr(w.length-pos-2,1).toUpperCase()!='Q')) {
		if (w.substr(w.length-pos-1,1)=='u') r=fcc(432)
		else r=fcc(431)
	}
	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; r=sf; pC=w.substr(w.length-pos,1)
			for(g=0; g<r.length; g++) {
				if(isNaN(r[g])) var cmp=pC
				else var cmp=pC.charCodeAt(0)
				if(cmp==r[g]) {
					if(!isNaN(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=k.toUpperCase(),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==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<english.length;h++) {
			sf[sf.length]=english.toLowerCase().charCodeAt(h)
			sf[sf.length]=english.charCodeAt(h)
		}
		for(h=0;h<5;h++) for(g=0;g<skey.length;g++) by[by.length]=skey[g]
		for(h=0;h<t.length;h++) by[by.length]=t[h]
		got=true
	}
	else for(h=0;h<a.length;h++) if(a[h]==uk) { got=true; by=by.concat(bya[h]); sf=sf.concat(sfa[h]) }
	if(!got) return normC(w,k,i)
	return DAWEOZ(k,w,by,sf,i,uk)
}
function DAWEOZ(k,w,by,sf,i,uk) { if((DAWEO.indexOf(uk)>=0)||(Z.indexOf(uk)>=0)) return tr(k,w,by,sf,i) }
function normC(w,k,i) {
	var uk=k.toUpperCase(),u=repSign(null),fS,c,j,space=(k.charCodeAt(0)==32)?true:false
	if((oc.data)&&(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) {
					if(!changed) {
						if(!oc.data) {
							var sp=oc.selectionStart,sst=oc.scrollTop
							oc.value=oc.value.substr(0,oc.selectionStart)+k+oc.value.substr(oc.selectionEnd); changed=true
							oc.setSelectionRange(sp+k.length,sp+k.length); oc.scrollTop=sst
						} else { oc.insertData(oc.pos,k); range.setEnd(oc,oc.pos+1); oc.pos++; changed=true }
					}
					if(!ckspell(w,fS)) {
						replaceChar(oc,i-j,c)
						if(!oc.data) {
							var pos=oc.selectionStart
							if(space) pos-=1
							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
	var check=true,noM="UE,UYE,IU,EU,UY".split(','),noMT="AY,AU".split(','),noT="UA",t=-1,notV2="IAO"
	var uw=w.toUpperCase(),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=k.toUpperCase(),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(g=0;g<sConsonant.length;g++) if(uw.substr(uw.length-sConsonant[g].length,sConsonant[g].length)==sConsonant[g]) return true
	for(g=0;g<uw.length;g++) {
		if("FJZW1234567890".indexOf(uw.substr(g,1))>=0) return true
		for(h=0;h<notViet.length;h++) {
			if(uw2.substr(g,notViet[h].length)==notViet[h]) {
				for(z=0;z<exc.length;z++) if(uw2.indexOf(exc[z])>=0) next=false
				if((next)&&((gi.indexOf(notViet[h])<0)||(g<=0)||(uw2.substr(g-1,1)!='G'))) return true
			}
		}
	}
	for(h=0;h<vDConsonant.length;h++) if(tw.indexOf(vDConsonant[h])==0){tw=tw.substr(vDConsonant[h].length);update=true;t=h;break}
	if(!update) for(h=0;h<vSConsonant.length;h++) if(tw.indexOf(vSConsonant[h])==0){tw=tw.substr(1);break}
	update=false;twE=tw
	for(h=0;h<vDConsonantE.length;h++) {
		if(tw.substr(tw.length-vDConsonantE[h].length)==vDConsonantE[h]) {
			tw=tw.substr(0,tw.length-vDConsonantE[h].length)
			if(h==2){
				for(z=0;z<noNHE.length;z++) if(tw==noNHE[z]) return true
				if((uk==trang)&&((tw=="OA")||(tw=="A"))) return true
			}
			update=true;break
		}
	}
	if(!update) for(h=0;h<vSConsonantE.length;h++) if(tw.substr(tw.length-1)==vSConsonantE[h]){tw=tw.substr(0,tw.length-1);break}
	if(tw) {
		for(g=0;g<vDConsonant.length;g++) {
			for(h=0;h<tw.length;h++) { if(tw.substr(h,vDConsonant[g].length)==vDConsonant[g]) return true }
		}
		for(g=0;g<vSConsonant.length;g++) { if(tw.indexOf(vSConsonant[g])>=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;z<noE.length;z++) if(uw2==noE[z]) return true
	if((tw!=uw)&&(uw2==noBE)) return true
	if(uk!=moc) for(z=0;z<oMoc.length;z++) if(tw==oMoc[z]) return true
	if((uw2.indexOf('UYE')>0)&&(uk=='E')) check=false
	if((them.indexOf(uk)>=0)&&(check)) {
		for(g=0;g<noAOEW.length;g++) if(uw2.indexOf(noAOEW[g])>=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(g=0;g<noM.length;g++) if(uw2==noM[g]) return true
		if((uk==moc)||(uk==trang)) for(g=0;g<noMT.length;g++) if(uw2==noMT[g]) return true
	}
	tw5=tw
	if((uw2.charCodeAt(0)==272)||(uw2.charCodeAt(0)==273)) { if(uw2.length>4) return true }
	else if(uw2.length>3) return true
	return false
}
function DAWEOF(cc,k) {
	var ret=new Array();ret[0]=g
	if(k==A) {
		if(cc==226) ret[1]='a'
		else if(cc==194) ret[1]='A'
	}
	if(k==moc) {
		if(cc==417) ret[1]='o'
		else if(cc==416) ret[1]='O'
		else if(cc==432) ret[1]='u'
		else if(cc==431) ret[1]='U'
	}
	if(k==trang) {
		if(cc==259) ret[1]='a'
		else if(cc==258) ret[1]='A'
	}
	if(k==E) {
		if(cc==234) ret[1]='e'
		else if(cc==202) ret[1]='E'
	}
	if(k==O) {
		if(cc==244) ret[1]='o'
		else if(cc==212) ret[1]='O'
	}
	if(ret[1]) return ret
	else return false
}
function findC(w,k,sf) {
	if((method==3)&&(w.substr(w.length-1,1)=="\\")) return new Array(1,k.charCodeAt(0))
	if(spellerr(w,k)) return false
	var str="",res,cc="",pc="",tE="",vowA=new Array(),s=fcc(194)+fcc(258)+fcc(202)+fcc(212)+fcc(416)+fcc(431),c=0,dn=false
	for(g=0;g<sf.length;g++) {
		if(isNaN(sf[g])) str+=sf[g]
		else str+=fcc(sf[g])
	}
	var uk=k.toUpperCase(),i=w.length,uni_array=repSign(k),w2=unV2(w.toUpperCase()),dont=new Array(fcc(431)+"A",fcc(431)+"U")
	if (DAWEO.indexOf(uk)>=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=w.substr(w.length-g-1,1).toUpperCase()
				uc=cc.toUpperCase()
				for(h=0; h<dont.length; h++) if((tw5==dont[h])&&(tw5==unV(pc+uc))) dn=true
				if(dn) { dn=false; continue }
				if(str.indexOf(uc)>=0) {
					if(((uk==moc)&&(uc=='U')&&(w.substr(w.length-g+1,1).toUpperCase()=='A'))||((uk==trang)&&(uc=='A')&&(pc=='U'))) {
						ccc=w.substr(w.length-g-2,1).toUpperCase()
						if(ccc!="Q") res=g+1
						else if(uk==trang) res=g
						else if(moc!=trang) return false
					} else res=g
					break
				} else if(english.indexOf(uc)>=0) {
					charCode=cc.charCodeAt(0)
					if(uk==D) {
						if(charCode==273) res=new Array(g,'d')
						else if(charCode==272) res=new Array(g,'D')
					} else res=DAWEOF(charCode,uk)
					if(res) break
				}
			}
		}
	}
	if((uk!=Z)&&(DAWEO.indexOf(uk)<0)) { var tEC=retKC(uk); for (g=0;g<tEC.length;g++) tE+=fcc(tEC[g]) }
	for(g=1;g<=w.length;g++) {
		if(DAWEO.indexOf(uk)<0) {
			cc=w.substr(w.length-g,1).toUpperCase()
			pc=w.substr(w.length-g-1,1).toUpperCase()
			if(str.indexOf(cc)>=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<uni_array.length;h++) if(uni_array[h]==w.charCodeAt(w.length-g)) return new Array(g,tEC[h%24])
				for(h=0;h<tEC.length;h++) if(tEC[h]==w.charCodeAt(w.length-g)) return new Array(g,fcc(skey[h]))
			}
		} else if((uk!=Z)&&(!res)) {
			for(h=0;h<uni_array.length;h++) {
				if(uni_array[h]==w.charCodeAt(w.length-g)) {
					var nk, kc=skey[h%24]; sf=getSF()
					if(h<=23) nk=S
					else if(h<=47) nk=F
					else if(h<=71) nk=J
					else if(h<=95) nk=R
					else nk=X
					w=w.substr(0,w.length-g)+fcc(kc)+w.substr(w.length-g+1)+k
					return findC(w,nk,sf)
				}
			}
		}
	}
	if(DAWEO.indexOf(uk)<0) {
		for(g=1;g<=w.length;g++) {
			if((uk!=Z)&&(s.indexOf(w.substr(w.length-g,1).toUpperCase())>=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=w.substr(w.length-v,2).toUpperCase()
		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<dc.length; g++) {
				if(dc[g].indexOf(w.substr(w.length-h-dc[g].length+1,dc[g].length).toUpperCase())>=0) {
					c2++; fdconsonant=true
					if(dc[g]!='NGH') h++
					else h+=2
				}
			}
			if(!fdconsonant) {
				if(sc.indexOf(w.substr(w.length-h,1).toUpperCase())>=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)
	for(g=1; g<=w.length; g++) {
		for(h=0; h<u.length; h++) {
			if(u[h]==w.charCodeAt(w.length-g)) {
				w=w.substr(0,w.length-g)+fcc(skey[h%24])+w.substr(w.length-g+1)
			}
		}
	}
	return w
}
function unV2(w) {
	for(g=1; g<=w.length; g++) {
		for(h=0; h<skey.length; h++) {
			if(skey[h]==w.charCodeAt(w.length-g)) {
				w=w.substr(0,w.length-g)+skey2[h]+w.substr(w.length-g+1)
			}
		}
	}
	return w
}
function repSign(k) {
	var t=new Array(),u=new Array()
	for (g=0; g<5; g++) {
		if ((k==null) || (SFJRX.substr(g,1)!=k.toUpperCase())) {
			t=retKC(SFJRX.substr(g,1))
			for (h=0; h<t.length; h++) u[u.length]=t[h]
		}
	}
	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(k.toUpperCase()),uC,lC,c=w.charCodeAt(w.length-pos)
	for (g=0; g<skey.length; g++) if (skey[g]==c) {
		if (g<12) { lC=g; uC=g+12 }
		else { lC=g-12; uC=g }
		if (fcc(c)!=fcc(c).toUpperCase()) return u[lC]
		return u[uC]
	}
}
function replaceChar(o,pos,c) {
	if(!isNaN(c)) { var replaceBy=fcc(c); changed=true }
	else var replaceBy=c
	if(!o.data) {
		var savePos=o.selectionStart,sst=o.scrollTop
		if (((c==417)||(c==416))&&(o.value.substr(pos-1,1).toUpperCase()=='U')&&(pos<savePos-1)&&(o.value.substr(pos-2,1).toUpperCase()!='Q')) {
			if (o.value.substr(pos-1,1)=='u') var r=fcc(432)
			else var r=fcc(431)
		}
		o.setSelectionRange(pos,pos+1)
		o.value=o.value.substr(0,o.selectionStart)+replaceBy+o.value.substr(o.selectionEnd)
		if(r) {
			o.setSelectionRange(pos-1,pos)
			o.value=o.value.substr(0,o.selectionStart)+r+o.value.substr(o.selectionEnd)
		}
		o.setSelectionRange(savePos,savePos); o.scrollTop=sst
	} else {
		if (((c==417)||(c==416))&&(o.data.substr(pos-1,1).toUpperCase()=='U')&&(pos<o.pos-1)) {
			if (o.data.substr(pos-1,1)=='u') var r=fcc(432)
			else var r=fcc(431)
		}
		o.deleteData(pos,1); o.insertData(pos,replaceBy)
		if(r) { o.deleteData(pos-1,1); o.insertData(pos-1,r) }
	}
}
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==0) str+='Tự động'
	str+=" [F9] | Chính tả: "
	str+=(dockspell==0)?"Tắt":"Bật"
	str+=" [F8] | Bỏ dấu: "
	str+=(dauCu==1)?"Cũ":"Mới"
	str+=" [F7] | Bật/Tắt [F12] - H.I.M © 2006"
	window.status=str
}
function updateInfo() { setCookie(); if(support) statusMessage() }
function setMethod(m) {
	if(m==-1) { on_off=0; if(getEL(radioID[4])) getEL(radioID[4]).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[6])) getEL(radioID[6]).checked=box
	} else dauCu=(box.checked)?1:0
	updateInfo()
}
function setSpell(box) {
	if(typeof(box)=="number") { 
		spellerr=(box==1)?ckspell:nospell
		if(getEL(radioID[5])) getEL(radioID[5]).checked=box
	}
	else {
		if(box.checked) { spellerr=ckspell; dockspell=1 }
		else { spellerr=nospell; dockspell=0 }
	}
	updateInfo()
}
function onKeyDown(e) {
	if (e=='iframe') 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==3)?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() {
	var sel=iwindow.getSelection(),range=null
	iwindow.focus()
	range=sel?sel.getRangeAt(0):document.createRange()
	return range
}
function ifMoz(e) {
	if((e.ctrlKey)||((e.altKey)&&(code!=92)&&(code!=126))) return
	range=ifInit()
	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(obj) {
	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==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<ckA.length;i++) {
		p=ckA[i].split('='); p[0]=p[0].replace(/^\s+/g,""); p[1]=parseInt(p[1])
		if(p[0]=='HIM_on_off') on_off=p[1]
		else if(p[0]=='HIM_method') method=p[1]
		else if(p[0]=='HIM_ckspell') {
			if(p[1]==0) { dockspell=0; spellerr=nospell }
			else { dockspell=1; spellerr=ckspell }
		} else if(p[0]=='HIM_daucu') dauCu=parseInt(p[1])
	}
}
if(!is_ie) {
	if(agt.indexOf("opera")<0) {
		ver=agt.substr(agt.indexOf("rv:")+3)
		ver=parseFloat(ver.substr(0,ver.indexOf(" ")))
		if(agt.indexOf("mozilla")<0) ver=0
	} else {
		operaV=agt.split(" ")
		if(parseInt(operaV[operaV.length-1])>=8) is_opera=true
	}
}
if((is_ie)||(ver>=1.3)||(is_opera)) {
	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')&&(el.id!=fID))||checkCode(code)) return
	sk=fcc(code); va=notV.split(","); for(i=0;i<va.length;i++) if((el.id==va[i])&&(va[i].length>0)) return
	if(!is_ie) start(el,e)
	else start(el,sk)
	if(changed) { changed=false; return false }
}
if(typeof(fID)!='undefined') {
	if(is_ie) {
		frame=document.frames[fID]
		if((typeof(frame)!='undefined')&&(frame.document)) {
			var doc=frame.document
			doc.designMode="On"
			doc.onkeydown=function() { onKeyDown('iframe') }
			doc.onkeypress=function() { FKeyPress(frame); if(changed) { changed=false; return false } }
		}
	} else {
		if(getEL(fID)) {
			iwindow=getEL(fID).contentWindow
			var iframedit=iwindow.document
			iframedit.designMode="On"
			iframedit.addEventListener("keypress",ifMoz,true)
			iframedit.addEventListener("keydown",onKeyDown,true)
		}
	}
}
CODE avim 05-12-2006
Mã:
/*
 *  AVIM JavaScript Vietnamese Input Method Source File dated 05-12-2006
 *
 *	Copyright (C) 2004 Hieu Tran Dang <lt2hieu2004 (at) users (dot) sf (dot) net>
 *	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=1 //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<english.length;h++) {
			sf[sf.length]=lowen.charCodeAt(h)
			sf[sf.length]=english.charCodeAt(h)
		}
		for(h=0;h<5;h++) for(g=0;g<skey.length;g++) by[by.length]=skey[g]
		for(h=0;h<t.length;h++) by[by.length]=t[h]
		got=true
	}
	else for(h=0;h<a.length;h++) if(a[h]==uk) { got=true; by=by.concat(bya[h]); sf=sf.concat(sfa[h]) }
	if(uk==moc) whit=true;
	if(!got) return normC(w,k,i)
	return DAWEOZ(k,w,by,sf,i,uk)
}
function DAWEOZ(k,w,by,sf,i,uk) { if((DAWEO.indexOf(uk)>=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<sConsonant.length;a++) if(uw.substr(uw.length-sConsonant[a].length,sConsonant[a].length)==sConsonant[a]) return true
	for(a=0;a<uw.length;a++) {
		if("FJZW1234567890".indexOf(uw.substr(a,1))>=0) return true
		for(b=0;b<notViet.length;b++) {
			if(uw2.substr(a,notViet[b].length)==notViet[b]) {
				for(z=0;z<exc.length;z++) if(uw2.indexOf(exc[z])>=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<noNHE.length;z++) if(tw==noNHE[z]) return true
				if((uk==trang)&&((tw=="OA")||(tw=="A"))) return true
			}
			update=true;break
		}
	}
	if(!update) for(b=0;b<vSConsonantE.length;b++) if(tw.substr(tw.length-1)==vSConsonantE[b]){tw=tw.substr(0,tw.length-1);break}
	if(tw) {
		for(a=0;a<vDConsonant.length;a++) {
			for(b=0;b<tw.length;b++) { if(tw.substr(b,vDConsonant[a].length)==vDConsonant[a]) return true }
		}
		for(a=0;a<vSConsonant.length;a++) { if(tw.indexOf(vSConsonant[a])>=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;z<noE.length;z++) if(uw2==noE[z]) return true
	if((tw!=uw)&&(uw2==noBE)) return true
	if(uk!=moc) for(z=0;z<oMoc.length;z++) if(tw==oMoc[z]) return true
	if((uw2.indexOf('UYE')>0)&&(uk=='E')) check=false
	if((them.indexOf(uk)>=0)&&(check)) {
		for(a=0;a<noAOEW.length;a++) if(uw2.indexOf(noAOEW[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;a<noM.length;a++) if(uw2==noM[a]) return true
		if((uk==moc)||(uk==trang)) for(a=0;a<noMT.length;a++) if(uw2==noMT[a]) return true
	}
	tw5=tw
	if((uw2.charCodeAt(0)==272)||(uw2.charCodeAt(0)==273)) { if(uw2.length>4) 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<sf.length;g++) {
		if(nan(sf[g])) str+=sf[g]
		else str+=fcc(sf[g])
	}
	var uk=up(k),i=w.length,uni_array=repSign(k),w2=up(unV2(unV(w))),dont="ƯA,ƯU".split(',')
	if (DAWEO.indexOf(uk)>=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<dont.length;h++) if((tw5==dont[h])&&(tw5==unV(pc+uc))) dn=true
				if(dn) { dn=false; continue }
				if(str.indexOf(uc)>=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<tEC.length;g++) tE+=fcc(tEC[g]) }
	for(g=1;g<=w.length;g++) {
		if(DAWEO.indexOf(uk)<0) {
			cc=up(w.substr(w.length-g,1))
			pc=up(w.substr(w.length-g-1,1))
			if(str.indexOf(cc)>=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<uni_array.length;h++) if(uni_array[h]==w.charCodeAt(w.length-g)) {
					if(spellerr(w,k)) return false
					return new Array(g,tEC[h%24])
				}
				for(h=0;h<tEC.length;h++) if(tEC[h]==w.charCodeAt(w.length-g)) return new Array(g,fcc(skey[h]))
			}
		}
	}
	if((uk!=Z)&&(typeof(res)!='object')) if(spellerr(w,k)) return false
	if(DAWEO.indexOf(uk)<0) {
		for(g=1;g<=w.length;g++) {
			if((uk!=Z)&&(s.indexOf(w.substr(w.length-g,1))>=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<dc.length;g++) {
				if(up(w.substr(w.length-h-dc[g].length+1,dc[g].length)).indexOf(dc[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 20061205"
	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<ckA.length;i++) {
		p=ckA[i].split('='); p[0]=p[0].replace(/^\s+/g,""); p[1]=parseInt(p[1])
		if(p[0]=='HIM_on_off') on_off=p[1]
		else if(p[0]=='HIM_method') method=p[1]
		else if(p[0]=='HIM_ckspell') {
			if(p[1]==0) { dockspell=0; spellerr=nospell }
			else { dockspell=1; spellerr=ckspell }
		} else if(p[0]=='HIM_daucu') dauCu=parseInt(p[1])
	}
}
if(!is_ie) {
	if(agt.indexOf("opera")>=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<w.length;z++) {
			io=str.indexOf(w.substr(z,1))
			if(io>=0) w=w.substr(0,z)+rep.substr(io,1)+w.substr(z+1)
		}
	}
	return w
}
function findIgnore(el) {
	for(i=0;i<va.length;i++) if((el.id==va[i])&&(va[i].length>0)) 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() }
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Download bản mới nhất.

Mã:
Tìm dòng: if(findIgnore(fID[g])) return;frame=document.frames[fID[g].id];if((frame.document)&&(frame.event)) return frame

Sửa thành: if(findIgnore(fID[g])) return;frame=document.frames[fID[g].id]

Thêm vào ngay dưới: if((typeof(frame)!='undefined')&&(frame.document)&&(frame.event)) return frame

Tìm dòng: if(findIgnore(fID[g])) return;frame=document.frames[fID[g].id];doc=frame.document

Sửa thành: if(findIgnore(fID[g])) return;frame=document.frames[fID[g].id]

Thêm vào ngay dưới: if ((typeof(frame)!='undefined')&&(frame.document)) doc=frame.document
Chưa test vì ko có IE, thử sửa như trên xem sao. Nếu sau khi sửa không còn lỗi thì đấy là do lỗi của IE chứ ko phải của AVIM, cũng ko phải lỗi của Google AdSense.

Đọc thêm phần chú ý ở bài này: http://www.hn-ams.org/forum/showpost.php?p=763934&postcount=277. Nhớ dùng 1 editor hỗ trợ Unicode tốt (trên Win có thể dùng EmEditor).
 
Chỉnh sửa lần cuối:
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Sửa xong như Hiếu nói thì bộ gõ không hoạt động. Thanh status của Internet Explorer vẫn báo lỗi nhưng lần này là Syntax error chứ không còn lỗi frame như cũ nữa!

Cái chú ý ở http://www.hn-ams.org/forum/showpost.php?p=763934&postcount=277 mình chưa đọc nên dạo trước hay dùng EmEditor để bỏ cái BOM của Hiếu đi :D
 
Re: [20051203] AVIM - Bộ gõ tiếng Việt tự động dành cho Web

Xem lại & làm đúng hướng dẫn. Lần trước ko để trong CODE tag nó tự động format lại.
 
Back
Bên trên