//requires mootools (no more ...)
function addEvent(elem, evtType, func, capture) {
	capture = (capture) ? capture : false;
	if(elem.addEventListener) {
		elem.addEventListener(evtType, func, capture);
	}
	else if (elem.attachEvent) {
		elem.attachEvent("on" + evtType, func);
	}
	else {
		elem["on" + evtType] = func;
	}
}

function removeEvent(elem, evtType, func, capture) {
	capture = (capture) ? capture : false;
	if(elem.removeEventListener) {
		elem.removeEventListener(evtType, func, capture);
	}
	else if (elem.attachEvent) {
		elem.detachEvent("on" + evtType, func);
	}
	else {
		elem["on" + evtType] = null;
	}
}

function addOnLoadEvent(func) {
	if(window.addEventListener || window.attachEvent) {
		addEvent(window, "load", func, false);
	}
	else {
		var oldQueue = (window.onload) ? window.onload : function() {};
		window.onload = function() {
			oldQueue();
			func();
		}
	}
}
function $(id) {
	return document.getElementById(id);
}
var VKB = {
	vkbOn:false,
	vkbMap:-1,
	vkbDiv:false,
	altOn:false,
	altObj:null,
	shiftOn:false,
	shiftObj:null,
	capsOn:false,
	capsObj:null,
	keyPressed:false,
	currentObject:false,
	defaultObject:false,
	objWaiting:[]
}
addOnLoadEvent(function() {
	VKB.vkbReady = true;
	for(i=0; i<VKB.objWaiting.length; i++)
		VKB.addObject(VKB.objWaiting[i]);
	VKB.objWaiting = [];	
})

VKB.run = function()
{
	if(VKB.vkbOn)
		VKB.off();
	else
		VKB.on(VKB.vkbDiv, 0);
}

VKB.setObject = function(objId)
{
	VKB.currentObject = objId;
}

VKB.addObject = function(objId)
{
	if($(objId))
		addEvent(objId, 'focus', function() {VKB.setObject(objId);});
	else
		VKB.objWaiting[VKB.objWaiting.length] = objId;

	if(!(VKB.defaultObject))
		VKB.defaultObject = objId;
}

VKB.getObject = function()
{
	if(VKB.currentObject)
		return VKB.currentObject;

	return VKB.defaultObject;
}

VKB.show = function()
{
	$(VKB.vkbDiv).style.display = 'block';
}

VKB.hide = function()
{
	$(VKB.vkbDiv).style.display = 'none';
}

VKB.on = function(divId, keyMapId)
{
	VKB.vkbOn = true;
	VKB.vkbDiv = divId;
	if((VKB.vkbMap)==keyMapId)
		VKB.show();
	else
	{
		VKB.vkbMap = parseInt(keyMapId);
		VKB.show();
	}
}

VKB.setMap = function(divId, keyMapId)
{
	VKB.vkbDiv = divId;
	if((VKB.vkbMap)!=keyMapId)
	{
		VKB.vkbMap = parseInt(keyMapId);
	}	
}

VKB.off = function()
{
	VKB.vkbOn = false;
	VKB.hide();
}

VKB.shiftDown = function()
{
	VKB.shiftOn = true;
	VKB.keyDown(VKB.shiftObj);
}

VKB.shiftUp = function()
{
	VKB.shiftOn = false;
	VKB.keyUp(VKB.shiftObj);
}

VKB.capsDown = function()
{
	VKB.capsOn = true;
	VKB.keyDown($('vkbCaps'))
	VKB.keyDown(VKB.capsObj);
}

VKB.capsUp = function()
{
	VKB.capsOn = false;
	VKB.keyUp($('vkbCaps'))
	VKB.keyUp(VKB.capsObj);
}

VKB.altDown = function()
{
	VKB.altOn = true;
	VKB.keyDown(VKB.altObj);
}

VKB.altUp = function()
{
	VKB.altOn = false;
	VKB.keyUp(VKB.altObj);
}

VKB.keyDown = function(obj)
{
	if (obj)
	{
		obj.className = 'vkb2on';
		return true;
	}
	return false;
}

VKB.keyUp = function(obj)
{
	if (obj)
	{
		obj.className = 'vkb2';
		objId = VKB.getObject();
		if(objId)
			$(objId).focus();
		return true;
	}
	return false;
}

VKB.keyCancel = function(obj)
{
	$(VKB.getObject()).value = '';
	VKB.off();
}

VKB.keyAccept = function(obj)
{
	VKB.off();
}

VKB.keyClear = function(obj)
{
	$(VKB.getObject()).value = '';
}

VKB.keyShift = function(obj)
{
	VKB.shiftObj = obj;
	if(VKB.shiftOn)
		VKB.shiftUp();
	else
		VKB.shiftDown();
}

VKB.keyCaps = function(obj)
{
	if(obj)
		VKB.capsObj = obj;

	if(VKB.capsOn)
		VKB.capsUp();
	else
		VKB.capsDown();
}

VKB.keyAlt = function(obj)
{
	VKB.altObj = obj;
	if(VKB.altOn)
		VKB.altUp();
	else
		VKB.altDown();
}

VKB.keyBackspace = function(obj)
{
	val = $(VKB.getObject()).value;
	val = val.substr(0,val.length-1);
	$(VKB.getObject()).value = val;
}

VKB.keyPress = function(keyStd, keyShift, keyAlt, keyAltsh, keyObj)
{
	key = '';
	if(VKB.capsOn || VKB.shiftOn)
	{
		if(VKB.altOn)
			key = keyAltsh;
		else
			key = keyShift;
	}
	else if(VKB.altOn)
		key = keyAlt;
	else
		key = keyStd;

	objId = VKB.getObject();
	if(objId)
	{
		if(!(VKB.keyPressed))
		{
			VKB.altUp();
			VKB.shiftUp();
		}
		$(VKB.getObject()).value = $(VKB.getObject()).value + key; 
		$(objId).focus();
	}
	return true;
}

