
	document.onkeyup = fnkeyup;
	
	    var iTest = 0;

	var bUnicode = true;
		
    var LC_a = 0;
    var LC_e = 1;
    var LC_i = 2;
    var LC_o = 3;
    var LC_u = 4;
    var LC_y = 5;
    var UC_A = 6;
    var UC_E = 7;
    var UC_I = 8;
    var UC_O = 9;
    var UC_U = 10;
    var UC_Y = 11;

    var gsDD_d = "&#273;";
    var gsDD_Dcap = "&#272;";
    
    var rxVn_d = new RegExp("d[dD]", "g");
    var rxVn_Dcap = new RegExp("D[dD]", "g");
    var rxVnEsc = new RegExp("\\[dD\\^\+\\(\'\`\?\~\.]", "g");

    //PATTERN_CARET ==> ^
    var rxPatternCARET = new RegExp("[aeoAEO][\\^][\'\`\?\~\.]?", "g");

    //PATTERN_PARENTHESIS ==> (
    var rxPatternPARENTHESIS = new RegExp("[aA][\(][\'\`\?\~\.]?", "g");

    //PATTERN_PLUS ==> +
    var rxPatternPLUS = new RegExp("[ouOU][\+][\'\`\?\~\.]?", "g");

    //PATTERN_VOWEL ==> aeiouy
    var rxPatternVOWEL = new RegExp("[aeiouyAEIOUY][\'\`\?\~\.]", "g");
 
    //PATTERN_Dau ==> 
    var rxPatternDau = new RegExp("&#[0-9]*;[\'\`\?\~\.]", "g");

    var garDAU =  [
    /* LC_a */		"&#226;", ["&#7845;", "&#7847;", "&#7849;", "&#7851;", "&#7853;"],
    /* LC_e */		"&#234;", ["&#7871;", "&#7873;", "&#7875;", "&#7877;", "&#7879;"],
    /* LC_o */		"&#244;", ["&#7889;", "&#7891;", "&#7893;", "&#7895;", "&#7897;"],
    /* UC_A */		"&#194;", ["&#7844;", "&#7846;", "&#7848;", "&#7850;", "&#7852;"],
    /* UC_E */		"&#202;", ["&#7870;", "&#7872;", "&#7874;", "&#7876;", "&#7878;"],
    /* UC_O */		"&#212;", ["&#7888;", "&#7890;", "&#7892;", "&#7894;", "&#7896;"],
    /* LC_a */		"&#259;", ["&#7855;", "&#7857;", "&#7859;", "&#7861;", "&#7863;"],
    /* UC_A */		"&#258;", ["&#7854;", "&#7856;", "&#7858;", "&#7860;", "&#7862;"],
    /* LC_o */		"&#417;", ["&#7899;", "&#7901;", "&#7903;", "&#7905;", "&#7907;"],
    /* LC_u */		"&#432;", ["&#7913;", "&#7915;", "&#7917;", "&#7919;", "&#7921;"],
    /* UC_O */		"&#416;", ["&#7898;", "&#7900;", "&#7902;", "&#7904;", "&#7906;"],
    /* UC_U */		"&#431;", ["&#7912;", "&#7914;", "&#7916;", "&#7918;", "&#7920;"]
					];
    
    

    var garCARET =  [
    /* LC_a */		["&#226;", "&#7845;", "&#7847;", "&#7849;", "&#7851;", "&#7853;"],
    /* LC_e */		["&#234;", "&#7871;", "&#7873;", "&#7875;", "&#7877;", "&#7879;"],
    /* LC_i */		[""],
    /* LC_o */		["&#244;", "&#7889;", "&#7891;", "&#7893;", "&#7895;", "&#7897;"],
    /* LC_u */		[""],
    /* LC_y */		[""],
    /* UC_A */		["&#194;", "&#7844;", "&#7846;", "&#7848;", "&#7850;", "&#7852;"],
    /* UC_E */		["&#202;", "&#7870;", "&#7872;", "&#7874;", "&#7876;", "&#7878;"],
    /* UC_I */		[""],
    /* UC_O */		["&#212;", "&#7888;", "&#7890;", "&#7892;", "&#7894;", "&#7896;"],
    /* UC_U */		[""],
    /* UC_Y */		[""]
					];

    var garPARENTHESIS =  [
    /* LC_a */		["&#259;", "&#7855;", "&#7857;", "&#7859;", "&#7861;", "&#7863;"],
    /* LC_e */		[""],
    /* LC_i */		[""],
    /* LC_o */		[""],
    /* LC_u */		[""],
    /* LC_y */		[""],
    /* UC_A */		["&#258;", "&#7854;", "&#7856;", "&#7858;", "&#7860;", "&#7862;"],
    /* UC_E */		[""],
    /* UC_I */		[""],
    /* UC_O */		[""],
    /* UC_U */		[""],
    /* UC_Y */		[""]
					];


    var garPLUS =  [
    /* LC_a */		[""],
    /* LC_e */		[""],
    /* LC_i */		[""],
    /* LC_o */		["&#417;", "&#7899;", "&#7901;", "&#7903;", "&#7905;", "&#7907;"],
    /* LC_u */		["&#432;", "&#7913;", "&#7915;", "&#7917;", "&#7919;", "&#7921;"],
    /* LC_y */		[""],
    /* UC_A */		[""],
    /* UC_E */		[""],
    /* UC_I */		[""],
    /* UC_O */		["&#416;", "&#7898;", "&#7900;", "&#7902;", "&#7904;", "&#7906;"],
    /* UC_U */		["&#431;", "&#7912;", "&#7914;", "&#7916;", "&#7918;", "&#7920;"],
    /* UC_Y */		[""]
					];

    var garVOWEL =  [
    /* LC_a */		["", "&#225;", "&#224;", "&#7843;", "&#227;", "&#7841;"],
    /* LC_e */		["", "&#233;", "&#232;", "&#7867;", "&#7869;", "&#7865;"],
    /* LC_i */		["", "&#237;", "&#236;", "&#7881;", "&#297;", "&#7883;"],
    /* LC_o */		["", "&#243;", "&#242;", "&#7887;", "&#245;", "&#7885;"],
    /* LC_u */		["", "&#250;", "&#249;", "&#7911;", "&#361;", "&#7909;"],
    /* LC_y */		["", "&#253;", "&#7923;", "&#7927;", "&#7929;", "&#7925;"],
    /* UC_A */		["", "&#193;", "&#192;", "&#7842;", "&#195;", "&#7840;"],
    /* UC_E */		["", "&#201;", "&#200;", "&#7866;", "&#7868;", "&#7864;"],
    /* UC_I */		["", "&#205;", "&#204;", "&#7880;", "&#296;", "&#7882;"],
    /* UC_O */		["", "&#211;", "&#210;", "&#7886;", "&#213;", "&#7884;"],
    /* UC_U */		["", "&#218;", "&#217;", "&#7910;", "&#360;", "&#7908;"],
    /* UC_Y */		["", "&#221;", "&#7922;", "&#7926;", "&#7928;", "&#7924;"]
					];
					
	var gaChar = ["a", "e", "i", "o", "u", "y", "A", "E", "I", "O", "U", "Y"];
	var garUnicode = null;

	var f =	function ($0, $1, $2) {
        var sTemp = "";
        var i = 0;
        var d = 0;
        var ar = null;
        
 		//return "%" + $0 + "%";
       
        //last char
        sTemp = $0.substr($0.length - 1, 1);

		if (sTemp == "'") d = 1;
		if (sTemp == "`") d = 2;
		if (sTemp == "?") d = 3;
		if (sTemp == "~") d = 4;
		if (sTemp == ".") d = 5;
		
        //first char
        sTemp = $0.substr(0, 1);

		for (i = LC_a; i <= UC_Y; i++) { 
			if (sTemp == gaChar[i]) {
				k = i;
				break;
			}
		}
		
		if (garUnicode[k]) {
			ar = garUnicode[k];
			if (ar[d]) {
				return ar[d];
			}
		}
		return $0;
	};


	var f2 =	function ($0, $1, $2) {
        var sTemp = "";
        var k = 0;
        var i = 0;
        var d = 0;
        var ar = null;
       
        //last char
        sTemp = $0.substr($0.length - 1, 1);

		if (sTemp == "'") d = 0;
		if (sTemp == "`") d = 1;
		if (sTemp == "?") d = 2;
		if (sTemp == "~") d = 3;
		if (sTemp == ".") d = 4;
		
        //first char
        sTemp = $0.substr(0, $0.length - 1);

		for (i = 0; i <= 23; i+=2) { 
			if (sTemp == garDAU[i]) {
				ar = garDAU[i+1];
				k = i;
				break;
			}
		}
		
		if (ar[d]) {
			return ar[d];
		}
		return $0;
	};


