;(function($){
	$.simplecountdown = function(elements, params) {
		
		var elapsedTime = 0,
			aCounters = [];
		    domLoaded = false
		    params = $.extend({
		    	"texts": {
				  	"days": "% days -",
  					"day": "% day -",
  					"hours": "%h",
  					"hour": "%h",
  					"minutes": "%m",
  					"minute": "%m",
  					"seconds": "%s",
  					"second": "%s"
  				},
			  	"elements": {
  					"days": "p.days",
  					"hours": "p.hours",
  					"minutes": "p.minutes",
  					"seconds": "p.seconds"
  				},
				  zeroCallback: function(elt) {},
				  hideOnZero: true
		    }, params);
		
		$(function() {
			$.each(elements, function() {
				aCounters.push( $(this[0]).data("endTime", this[1]) );
			});
			domLoaded = true;
		});
		
		window.setInterval(function() {
			elapsedTime++;
			
			if (domLoaded) {
				$.each(aCounters, function(i) {
					updateElement(aCounters[i], secondsToDays(aCounters[i].data("endTime") - elapsedTime));
				});
			}
			
		}, 1000);
		
		function updateElement(jElt, aTimeData) {
			
			// Days
			if ((aTimeData[0] > 0) || !params.hideOnZero) {
				jElt.find(params.elements.days).html(params.texts[((aTimeData[0] === 1)? "day":"days")].replace("%", aTimeData[0]));
			} else {
				jElt.find(params.elements.days).hide();
			}
			
			// Hours
			if ((aTimeData[1] > 0 || aTimeData[0] > 0) || !params.hideOnZero) {
				jElt.find(params.elements.hours).html(params.texts[((aTimeData[1] === 1)? "hour":"hours")].replace("%", aTimeData[1]));
			} else {
				jElt.find(params.elements.hours).hide();
			}
			
			// Minutes
			if ((aTimeData[2] > 0 || aTimeData[1] > 0 || aTimeData[0] > 0) || !params.hideOnZero) {
				jElt.find(params.elements.minutes).html(params.texts[((aTimeData[2] === 1)? "minute":"minutes")].replace("%", aTimeData[2]));
			} else {
				jElt.find(params.elements.minutes).hide();
			}
			
			// Seconds
			jElt.find(params.elements.seconds).html(params.texts[((aTimeData[3] === 1)? "second":"seconds")].replace("%", aTimeData[3]));
			
			// Zero : removes element
			if (aTimeData[3] === 0 && aTimeData[2] === 0 && aTimeData[1] === 0 && aTimeData[0] === 0) {
				for (i in aCounters) {
					if (aCounters[i] === jElt) {
						params.zeroCallback(aCounters.splice(i, 1)[0]);
						break;
					}
				}
			}
		};
		
		function secondsToDays(time) {
			
			var days = Math.floor(time/86400);
			
			time -= (days * 86400);
			
			var hours = Math.floor(time/3600);
			time -= (hours * 3600);
			
			var minutes = Math.floor(time/60);
			
			var seconds = time - (minutes * 60);
			
			return [days, hours, minutes, seconds];
		};
		
	};
})(jQuery);
