﻿///Bước1:Sao, dán, và cất(save)dưới tên CViet.js (dạng UTF-8) vô trong: ./mvVBB/
//01: update error detection
/* logo: CViet 8/20/03: mViet10 by SPham [mviet@socal.rr.com]
* Copyright (c) 1999, 2000-2005 MDSS. Inc All Rights Reserved.
* This code is free on noncommercial.
* This copyright notice must remain intact within this code.
*/	 

var noMViet='email|BoDau|',isR=false;lW='',aD='',noL=" ~!@#$%^&*()_+`123456789-={}|[]:|\";'<>?,.&\r\n/ "

var MVhnVal=31,iHN=new Array(1,1,1,1,1),hnNew=0,qk=1
var BoDauMV='\'1s|`2f|?3r|~4x|.5j|^6aeo|+*7=w|(8w|d9-|',sep=" ,;:\n\r>-"
var MVOff=false,eT=0,i,j,s,S,S2,S3,u,v,tI,tO,vt=1,currElm=null,mvHTML=false,key,nK,isA,kL,msg
var Fonoff=123,Ftcc=121;var f=document.all?true:false
var D0='dz|f|mv|',D1='ch|c|b|d|đ|gh|gi|g|h|kh|k|l|m|ngh|ng|nh|n|ph|qu|r|s|th|tr|t|v|x',D2='|w|p'
var D=(D0+D1+D2).split('|')
var Ca="|nh|ch|",Cb="ng|c|",Cc="m|n|p|t|",Cd="o|u|i|y|a";
var C=(Ca+Cb+Cc+Cd).split('|')
	//12C
var A='oă|oắ|oằ|oẳ|oẵ|oặ*oa|oá|oà|oả|oã|oạ*ưa|ứa|ừa|ửa|ữa|ựa*uâ|uấ|uầ|uẩ|uẫ|uậ*ua|úa|ùa|ủa|ũa|ụa*oe|oé|oè|oẻ|oẽ|oẹ*uyê|uyế|uyề|uyể|uyễ|uyệ*uye|uyé|uyè|uyẻ|uyẽ|uyẹ*uy|uý|uỳ|uỷ|uỹ|uỵ*uê|uế|uề|uể|uễ|uệ*ue|ué|uè|uẻ|uẽ|uẹ*iê|iế|iề|iể|iễ|iệ*ie|ié|iè|iẻ|iẽ|iẹ*yê|yế|yề|yể|yễ|yệ*ye|yé|yè|yẻ|yẽ|yẹ*ươ|ướ|ườ|ưở|ưỡ|ượ*ưo|ứo|ừo|ửo|ữo|ựo*uơ|uớ|uờ|uở|uỡ|uợ*uô|uố|uồ|uổ|uỗ|uộ*uo|uó|uò|uỏ|uõ|uọ*ă|ắ|ằ|ẳ|ẵ|ặ*â|ấ|ầ|ẩ|ẫ|ậ*a|á|à|ả|ã|ạ*ư|ứ|ừ|ử|ữ|ự*u|ú|ù|ủ|ũ|ụ*ê|ế|ề|ể|ễ|ệ*e|é|è|ẻ|ẽ|ẹ*oo|oó|oò|oỏ|oõ|oọ*ơ|ớ|ờ|ở|ỡ|ợ*ô|ố|ồ|ổ|ỗ|ộ*o|ó|ò|ỏ|õ|ọ*i|í|ì|ỉ|ĩ|ị*y|ý|ỳ|ỷ|ỹ|ỵ*ơ|ớ|ờ|ở|ỡ|ợ'.split('*');
for(i=0;i<A.length; i++) A[i]=A[i].split('|');

function set(){if(!isR){tO=lW;isR=true
var ln=lW.length
Wl=lW.toLowerCase()
if(Wl.charAt(ln-1)==kL && Wl.charAt(ln-2)==kL)eT=0
}}

var oB= document.getElementsByTagName('textarea'); evB(oB,0)
oB= document.getElementsByTagName('input'); evB(oB,1)
	
function evB(oB,mtype){if (mtype==0) for( var i=0; i<oB.length ;i++) evBX(oB[i]);
else for( var i=0; i<oB.length ;i++) if((noMViet.indexOf(oB[i].name)==-1||!oB[i].name) && oB[i].type=='text') evBX(oB[i])}

