var ecoPop = {
    ignoreUpdate: false,
    executer: null,
    fields: ['second','minute','hour','day','week','month'],
    init: function(e) {
        ecoPop.executer = new PeriodicalExecuter(ecoPop.timer, 1);
    },
    updateField: function(name) {
        var time            = $(name+'-container').firstChild.nodeValue.replace(/^0/,'');
        var updateNext      = false;
        var newTime         = time-1;
        if (newTime < 0) {
            updateNext = true;
            switch (name) {
                case 'second':
                case 'minute':
                    var newTime = 59;
                    break;
                case 'hour':
                    var newTime = 24;
                    break;
                case 'day':
                    var len             = ecoPop.fields.length;
                    var parentHasTime   = false;
                    var fieldFound      = false;
                    for (var i=0; i < len; i++) {
                        if (name == ecoPop.fields[i]) {
                            fieldFound = true;
                        } else if (fieldFound) {
                            var parentTime = $(ecoPop.fields[i]+'-container').firstChild.nodeValue.replace(/^0/,'');
                            if (parentTime>0) {
                                parentHasTime = true;
                                break;
                            }
                        }
                    }
                    if (parentHasTime) {
                        ecoPop.ignoreUpdates = true;
                        ecoPop.executer.stop();
                        location.reload();
                        return false;
                    } else {
                        updateNext = false;
                    }
                    break;
            }
        }
        $(name+'-container').className='';
        $(name+'-container').addClassName('n-'+ecoPop.padInt(newTime));
        $(name+'-container').update(ecoPop.padInt(newTime));
        return updateNext;
    },
    timer: function() {
        if (ecoPop.ignoreUpdate) {
            return;
        }
        var len = ecoPop.fields.length;
        for (var i=0; i < len; i++) {
            if (!ecoPop.updateField(ecoPop.fields[i])) {
                break;
            }
        }
        return; 
    },
    padInt: function(num) {
        return (("00"+num).slice(-2));
    }
}
document.observe("dom:loaded",ecoPop.init);
