function tcAddEvent(eventObj, event, eventHandler) {
    if (eventObj.addEventListener) {
    	eventObj.addEventListener(event, eventHandler, false);
    }
    else if (eventObj.attachEvent) {
    	eventObj.attachEvent('on' + event, eventHandler);	// Damn you, IE!
    }
}

function tcUpdate(tc) {
    var now = new Date();
    var seconds = (now.valueOf() - tc.startDate.valueOf()) / 1000 + tc.baseTime;
    tc.clockFace.setSeconds(seconds);
    tc.timeoutID = setTimeout(function() { tcUpdate(tc); }, tc.interval);
}

function tcMake2d(num) {
    str = num.toString();
    if (str.length == 1)
        str = '0' + str;
    return str;
}

function TimeClock(elem) {
    var box = document.createElement('div');
    box.className = 'tc-timeclock';
    var closeBtn = document.createElement('button');
    closeBtn.className = 'tc-close';
    closeBtn.innerHTML = 'X';
    closeBtn.onclick = function() { elem.removeChild(box); };
    box.appendChild(closeBtn);
    descr = document.createElement('input');
    descr.className = 'tc-descr';
    descr.size = 30;
    box.appendChild(descr);
    var clockFace = document.createElement('input');
    clockFace.className = 'tc-face';
    clockFace.value = '0:00:00';
    clockFace.maxlength = 8;
    clockFace.size = 8;
    clockFace.setSeconds = function(secs) {
	var work = parseInt(secs,10);
    	ss = work % 60;
	work = (work - ss) / 60;
	mm = work % 60;
	hh = (work - mm) / 60;
	clockFace.value = hh + ':' + tcMake2d(mm) + ':' + tcMake2d(ss);
    }
    clockFace.parseTime = function() {
    	matches = clockFace.value.match(/(\d+):(\d+):(\d+)/);
	if (matches) {
	    hr = parseInt(matches[1],10);
	    mn = parseInt(matches[2],10);
	    sec = parseInt(matches[3],10);
	    return (hr * 3600) + (mn * 60) + sec;
	}
	else
	    return 0;
    }
    this.clockFace = clockFace;
    box.appendChild(clockFace);
    var start = document.createElement('button');
    start.className = 'tc-start';
    start.innerHTML = 'Start';
    var running = false;
    var my = this;
    my.interval = 500;		// You can override this after creating the clock
    start.onclick = function() {
    	if (running) {
	    running = false;
	    start.innerHTML = 'Start';
	    clockFace.readOnly = false;
	    clearTimeout(my.timeoutID);
	} else {
	    running = true;
	    start.innerHTML = 'Stop';
	    clockFace.readOnly = true;
	    my.startDate = new Date();
	    my.baseTime = clockFace.parseTime();
	    my.timeoutID = setTimeout(function () { tcUpdate(my); }, my.interval)
	}
    }
    box.appendChild(start);
    var reset = document.createElement('button');
    reset.className = 'tc-reset';
    reset.innerHTML = 'Reset';
    reset.onclick = function() {
	if (running) {
	    my.startDate = new Date();
	    my.baseTime = 0;
	}
    	clockFace.value = '0:00:00';
    }
    box.appendChild(reset);
    elem.appendChild(box);
}