function evBX(X) {if(f){X.onclick=mvCK;X.onkeydown=mvKD; X.onkeypress=mvKP}else{X.addEventListener('keydown', mvKD, false);X.addEventListener('keypress', mvKP, false);}}
function mvCK(e){elm= f?event.srcElement:e.target;key=f?event.keyCode:(e&&e.which)?e.which:0;V(elm)}

function mvKD(e){mvCK(e)
nK=f?event.keyCode:(e&&e.which)?e.which:0;
//if(nK==17)qk=0
isA=(nK>64 && nK<91)||(nK>96 && nK < 123)
		
if(key==Fonoff)MVietOnOffButton()
else if(key==Ftcc && document.getElementById('showpopup')){
if (document.getElementById('mvframe')){if(f)showpopup.innerHTML='';else document.getElementById('showpopup').innerHTML=''; }
else {showbox();if(f)showpopup.innerHTML=Kh1+iFr1+mvCC+iFr2+Kh2;else document.getElementById('showpopup').innerHTML=Kh1+iFr1+mvCC+iFr2+Kh2;}
elm.focus()}}

function V(x){ready=x.type=='textarea'||x.type=='text';if (ready) {currElm = x;mvHTML=false}}
/*
function mvKP(e){
if(MVOff) return;
key=f?String.fromCharCode(event.keyCode):String.fromCharCode(e.which);
f?pL(event):pLZ(e)}
*/
function mvKP(e){
if(MVOff)return 
else {
key=f?String.fromCharCode(event.keyCode):String.fromCharCode(e.which)
kL=key.toLowerCase()
if(BoDauMV.indexOf(kL)==-1 && noL.indexOf(kL)>-1) {lW=""; isR=false; return} 
f?pL(event):pLZ(e)
}}
/*
var B3=new Array('\'|`|?|~|.|^|+*|(|d|', 's|f|r|x|j|aeo|w|w|d|', '1|2|3|4|5|6|7|8|9|','\'1|`2|?/3|~4|.5j|^6|+*=87|89(|-d|');
var cD=new Array(0,0,0,0),ds=false,mct=5
function sD(kL){if(!ds) {for(i=0;i<4;i++) if(B3[i].indexOf(kL)>-1)cD[i]++
for(i=0;i<4;i++)if(cD[i]>mct){BoDauMV=B3[i]; setMV(BoDauMV,'BoDau') 
if (document.getElementById('showpopup')){showbox();if(f)showpopup.innerHTML=Kh1+iFr1+mvCC+iFr2+Kh2;else document.getElementById('showpopup').innerHTML=Kh1+iFr1+mvCC+iFr2+Kh2}else if (document.getElementById('showBD'))DisplayTCC()
ds=true;break}}}
*/


function fD(t,k){
var iD=-1,nD=BoDauMV.indexOf(k); 
if(nD>-1){
var iT=0;for(i=0;i<12;i++)if(BoDauMV.indexOf(k,iT)>-1)iT=BoDauMV.indexOf('|',iT+1);else{iD=i;break}}
return iD}

function aK(){if(!isR) lW+=key}
function VB9(t,key){
tO="";kL=key.toLowerCase()
var iD=fD(t,kL), tL=t.toLowerCase(),tLn=t.length
if(iD==-1) {if(kL=="0" && BoDauMV.indexOf("0")==-1) iD=7; else if(kL=="w" && BoDauMV.indexOf("w")==-1) iD=8}

if(tLn>0){
 var n=0, kLi='aeoud'.indexOf(kL)  
 if(kLi>-1) { n=5; iD=-1} else if(iD>-1&&iD<12)n=3;else if(isA) n=4  //&&BoDauMV.indexOf(kL)==-1
 if (n==3 || n==5){
  s=Parsing(tL,iD,kL);
  if ( ck(s,n,iD,kL)==0){
     tO=ModifyWord(s,n,kL,iD); 
     if(tO!=null){tO=match(t,tO);aK()        
     if(iHN[0]==1&& (iD==3||iD==4)) {if(document.all)hnQuick(tO, 0); else hnQuickZ(tO, 0); hnNew=0}
     }

  } else set()
 }
 if (n==4 || (n==5 && tO==null))
      {t=t+key;s=Parsing(t.toLowerCase(),iD);
        if(ck(s,4,iD,kL)==0){
        	tO=ModifyWord(s,4,'',-1);
        	if(tO!=null){tO=match(t,tO);eT=0;aK()
        	}  
        }else set()	       
      } 
}else aK()
return tO
}

