var capsLockStatus = "";
function capLock(e){
var elmnt = Event.element(e);
var kc = e.keyCode?e.keyCode:e.which;
var sk = e.shiftKey?e.shiftKey:((kc == 16)?true:false);


var cl = document.getElementById('capslockerrormsg'); 

//Checks if caps lock is on.
if(((kc >= 65 && kc <= 90) && !sk)||((kc >= 97 && kc <= 122) && sk))
{
positionCapsLockError(elmnt);
cl.style.display = ''; 
capsLockStatus = "on"; 
} 
//Checks if caps lock is off.    
else if(((kc >= 65 && kc <= 90) && sk)||((kc >= 97 && kc <= 122) && !sk))
{
cl.style.display = 'none'; 
capsLockStatus = "off"; 
} 
};

//Hides/shows Caps Lock warning when Caps Lock key is pressed once Caps Lock
//state is determined.
function hideCLMsg(e){
	var elmnt = Event.element(e);

	
var cl = document.getElementById('capslockerrormsg');    
var KeyID = (window.event) ? event.keyCode : e.keyCode; 

if(KeyID==20 && capsLockStatus == "on")
{
cl.style.display = 'none';
capsLockStatus = "off";
}
else if(KeyID==20 && capsLockStatus == "off")
{
positionCapsLockError(elmnt);
cl.style.display = '';
capsLockStatus = "on";
}
}

function positionCapsLockError(elmnt) {
var cl = document.getElementById('capslockerrormsg'); 
var clInner = document.getElementById('capslockerrormsginner'); 
var elementWidth = Element.getWidth(elmnt);
var elementHeight = Element.getHeight(elmnt);
var elementPosition = Element.viewportOffset(elmnt);
var scrollOffsets = document.viewport.getScrollOffsets();
var offsetTop = 0;
clInner.style.height = (elementHeight - 2) + 'px';	
clInner.style.lineHeight = (elementHeight - 2) + 'px';	
cl.style.top = (elementPosition.top + scrollOffsets.top - offsetTop) + 'px';
cl.style.left = (elementPosition.left + elementWidth + 5) + 'px';	
cl.style.display = '';
}

function createCapsLockErrorBox() {
	var warningContainer = document.createElement('div');
	Element.extend(warningContainer);
	warningContainer.innerHTML = '<div class="textBodyRed capslockwarninginner bold" id="capslockerrormsginner">Caps Lock is On!</div>';
	warningContainer.id = 'capslockerrormsg';
	warningContainer.addClassName('capslockwarningouter');
	warningContainer.style.display = 'none';
	document.body.appendChild(warningContainer);
}

function capsLockFieldUnfocus(e) {
	var elmnt = Event.element(e);
	var cl = document.getElementById('capslockerrormsg');
	cl.style.display = 'none';
	capsLockStatus = "";
}

function attachCapsLockEventHandlers(elmtID) {
	var needsKeydown  = false;
	var appVersion = navigator.appVersion;
	if (appVersion.indexOf('Mac') != -1) {
		needsKeydown = true;
	}
	if ($('capslockerrormsg') == null) {
		createCapsLockErrorBox();
	} 
	$(elmtID).observe('keypress', capLock);
	if (needsKeydown) {
	$(elmtID).observe('keydown', hideCLMsg);
	}
	$(elmtID).observe('keyup', hideCLMsg);
	$(elmtID).observe('blur', capsLockFieldUnfocus);
}