function toUniCharCode (strIn) {
    var strOut = "";
    var i = 0;

	for (i = 0; i < strIn.length; i++) { 
		if (strIn.charCodeAt(i) > 193) {
			strOut += "&#" + strIn.charCodeAt(i) + ";";
		}
		else {
			strOut += strIn.charAt(i);
		}
	}
    return strOut;
}
        
function ToUnicode(strIn) {
	document.write(VIQR2UNICODE(strIn));
}

function VIQR2UNICODE (strIn) {
    var strOut = "";
        
        //strOut = strIn;

        strOut = toUniCharCode (strIn);

        //PATTERN_CARET ==> ^
		garUnicode = garCARET;
		strOut = strOut.replace(rxPatternCARET, f);
	

        //PATTERN_PARENTHESIS ==> (
		garUnicode = garPARENTHESIS;
		strOut = strOut.replace(rxPatternPARENTHESIS, f);


        //PATTERN_PLUS ==> +
		garUnicode = garPLUS;
		strOut = strOut.replace(rxPatternPLUS, f);


        //PATTERN_VOWEL ==> aeiouy
		garUnicode = garVOWEL;
		strOut = strOut.replace(rxPatternVOWEL, f);

        //dau DD 
        strOut = strOut.replace(rxVn_Dcap, gsDD_Dcap);
        strOut = strOut.replace(rxVn_d, gsDD_d);


        //convert unicode and dau
        strOut = strOut.replace(rxPatternDau, f2);

        //dau escape chars 
        strOut = strOut.replace(rxVnEsc, 
							function ($0, $1, $2) {
								return right($0,1);
							});
        
        strOut = strOut.replace("'", "&#39;");

        return strOut;
}


function fnkeyup (evt) {
	var s = "";
	var unicode_obj = null;
	
	if (bUnicode != true) return;
	
	var evt = (evt) ? evt : ((window.event) ? event : null);
	
	if (evt.keyCode < 39) return;
	
	var objectID = (evt.target) ? evt.target.id : ((evt.srcElement) ? evt.srcElement.id : null);
	if (objectID.indexOf('unicode')!=-1)  unicode_obj = document.getElementById(objectID);
	if (unicode_obj) { 
		s = unicode_obj.innerHTML;
		unicode_obj.innerHTML = VIQR2UNICODE(s);
	}
}


