// Javascript for NASCAR Race Countdown unit

if (!nascar)
    var nascar = {};

nascar.race = {};

// Constants to make code more readable.
nascar.race.MONTH = 0;
nascar.race.DAY = 1;
nascar.race.YEAR = 2;
nascar.race.HOUR = 3;
nascar.race.MINS = 4;

// This var tells us whether the countdown is ticking already.
nascar.race.countdownEnabled = false;

// Var to disable timeout
nascar.race.timeout = null;

nascar.race.Months = new Array("JANUARY","FEBRUARY","MARCH","APRIL", "MAY", "JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER");

nascar.race.init = function(){

    // Get race date from hidden field
    var raceDate = document.getElementById("raceDate");

    // Get race status from hidden field
    var raceStatus = document.getElementById("raceStatus");

    if(raceDate!=null && !nascar.race.countdownEnabled){

        //Do not tick the unit unless status = PRE-RACE
        if(raceStatus!=null && raceStatus.value != "PRE-RACE"){
            clearTimeout(nascar.race.timeout);
            return
        }

        // the unit is now ticking, set to TRUE.
        nascar.race.countdownEnabled = true;

        var dateString = raceDate.value;

        //Tokenize race date which comes in format MMMM dd yyyy HH mm
        var dateTokens = dateString.split(' ');
        var day = Number(dateTokens[nascar.race.DAY]);
        var year = Number(dateTokens[nascar.race.YEAR]);
        var hour = Number(dateTokens[nascar.race.HOUR]);
        var mins = Number(dateTokens[nascar.race.MINS]);
        var monthStr = new String(dateTokens[nascar.race.MONTH]).toUpperCase();

        // Plain vanilla loop to avoid cross-browsing problems :
        var i = 0;
        for( i; i < nascar.race.Months.length; i++ ){
            if( monthStr == nascar.race.Months[i]){
                break;
            }
        }

        var month = i; // the numeric value of the month : 0-11
        nascar.race.countdown(day,month,year,hour,mins);

    } else {
        // Give browser a break to update its DOM Tree. Try again in one second...
        nascar.race.timeout = setTimeout("nascar.race.init()",1000);
    }
}

nascar.race.countdown = function(day,month,year,hour,mins){

    _year=year;_month=month;_day=day;_hour=hour;_mins=mins;

    var utcDate = ( (new Date()).toUTCString()).replace(/:/g," "); // Convert local client time to UTC. UTC Format sample is : Fri, 23 Jan 2009 04:43:06 GMT
    var clientDate = utcDate.split(" ");

    var m = clientDate[2]; // month
    var y = Number(clientDate[3]); //year
    var h = Number(clientDate[4]); //hours
    var min = Number(clientDate[5]); //mins
    var sec = Number(clientDate[6]); // secs
    var today = Number(clientDate[1]); // date

    if (y < 1000){
        y += 1900;
    }

    var nextDateStr  = nascar.race.Months[month] + " " + _day + ", " + _year  + " " + _hour + ":" + _mins;
    var todayDateStr = m + " " + today + ", " + y + " " + h + ":" + min + ":"+sec;

    var diff = Date.parse(nextDateStr) - Date.parse(todayDateStr);
    var diff_days=Math.floor(diff/(60*60*1000*24)*1);
    var diff_hrs=Math.floor((diff%(60*60*1000*24))/(60*60*1000)*1);
    var diff_mins=Math.floor(((diff%(60*60*1000*24))%(60*60*1000))/(60*1000)*1);
    var diff_secs=Math.floor((((diff%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1);

    if(diff_days<0){
        diff_days=0
    }

    if(diff_hrs<0){
        diff_hrs=0
    }

    if(diff_mins<0){
        diff_mins=0
    }

    if(diff_secs<0){
        diff_secs=0
    }

    document.getElementById("daysCountdown").innerHTML = nascar.race.formatString2DoubleDigit(diff_days.toString());
    document.getElementById("hrsCountdown").innerHTML  = nascar.race.formatString2DoubleDigit(diff_hrs.toString());
    document.getElementById("minsCountdown").innerHTML = nascar.race.formatString2DoubleDigit(diff_mins.toString());
    document.getElementById("secsCountdown").innerHTML = nascar.race.formatString2DoubleDigit(diff_secs.toString());

    if( diff_days==0 && diff_hrs==0 && diff_mins==0 && diff_secs==0){
            clearTimeout(nascar.race.timeout);
            return
    }

    nascar.race.timeout = setTimeout("nascar.race.countdown(_day,_month,_year,_hour,_mins)",1000);
}

// If number represented by string is single digit, prepend a "0" : TRES-17669
nascar.race.formatString2DoubleDigit = function(str){
    if(str.length >= 2)
        return str;

    return '0' + str;
}

//Start the NASCAR Race countdown widget :
function retryCountdownInit() {
    if (typeof nascar.race != 'undefined') {
        nascar.race.init();
        return
    }
    // Keep trying...
    nascar.race.timeout = setTimeout(retryCountdownInit, 1000);
}

if (typeof nascar.race != 'undefined') {
    nascar.race.init();
} else {
    // Try again in one second...
    nascar.race.timeout = setTimeout(retryCountdownInit, 1000);
}
