//
// JavaScript-Datei zur Bearbeitung von Datumsobjekten.
// <p>
// </p>
// Diese JavaScript-Datei benoetigt die Prototype-Library in der Version 1.4.0.
//

var DateHelper_Sunday = 0;
var DateHelper_Monday = 1;
var DateHelper_Tuesday = 2;
var DateHelper_Wednesday = 3;
var DateHelper_Thursday = 4;
var DateHelper_Friday = 5;
var DateHelper_Saturday = 6;

var DateHelper_MillisPerSecond = 1000;
var DateHelper_MillisPerMinute = 60000;
var DateHelper_MillisPerHour = 3600000;
var DateHelper_MillisPerDay = 86400000;

var DateHelper =
{

	getFirstOfMinute : function(date)
	{
		var result = new Date();
		var time = date.getTime();
		result.setTime(time);
		result.setMilliseconds(0);
		result.setSeconds(0);
		return result;
	},
	
	getFirstOfDay : function(date)
	{
		var result = new Date();
		var time = date.getTime();
		result.setTime(time);
		result.setMilliseconds(0);
		result.setSeconds(0);
		result.setMinutes(0);
		result.setHours(0);
		return result;
	},

	getLastOfDay : function(date)
	{
		var result = new Date();
		var time = date.getTime();
		result.setTime(time);
		result.setMilliseconds(999);
		result.setSeconds(59);
		result.setMinutes(59);
		result.setHours(23);
		return result;
	},

	addMinutes : function(date, minutes)
	{
		return DateHelper.addMillis(date, minutes * DateHelper_MillisPerMinute);
	},
	
	addHours : function(date, hours)
	{
		return DateHelper.addMillis(date, hours * DateHelper_MillisPerHour);
	},

	addDays : function(date, days)
	{
		return DateHelper.addMillis(date, days * DateHelper_MillisPerDay);
	},

	addMillis : function(date, millis)
	{
		var result = new Date();
		var time = date.getTime();
		time = time + millis;
		result.setTime(time);
		return result;
	},
	
	isDay : function(date, day)
	{
		return date.getDay() == day;
	},
	
	equals : function(firstDate, secondDate)
	{
		return firstDate.getTime() == secondDate.getTime();
	},

	equalsMinute : function(firstDate, secondDate)
	{
		var fd = DateHelper.getFirstOfMinute(firstDate);
		var sd = DateHelper.getFirstOfMinute(secondDate);
		return fd.getTime() == sd.getTime();
	},
	
	before : function(firstDate, secondDate)
	{
		return firstDate.getTime() < secondDate.getTime();
	},
	
	after : function(firstDate, secondDate)
	{
		return firstDate.getTime() > secondDate.getTime();
	},
	
	equals : function(firstDate, secondDate)
	{
		return firstDate.getTime() == secondDate.getTime();
	},
	
	isSameDay : function(firstDate, secondDate)
	{
		return firstDate.getYear() == secondDate.getYear() && firstDate.getMonth() == secondDate.getMonth() && firstDate.getDate() == secondDate.getDate();
	},
	
	isSameMonth : function(firstDate, secondDate)
	{
		return firstDate.getYear() == secondDate.getYear() && firstDate.getMonth() == secondDate.getMonth();
	}, 
		
	getDayDifference : function(firstDate, secondDate)
	{
		var firstTime = DateHelper.getFirstOfDay(firstDate).getTime();
		var secondTime = DateHelper.getFirstOfDay(secondDate).getTime();
		var diffTime = secondTime - firstTime;
		var diffDays = diffTime / DateHelper_MillisPerDay;
		return diffDays;
	},
	
	getDayArray : function(firstDate, secondDate)
	{
		var dayArray = new Array();
		var currentDate = firstDate;
		var dayDifference = DateHelper.getDayDifference(firstDate, secondDate);
		for(var d = 0; d <= dayDifference; d++)
		{
			currentDate = DateHelper.addDays(firstDate, d);
			dayArray[d] = currentDate;
		}
		return dayArray;	
	},
	
	toArrayString : function(dayArray)
	{
		var arrayString = "";
		if(dayArray)
		{
			for(var d = 0; d < dayArray.length; d++)
			{
				arrayString = arrayString.concat(dayArray[d].getTime());
				if(d < dayArray.length-1)
				{
					arrayString = arrayString.concat(",");
				}
			}
		}
		return arrayString;
	},
	
	toArrayStringExtendedForTermine : function(dayArray)
	{
		var arrayString = "";
		if(dayArray)
		{
			for(var d = 0; d < dayArray.length; d++)
			{
				if (dayArray[d] != null)
				{
					if (typeof dayArray[d] == "object")
					{
						arrayString = arrayString.concat(dayArray[d].getTime());

					}
					else
					{
						arrayString = arrayString.concat(dayArray[d]);
					}					
				}
				if(d < dayArray.length-1)
				{
					var indexShift = 4;
					var separator = (d % indexShift == (indexShift - 1)) ? ";" : ",";
					arrayString = arrayString.concat(separator);
				}
			}
		}
		return arrayString;
	},
	
	toDayArray : function(dayArrayString)
	{
		var dayArray = new Array();
		if(dayArrayString)
		{
			var dayArraySplit = dayArrayString.split(",");
			for(var d = 0; d < dayArraySplit.length; d++)
			{
				var date = new Date();
				date.setTime(dayArraySplit[d]);
				dayArray[d] = date;
			}
		}
		return dayArray;
	},
	
	toDayArrayExtendedForTermine : function(dayArrayString)
	{
		var dayArray = new Array();
		var dayArrayIndex = 0;
		if(dayArrayString)
		{
			var lineSplit = dayArrayString.split(";");
			for(var i = 0; i < lineSplit.length; i++)
			{
				var dayArraySplit = lineSplit[i].split(",");
				for(var d = 0; d < dayArraySplit.length; d++)
				{
					// Keine negativen Zahlen bei Date erlauben
					if (dayArraySplit[d] != null && dayArraySplit[d].length > 0 && !(dayArraySplit[d].charAt(0) == "-"))
					{
						try
						{
							var date = new Date();
							date.setTime(dayArraySplit[d]);
							dayArray[dayArrayIndex++] = date;
						}
						catch(err)
						{
							// weitermachen
							var errDesc = err.description;
							dayArray[dayArrayIndex++] = -99;
						}
					}
					else
					{
						dayArray[dayArrayIndex++] = -1;
					}
				}
			}
		}
		return dayArray;
	},
	
	containsDateMinute : function(dateArray, date)
	{
		for(var d = 0; d < dateArray.length; d++)
		{
			if(DateHelper.equalsMinute(date, dateArray[d]))
				return true;			
		}	
		return false;
	},
	
	toString : function(date, pattern)
	{
		if (date != null) {
			if (pattern != null && pattern.length > 0)
			{
				var text = pattern;
				text = text.replace("$d", DateHelper.internalFill(date
						.getDate(), "0", 2));
				text = text.replace("$M", DateHelper.internalFill(date
						.getMonth() + 1, "0", 2));
				text = text.replace("$y", date.getFullYear());
				text = text.replace("$h", DateHelper.internalFill(date
						.getHours(), "0", 2));
				text = text.replace("$m", DateHelper.internalFill(date
						.getMinutes(), "0", 2));
				return text;
			}
			else
			{
				return date.toLocaleString();
			}
		}
		else
		{
			return "";
		}
	},

	internalFill : function(text, fillChar, length)
	{
		var resultText = "".concat(text);
		while(resultText.length < length)
		{
			resultText = fillChar.concat(resultText);
		}
		return resultText;
	}
	
};
