var startMS;
var isRunning = false;			
var lbl;
var dur ;
var initDuration ;
var maxDuration;
var timeOutFunc;
var timeLimit;
var timerMsg;
var UniqueTimerID = "NemalaTestTimer";

function InitTimer(InitDuration, MaxDuration, LabelControl, TextBoxControl)
{				
	var startTime = new Date();
	startMS = DateToMiliseconds(startTime);
	isRunning = false;			
	lbl = LabelControl;
	dur = TextBoxControl;
	initDuration = InitDuration;
	// try to get the current duration from the cookie
	var cookieDur = getCookie(UniqueTimerID);	
	if (cookieDur)
	{
		cookieDur = parseInt(cookieDur, 10);
		if (cookieDur > initDuration) 
			initDuration = cookieDur;
	}	
	maxDuration = MaxDuration;
	timeLimit = new Date();
	timeLimit.setMilliseconds (timeLimit.getMilliseconds() + (maxDuration-initDuration));
}			
	
function StartTimer()
{
	isRunnning = true;
	showTime();
}
	
function StopTimer()
{
	deleteCookie(UniqueTimerID);
	isRunnning = false;
}
function DateToMiliseconds(d)
{
	return d.getMilliseconds() + d.getSeconds()*1000 + 
		d.getMinutes()*60*1000 + d.getHours()*60*60*1000;
}
	
function showTime()
{
	if (isRunnning==false) return;
	var now = new Date();			
	var curDuration = (DateToMiliseconds(now) - startMS + initDuration);										
	var diff =  timeLimit.getTime()-now.getTime();
	
	if (diff < 0) diff = 0; // we don't want negative time
	var hours = Math.floor(diff / (1000*60*60));
	diff -= hours*1000*60*60;
	var minutes = Math.floor(diff / (1000*60));
	diff -= minutes * 1000*60;
	var seconds = Math.floor(diff / 1000);
	
	var timeValue = "" + hours;
	timeValue += ((minutes < 10) ? ":0" : ":") + minutes;
	timeValue += ((seconds < 10) ? ":0" : ":") + seconds;
	if (this.lbl != null) {
		this.lbl.innerHTML = timerMsg + timeValue;				
	}
	// update the new duration
	if (dur != null) dur.value = curDuration;
	setCookie(UniqueTimerID, curDuration + 1000);
	//this.lbl.innerHTML += "  set=" + curDuration + " get="+ getCookie(UniqueTimerID);
	if (curDuration < maxDuration) 
		setTimeout("showTime()","1000");
	else
		if (timeOutFunc != null) timeOutFunc();		
}