//f:Parsing 12C
function Parsing(W,ord){
if(W=="gi")return "g|31,0,i||";else if(W=="gin")return "g|31,0,i|n|";else if(W=="gim")return "g|31,0,i|m|";
var L0="",L1="",L2="",xD=-1
for(i=0;i<D.length;i++)if(W.indexOf(D[i])==0){xD=i;break}
if(xD!=-1){L0=D[xD];W=W.substring(D[xD].length)}
if(W.length!=0)
if (W=='oa'&&vt==1&&ord<6&&ord>0) return L0+"|"+"30,0,o"+"|a|" 
else if(W=='uy'&&vt==1&&ord<6&&ord>0){return L0+"|"+"24,0,u"+"|y|"}	
else {u=-1;v=-1
for(i=0;i<A.length;i++){for(j=0;j<A[i].length;j++){var iT=W.indexOf(A[i][j])	
if(iT==0){u=i;v=j;if(iT>0){if(L0=="")L0=W.substring(0,iT);W=W.substring(iT)}break}}
if(u!=-1)break}if(u!=-1){var base=A[u][0];
W=W.substring(base.length);
if(base=='o'&&vt==1&&W.charAt(0)=='a' && W.length>1) {u=1;W=W.substring(1);base='oa'}
L1=u+","+v+","+base}
if(W.length!=0){xD=-1
for(i=1;i<C.length;i++)if(W.indexOf(C[i])==0){xD=i;break}if(xD!=-1){L2=W.substring(0,C[xD].length);W=W.substring(L2.length)}
}}
if (u==24&&L2=='y'&& kL=='u'){L1="8,"+v+",uy";L2=W;W=''}
return L0+"|"+L1+"|"+L2+"|"+W}

//12C
var tra="2ă|xâ|ya|1oă|xoa|"
var moc="2ưa|yua|1ư|xu|2ơ|xô|yo|4ươ|xưo|yuơ|xuô|yuo|"
//mv11	a 1:forward(eT=1) 9 f(eT=0)
var non="9ă|1â|xa|1ê|xe|1ô|xo|1uâ|xua|1yê|xye|1uyê|xuye|yuy|1uê|xue|1iê|xie|1yê|xye|7ươ|8ưo|9uơ|1uô|xuo|"
var L="|2ơ0|yo0|0ưu|xuu|1êe|xee|2ơo|xôo|xoo|2ăa|xâa|xaa|1oăa|xoaa|1uâa|xuaa|1yêe|xyee|1uyêe|xuyee|1uêe|xuee|1iêe|xiee|1ươo|xưoo|yuơo|xuôo|xuoo|"
function xoay(M,y,val,z){var iM=M.indexOf(y+val+'|') 
eT=1;if (iM>-1){var M1=M.charAt(iM-1)
 if(M1=='x'){z--;eT=0} 
 else if(M1=='y') {z=z-2;eT=0}
 else {var iz=parseInt(M1); if(iz<5)z+=iz;else {z+=10-iz;eT=0;}}
} else return -1
return z}

//f:ModifyWord 12C
function ModifyWord(s,n,value,ord){
eT=0;if(n==4)eT=1
var nW='';s=s.split('|')
if(s[1]=="" && ord!=9) {ord=-1;eT=1}
else {var c=s[1].split(','),z=parseInt(c[0]),y=c[2],c1=parseInt(c[1])}

switch(n){	
case 5: if (value=='d'){if(s[0]=='d'){s[0]='đ';eT=0;z=-2} else if(s[0]=='đ')s[0]='d'} //a0
	    else {var zz=xoay(L,y,value,z); if (zz!=-1)z=zz; else return null} break
case 3:
switch(ord){
	case 1:case 2:case 3:case 4:case 5: if(ord==c1){c[1]=0;eT=1}else c[1]=ord;break
	case 6:	/*if (n!=5 && y=='â') {z++;eT=1} else */ z=xoay(non,y,"",z);break
	case 7: z=xoay(moc,y,"",z);break
	case 8: z1=xoay(tra,y,"",z);if(z1!=z&&z1!=-1)z=z1; else z=xoay(moc,y,"",z); break
	case 9: if(s[0]=='d'){s[0]='đ';eT=0;z=-2}else if(s[0]=='đ')s[0]='d';break
}break	
}
var s2L=s[2].length
if(((s[0]=='th'&& s2L>0)||(s[0]=='h'&& s2L>1)||(s[0]!='th'&&s[0]!='h'&& s2L>0))&&(z==16||z==17)){z=15}//delay s2L>0
else if( (z==19 || z==16 || z==17) && s2L>0){z=15}
if(z>-1){c[0]=z;c[2]=A[z][0]}else if (z!=-2) eT=1//a0 & ddd

return bo(cor(s,c),c)}

