
window.DateMagic = new Object();
window.DateMagic.dateInfo = function(dateObj){
	/* RETURNS AN OBJECT WITH THE FOLLOWING DATE INFORMATION:
	epoch=123456789, [interger] epoch timestamp in seconds
	jsepoch =123456789, [interger] epoch timestamp in milliseconds
	date='12/31/2008', [string] date in mm/yy/yyyy
	time='23:59:59', [string] time in hh:mm:ss
	seconds=59, [interger] raw seconds unformatted, no 0 padding
	fullseconds=01, [string]  seconds with 0 padding
	minutes=59,  [interger] raw minutes unformated, no 0 padding
	fullminutes=01, [string] minutes with padding.
	hours=23, [interger] raw minutes unformatted, no 0 padding
	fullhours=01, [string] hours with padding
	day=31, [interger] day of month, no padding
	fullday=01, [string] day of month with padding
	month=0, [interger] raw month, 0=January
	fullmonth=01, [string] month with padding, 01=January,
	monthlabel='Jan', [string] written month Jan, Feb, etc
	fullyear=2008, [string] 4 digit year: 2008
	weekday=0, [interger] raw weekday; 0=Sunday
	weekdaylabel=Sun, [string] week day label: Mon, Tue, Etc
	*/
		

		var INFO = new Object();
		var MONTHLABELS = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
		var DAYLABELS = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat');
	
		INFO.month = parseInt(dateObj.getMonth());
		INFO.fullmonth = INFO.month + 1;
		INFO.day = parseInt(dateObj.getDate());
		INFO.year = parseInt(dateObj.getFullYear());
		INFO.hours = parseInt(dateObj.getHours());
		INFO.minutes = parseInt(dateObj.getMinutes());
		INFO.weekday = parseInt(dateObj.getDay());
		
		INFO.fullmonth = INFO.fullmonth.toString();
		INFO.fullday = INFO.day.toString();
		INFO.fullhours = INFO.hours.toString();
		INFO.fullminutes = INFO.minutes.toString();
		INFO.fullyear = INFO.year.toString();		

		INFO.fullmonth = INFO.fullmonth.replace(/^(\d)$/, "0$1");	
		INFO.fullday = INFO.fullday.replace(/^(\d)$/, "0$1");
		INFO.fullhours = INFO.fullhours.replace(/^(\d)$/, "0$1");
		INFO.fullminutes = INFO.fullminutes.replace(/^(\d)$/, "0$1");
			
		INFO.jsepoch = parseInt(dateObj.getTime()); // Javascript Epoch in Milliseconds
		INFO.epoch = parseInt(Math.round(INFO.jsepoch/1000)); // perl compatible epoch (seconds)
		INFO.date = INFO.fullmonth + "/" + INFO.fullday + "/" + INFO.fullyear;
		INFO.time = INFO.fullhours + ":" +  INFO.fullminutes;
		INFO.weekdaylabel = DAYLABELS[INFO.weekday];
		INFO.monthlabel = MONTHLABELS[INFO.month];
		INFO.timestamp = INFO.date + " " + INFO.time;

		return INFO;
}
	
	
window.DateMagic.addTime = function(dateObj, difference){
	
		/*Increase or decrease dates		
		input should be a string in following format	
		+2y0h5d1w
		*/
		
		var operation = "+"; //plus or minus
		var years;
		var weeks;
		var days;
		var hours;
		var seconds;
		var total = 0;
		
		var opMatch = /^(\+|\-)/.exec(difference);
		if (opMatch[1] == "-")
		{
			operation = "-";
		}
		
		
		var matchRe = /(\d+\w)/g;
		while (daMatch = matchRe.exec(difference))
		{
			for (var i = 1; i <daMatch.length; i++)
			{
				var parts = /(\d+)(\w)/.exec(daMatch[i]);
				switch (parts[2]){
				case "y" :
					total += parseInt(parts[1]) * 86400 * 365 * 1000;
					break;
			
				case "w" :
					total += parseInt(parts[1]) * 86400 * 7 * 1000;
					break;

				case "d" :
					total += parseInt(parts[1]) * 86400 * 1000;
					break;

				case "h" :
					total += parseInt(parts[1]) * 3600 * 1000;
					break;

				case "m" :
					total += parseInt(parts[1]) * 60 * 1000;
					break;

				case "s" :
					total += parseInt(parts[1]) * 1000;
					break;

				default : 
					// format error
					break;
				}
			}
		}
		
		
		var epoch = parseInt(dateObj.getTime()); // get current epoch	
		if (operation == "+")
		{
			epoch = epoch + total;
		}
		else if (operation == "-")
		{
			epoch = epoch - total;
		}

		var newDate = new Date();
		newDate.setTime(epoch);
		return newDate;
}


