
var CurrentPos = 0;
var RadarCurrentPos = 0;
var BaseMapArray = new CreateCommonArray();
var DataMapArray = new CreateCommonArray();
var RadarMapArray = new CreateRadarArray(); 
var RotateImageCounter = 0;
var RotateTimer;

var RefreshStationImagesTimer;

var CurrentFile;
var TimeDiff = SystemTime.getTime() - new Date().getTime();


function GetCurrentFile() {
    var CurrentTime = new Date();
    CurrentTime.setMilliseconds(TimeDiff);
    CurrentTime = GetLastAvailableTime(CurrentTime);
    CurrentFile = formatdate(CurrentTime);
}

function GetLastAvailableTime(CurrentTime) {

    var MinutesRemainder = CurrentTime.getMinutes() % 5;
    var CurrentMinutes = CurrentTime.getMinutes();
    CurrentTime.setMinutes(CurrentMinutes - MinutesRemainder);

    return CurrentTime;
}

function formatdate(sDate) {
    var sYear;
    var sMonth;
    var sDay;
    var sHour;
    var sMinutes;

    sYear = sDate.getFullYear().toString();


    if ((sDate.getMonth() + 1).toString().length == 1) {
        sMonth = "0" + (sDate.getMonth() + 1).toString();
    }
    else {
        sMonth = (sDate.getMonth() + 1).toString();
    }

    if (sDate.getDate().toString().length == 1) {
        sDay = "0" + sDate.getDate().toString();
    }
    else {
        sDay = sDate.getDate().toString();
    }

    if (sDate.getHours().toString().length == 1) {
        sHour = "0" + sDate.getHours().toString();
    }
    else {
        sHour = sDate.getHours().toString();
    }



    if (sDate.getMinutes().toString().length == 1) {
        sMinutes = "0" + sDate.getMinutes().toString();
    }
    else {
        sMinutes = sDate.getMinutes().toString();
    }

    return sYear +
               sMonth +
               sDay +
               sHour +
               sMinutes;
}

function ZoomIn() {
    CurrentPos = 42;

    document.getElementById('ctl00_cphBody_divZoomIn').style["display"] = "none";
    document.getElementById('ctl00_cphBody_divZoomOut').style["display"] = "block";
    document.getElementById("divDirection").style["display"] = "block";

    SetMaps();
    LoadSurroundingMaps();
}

function ZoomOut() {
    CurrentPos = 0;
    document.getElementById('ctl00_cphBody_divZoomIn').style["display"] = "block";
    document.getElementById('ctl00_cphBody_divZoomOut').style["display"] = "none";
    document.getElementById("divDirection").style["display"] = "none";

    SetMaps();
    LoadSurroundingMaps();
}


function MoveLeft() {
    if (CurrentPos % MapZoomInTotalX != 1) {
        CurrentPos -= 1;

        SetMaps();
        LoadSurroundingMaps();
    }
}
function MoveRight() {
    if (CurrentPos % MapZoomInTotalX != 0) {
        CurrentPos += 1;

        SetMaps();
        LoadSurroundingMaps();
    }
}

function MoveUp() {
    if (CurrentPos / (MapZoomInTotalX+1) >= 1) {
        CurrentPos -= MapZoomInTotalX;

        SetMaps();
        LoadSurroundingMaps();
    }
}

function MoveDown() {
    if (CurrentPos < ((MapZoomInTotalY * MapZoomInTotalX) - MapZoomInTotalX)) {
        CurrentPos += MapZoomInTotalX;

        SetMaps();
        LoadSurroundingMaps();
    }
}


