function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}


function hssDate()
{
	this.sDATESEP_DISP = '.';
	this.LaterToday = true;
	this.obj = false;
	this.arFields = new Array('', 'REISEBEGINN', 'REIDAUER','REISEENDE' );
	this.oneDay = 1000 * 60 * 60 * 24;
	this.halfDay = 1000 * 60 * 60 * 12;

	
	this.Attach = function(objDate)	{
		this.obj = objDate;
	}
	
	this.Clear = function()	{
		this.obj.value = '';
	}
	
	this.Auto = function () {
		s = trim(this.obj.value);
		this.obj.value = this.AutoSenseDate(s);
	}
	
	this.DateToStr = function (dt){
		sDate = "";
		sDate = sDate + this.ZeroLead( dt.getDate() );
		sDate = sDate.concat( this.sDATESEP_DISP );
		sDate = sDate.concat( this.ZeroLead( dt.getMonth() + 1) );
		sDate = sDate.concat( this.sDATESEP_DISP );
		sDate = sDate.concat( this.YearMM( dt.getUTCFullYear() ) );
		return sDate;
	}	
	
	this.AutoSenseDate = function (sDATE) {
		sDATE = sDATE.replace(/-/, ".");   sDATE = sDATE.replace(/-/, ".");
		
		if( sDATE.indexOf(".") == 2 )
		{
			if( sDATE.length == 3 )
				sDATE = sDATE.substr(0,2);
			else if( sDATE.length == 5 )
			{
				sDATE = sDATE.substr(0,2) + sDATE.substr(3,2);
			}
			else if( sDATE.length == 6 && sDATE.substr(3,10).indexOf(".") == 2 )
			{
				sDATE = sDATE.substr(0,2) + sDATE.substr(3,2);
			}
		}
		
		if( sDATE.indexOf(".") == -1 )
		{
			dNow = new Date();
			if( sDATE.length == 2 )
			{
				iYear = dNow.getUTCFullYear();
				sMM = this.ZeroLead( dNow.getMonth() + 1);
				if( sMM < 10 ) sMM = "0" + sMM;
				sDATE += this.sDATESEP_DISP +  sMM + this.sDATESEP_DISP;
				sDATE += this.ZeroLead( iYear );
			}
			else if( sDATE.length == 4 )
			{
				iYear = dNow.getUTCFullYear();
				sTT = sDATE.substr( 0, 2);
				sMM = sDATE.substr( 2, 2);
				dt1 = new Date( iYear, sMM-1, sTT );	
				
				if( this.LaterToday == true )
					if( dNow.getTime() >= (dt1.getTime() + this.oneDay) )	iYear++;
				
				sDATE = sTT + this.sDATESEP_DISP + sMM + this.sDATESEP_DISP;
				sDATE += this.ZeroLead( iYear );
			}
			else if( sDATE.length == 6 )
			{
				sTT = sDATE.substr( 0, 2);
				sMM = sDATE.substr( 2, 2);
				sYY = sDATE.substr( 4, 2);
				sDATE = sTT + this.sDATESEP_DISP + sMM + this.sDATESEP_DISP + sYY;
			}
			else if( sDATE.length == 8 )
			{
				sTT = sDATE.substr( 0, 2);
				sMM = sDATE.substr( 2, 2);
				sYYYY = sDATE.substr( 4, 4);
				sDATE = sTT + this.sDATESEP_DISP + sMM + this.sDATESEP_DISP + sYYYY;
			}
		}
		sDATE = sDATE.replace("\.", this.sDATESEP_DISP); sDATE = sDATE.replace("\.", this.sDATESEP_DISP);
		return sDATE;
	}
	
	//--- Führende Null ergänzen
	this.ZeroLead = function (x) {
		if( x < 10 ) x = "0" + x;
		return x;
	}
	
	//--- macht aus Date-String ein Datumsobject
	this.StrToDate = function(sDATE)
	{
		pos1 = sDATE.indexOf(".");
		if( pos1 == -1 )  pos1 = sDATE.indexOf("-");
		if( pos1 == -1 )
			return;
			
		dd = sDATE.substr( 0, pos1 );
		sDATE = sDATE.substr( pos1 +1, 25 );
		pos1  = sDATE.indexOf(".");
		if( pos1 == -1 )  pos1 = sDATE.indexOf("-");
		if( pos1 == -1 )
			return;
		mm = sDATE.substr( 0, pos1 );
		mm = mm - 1;
		var yyyy = sDATE.substr( pos1 +1, 25 );
		yyyy = yyyy * 1;
		if( yyyy < 20 ) yyyy += 2000;
		
		return new Date( yyyy, mm, dd );	
	}
	
	//--- Differenz zwischen zwei Datums in Tagen
	this.DiffDateDay = function(date1,date2)
	{		
		//--- Wenn Strings, dann in Datumsobjecte verwandeln
		if(typeof(date1) != "object")
		{
			date1 = this.StrToDate(date1);
		}
		if(typeof(date2) != "object")
		{
			date2 = this.StrToDate(date2);
		}
		
		date1 = date1.getTime();
		date2 = date2.getTime();
		if(date1 > date2)
		{
			return false;
		}
		
		var tage = (date2 - date1) / this.oneDay;		
		return Math.round(tage);		
	}
	
	this.SelChangeDate = function(iField, iDiffDay)
	{
		dot = '.';
		objBEGINN   = document.getElementById( this.arFields[1] );
		objREIDAUER = document.getElementById( this.arFields[2] );
		objENDE     = document.getElementById( this.arFields[3] );

		sDATE = this.AutoSenseDate( objBEGINN.value );
		dtBEGIN = this.StrToDate( sDATE);
		var countDays;
		if( objREIDAUER.value.indexOf("T") != -1 ) iDiffDay = 1;
		countDays = parseInt(objREIDAUER.value) - iDiffDay;

		if( countDays < 0 )
			return;
		if( iField == 2 )
		{
			if( objBEGINN.value == '' )
				iField = 3;
			else
				iField = 1;
		}

		if( iField == 1 )
		{
			if(dtBEGIN)
			{
				dt = new Date( dtBEGIN.getTime() + this.oneDay * countDays + this.halfDay);
				sTo = "";

				sTo = sTo.concat( this.ZeroLead( dt.getDate() ) );
				sTo = sTo.concat( this.sDATESEP_DISP );
				sTo = sTo.concat( this.ZeroLead( dt.getMonth() + 1) );
				sTo = sTo.concat( this.sDATESEP_DISP );
				sTo = sTo.concat( this.ZeroLead(dt.getFullYear()) );
				objENDE.value = sTo;
			}
		}
		else if( iField == 3 )
		{
			sDATE2 = this.AutoSenseDate( objENDE.value );
			dtEND = this.StrToDate( sDATE2);
			
			if(dtEND)
			{
				dt = new Date( dtEND.getTime() - this.oneDay * countDays );
				sFrom = "";
				
				sFrom = sFrom.concat( this.ZeroLead( dt.getDate() ) );
				sFrom = sFrom.concat( this.sDATESEP_DISP );
				sFrom = sFrom.concat( this.ZeroLead( dt.getMonth() + 1));
				sFrom = sFrom.concat( this.sDATESEP_DISP );
				sFrom = sFrom.concat( this.ZeroLead(dt.getFullYear()) );

				objBEGINN.value = sFrom;
			}
		}
	}
}

function OnBlurDate(objDate)
{
	d = new hssDate();
	d.Attach(objDate);
	d.Auto();
}

function OnBlurDateNL(objDate)
{
	d = new hssDate();
	d.sDATESEP_DISP = '-';
	d.Attach(objDate);
	d.Auto();
}

function OnBlurDateRange(objDate, iField)
{
	d = new hssDate();
	d.sDATESEP_DISP = '.';
	if( iField != 2 )
	{
		d.Attach(objDate);
		d.Auto();
	}
	d.SelChangeDate(iField,0);
}


function OnBlurDateRangeNL(objDate, iField)
{
	d = new hssDate();
	d.sDATESEP_DISP = '-';
	if( iField != 2 )
	{
		d.Attach(objDate);
		d.Auto();
	}
	d.SelChangeDate(iField,0);
}