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);

	var betrag = vorkomma + BETRAG_DECIMAL_SEP + nachkomma;
	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;
}
