/* Copyright 2008 Jonathan Raasch
 * You may use or modify this but do not remove 
 * this message or the copyright above
 */
 
function addEvent(obj, evType, fn){ 
    if (obj.addEventListener){ 
        obj.addEventListener(evType, fn, false); 
        return true; 
    } else if (obj.attachEvent){ 
        var r = obj.attachEvent("on"+evType, fn); 
        return r; 
    } else { 
        return false; 
    }
}

// add leading zeros
function padZeros(theNumber, max) {
    var numStr = String(theNumber);
    
    while ( numStr.length < max) {
        numStr = '0' + numStr;
    }
    
    return numStr;
}

var jsClock = {
    digits : [],
    time   : 0,

    init : function() {
        var clock  = document.getElementById('jsClock');
        
        for ( var i = 0; i < 8; i++) {
            var digit = document.createElement('div');
            
            //either flag as colon or add to jsClock.digits array
            if (i == 2 || i == 5) digit.className = 'digit-colon';
            else jsClock.digits.push(digit);
            
            clock.appendChild(digit);
        }
        
        // set to current time (clientside)
        var d = new Date();
        
        jsClock.time = d.getHours() + padZeros(d.getMinutes(), 2) + padZeros(d.getSeconds(), 2);
        
        jsClock.changeDigits( 0, padZeros(jsClock.time, 6) );
        
        // start the clock
        jsClock.interval = setInterval("jsClock.tictoc()", 1000);
    },
    
    tictoc : function() {
    
        jsClock.time++;
        
        var timeStr = padZeros(jsClock.time, 6);
        
        var startChange = 4;
        
        // if seconds equal to 60
        if ( timeStr.substr(4,2) == '60' ) {
            jsClock.time += 40;
            timeStr = padZeros(jsClock.time, 6);
            
            startChange = 2;
            
            // if minutes equal to 60
            if ( timeStr.substr(2,2) == '60' ) {
                jsClock.time += 4000;
                timeStr = padZeros(jsClock.time, 6);
                
                startChange = 0;
                
                // if hours equal to 24
                if ( timeStr.substr(0,2) == '24' ) {
                    jsClock.time -= 240000;
                    timeStr = padZeros(jsClock.time, 6);
                }
            }
        }
        
        jsClock.changeDigits( startChange, timeStr );

    },
    
    changeDigits : function( startChange, timeStr ) {
        // change classNames
        for ( var i = startChange; i < 6; i++) {
            jsClock.digits[i].className = 'digit-' + timeStr.charAt(i);
        }
    }

};

addEvent(window, 'load', jsClock.init);
