function cLeistungenKalender(sep)
{
    this.kalender = new Array();
    this.rleids = new Array()
    this.sep = sep;

    this.addNewKalender = function (RLEID, Minimum, tage, vonDat, bisDat)
    {
        this.kalender['RLEID_' + RLEID] = new cLeistungKalender(RLEID, Minimum, tage, this.sep, vonDat, bisDat);
        this.rleids.push(RLEID);
    }

    this.fillFields = function ()
    {
        for (var i = 0; i < this.rleids.length; i++)
            this.kalender['RLEID_' + this.rleids[i]].fillFields();
    }

    this.fillDauerField = function (RLEID)
    {
        this.kalender['RLEID_' + RLEID].fillDauerField();
    }
    
    this.fillBisField = function (RLEID)
    {
        this.kalender['RLEID_' + RLEID].fillBisField();
    }
}

function cLeistungKalender(RLEID, Minimum, tage, sep, vonDat, bisDat)
{
    this.RLEVONDATUM = document.getElementById('RLEVONDATUM' + RLEID);
    this.RLEDAUER = document.getElementById('RLEDAUER' + RLEID);
    this.RLEBISDATUM = document.getElementById('RLEBISDATUM' + RLEID);

    this.leistungsMinimumDauer = Minimum;
    this.RLEID = RLEID;
    if (sep == null)
        this.sep = '.';
    else
        this.sep = sep;

    if (tage != null)
        this.tage = Number(tage);
    else
        this.tage = 0;

	this.__construct = function(vonDat,bisDat)
	{		
		if(vonDat && bisDat)
		{
			//--- Dauer nochmal setzen, wegen Vakaanzkalender, welcher keine dauer zulässt
			var valBeginn = document.getElementById('REISEBEGINN').value;
			var valEnde = document.getElementById('REISEENDE').value;			
			var dateObj = new hssDate();			
			document.getElementById('REIDAUER').value = dateObj.DiffDateDay(valBeginn,valEnde);

			this.fillFields();
			this.RLEVONDATUM.value = vonDat;
			this.RLEBISDATUM.value = bisDat;
			this.RLEDAUER.value = dateObj.DiffDateDay(this.RLEVONDATUM.value,this.RLEBISDATUM.value) + this.tage;
		}
	}
		
    this.fillFields = function()
    {
        //save aktuelle Daten
        var saveanfang = this.RLEVONDATUM.value;
        
        //Felder zurücksetzen
        for (var i = this.RLEVONDATUM.options.length; i >= 0; i--)
            this.RLEVONDATUM.options[i] = null;

        var anfangsdatum = document.getElementById("REISEBEGINN").value;
        if (anfangsdatum == "")
            return;

        var dauer = document.getElementById("REIDAUER").value;
        if (dauer == "")
            return;        

        var leistungsDauer = Number(this.tage) + Number(dauer);
        
        if (leistungsDauer < this.leistungsMinimumDauer)
            return;

        for (i = 0; i < leistungsDauer - this.leistungsMinimumDauer + Number(1); i++)
        {
            var aktDatum = this.addTage(anfangsdatum, i);
            
            if (aktDatum == saveanfang)
                var newOption = new Option(aktDatum, aktDatum, true, true)
            else    
                var newOption = new Option(aktDatum, aktDatum, false, false)

            this.RLEVONDATUM.options[this.RLEVONDATUM.options.length] = newOption;
        }

        this.fillDauerField();
    }

    this.fillDauerField = function()
    {
        var savedauer = this.RLEDAUER.value;

        for (var i = this.RLEDAUER.options.length; i >= 0; i--)
            this.RLEDAUER.options[i] = null;

        var dauer = document.getElementById("REIDAUER").value;
        if (dauer == "")
            return;        

        var anfangsdatum = document.getElementById("REISEBEGINN").value;
        var differenz = (this.parseDatum(this.RLEVONDATUM.value).getTime() - this.parseDatum(anfangsdatum).getTime()) / 86400000;

        var leistungsDauer = Number(this.tage) + Number(dauer);
        if (leistungsDauer < this.leistungsMinimumDauer)
            return;
        
        for (i = this.leistungsMinimumDauer; i <= leistungsDauer - differenz; i++)
        {
            if (i == savedauer)
                var newOption = new Option(i, i, true, true)
            else    
                var newOption = new Option(i, i, false, false)

            this.RLEDAUER.options[this.RLEDAUER.options.length] = newOption;
        }      
        
        this.fillBisField();
    }

    this.fillBisField = function()
    {
        this.RLEBISDATUM.value = '';
        this.RLEBISDATUM.value = this.addTage(this.RLEVONDATUM.value, this.RLEDAUER.value - this.tage);
    }

    this.addTage = function(datum, tage)
    {
        var dateObj = new Date(this.parseDatum(datum).getTime() + Number(tage * 86400000));
        var d = dateObj.getDate();
        var m = Number(dateObj.getMonth()) + Number(1);
        return ((d<10)?'0':'') + d + this.sep + ((m<10)?'0':'') + m + this.sep + dateObj.getUTCFullYear();  
    }

    this.parseDatum = function (datum)
    {
        if (datum.indexOf('-') != -1)
            var splitted = datum.split('-');
        else
            var splitted = datum.split('.');
        
        var Datum = new Date(Number(splitted[2]), Number(splitted[1]) - Number(1), Number(splitted[0]), 0, 0, 0);
        return Datum;
    }

	this.__construct(vonDat,bisDat);
}

