var BETRAG_GROUP_SEP     = ".";
var BETRAG_DECIMAL_SEP     = ",";
var BETRAG_SPLIT_DEC     = /\,/;
var BETRAG_SPLIT_GROUP   = /\./;
var VALID_BETRAG_CHARS   = VALID_NUMBERS + ".,-";
var VALID_BETRAG_PATTERNS= new Array();

function initBetragInputChecks() {
    // x = 0-9
    // X = optional
    // y = 1-9
    // xxx
    VALID_BETRAG_PATTERNS[0] = /^[+-]?[1-9]+\d+$/;
    VALID_BETRAG_PATTERNS[1] = /^[+-]?\d$/;
    // yXX.xxx
    VALID_BETRAG_PATTERNS[2] = /^[+-]?[1-9]+\d?\d?(\.\d\d\d)+$/;
    // xxx,xXX
    VALID_BETRAG_PATTERNS[3] = /^[+-]?[1-9]+\d*,\d\d?$/;
    // 0,xXX
    VALID_BETRAG_PATTERNS[4] = /^[+-]?0,\d\d?$/;
    // yXX.xxx,xXX
    VALID_BETRAG_PATTERNS[5] = /^[+-]?[1-9]+\d?\d?(\.\d\d\d)+,\d\d?$/;
}

initBetragInputChecks();

// --------------------------------------------------
// Betrag Eingabecheck
// --------------------------------------------------
function betrag_onKeyPress(keyEvent) {
    fieldNotValidated = true;
    if (isNavigator() == false) keyEvent = getIEEvent();
    var field = getEventField(keyEvent);
    if (isEnterKey(keyEvent)) {
        if (field.value.length == 0)
        {
            fieldNotValidated = false;
            return true;
        }
        if (betrag_isValid(field) == false) {
            field.blur();
            return false;
        }
        betrag_format(field);
        fieldNotValidated = false;
        return true;
    }
    fieldNotValidated = false;
    if (isValidKey(keyEvent, VALID_BETRAG_CHARS) == false) return false;

    return true;
}

function betrag_onBlur(field, maxchars, nk, okayMethod, minBetrag, maxBetrag) {

    if (field.value.length == 0)
    {
        fieldNotValidated = false;
         return;
    }

    if (betrag_isValid(field) == false) {
        nbalert(msgBetragError);
        field.value = "";
        field.focus();
        fieldNotValidated = false;
        return;
    }
    betrag_format(field, nk);
    if (okayMethod != null) {
        okayMethod();
    }

    if(maxchars != -1 && field.value.length > maxchars) {
        nbalert(getMsgBetragTooBig(formatLongToBetrag(maxBetrag)));
        field.value = "";
        field.focus();
        fieldNotValidated = false;
        return;
    }

    var tmpBetrag = field.value;
    tmpBetrag = deleteTausenderPunktalan(tmpBetrag);
    tmpBetrag = tmpBetrag.replace(",","");
    tmpBetrag = Number(tmpBetrag);
    if (!isNaN(tmpBetrag)){
        if (!isNaN(minBetrag)){
            var minValue = Number(minBetrag);
            if (tmpBetrag < minValue){
                nbalert(getMsgBetragTooSmall(formatLongToBetrag(minBetrag)));
                field.focus();
                return;

            }
        }

        if (!isNaN(maxBetrag)){
            maxBetrag = Number(maxBetrag);
            if (tmpBetrag > maxBetrag){
                nbalert(getMsgBetragTooBig(formatLongToBetrag(maxBetrag)));
                field.focus();
                return;
            }
        }
    }
    fieldNotValidated = false;
}

function formatDecimal(value) {
    var valueText = String(value).replace(".",",");
    var kommapos = valueText.indexOf(",");
    if (kommapos < 0) {
        kommapos = valueText.length;
    }
    return formatBetragString(valueText, valueText.length - kommapos - 1);
}

function betrag_format(field, nk) {
    field.value = formatBetragString(field.value, nk);
}

function formatBetragString(value, nk) {
    if (nk == null) nk = 2;
    var minus = false;
    if (value.charAt(0) == '-') {
        minus = true;
        value = value.substring(1);
    }

    var vorkomma = value;
    var nachkomma= "0";
    var kommapos = value.indexOf(BETRAG_DECIMAL_SEP);
    if (kommapos >= 0) {
        vorkomma = value.substring(0, kommapos);
        nachkomma= value.substring(kommapos+1);
    }
    while(nachkomma.length < nk) {
        nachkomma = nachkomma + "0";
    }
    deleteTausenderPunktalan(vorkomma);
    vorkomma = formatVorkomma(vorkomma);
    if (nk!=0)    {
        var betrag = vorkomma + BETRAG_DECIMAL_SEP + nachkomma;    }    else    {        var betrag = vorkomma;    }
    if (minus)
        return "-" + betrag;
    else
        return betrag;
}
function formatLongToBetrag(longValue) {
    var betrag = "" + longValue/100;
    betrag = betrag.replace(".", ",");
    return formatBetragString(betrag);
}
function formatVorkomma(intval) {
    if (intval == null || intval.length == 0) return "0";
    var value = "";
    var count = 0;
    for(var index=intval.length; index >= 0; index--) {
        if (intval.charAt(index) >= "0" && intval.charAt(index) <= "9") {
            if (count == 3) {
                value  = BETRAG_GROUP_SEP + value;
                count  = 0;
            }
            value = intval.charAt(index) + value;
            ++count;
        }
    }
    return value;
}
function betrag_isValid(field) {
    if (field.value.length == 0) return true;
    if (hasValidPattern(field, VALID_BETRAG_PATTERNS)==false) return false;
    return true;
}
function deleteTausenderPunktalan(what) {
    while(what.indexOf('.') > -1) {
        what = what.substring(0,what.indexOf('.')) + what.substring(what.indexOf('.')+1,what.length);
    }
    return what;
}

