var jamo_initials_u = 
	"\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f" +
	"\u1110\u1111\u1112"; 
var jamo_medials_u = 
	"\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116a\u116b\u116c\u116d\u116e\u116f" +
	"\u1170\u1171\u1172\u1173\u1174\u1175"; 
var jamo_finals_u = 
	 "\u11a7\u11a8\u11a9\u11aa\u11ab\u11ac\u11ad\u11ae\u11af" +
	"\u11b0\u11b1\u11b2\u11b3\u11b4\u11b5\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf" +
	"\u11c0\u11c1\u11c2";

var jamo_initials_c = 
	"\u3131\u3132\u3134\u3137\u3138\u3139" +
	"\u3141\u3142\u3143\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e";
var jamo_medials_c = 
	"\u314f" +
	"\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f" +
	"\u3160\u3161\u3162\u3163";
var jamo_finals_c = 
	" \u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3139\u313a\u313b\u313c\u313d\u313e\u313f" +
	"\u3140\u3141\u3142\u3144\u3145\u3146\u3147\u3148\u314a\u314b\u314c\u314d\u314e";
	
	
var jamo_step = 0;
var jamo_initial = 0;
var jamo_medial = 0;
var jamo_final = 0;

  //this algorithm (hngl_compose adapted from Chapter 3.12 of The Unicode Standard 5.0 - Electronic edition:
  // http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#G25222

var sBase = 0xac00; //first syllable
var lCount = 19; //leading (initial) count
var vCount = 21; //vowel (medial) count
var tCount = 28; //trailing (final) count

function hngl_compose(){
	var index = (jamo_initial * vCount + jamo_medial) * tCount + jamo_final;
	return String.fromCharCode(sBase + index);
}

function update_hangul_visibility(){
	for (i = 0; i < 3; i++){
		if (i == jamo_step){
			ebi("charPalette_hngl_" + i).style.display = "block";	
		} else {
			ebi("charPalette_hngl_" + i).style.display = "none";	
		}
	}
}

function choose_initial(jinitial){
	jamo_initial = jinitial;
	ebi('hangul_display').innerHTML = jamo_initials_c.charAt(jinitial);
	jamo_step = 1;
	update_hangul_visibility();
}

function choose_medial(jmedial){
	jamo_medial = jmedial;
	ebi('hangul_display').innerHTML = hngl_compose();
	jamo_step = 2;
	update_hangul_visibility();
}

function choose_final(jfinal){
	jamo_final= jfinal;
	click_char(hngl_compose());
	ebi('hangul_display').innerHTML = '';	
	jamo_initial = 0;
	jamo_medial = 0;
	jamo_final = 0;
	jamo_step = 0;
	update_hangul_visibility();
}
	
