/**
 * Returns diff between two times
 */
function calcage(secs, num1, num2) {
	LeadingZero = true;
  s = ((Math.floor(secs/num1))%num2).toString();
  if (LeadingZero && s.length < 2)
    s = "0" + s;
  return s;
}

/**
 * Does the actual formatting
 */
function CountBack(secs, CountStepper, SetTimeOutPeriod, CountActive) {
	
	if (secs >= 86400)
	{
		var DisplayFormat = "%%D%%d:%%H%%u:%%M%%m:%%S%%s";
	}
	else if (secs >= 3600)
	{
		var DisplayFormat = "%%H%%u:%%M%%m:%%S%%s";
	}
	else
	{
		var DisplayFormat = "%%M%%m:%%S%%s";
	}
	
	var FinishMessage = "Bod voorbij!";
  if (secs < 0) 
	{
    return FinishMessage;
  }
  DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
  DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
  DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
  DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));

  if (CountActive)
    setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
	
	return DisplayStr;
}

/**
 * Returns date diff in secs
 */
function getSecs(date, interval)
{
	//Put dates in date objects
	var dthen = new Date(date);
  var dnow = new Date();

	// Set countstepper & timeout period
	var CountStepper = 0-interval;
  var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
	var CountActive = true;

  if(CountStepper>0)
	{
    ddiff = new Date(dnow-dthen);
	}
  else
	{
    ddiff = new Date(dthen-dnow);
	}
  
	gsecs = Math.floor(ddiff.valueOf()/1000);
	return gsecs;
}

/**
 * Countdown timer
 */
function countdown(date, interval)
{
	//Put dates in date objects
	var dthen = new Date(date);
  var dnow = new Date();

	// Set countstepper & timeout period
	var CountStepper = 0-interval;
  var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
	var CountActive = true;

  if(CountStepper>0)
	{
    ddiff = new Date(dnow-dthen);
	}
  else
	{
    ddiff = new Date(dthen-dnow);
	}
	
	gsecs = getSecs(date, interval);
	
  return CountBack(gsecs, CountStepper, SetTimeOutPeriod, CountActive);
}
