﻿//http://www.srh.noaa.gov/jetstream/doppler/ridge_download.htm#radar
//http://radar.weather.gov/ridge/GIS.html
//http://groups.google.com/group/Google-Maps-API/browse_thread/thread/2c3309fd92fcbd92
///
//Need to add Satellite Images
//ftp://goes.gsfc.nasa.gov/pub/goeseast/
//ftp://goes.gsfc.nasa.gov/pub/goeswest/
//
var Clock;
var Cycle;
var Google;
var Helper;

var Last = 0;
var Skew = 0;
var Wrap = 10;
var Idle = 100;
var Back = 500;

var Radar = [];

// CHANGE THESE TO SELECT THE RADAR SITES TO DISPLAY INITIALLY
var Ridge = ["JAX", "BYX", "MLB", "AMX", "EVX", "TLH", "TBW", "EVX"];

var Product = "N0R";

// for initializing Satellite image to defaults
var Satellite = 'goeseast';
var SatRegion = 'east_coast';
var SatType = 'vis';
var SatOpac = '1';

// Array.indexOf( value, begin, strict ) - Return index of the first element that matches value
Array.prototype.indexOf = function(v, b, s) {
    for (var i = +b || 0, l = this.length; i < l; i++) {
        if (this[i] === v || s && this[i] == v) { return i; }
    }
    return -1;
};


function IntializeRadarSites() {
	obj = document.getElementById("selByState");
    for (var i = 0; Ridge[i]; i++) {
    	for (j = 0; j < obj.length; j++) {
        	if (obj.options[j].value.toUpperCase() == Ridge[i].toUpperCase()) {
        		obj.options[j].selected = true;
        		//obj.options[j].selectedIndex = j;
        	}
    	}
    }
}

function Pause(pause) {
    Idle = pause * 10;
    Back = pause * 50;
}

function Opacity(opacity) {
    for (var i = 0; Ridge[i]; i++) {
        Radar[i].opacity(opacity);
    }
}

//loop through images
function Loop() {
    for (var i = 0; Ridge[i]; i++) {
        Helper.childNodes[i].childNodes[0].data = Radar[i].select(Last);
    }

    Last = (Last + 1) % Wrap;

    Clock = clearTimeout(Clock);

    Clock = setTimeout("Loop()", Last ? Idle : Back);
}

//checks for new images
function Feed() {
    var stub = "http://www.srh.noaa.gov/ridge2/JSON_generator.php?callback=CallBack&frames=" + Wrap;

    for (var i = 0; Ridge[i]; i++) {
        Radar[i].feed(stub + "&rid=" + Ridge[i] + "&product=" + Product);
    }

    Cycle = clearTimeout(Cycle);

    Cycle = setTimeout("Feed()", 150000);
}

//Call back holds image file locations.. see http://www.srh.noaa.gov/ridge2/JSON_generator.php
// number of images has to equal 'Wrap'
function CallBack(callback) {
    var stub = "http://www.srh.noaa.gov/";

    var pair;

    var reload = [];

    for (var i = 0; callback.directory[i]; i++) {
        pair = callback.directory[i].match(/([A-Z][A-Z][A-Z]|[A-Z][0-9][A-Z])/g);

        reload[i] = stub + callback.directory[i];
    }

    for (var i = 0; Ridge[i]; i++) {
        if (pair) if (pair[0] == Product) if (pair[1] == Ridge[i]) Radar[i].reload(reload);
    }
}

//callback: {stub, directory[imagepath/name],bbox[x0,x1,y0,y1]}
function CallBackNew(callback) {
    var stub = callback.stub;

    var pair;

    var reload = [];

    for (var i = 0; callback.directory[i]; i++) {
        pair = callback.directory[i].match(/([A-Z][A-Z][A-Z]|[A-Z][0-9][A-Z])/g);

        reload[i] = stub + callback.directory[i];
    }

    for (var i = 0; Ridge[i]; i++) {
        if (pair) if (pair[0] == Product) if (pair[1] == Ridge[i]) Radar[i].reload(reload);
    }
}

function GetRadar(obj) {
    if (obj.checked) {
        UpdateRadar(true);
    } else {
        UpdateRadar(false);
    }
}

