function Countdown (id, targetDateStr)
{
    this.id = id;
    this.targetDate = new Date(targetDateStr);
    this.updateCountdown();
}

Countdown.prototype.updateCountdown = function ()
{
    var daysElement = document.getElementById(this.id + '_days');
    var timeElement = document.getElementById(this.id + '_time');

    var dateDiff = this.targetDate - new Date();

    if (dateDiff < 0) {
	    document.getElementById(this.id + '_info').innerHTML = "<p id='" + this.id + "_done'>Link has arrived!</p>";
	    return;
    }

    var seconds = dateDiff.valueOf() / 1000;

    var daysRemaining    = calcAge(seconds, 86400, 100000);
    var minutesRemaining = calcAge(seconds, 60, 60);
    var hoursRemaining   = calcAge(seconds, 3600, 24);
    var secondsRemaining = calcAge(seconds, 1, 60);

    daysElement.innerHTML = daysRemaining    + "&nbsp;days";
    timeElement.innerHTML = hoursRemaining   + "&nbsp;hours, "   +
			    minutesRemaining + "&nbsp;minutes, " +
			    secondsRemaining + "&nbsp;seconds";

    var me = this;
    setTimeout(function () {
	me.updateCountdown()
    }, 1000);
}

function calcAge (secs, num1, num2)
{
    return ((Math.floor(secs/num1))%num2).toString();
}
