/*--- Eine Klasse mit Datums Hilfsfunktionen
- arDatum ist ein Array mit 3 Spalten: 0 = heute, 1 = haupt  Datum, 2 = Cache für ein Vergleichsdatum

*/
function cDate(datum,trenner,isForBirthday)
{
	this.arDatum 			= new Array;	//--- ein oder mehrere Datümer die bearbeitet werden sollen	
	this.isForBirthday		= false;		//--- Funktionen für Geburtstags eingabe zugeschnitten
	this.trenner 			= false;		//--- Datumtrenner (de = ".", nl = "-")	
	
	this.__construct = function(datum,trenner,isForBirthday)
	{
		this.trenner 		= (trenner) ? trenner : ".";
//		this.trenner		= ".";
		this.isForBirthday	= (isForBirthday) ? isForBirthday : false;

		this.arDatum[0]		= new Date();	//--- immer das aktuelle Datum		
		this.setDate(datum);
	}	
	
	//--- das zu bearbeitende Datum setzen		
	this.setDate = function(datum)
	{
		if(!datum)
		{
			datum = new Date();
		}
		
		datumZahl = 1;
		//--- wenn datum bereits ein Objekt ist einfach übergeben, andernfalls in Object umwandeln		
		if(typeof(datum) == "object")
		{
			this.arDatum[datumZahl] = datum;
		}else{
			this.arDatum[datumZahl] = datum.split(this.trenner);
			
			if(this.arDatum[datumZahl].length == 1)
			{				
				this.arDatum[datumZahl][1] = this.getDate("monat",0);
				this.arDatum[datumZahl][2] = this.getDate("jahr",0);
			}else if(this.arDatum[datumZahl].length == 2)
			{
				this.arDatum[datumZahl][2] = this.getDate("jahr",0);
			}			
			
			if(this.arDatum[datumZahl][0].length == 0 || this.arDatum[datumZahl][0].length > 2)
			{
				this.arDatum[datumZahl][0] = this.getDate("tag",0);
			}

			if(this.arDatum[datumZahl][1].length == 0 || this.arDatum[datumZahl][1].length > 2)
			{
				this.arDatum[datumZahl][1] = this.getDate("monat",0);
			}

			if(this.arDatum[datumZahl][2].length == 0)
			{
				this.arDatum[datumZahl][2] = this.getDate("jahr",0);
			}
			this.arDatum[datumZahl] = new Date(this.makeFullYear(this.arDatum[datumZahl][2])*1,this.arDatum[datumZahl][1]*1 - 1,this.arDatum[datumZahl][0]*1);
		}
		return true;
	}

	//--- das zu bearbeitende Datum setzen
	this.setTrenner = function(trenner)
	{
		this.trenner = trenner;
	}
	
	//--- hängt wenn nötig eine Führende Null an Monat oder Tag
	//--- !!!!!!!!!!!!!!!!!!!! gibt einen String zurück !!!!!!!!!!!!!!!!!!!!!!!!
	this.addZero = function(zahl)
	{
		zahl = zahl + "";		//--- einen String aus Month machen
		return (zahl.length < 2) ? "0" + zahl : zahl;
	}

	this.makeFullYear = function(jahr)
	{		
		if(jahr.length < 4)
		{   
			var datum = new Date();
			datum = "" + datum.getFullYear();
			//--- Wenn das Jahr 2 Stellig ist und die Jahre größer sind als Dieses Jahr + 5 dann addiere die letzten 2 Ziffern des letzten Jahrhunderts
			if(jahr.length == 2 && jahr*1 > parseFloat(datum.substr(2,2)) + 5 && this.isForBirthday)
			{
				jahr = datum.substr(0,2) - 1 + jahr;
			}else{
				jahr = datum.substr(0,4 - jahr.length) + jahr;
			}
		}
		return jahr;
	}
	
	//--- gibt volles Datum oder Teile davon zurück
	this.getDate = function(part,datumZahl)
	{
		if((!datumZahl && datumZahl !== 0) || (datumZahl < 0 && datumZahl > 1))
		{
			datumZahl = 1;
		}

		var datum = "";		
		switch(part)
		{
			case "tag":				
				datum = this.addZero(this.arDatum[datumZahl].getDate());
				break;
			case "monat":
				datum = this.addZero(this.arDatum[datumZahl].getMonth() + 1);
				break;
			case "jahr":
				datum = this.arDatum[datumZahl].getFullYear();
				break;
			case "tagmonat":
				datum = this.getDate("tag",datumZahl) + this.trenner + this.getDate("monat",datumZahl);
				break;			
			case "monatjahr":
				datum = this.getDate("monat",datumZahl) + this.trenner + this.getDate("jahr",datumZahl);
				break;			
			default:
				datum = this.getDate("tag",datumZahl) + this.trenner + this.getDate("monat",datumZahl) + this.trenner + this.getDate("jahr",datumZahl);
				break;
		}
		
		return datum;
	}	
	
	this.getWeekday = function()
	{
		var weekday  = this.arDatum[1].getDay() - 1;
		if(weekday < 0)
		{
			weekday += 7;
		}
		return weekday;
	}
	
	//--- vergleicht zwei Datum Felder ob das eine kleiner ist als das andere
	this.compDate = function(operator,datum2)
	{		
		if(!datum2)
		{
			return false;
		}		

		var datum = new cDate(datum2,this.trenner,this.isForBirthday);		
		datum.setDate(datum2);
		datum2 = datum;
		
		datum = "" + this.getDate("jahr") + this.getDate("monat") + this.getDate("tag");
		datum2 = "" + datum2.getDate("jahr") + datum2.getDate("monat") + datum2.getDate("tag");
		
		if(operator == "=")
		{
			return (datum == datum2);
		}else if(operator == ">=")
		{			
			return (datum >= datum2);
		}else if(operator == "<=")
		{
			return (datum <= datum2);
		}else if(operator == "<")
		{	
			return (datum < datum2);
		}else{
			return (datum > datum2);
		}
	}

/*	function getVolljaehrigkeit()
	{
		var today
		
		return tageZumGeburtsTag;
	}
*/
	this.calcDate = function(zahl,type)
	{
		zahl = parseFloat(zahl);
		if(!zahl || zahl == 0)
		{
			return false;
		}
		
		var tag = this.getDate("tag") * 1;
		var monat = this.getDate("monat") * 1;
		var jahr = this.getDate("jahr") * 1;
		
		if(type == "monat")
		{
			monat += zahl;
		}else if(type == "jahr")
		{
			jahr += zahl;
		}else{
			tag += zahl;
		}		
	
		this.arDatum[1]	= new Date(jahr,monat-1,tag);		
	}
	
	this.getTime = function()
	{
		return this.arDatum[1].getTime();
	}

	//--- Rechnet die dauer zwischen zwei Datums aus
	this.getPeriod = function(datum2)
	{
		var datum2 = new cDate(datum2,this.trenner,this.isForBirthday);		
		datum2 = datum2.getTime();
		
		datum = this.getTime();
		tag = 60*60*24*1000;
		tage = Math.round(Math.abs(datum - datum2) / tag);
		tage = tage + "";
		tage = tage.split(".");
		return tage[0];
	}
    this.__construct(datum,trenner,isForBirthday);


}

