/* 	
	Kiril 1.1
	JavaScript keyboard remapper

	JavaScript code by Velko Ivanov (Labrett)
	HTML code&style by Ivajlo Rozelinov (nex)
	For contacts: look for our nicknames at http://forum.cska.bg/

	This source is free.
	Do whatever you want with it, just don't held us responsible (eg. BSD License).
	It would be nice, of course, to link to us as original authors if you do use it :)
*/

// 0 - generic (Netscape,Mozilla), 1 - IE (IE,Opera)
browser	= navigator.appName.substr(0,9)=="Microsoft"?1:0;

map		= new Array;
map[1]	= [33,1063,43,34,37,58,1095,95,8470,47,86,1088,45,1083,1073,48,49,50,51,52,53,54,55,56,57,1052,1084,1056,46,1051,1041,63,1068,1060,1066,1040,1045,1054,1046,1043,1057,1058,1053,1042,1055,1061,1044,1047,1099,1048,1071,1064,1050,1069,1059,1049,1065,1070,1094,40,59,61,1030,96,1100,1092,1098,1072,1077,1086,1078,1075,1089,1090,1085,1074,1087,1093,1076,1079,44,1080,1103,1096,1082,1101,1091,1081,1097,1102,1062,41,167,126];
map[2]	= [33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1066,1047,1096,1102,1097,8470,95,1095,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1098,1079,1064,1070,1065,1063];

kb		= map.length;
kbs		= ["EN", "BG", "BP"];
fcolor	= ["#ffffff", "#df002b", "#ffffff"];
bcolor	= ["#000000", "#ffffff", "#df002b"];

sty		= "font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;float:left;height:19px;width:19px;text-align:center;border:1px solid #000000;line-height:17px;margin-right: 1px;";

function setCookie(name, value) {
	days	= 365;
	expdate	= new Date();
	expdate.setTime(expdate.getTime() + days*24*60*60*1000);

	document.cookie	= name + "=" + escape(value) + ";expires=" + expdate.toGMTString();
} 

function getCookie(name) {
	dc	= document.cookie;
	
	if (dc.length>0) {
		c_start	= dc.indexOf(name + "=")
		if (c_start!=-1) { 
			c_start	= c_start + name.length+1;
			c_end	= dc.indexOf(";",c_start);
			if (c_end==-1) 
				c_end	= dc.length;
			return unescape(dc.substring(c_start,c_end));
		} 
	}
	return null;
}

function kbsChangeElem(elem) {
	switch (browser) {
		case (1):
			elem.innerText		= kbs[kb];
			break;
		default:
			elem.textContent	= kbs[kb];
	}
	
	elem.style.color			= fcolor[kb];
	elem.style.backgroundColor	= bcolor[kb];
}

function kbsChange() {
	kb++;
	if (kb >= map.length)
		kb	= 0;

	l_layout	= browser?document.all["lcLayout"]:document.getElementsByName("lcLayout");
	if (l_layout.length>0)
		for (e=0; e<l_layout.length; e++)
			kbsChangeElem(l_layout[e]);
	else
		kbsChangeElem(l_layout);
	
	setCookie("kiril", kb);
}

function outKeyP(ev) {
	if (browser) {
		ev		= window.event;
		key		= ev.keyCode;
		elem	= ev.srcElement;
	} else {
		key		= ev.which
		elem	= ev.target
	}
	
	b_res	= true;
	if (ev.ctrlKey && (key==59||key==17)) {
		kbsChange();
		b_res	= false;
	} else if (kb && (key >= 33 && key <= 126)) {
		if (elem.type == "textarea" || elem.type == "text") {
			key		-= 33;
			
			switch (browser) {
				case (1):
					ev.keyCode	= map[kb][key];
					break;
				default:
					elem.value	+= String.fromCharCode(map[kb][key]);
					b_res	= false;
			}
		}
	}
	
	return b_res;
}

function initElem(elem) {
	elem.onclick	= kbsChange;
	
	switch (browser) {
		case (1):
			sty	= sty.split(/[:;]/);
			for (i=0; i<sty.length; i+=2)
				elem.style[sty[i]]	= sty[i+1];
			break;
		default:
			elem.setAttribute("style", sty);
	}
	
	elem.style.textAlign	= "center";
}

function init() {
	kb = (getCookie('kiril'))-1;
	if (kb==null)
		kb	= map.length;
	
	document.onkeypress	= outKeyP;
	
	l_layout	= browser?document.all["lcLayout"]:document.getElementsByName("lcLayout");
	if (l_layout.length>0)
		for (e=0; e<l_layout.length; e++)
			initElem(l_layout[e]);
	else
		initElem(l_layout);
	
	kbsChange();
}

init();
