function CheckKey(textControl, evt, keyChecker, opts) {    
    var keyCode = evt.keyCode ? evt.keyCode : evt.charCode ? evt.charCode : evt.which ? evt.which : void 0;
    var key;
    if (keyCode)
        key = String.fromCharCode(keyCode);
    var keyCheck = keyChecker(keyCode, key);
    /* Bloqueia a ',' mais que uma vez*/
    var txt = textControl.value;
    if (txt.indexOf(',') != -1 && keyCode == 44) {
        return false;
    }
    if (!SpecialOptsKeys(keyCode, opts)) {
        if (keyCode && window.event && !window.opera) {
            if (keyCheck.cancelKey)
                return false;
            else if (keyCheck.replaceKey) {
                window.event.keyCode = keyCheck.newKeyCode;
                if (window.event.preventDefault)
                    window.event.preventDefault();
                return true;
            }
            else
                return true;
        }
        else if (typeof textControl.setSelectionRange != 'undefined') {
            if (keyCheck.cancelKey) {
                if (evt.preventDefault)
                    evt.preventDefault();
                return false;
            }
            else if (keyCheck.replaceKey) {
                // cancel the key event and insert the newKey for the current selection
                if (evt.preventDefault)
                    evt.preventDefault();
                var oldSelectionStart = textControl.selectionStart;
                var oldSelectionEnd = textControl.selectionEnd;
                var selectedText = textControl.value.substring(oldSelectionStart, oldSelectionEnd);
                var newText = typeof keyCheck.newKey != 'undefined' ? keyCheck.newKey : String.fromCharCode(keyCheck.newKeyCode);
                textControl.value = textControl.value.substring(0, oldSelectionStart) + newText + textControl.value.substring(oldSelectionEnd); textControl.setSelectionRange(oldSelectionStart + newText.length, oldSelectionStart + newText.length);
                return false;
            }
            else
                return true;
        }
        else if (keyCheck.cancelKey) {
            if (evt.preventDefault)
                evt.preventDefault();
            return false;
        }
        else
            return true;
    }
    else
        return true;
}


// opcções  { backaspaceKey: boolean}
function SpecialOptsKeys(keyCode, opts) {
    var result = false;
    if (opts.backaspaceKey)
        if (keyCode == 8)
        result = true;
    if (opts.plusKey)
        if (keyCode == 43)
        result = true;
    if (opts.comma)
        if (keyCode == 44)
        result = true;
    if (opts.ponto)
        if (keyCode == 46)
        return true;
    return result;
}
// apenas permite a introdução de digitos returnando "true" quando a key de entrada não o for...
function Cancel_No_Digits(keyCode, key) {
    return { cancelKey: !isDigit(keyCode, key) };
}
// apenas permite a introdução de digitos e "/" returnando "true" quando a key de entrada não o for...
var DTSplit_Code = 47; //    "/"
function Cancel_No_Date(keyCode, key) {
    return { cancelKey: isDigit(keyCode, key) ? false : keyCode == DTSplit_Code ? false : true };
}
function isDigit(keyCode, key) {
    return "0123456789".indexOf(key) != -1;
}
function checkComma(obj) {
    alert(obj.value);
    alert(obj.value.indexof(','))
    if (obj.value.indexof(',') != -1) {
        alert('!');
        window.event.returnValue = false
    }
}

function format(n, swap) {
    if (n.value != "") {
        /* apaga to dos os "." da string */
        var padrao = /\./g;
        n = n.replace(padrao, '');
        /* verifica se o número é legal */
        var re = /^\d{0,9}\,?\d{0,2}$/;
        if (!re.test(n)) {
            alert('O valor que inseriu foi mal formatado, por favor corrija');
            return "";
        }

        var ns = String(n), seps = [".", ","];
        /* garante que a string ",00" não é inserida pelo utilizador */
        if (ns == ",00") {
            ns = "";
        }
        /* faz as operações de tranformação da string */
        if (swap) seps.reverse();
        while (/^([^.,]*\d)(\d{3}([.,]|$))/.test(ns)) {
            ns = ns.replace(/^([^.,]*\d)(\d{3}([.,]|$))/, "$1" + seps[1] + "$2");
        }
        ns += ((ns.indexOf(seps[0]) < 0) ? seps[0] : "") + "00";
        /* garante que a string ",00" não é inserida se o valor for vazio*/
        if (ns == ",00") {
            ns = "";
        }
        /* retorna a string formatada */
        return ns.replace(/(\d{2})\d*$/i, "$1");
    }
}


function CopyKey(textControl, txtbox) {
    document.getElementById(txtbox).value = textControl.value;
}

function formatNumber(number) // the number should be like #######,####
{
    var tmp = "";
    tmp = number.split(',')[0].match(/\d(?!=,)/g).reverse().join('');
    tmp = tmp.replace(/\d{3}(?!=\.|$)/g, "$&.");
    tmp = tmp.match(/[\d.]/g).reverse().join('');

    var dec = number.match(/,.*?$/);

    return tmp + (dec ? dec : ',00');
}

function clearFormat(sValue) {
    return parseFloat(sValue.replace(/\./g, '').replace(/,/g, '.'));
}

