Date.prototype.setISO8601 = function (string) {
	var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
	"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
	"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
	var d = string.match(new RegExp(regexp));

	var offset = 0;
	var date = new Date(d[1], 0, 1);

	if (d[3]) {
		date.setMonth(d[3] - 1);
	}
	if (d[5]) {
		date.setDate(d[5]);
	}
	if (d[7]) {
		date.setHours(d[7]);
	}
	if (d[8]) {
		date.setMinutes(d[8]);
	}
	if (d[10]) {
		date.setSeconds(d[10]);
	}
	if (d[12]) {
		date.setMilliseconds(Number("0." + d[12]) * 1000);
	}
	if (d[14]) {
		offset = (Number(d[16]) * 60) + Number(d[17]);
		offset *= ((d[15] == '-') ? 1 : -1);
	}

	offset -= date.getTimezoneOffset();
	time = (Number(date) + (offset * 60 * 1000));
	this.setTime(Number(time));
}
Date.prototype.toISO8601String = function (format, offset) {
	/* accepted values for the format [1-6]:
     1 Year:
       YYYY (eg 1997)
     2 Year and month:
       YYYY-MM (eg 1997-07)
     3 Complete date:
       YYYY-MM-DD (eg 1997-07-16)
     4 Complete date plus hours and minutes:
       YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
     5 Complete date plus hours, minutes and seconds:
       YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
     6 Complete date plus hours, minutes, seconds and a decimal
       fraction of a second
       YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
    */
	if (!format) {
		var format = 6;
	}
	if (!offset) {
		var offset = 'Z';
		var date = this;
	} else {
		var d = offset.match(/([-+])([0-9]{2}):([0-9]{2})/);
		var offsetnum = (Number(d[2]) * 60) + Number(d[3]);
		offsetnum *= ((d[1] == '-') ? -1 : 1);
		var date = new Date(Number(Number(this) + (offsetnum * 60000)));
	}

	var zeropad = function (num) {
		return ((num < 10) ? '0' : '') + num;
	}

	var str = "";
	str += date.getUTCFullYear();
	if (format > 1) {
		str += "-" + zeropad(date.getUTCMonth() + 1);
	}
	if (format > 2) {
		str += "-" + zeropad(date.getUTCDate());
	}
	if (format > 3) {
		str += "T" + zeropad(date.getUTCHours()) +
		":" + zeropad(date.getUTCMinutes());
	}
	if (format > 5) {
		var secs = Number(date.getUTCSeconds() + "." +
			((date.getUTCMilliseconds() < 100) ? '0' : '') +
			zeropad(date.getUTCMilliseconds()));
		str += ":" + zeropad(secs);
	} else if (format > 4) {
		str += ":" + zeropad(date.getUTCSeconds());
	}

	if (format > 3) {
		str += offset;
	}
	return str;
}

// Methode ltrim (left trim) zum String-Objekt hinzufügen
// Diese Methode löscht, ausgehend vom Anfang der Zeichenkette,
// alle Zeichen, die bei deren Vorkommen entfernt werden sollen.
// Der Parameter clist ist optional und gibt eine Liste von Zeichen vor,
// die von der Methode herausgelöscht werden sollen.
// Wird dieser Parameter nicht übergeben, so werden alle Whitespaces
// gelöscht, die am Anfang des Strings stehen.
String.prototype.ltrim = function (clist) {
	// Wurde eine Zeichenkette mit den zu entfernenden
	// Zeichen übergeben?
	if (clist)
		// In diesem Fall sollen nicht Whitespaces, sondern
		// alle Zeichen aus dieser Liste gelöscht werden,
		// die am Anfang des Strings stehen.
		return this.replace (new RegExp ('^[' + clist + ']+'), '');
	// Führende Whitespaces aus dem String entfernen
	// und das resultierende String zurückgeben.
	return this.replace (/^\s+/, '');
};
// Die Methode rtrim (right trim) erweitert ebenfalls das String-Objekt.
// Im Gegensatz zu ltrim wird hier aber vom Ende des Strings ausgegangen.
// Es werden also alle Whitespaces bzw. die Zeichen aus der übergebenen
// Zeichenliste gelöscht, die am Ende des Strings stehen.
String.prototype.rtrim = function (clist) {
	// Zeichenkette mit den zu entfernenden Zeichen angegeben?
	if (clist)
		// Zeichen aus der Liste, die am Ende des String stehen
		// löschen.
		return this.replace (new RegExp ('[' + clist + ']+$'), '');
	// Whitespaces am Ende des Strings ertfernen und dann das Ergebnis
	// dieser Operation zurückgeben.
	return this.replace (/\s+$/, '');
};
String.prototype.trim = function (clist) {
	// Wird der Parameter clist angegeben, so werden statt der Whitespaces
	// die in dieser Variablen angegebenen Zeichen "getrimmt".
	if (clist)
		// Führende und abschließende Zeichen aus der Liste entfernen.
		return this.ltrim (clist).rtrim (clist);
	// Whitespaces vom Anfang und am Ende entfernen
	return this.ltrim ().rtrim ();
};

function IsNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;


	for (i = 0; i < sText.length && IsNumber == true; i++) {
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;

}

