﻿function attachEvent(objId, eventTypes, func){    
    var obj = g(objId);
    if(obj==null) return;
    var arrEventType = eventTypes.split(',');
    for(i=0, n = arrEventType.length; i < n; i++){
        var eventType = arrEventType[i];
        if(document.addEventListener){
            obj.addEventListener(eventType, func, false);	    
        }
        else if (document.attachEvent){
            obj.attachEvent('on' + eventType, func);
        }
    }    
}

function g(id){
    return document.getElementById(id);
}

function CapsDetect(e){
    var obj = e.target ? e.target : e.srcElement;    
    if (!e) e = window.event || null;
    var n = e.keyCode?e.keyCode:e.charCode;
    if (e.type=="keypress"){
        var c = String.fromCharCode(n);
        var cUC = c.toUpperCase();
        var cLC = c.toLowerCase();
        if (cUC!=cLC){
            oncapslock((e.shiftKey && cLC==c) || (!e.shiftKey && cUC==c), obj);
        }
    }
    else if (e.type=="keydown" && n==20) oncapslock(false, obj);
}

function oncapslock (on, sender){    
    var cl_lighter = g('cl_lighter');
    if(on){
        if(!cl_lighter) {
            var coord = absPosition(sender);
            var lighter = document.createElement('div');            
            lighter.id = 'cl_lighter';
            lighter.innerHTML = '<SPAN>Включен «Caps Lock»!</SPAN>';
            lighter.className = 'caps-lock-alert-messagebox';
            lighter.style.position = 'absolute';
            lighter.style.top = parseInt(coord.y) + parseInt(sender.offsetHeight)- 4 + 'px';
            lighter.style.left = (parseInt(coord.x) + parseInt(sender.offsetWidth)- 5 + 'px');
            sender.parentNode.appendChild(lighter);
            attachEvent(sender.id, 'blur', function() {var lighter = g('cl_lighter');  if(lighter){lighter.style.display='none';}});
        }
        else {
            // need fix: coord not coorect, will not work with few input!
            var coord = absPosition(sender);
            cl_lighter.style.top = parseInt(coord.y) + parseInt(sender.offsetHeight) - 4 + 'px';
            cl_lighter.style.left = (parseInt(coord.x) + parseInt(sender.offsetWidth) - 5 + 'px');
            cl_lighter.style.display = 'block';
            attachEvent(sender.id, 'blur', function() {var lighter = g('cl_lighter');  if(lighter){lighter.style.display='none';}});
        }            
    }
    else{
        if(cl_lighter){
            cl_lighter.style.display='none';
            return;            
        }            
    }
}

function absPosition(obj){
    var x = y = 0;
    while(obj){
        x += obj.offsetLeft;
        y += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return {x:x, y:y};
}

function OnlyDigits(e){    
    var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);    		
    if (e.ctrlKey || e.altKey || key < 58) e.returnValue = true;
    else e.returnValue = false;    
}