function SetMaps() {
    GetCurrentFile();
    if (MapImageFolder == "12HourlyMaps" || MapImageFolder == "PSIMaps") {
        ToggleNavigatorControl(false);
        document.getElementById("divDirection").style["display"] = "none";
        CurrentPos = 0;
    }
    else {
        ToggleNavigatorControl(true);
    }

    if (MapImageFolder == "RadarMaps") {
        clearTimeout(RotateTimer);
        RotateRadarImages();
    }

    if (MapImageFolder == "StationHumidityMaps" ||
        MapImageFolder == "StationRainMaps" ||
        MapImageFolder == "StationTemperatureMaps" ||
        MapImageFolder == "StationWindMaps") {
        clearTimeout(RefreshStationImagesTimer);
        RefreshStationImages();

        var sStationTime = CurrentFile.substring(8, 12);
        var sHour = sStationTime.substring(0, 2);
        var sMinute = sStationTime.substring(2, 4);
        var sTT;
        if (sHour > 12) {
            sHour = sHour - 12;
            sTT = "pm";
        }
        else if (sHour == 12) {
            sTT = "pm";
        }
        else {
            sTT = "am";
        }
        if (sHour.toString().indexOf("0") == 0) {
            sHour = sHour.substring(1, 2);
        }

        document.getElementById("ctl00_divStationValidTime").innerHTML = "at " + sHour + ":" + sMinute + " " + sTT;
        
    }
    
    if ((BaseMapArray[CurrentPos].src == "") || (BaseMapArray[CurrentPos].src.indexOf(".jpg") == -1)) {
        BaseMapArray[CurrentPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + BaseMapFolder + "/" + CurrentPos + ".jpg";
    }
    
    //load up base map.
    document.getElementById("ctl00_cphBody_divMap").style.backgroundImage = "url('" + BaseMapArray[CurrentPos].src + "')";
    
    
    //Setup data image.
    var DataMapURL = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + CurrentPos + ".png";
    if (DataMapArray[CurrentPos].src != DataMapURL) {
        DataMapArray[CurrentPos].src = DataMapURL;
    }
    
    //load up data image on overlay div.
    document.getElementById('ctl00_cphBody_divOverlay').style.backgroundImage = "url('" + DataMapArray[CurrentPos].src + "')";


}

function LoadSurroundingMaps() {

    // Buffer Zoom In maps
    if (CurrentPos == 0) {
        BaseMapArray[42].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + BaseMapFolder + "/42.jpg";
        DataMapArray[42].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "42.png";
    }

    // Buffer Left Maps
    if (CurrentPos > 0 && (CurrentPos % MapZoomInTotalX != 1) && BaseMapArray[CurrentPos - 1].src.indexOf(".png") == -1) {
        var LeftPos = CurrentPos - 1;
        BaseMapArray[LeftPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + BaseMapFolder + "/" + LeftPos + ".jpg";
        DataMapArray[LeftPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + LeftPos + ".png";
    }

    // Buffer Right Maps
    if (CurrentPos > 0 && (CurrentPos % MapZoomInTotalX != 0) && BaseMapArray[CurrentPos + 1].src.indexOf(".png") == -1) {
        var RightPos = CurrentPos + 1;
        BaseMapArray[RightPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + BaseMapFolder + "/" + RightPos + ".jpg";
        DataMapArray[RightPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + RightPos + ".png";
    }

    // Buffer Up Maps
    if (CurrentPos > 0 && (CurrentPos / (MapZoomInTotalX + 1) >= 1) && BaseMapArray[CurrentPos - MapZoomInTotalX].src.indexOf(".png") == -1) {
        var UpPos = CurrentPos - MapZoomInTotalX;
        BaseMapArray[UpPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + BaseMapFolder + "/" + UpPos + ".jpg";
        DataMapArray[UpPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + UpPos + ".png";
    }

    // Buffer Down Maps
    if (CurrentPos > MapZoomInTotalX && (CurrentPos < ((MapZoomInTotalY * MapZoomInTotalX) - MapZoomInTotalX)) && BaseMapArray[CurrentPos + MapZoomInTotalX].src.indexOf(".png") == -1) {
        var DownPos = CurrentPos - MapZoomInTotalX;
        BaseMapArray[DownPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + BaseMapFolder + "/" + DownPos + ".jpg";
        DataMapArray[DownPos].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + DownPos + ".png";
    }

}


function LoadRadarMaps() {
    var RadarDateTime = new Date();
    RadarDateTime.setMilliseconds(TimeDiff);
    RadarDateTime = GetLastAvailableTime(RadarDateTime);
    CurrentFile = formatdate(RadarDateTime);
    if (RadarMapArray[0].src.indexOf(".png") == -1 || (RadarCurrentPos != CurrentPos)) {
        for (var i = MaxRadarImages - 1; i >= 0; i--) {
            RadarMapArray[i].src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + CurrentPos + ".png";
            RadarDateTime.setMinutes(RadarDateTime.getMinutes() - 5);
            CurrentFile = formatdate(RadarDateTime);
        }
        RadarCurrentPos = CurrentPos;
    }
    else if (RadarMapArray[0].src.indexOf(".png") != -1 && RadarMapArray[MaxRadarImages - 1].src.indexOf(CurrentFile) == -1) {
        RadarMapArray.splice(0, 1);

        var NewRadarImage = new Image();
        NewRadarImage.src = MapImageURL + "/" + MapWidth + "_" + MapHeight + "/" + MapImageFolder + "/" + CurrentFile + "_" + CurrentPos + ".png";
        RadarMapArray.push(NewRadarImage);
    }
}


function RotateRadarImages() {
    if (MapImageFolder == "RadarMaps") {
        if (document.images) {
            
            LoadRadarMaps();


            if (RotateImageCounter >= MaxRadarImages - 1) {
                RotateImageCounter = 0;
            }
            else {
                RotateImageCounter += 1;
            }

            if (RadarMapArray[RotateImageCounter].height > 0) {
                document.getElementById('ctl00_cphBody_divOverlay').style.backgroundImage = "url('" + RadarMapArray[RotateImageCounter].src + "')";

                PopulateRadarTime(RadarMapArray[RotateImageCounter].src + "");
            }
            else {
                for (i = RotateImageCounter; i <= MaxRadarImages; i++) {
                    if (RadarMapArray[RotateImageCounter].height > 0) {
                        document.getElementById('ctl00_cphBody_divOverlay').style.backgroundImage = "url('" + RadarMapArray[RotateImageCounter].src + "')";

                        PopulateRadarTime(RadarMapArray[RotateImageCounter].src + "");

                        break;
                    }
                }
            }

            //Debug
            //document.getElementById("divRadarValidTime").style["color"] = "#000;";
            //document.getElementById("divRadarValidTime").innerHTML = RadarMapArray[RotateImageCounter].src.substring(80, 100);  + "";

        }
        if (RotateImageCounter == (MaxRadarImages -1)) {
            RotateTimer = setTimeout("RotateRadarImages();", 3000);
            
        }
        else {
            RotateTimer = setTimeout("RotateRadarImages();", RotateImageRate);
        }
    }
}

function RefreshStationImages() {
        RefreshStationImagesTimer = setTimeout("SetMaps();", 60000);
}


function PopulateRadarTime(RadarImageURL) {
    var RadarFile = RadarImageURL.substring(RadarImageURL.indexOf("RadarMaps", 1) + 10);
    var sRadarTime = RadarFile.substring(8, 12);
    var sHour = sRadarTime.substring(0, 2);
    var sMinute = sRadarTime.substring(2, 4);
    if (sHour > 12) {
        sHour = sHour - 12;
        sTT = "pm";
    }
    else if (sHour == 12) {
        sTT = "pm";
    }
    else {
        sTT = "am";
    }
    if (sHour.toString().indexOf("0") == 0) {
        sHour = sHour.substring(1, 2);
    }
    document.getElementById("divRadarValidTime").innerHTML = "at " + sHour + ":" + sMinute + " " + sTT;
}


function CreateCommonArray() {
    var TotalSize = (MapZoomInTotalX * MapZoomInTotalY);
    var returnArray = new Array(TotalSize);
    
    for (var i=0; i <= TotalSize; i++)
    {
        returnArray[i] = new Image();
    }
    return (returnArray);
}

function CreateRadarArray() {
    var returnArray = new Array(MaxRadarImages);

    for (var i = 0; i < MaxRadarImages; i++) {
        returnArray[i] = new Image();
    }
    return (returnArray);
}


function ToggleNavigatorControl(bShow) {
    if (bShow) {
        document.getElementById("divNagivator").style["display"] = "block";
    }
    else {
        MapX = 0;
        MapY = 0;
        MapZ = 0;
        document.getElementById('ctl00_cphBody_divZoomIn').style["display"] = "block";
        document.getElementById('ctl00_cphBody_divZoomOut').style["display"] = "none";
        document.getElementById("divNagivator").style["display"] = "none";
    }
}    