//////////////////////////////////////////// UPDATE FOR GENERIC IMAGE ANIMATION //////////////////////////////
//images[ListOfImageURLs]
//bbox({x0: ,x1: ,y0: ,y1: })
//size({x: , y: })
//name=String
function CreateRadarOverlay(images, bbox, size, name) {
    Clock = clearTimeout(Clock);
    Cycle = clearTimeout(Cycle);
    Helper = document.getElementById("helper");
    while (Helper.hasChildNodes()) {
        Helper.removeChild(Helper.firstChild);
    }
    Helper.appendChild(document.createElement("DIV"));
    Helper.childNodes[0].appendChild(document.createTextNode(""));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

function UpdateRadar(obj) {
    Helper = document.getElementById("helper");
        while (Helper.hasChildNodes()) {
            Helper.removeChild(Helper.firstChild);
        }
    if (obj) {
        for (var i = 0; Ridge[i]; i++) {
            //alert("here");
            Helper.appendChild(document.createElement("DIV"));
            //alert("here1");
            Helper.childNodes[i].appendChild(document.createTextNode(""));
            //alert("here2");
            Radar[i] = new FrameAnimationLayerOverlay({ bbox: BBox(Ridge[i], Product), size: { x: 600, y: 550 }, last: Last, skew: Skew, wrap: Wrap, name: Ridge[i] + "_" + Product });
            //alert("here3");
            map.addOverlay(Radar[i]);
            //alert("here4");
        }
            if (document.getElementById('chkRadarDetail').checked) {
                document.getElementById('helper').style.display = 'block';
            } else {
                document.getElementById('helper').style.display = 'none';
            }
        Feed();
        Loop();
    } else {
        Clock = clearTimeout(Clock);
        Cycle = clearTimeout(Cycle);
        for (var i = 0; Ridge[i]; i++) {
            map.removeOverlay(Radar[i]);
        }
        Radar.length = 0;
        Last = 0;
        Skew = 0;
        //Wrap = 10;
        Idle = 100;
        Back = 500;
        document.getElementById('helper').style.display = 'none';
    }
}

function UpdateRadarSites(obj) {
    UpdateRadar(false);
    Ridge.length = 0;
    var i;
    for (i = 0; i < obj.options.length; i++) {
        if (obj.options[i].selected) {
            if (Ridge.indexOf(obj.options[i].value) == -1) {
                Ridge.push(obj.options[i].value);
            }
        }
    }
    if (document.getElementById('chkRadar').checked) UpdateRadar(true);
}

function UpdateRadarType(obj) {
    UpdateRadar(false);
     for (i = 0; i < obj.options.length; i++) {
         if (obj.options[i].selected) {
             Product = obj.options[i].value;
         }
    }
    if (document.getElementById('chkRadar').checked) UpdateRadar(true);
}

function UpdateRadarFrames(obj) {
    UpdateRadar(false);
    for (i = 0; i < obj.options.length; i++) {
        if (obj.options[i].selected) {
            Wrap = parseInt(obj.options[i].value,10);
        }
    }
    if (document.getElementById('chkRadar').checked) UpdateRadar(true);
}

function RadarPageLoad() {
    if (document.getElementById('chkRadar').checked) {
        UpdateRadarSites(true);
    }
}

function ChangeRadarDetail(obj) {
    if (obj.checked) {
        document.getElementById('helper').style.display = 'block';
    } else {
        document.getElementById('helper').style.display = 'none';
    }
}


function SetSatOptions(obj) {
    var sel;
    for (i = 0; i < obj.options.length; i++) {
        if (obj.options[i].selected) {
            sel = obj.options[i].value;
        }
    }
    switch(obj.id){
        case 'selSatRegion':
            SatRegion = sel;
            break;
        case 'selSatType':
            SatType = sel;
            break;
        case 'selSatOpac':
            SatOpac = sel;
            break;
        default:
            //code to be executed if n is different from case 1 and 2
    }
}

function CheckGreyscaleVal(obj) {
    //alert(obj.value);
    if (!(isNaN(obj.value))) {
        //alert(obj.value);
        if (parseInt(obj.value,10) < 256) {
            //alert(obj.value);
            return true;
        }
    }
    alert("Must be a number between 0 and 255!");
    obj.value = obj.value.substr(0, obj.value.length - 1);
    return false;
}

function HideSat(obj) {
    if (obj.innerHTML == 'Hide') {
        obj.innerHTML = 'Show';
        for (i = 0; i < satOverlays.length; i++) {
            satOverlays[i].hide();
        }
    } else {
        obj.innerHTML = 'Hide';
        for (i = 0; i < satOverlays.length; i++) {
            satOverlays[i].show();
        }
    }
}
