function Time_ParseISO8601 (sISO, bWithTimeZone) {
/*
    ISO 8601:
    1999-07-03T00:00:00+0100
    JavaScript's Date.parse() format:
    1999/07/03 00:00:00 UTC+0100
*/
    var sYear = sISO.substr(0, 4);
    var sMonth = sISO.substr(5, 2);
    var sDay = sISO.substr(8, 2);
    var sHour = sISO.substr(11, 2);
    var sMinute = sISO.substr(14, 2);
    var sZone;

    if (bWithTimeZone)
        sZone = sISO.substr(16, 3).toString() + sISO.substr(20, 2); // offset from UTC 
    else
        sZone = "+0000"; // make it a UTC time

    var sFormat = sYear + "/" + sMonth + "/" + sDay + " " + sHour + ":" + sMinute + ":00 UTC" + sZone

    return new Date(sFormat);
}

function Time_GetMonthName(iMonth) {
    switch (iMonth) {
        case 0: return "January"; break;
        case 1: return "February"; break;
        case 2: return "March"; break;
        case 3: return "April"; break;
        case 4: return "May"; break;
        case 5: return "June"; break;
        case 6: return "July"; break;
        case 7: return "August"; break;
        case 8: return "September"; break;
        case 9: return "October"; break;
        case 10: return "November"; break;
        case 11: return "December"; break;
        default: return ""; 
    }
}

function Time_GetWeekdayName(iDay) {
    switch (iDay) {
        case 0: return "Sunday"; break;
        case 1: return "Monday"; break;
        case 2: return "Tuesday"; break;
        case 3: return "Wednesday"; break;
        case 4: return "Thursday"; break;
        case 5: return "Friday"; break;
        case 6: return "Saturday"; break;
        default: return ""; 
    }
}

function convertTimeZone(anchor) {
    var dTime, dOtherTime;
    var sZone = anchor.id.toString().toLowerCase();
    var iDay = 1;
    var iTime = 1;
    var obj;
    var bLocal = false;
    var iLastDay;

    switch (sZone) {
        case "race":
                bLocal = false;
                anchor.childNodes[0].nodeValue = "Convert To My Local Time";
                anchor.id = "local";
                break;
        default:
                bLocal = true;
                anchor.childNodes[0].nodeValue = "Convert To Race Local Time";
                anchor.id = "race";
    }

    obj = document.getElementById("CT_Time_" + iDay + "_" + iTime);
    
    while (obj != null) {
        iLastDay = -1;
        
        while (obj != null) {
			if ((iLastDay == -1) && (bLocal))
			{
				iLastDay = Time_ParseISO8601(obj.className, !bLocal).getUTCDay();
			} else {
				iLastDay = Time_ParseISO8601(obj.className, !bLocal).getDay();
			}
			
            dTime = Time_ParseISO8601(obj.className, bLocal);
            
            if (iTime == 1)
            
            obj.childNodes[0].nodeValue = "";
            
            if (bLocal) {

                if ((iLastDay != dTime.getDay()) && (iLastDay >= 0) && document.getElementById("CT_Day_" + iDay) != null) {
                    //obj.childNodes[0].nodeValue = "(" + Time_GetWeekdayName(dTime.getDay()).substr(0, 3) + ") ";
		   document.getElementById("CT_Day_" + iDay).childNodes[0].nodeValue = "" + Time_GetWeekdayName(dTime.getDay()) + " ";
		}
                obj.childNodes[0].nodeValue += ZeroPadInteger(dTime.getHours()) + ":" + ZeroPadInteger(dTime.getMinutes());
            } else {
                if ((iLastDay != dTime.getUTCDay()) && (iLastDay >= 0) && document.getElementById("CT_Day_" + iDay) != null){
                   // obj.childNodes[0].nodeValue = "(" + Time_GetWeekdayName(dTime.getUTCDay()).substr(0, 3) + ") ";
		
		   document.getElementById("CT_Day_" + iDay).childNodes[0].nodeValue = "" + Time_GetWeekdayName(dTime.getUTCDay()) + " ";
		}
                obj.childNodes[0].nodeValue += ZeroPadInteger(dTime.getUTCHours()) + ":" + ZeroPadInteger(dTime.getUTCMinutes());
            }
            
            if (bLocal)
                iLastDay = dTime.getDay();
            else
                iLastDay = dTime.getUTCDay();
            
            iTime++;
            obj = document.getElementById("CT_Time_" + iDay + "_" + iTime);
        }
        
        iTime = 1;
        iDay++;
        obj = document.getElementById("CT_Time_" + iDay + "_" + iTime);
    }

    return false;
}

function ZeroPadInteger(integer) {
    string = "";
    
    // Only zero pads up to 99.
    
    try {
        integer = parseInt(integer, 10);

        if (integer < 0)
            string = integer;
        else if (integer < 10)
            string = "0" + integer.toString();
        else 
            string = integer.toString();
    } catch (error) {
        // ignore it
    }

    return string;
}


