;(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,
                  addZeros: false
            }, 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) {
                if ( aCounters[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("%", ((params.addZeros && aTimeData[0]<10)?"0"+aTimeData[0]: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("%", ((params.addZeros && aTimeData[1]<10)?"0"+aTimeData[1]: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("%", ((params.addZeros && aTimeData[2]<10)?"0"+aTimeData[2]:aTimeData[2])));
            } else {
                jElt.find(params.elements.minutes).hide();
            }
            
            // Seconds
	    if(aTimeData[3] > 0 || aTimeData[2] > 0 || aTimeData[1] > 0 || aTimeData[0] > 0 || !params.hideOnZero){
            	jElt.find(params.elements.seconds).html(params.texts[((aTimeData[3] === 1)? "second":"seconds")].replace("%", ((params.addZeros && aTimeData[3]<10)?"0"+aTimeData[3]:aTimeData[3])));
	    }

            // Zero : removes elements
	    if (aTimeData[3] === 0 && aTimeData[2] === 0 && aTimeData[1] === 0 && aTimeData[0] === 0) {
		for (i in aCounters) {
                    if (aCounters[i] == jElt) {
                        params.zeroCallback(aCounters.slice(i,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);

