
addListener(document,'keydown',keyTips);
addListener(window,'load',findTips);

var tipsVisible = false
var keyTarget = new Array;
var keyTip = new Array;

function keyTips(evt){
var hotKey = 27;
	if (evt.shiftKey && evt.keyCode == hotKey)
	{
		tipsVisible? hideTips() : showTips();
		evt.preventDefault? evt.preventDefault() : evt.returnValue = false;
		return false;
	}
	if (tipsVisible)
	{	
		if (evt.keyCode == hotKey){hideTips()}
		if (evt.keyCode != hotKey){tipFocus(String.fromCharCode(evt.keyCode))}
		evt.preventDefault? evt.preventDefault() : evt.returnValue = false;
		return false;
	}
}

function tipFocus(tip){
	for (i=0;i<keyTarget.length;i++ ){
		if (keyTarget[i].getAttribute('keytip') == tip)
		{
			keyTarget[i].focus(); 
			tipsVisible = false;
			hideTips();
		}
	}
}

function showTips(){
	tipsVisible = true;
	for (i=0;i<keyTip.length;i++){keyTip[i].className = 'tipShow';}
}

function hideTips(){
	tipsVisible = false;
	for (i=0;i<keyTip.length;i++){keyTip[i].className = 'tipHide'}
}

function findTips(){
	var test = new Array('a','input','select');
	for (i=0;i<keyTip.length;i++)
	{
		var parent = keyTip[i].parentNode;
		if (parent){parent.removeChild(keyTip[i])};
	}
	var i = 0;
	for (x=0;x<test.length;x++)
	{	var el = document.getElementsByTagName(test[x]);
		for (y=0;y<el.length;y++)
		{
			var tip = el[y].getAttribute('keytip')
			if (tip != null && tip != '')
			{
				var span = document.createElement('span');
				var parent = el[y].parentNode;
				span.innerHTML = tip;
				span.setAttribute('tip',tip);
				span.className = 'tipHide';
				parent.insertBefore(span,el[y]);
				keyTip[i] = span; keyTarget[i] = el[y];	i++;
			}
		}
	}
}

// Cross-browser implementation of element.addEventListener()
function addListener(element, type, expression, bubbling){
	bubbling = bubbling || false;
	if(window.addEventListener) { // Standard
		element.addEventListener(type, expression, bubbling);
		return true;
	} else if(window.attachEvent) { // IE
		element.attachEvent('on' + type, expression);
		return true;
	} else return false;
}


