$(document).ready(function () {
	var systemTime = $('#systemTime').text();
	var myTime = Math.round(new Date().getTime() / 1000.0); // epoch time
	var baseDate = new Date();
	baseDate.setUTCFullYear(2012);
	baseDate.setUTCMonth(0);
	baseDate.setUTCDate(1);
	baseDate.setUTCHours(10); // start time
	baseDate.setUTCMinutes(0);
	baseDate.setUTCSeconds(0);
	baseDate.setUTCMilliseconds(0);

	$('#systemTime').data({
		magicNumber: ((23-10)*3600)/3333,
		baseDate: baseDate,
		timeDiff: systemTime-myTime,
		coffeeCounter: function () {
			var time = new Date();
			time.setSeconds( time.getSeconds() + $('#systemTime').data('timeDiff') );

//			console.log(time.toUTCString());

			// calculate number of cups
			var today = new Date();
			today.setUTCFullYear(time.getUTCFullYear());
			today.setUTCMonth(time.getUTCMonth());
			today.setUTCDate(time.getUTCDate());
			today.setUTCHours(10); // start time
			today.setUTCMinutes(0);
			today.setUTCSeconds(0);
			today.setUTCMilliseconds(0);

			// don't begin before base date
			if (today.getTime() < baseDate.getTime()) {
				return;
			}
			// day diff
			var dayDiff = Math.abs(DateDiff.inDays(today, $('#systemTime').data('baseDate')));

			var dayDiffSeconds = 0;
			if (time.getUTCHours() >= 10 && time.getUTCHours() < 23) {
				dayDiffSeconds = DateDiff.inSeconds(today, time); // only add cups for the day time between 10:00 and 23:00
			} else if (time.getUTCHours() >= 23) {
				dayDiff += 1; // add a day after 23:00
			}
		
			var cups = (dayDiff*3333) + Math.floor(dayDiffSeconds / $('#systemTime').data('magicNumber'));
			
			$('#coffeeCounter').text(cups);
		}
	}).data('coffeeCounterTimer', setInterval($('#systemTime').data('coffeeCounter'),1000));

	// call initial
	$('#systemTime').data('coffeeCounter')();
});

var DateDiff = {
	inSeconds : function(d1, d2) {
		return parseInt((d2.getTime() - d1.getTime()) / (1000));
	},
		
	inDays : function(d1, d2) {
		return parseInt((d2.getTime() - d1.getTime()) / (24 * 3600 * 1000));
	},

	inWeeks : function(d1, d2) {
		return parseInt((d2.getTime() - d1.getTime()) / (24 * 3600 * 1000 * 7));
	},

	inMonths : function(d1, d2) {
		var d1Y = d1.getFullYear();
		var d2Y = d2.getFullYear();
		var d1M = d1.getMonth();
		var d2M = d2.getMonth();

		return (d2M + 12 * d2Y) - (d1M + 12 * d1Y);
	},

	inYears : function(d1, d2) {
		return d2.getFullYear() - d1.getFullYear();
	}
}