function cor(s,c){
if(c&&c!=null){var z=parseInt(c[0])
if (s[0]!="" && s[1]!="" ){//&& s[3]=='' pb with moz
	if (s[0]=="ng"  && (z==26||z==31)) s[0]="ngh"
	else if (s[0]=="ngh" && (z!=26 && z!=25 && z!=31 && z!=12 && z!=11)) s[0]="ng"
	if ( s[0]=="g" ||s[0]=="gh")
	 if (s[2].length>0 || z!=31){ 
	    if (s[0]=="g" && (z==26||(z==31 && s[2].length>0 && s[2]!='n')) ) s[0]="gh" //a(22)
	    else if (s[0]=="gh" && z!=25 && z!=26 && !(z==31 && s[2].length>0 && s[2]!='n') )  s[0]="g";
	 }
	 //cuoi
	 var p=c[2], q=s[2]
	 if (("oôưuâ".indexOf(p)>-1) && q=="nh") s[2]="ng"
}}
return s}
function bo(s,c){var W=""
for(i=0;i<s.length;i++){
  if(s[i]!="")
    if(i!=1)W+=s[i];
    else{
       u=c[0];v=parseInt(c[1]); 
          if(W=="qu"&&A[u][v].charAt(0)=="u")W="q"
var X=A[u][0]
if((((W=="th"||W=="q"||W=="kh")&&s[2]=="")||(W=="h"&& (s[2]=="t"||s[2]=="n")))&& X=="ưo")W+=A[u+1][v]
else W+=A[u][v]}}
return W
}


function match( O, N ){
var r=''; var n= O.length;
if (n==0) r=N;
else if (n==1) {if (O==O.toUpperCase()) r=N.toUpperCase(); else r=N;}
else if (n!=N.length){
if (O.charAt(0)==O.toLowerCase().charAt(0)) r=N
else {if (O.charAt(1)==O.toLowerCase().charAt(1)) r=N.toUpperCase().charAt(0)+N.substring(1)
else r=N.toUpperCase();}
}else for (var i=0; i<n; i++)
if (O.charAt(i)==O.toLowerCase().charAt(i)) r += N.charAt(i);
else r += N.toUpperCase().charAt(i);
return r;
}
	
function ck(s1,n1,o1,kL){var iR=0,c=null	
var nhom=['aâă','eê','oôơ','dđ'], ix='aeod'.indexOf(kL)
s1=s1.split("|");
if(s1[1]!='') c=s1[1].split(",")
	
c4=f?s1[3].length>0:s1.length>3; 
if(c4) {iR=33;eT=1}
else if(kL=='d' && ((s1[0]!='đ'&& s1[0]!='d')||s1[1]!='')) iR=36
else if(s1[1]!='') {
if (ix>-1&& parseInt(c[1])!=0 && n1==5&& nhom[ix].indexOf(c[2].charAt(c[2].length-1))>-1 ) iR=49;  
       else if(c[2]=='o'&&s1[2]=='u') iR=37
       else if (n1==5 && s1[2].length>0)iR=35
       else { 
var p=c[2], q=s1[2],r=parseInt(c[1])//firefox
if ("|uê|uy|ua|ê|i|".indexOf('|'+p+'|')>-1 && (Ca+Cc+'u|a|').indexOf(q+'|')==-1 && q!='') iR=41  
else if ("|iê|uyê|oa|a|".indexOf('|'+p+'|')>-1 && (Ca+Cb+Cc+'u|y|i|o|').indexOf(q+'|')==-1 && q!='') iR=42
else if ("âăuôaioyeươ".indexOf(p)>-1 && "aiouy".indexOf(q)>-1 && q!='' && "|ai|ao|au|ay|âu|ây|ia|oa|oi|ua|ui|uo|uu|uy|iu|eo|eu|ơi|ưi|ươi|ươu|ưu|ôi|uôi|".indexOf('|'+p+q+'|')==-1)iR=40 //ưu|              
else if ("e".indexOf(p)>-1 && "|p|t|".indexOf("|"+q+"|")>-1 && ((r!=1 && r!=5&& r!=0) ||(o1!=1 && o1!=5&& r==0))  )iR=46  // ext etx
else if ("i".indexOf(p)>-1 && q=="ng")iR=61
}}
if(iR>0) eT=1
return iR}
