
// Stellt einige Funktionen zum Überprüfen, Einlesen und Erzeugen von Zahlenformaten bereit


// Konvertiert eine Zeichenkette der form ###.###,## in einen float-Wert
// liefert null, wenn uText leer ist
// liefert false, wenn uText ungültig war
function toFloat(uText) {

	var i;
	var locText = '';
	var locChar = '';
	
	for (i = 0; i < uText.length; i++) {

		switch(locChar = uText.charAt(i)) {
			case ' ': locChar = '';  break; // Alle Leerzeichen löschen
			case '.': locChar = '';  break; // Alle Tausenderpunkte löschen
			case ',': locChar = '.'; break; // Dezimalkomma durch Dezimalpunkt ersetzen
		}
		
		locText += String(locChar);
	}

	if (locText.length == 0) return null;   // Prüfen, ob noch was zum konvertieren übrig ist
	return parseFloat(locText);             // Konvertieren und Ergebnis zurückliefern
		
}


// Konvertiert eine Zeichenkette der form ###.### in einen integer-Wert
// liefert null, wenn uText leer ist
// liefert false, wenn uText ungültig war
function toInteger(uText) {

	locNumber = toFloat(uText);               // Zahl in Fließkomma konvertieren

	if (isNaN(locNumber))  return Number.NaN; // Wenn Zahl in ungülig war, Fehlerwert zurückliefern
	if (locNumber == null) return null;       // Wenn Zahl leer war, Fehlerwert zurückliefern
	return Math.round(locNumber);             // in Integer konvertieren und zurückliefern
}

// Konvertiert eine Zeichenkette der form ###.### in einen integer-Wert
// liefert null, wenn uText leer ist
// liefert false, wenn uText ungültig war
function toEuroInteger(uText) {

	locNumber = toFloat(uText);               // Zahl in Fließkomma konvertieren

	if (isNaN(locNumber))  return Number.NaN; // Wenn Zahl in ungülig war, Fehlerwert zurückliefern
	if (locNumber == null) return null;       // Wenn Zahl leer war, Fehlerwert zurückliefern
	return Math.round(locNumber * 100.0);     // in Integer konvertieren und zurückliefern
}



// Konvertiert eine deutsche Datumsangabe TT.MM.JJJJ in einen UNIX-Timestamp
function toTimestamp(uDate) {

	locList = uDate.split(".");
	if (locList.length != 3) {
		locList = uDate.split("-");
		if (locList.length != 3) {
			locList = uDate.split("/");
			if (locList.length != 3) {
				return Number.NaN; // Datum muss aus drei Elementen bestehen
			}
		}
	}

	locDay   = parseInt(locList[0], 10);
	locMonth = parseInt(locList[1], 10);
	locYear  = parseInt(locList[2], 10);

	if (isNaN(locDay  )) return Number.NaN;
	if (isNaN(locMonth)) return Number.NaN;
	if (isNaN(locYear )) return Number.NaN;

	if (locDay > 31)   return Number.NaN;
	if (locDay < 0)    return Number.NaN;
	if (locMonth > 12) return Number.NaN;
	if (locMonth < 1)  return Number.NaN;
	if (locYear < 100) locYear += 2000;

	locMonth--;

	return Math.floor(Date.UTC(locYear, locMonth, locDay) / 1000);
}


// Liefert eine fortlaufende Nummer für den Monat (uDate = TT.MM.JJJJ)
function getMonthIndex(uDate) {
	if (isNaN(locTimestamp = toTimestamp(uDate))) return Number.NaN;

	locDate  = new Date(1970, 0, 1, 0, 0, locTimestamp);

	return 12 * locDate.getFullYear() + locDate.getMonth();
}



// Formatiert eine Zahl in die Form ####,##
function toPercentString(uNumber) {
	var locText = '';
	var locBuffer = '';
	var locBlockCounter = -3;
	var i = 0;

	if (isNaN(uNumber)) return ''; // Wenn Zahl in ungültig war, leere Zeichenkette zurückliefern
	
	locText = String(Math.round(Math.abs(uNumber) * 100.0));
	while (locText.length < 3) locText = '0' + String(locText);
	
	for (i = locText.length - 1; i >= 0; i--) {
		
		locBlockCounter++;
		if (locBlockCounter == 0) locBuffer = ',' + String(locBuffer);
		
		locBuffer = String(locText.charAt(i)) + String(locBuffer);
		
	}
	
	return ((uNumber < 0)?'-':'') + String(locBuffer);
}


// Formatiert eine Zahl in die Form ###.###,##
// Achtung; uNumber wird in Cent angegeben, um auch 23,45€ mit Integer-Werten darstellen zu können
function toEuroString(uNumber) {
	var locText = '';
	var locBuffer = '';
	var locBlockCounter = -3;
	var i = 0;

	if (isNaN(uNumber)) return ''; // Wenn Zahl in ungültig war, leere Zeichenkette zurückliefern
	
	locText = String(Math.round(Math.abs(uNumber)));
	while (locText.length < 3) locText = '0' + String(locText);
	
	for (i = locText.length - 1; i >= 0; i--) {
		
		locBlockCounter++;
		if (locBlockCounter == 0) locBuffer = ',' + locBuffer;
		
		if (locBlockCounter > 2) {
			locBlockCounter = 0;
			locBuffer = '.' + locBuffer;
		}
		locBuffer = String(locText.charAt(i)) + locBuffer;
		
	}
	
	return ((uNumber < 0)?'-':'') + String(locBuffer);
}


// Formatiert eine Zahl in die Form #####
function toCountString(uNumber) {
	if (isNaN(uNumber)) return ''; // Wenn Zahl in ungültig war, leere Zeichenkette zurückliefern

	return Math.round(uNumber);
}


// Konvertiert einen UNIX-Timestamp in die deutsche Datumsnotation TT.MM.JJJJ
function toDateString(uTimestamp) {
	if (isNaN(uTimestamp)) return Number.NaN;

	locDate  = new Date(1970, 0, 1, 0, 0, uTimestamp);

	locDay   = locDate.getDate();
	locMonth = locDate.getMonth() + 1;
	locYear  = locDate.getFullYear();

	locDay   = "00"   + locDay;
	locMonth = "00"   + locMonth;
	locYear  = "0000" + locYear;

	locDay   = locDay.substr  (locDay.length   - 2, 2);
	locMonth = locMonth.substr(locMonth.length - 2, 2);
	locYear  = locYear.substr (locYear.length  - 4, 4);

	return locDay + "." + locMonth + "." + locYear;
}
