// Copyright © 2003 by Michael Sager

/* All code used in this web page, with the exception of the cookie libraries written
by Paul Stephens, is copyrighted by me, Michael Sager. The code, or pieces of it, may be
used for personal use, but any use for business or distribution purposes without my
express consent is prohibited under US copyright law. If you wish to use my code for any
purpose, please contact me, and I will gladly issue license to use this code. I am not
out to make a whole lot of money, I just want to protect my hard work! */

// Function that handles things common to all the models. This simplifies the code for each model.

function setTimes() {
  modelStartTime = startTime;
  modelEndTime = endTime;
  modelHoursBetweenImages = hoursBetweenImages;
  modelStartTime -= modelStartTime % modelMinHoursBetweenImages;
  if (modelStartTime < modelStart) { modelStartTime = modelStart }
  if (modelEndTime < modelStart) { modelEndTime = modelStart }
  if (modelStartTime > modelEnd) { modelStartTime = modelEnd }
  if (modelEndTime > modelEnd) { modelEndTime = modelEnd }
  if (modelHoursBetweenImages < modelMinHoursBetweenImages) { modelHoursBetweenImages = modelMinHoursBetweenImages }
  modelHoursBetweenImages -= modelHoursBetweenImages % modelMinHoursBetweenImages;
  timeInterval = modelHoursBetweenImages;
}


function nam_ncep() {
  makeValidTime(2,8,14,20);
  hsize = 640; vsize = 480;
  if (size == "l") { hsize = 1280; vsize = 1024 }
  if (size == "m") { hsize = 1024; vsize = 768 }
  if (size == "s") { hsize = 640; vsize = 480 }
  if (modelRegion == "npac") { }
  else if (modelRegion == "carib") { }
  else { modelRegion = "namer" }
  modelStart = 0; modelEnd = 84; modelMinHoursBetweenImages = 6;
  levelID = "500_vort_ht"; modelText = "NAM 500 MB height, vorticity, and winds"; 
  if (level == "sfc") { levelID = "10m_wnd_precip"; modelText = "NAM MSL Pressure, 10-m Wind, and QPF" }
  if (level == "pcp") { levelID = "10m_wnd_precip"; modelText = "NAM MSL Pressure, QPF, and 850 MB isotherms" }
  if (level == "850") { levelID = "850_temp_ht"; modelText = "NAM 850 MB height, temperature, and wind" }
  if (level == "700") { levelID = "700_rh_ht"; modelText = "NAM 700 MB height, RH, wind, and vertical velocity" }
  if (level == "300") { levelID = "300_wnd_ht"; modelText = "NAM 300 MB height, winds, and isotachs" }
  if (level == "200") { levelID = "200_wnd_ht"; modelText = "NAM 200 MB height, winds, and isotachs" }
  if (level == "p12") { levelID = "precip_p12"; modelText = "NAM 12-hour QPF"; modelStart = 12 }
  if (level == "p24") { levelID = "precip_p24"; modelText = "NAM 24-hour QPF"; modelStart = 24 }
  if (level == "p36") { levelID = "precip_p36"; modelText = "NAM 36-hour QPF"; modelStart = 36 }
  if (level == "p48") { levelID = "precip_p48"; modelText = "NAM 48-hour QPF"; modelStart = 48 }
  if (level == "p60") { levelID = "precip_p60"; modelText = "NAM 60-hour QPF"; modelStart = 60 }
  if (level == "rhli") { levelID = "700_rh_ht"; modelText = "NAM 700 MB height, RH, wind, and vertical velocity" }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'http://mag.ncep.noaa.gov/GemPakTier/MagGemPakImages/nam/' + run + '/nam_' + modelRegion + '_' + time + '_' + levelID + '.gif';
    makeArrays();
  }
  if (modelStartTime != modelEndTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + modelStartTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + modelStartTime + ' hours.' }
}

function ngm_ncep() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(2,8,14,20);
  hsize = 640; vsize = 480;
  if (size == "l") { hsize = 1280; vsize = 1024 }
  if (size == "m") { hsize = 1024; vsize = 768 }
  if (size == "s") { hsize = 640; vsize = 480 }
  if (modelRegion == "npac") { }
  else if (modelRegion == "carib") { }
  else { modelRegion = "namer" }
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 6;
  levelID = "500"; modelText = "NGM 500 MB height, vorticity, and winds"; 
  if (level == "sfc") { levelID = "slp"; modelText = "NGM MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "pcp") { levelID = "p06"; modelText = "NGM MSL Pressure, QPF, and 850 MB isotherms" }
  if (level == "850") { levelID = "850"; modelText = "NGM 850 MB height, temperature, and wind" }
  if (level == "700") { levelID = "700"; modelText = "NGM 700 MB height, RH, wind, and vertical velocity" }
  if (level == "300") { levelID = "300"; modelText = "NGM 300 MB height, winds, and isotachs" }
  if (level == "200") { levelID = "250"; modelText = "NGM 250 MB height, winds, and isotachs" }
  if (level == "p12") { levelID = "p12"; modelText = "NGM 12-hour QPF"; modelStart = 12 }
  if (level == "p24") { levelID = "p24"; modelText = "NGM 24-hour QPF"; modelStart = 24 }
  if (level == "p36") { levelID = "p36"; modelText = "NGM 36-hour QPF"; modelStart = 36 }
  if (level == "p48" || level == "p60") { levelID = "p48"; modelText = "NGM 48-hour QPF"; modelStart = 48 }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
   	modelURL = 'http://mag.ncep.noaa.gov/GemPakTier/MagGemPakImages/nam/' + initYear + initMonth + initDay + '/' + run + '/nam_' + modelRegion + '_' + time + '_' + levelID + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelRun + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelRun + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}

function gfs_ncep() {
  makeValidTime(3.5,9.5,15.5,21.5);
  hsize = 640; vsize = 480;
  if (size == "l") { hsize = 1280; vsize = 1024 }
  if (size == "m") { hsize = 1024; vsize = 768 }
  if (size == "s") { hsize = 640; vsize = 480 }
  if (modelRegion == "npac") {modelRegion = "npac" }
  else if (modelRegion == "carib") {modelRegion = "wnatl" }
  else if (modelRegion == "africa") {modelRegion = "africa"}
  else if (modelRegion == "samer") {modelRegion = "samer"}
  else if (modelRegion == "epac") {modelRegion = "epac"}
  else if (modelRegion == "atlantic") {modelRegion = "atlantic"}
  else { modelRegion = "namer" }
  modelStart = 0; modelEnd = 384; modelMinHoursBetweenImages = 3;
  levelID = "500_vort_ht"; modelText = "GFS 500 MB height, vorticity, and winds"; 
  if (level == "sfc") { levelID = "1000_500_thick"; modelText = "GFS MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "pcp") { levelID = "10m_wnd_precip"; modelText = "GFS MSL Pressure, 10 M wind barbs, QPF, and 850 MB isotherms" }
  if (level == "850" || level == "850vort") { levelID = "850_temp_ht"; modelText = "GFS 850 MB height, temperature, and wind" }
  if (level == "850vort" && modelRegion == "carib") { levelID = "850_vort_ht"; modelText = "GFS 850 MB height, vorticity, and wind" }
  if (level == "700") { levelID = "700_rh_ht"; modelText = "GFS 700 MB height, RH, wind, and vertical velocity" }
  if (level == "300") { levelID = "300_wnd_ht"; modelText = "GFS 300 MB height, winds, and isotachs" }
  if (level == "250") { levelID = "250_wnd_ht"; modelText = "GFS 250 MB height, winds, and isotachs" }  
  if (level == "200") { levelID = "200_wnd_ht"; modelText = "GFS 200 MB height, winds, and isotachs" }
  if (level == "p03") { levelID = "precip_p03"; modelText = "GFS 03-hour QPF"; modelStart = 12 }
  if (level == "p06") { levelID = "precip_p06"; modelText = "GFS 06-hour QPF"; modelStart = 24 }
  if (level == "p12") { levelID = "precip_p12"; modelText = "GFS 12-hour QPF"; modelStart = 12 }
  if (level == "p24") { levelID = "precip_p24"; modelText = "GFS 24-hour QPF"; modelStart = 24 }
  if (level == "p36") { levelID = "precip_p36"; modelText = "GFS 36-hour QPF"; modelStart = 36 }
  if (level == "p48") { levelID = "precip_p48"; modelText = "GFS 48-hour QPF"; modelStart = 48 }
  if (level == "p60") { levelID = "precip_p60"; modelText = "GFS 60-hour QPF"; modelStart = 60 }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 192) { i += i % 12 }
    if (i >= 192 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
	modelURL = 'http://mag.ncep.noaa.gov/GemPakTier/MagGemPakImages/gfs/' + initYear + initMonth + initDay + '/' + run + '/gfs_' + modelRegion + '_' + time + '_' + levelID + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}

function sref_spc() {
  makeValidTime(5.5,11.5,17.5,23.5);
  if (run < 6 ) { modelRun = "00"; modelRunText = "03" }
  else if (run < 12 && run >= 6) { modelRun = "06"; modelRunText = "09" }
  else if (run < 18 && run >= 12) { modelRun = "12"; modelRunText = "15" }
  else { modelRun = "18"; modelRunText = "21" }
  hsize = 820; vsize = 630;
  modelRegion = "namer";
  modelStart = 0; modelEnd = 87; modelMinHoursBetweenImages = 3;
  levelID = "H5_"; modelText = "GFS 500 MB height, vorticity, and winds"; 
  if (level == "omega") { levelID = "prob_H7_omega_3_"; modelText = "SREF 700mb Mean Omega" }
  if (level == "frontogenesis") { levelID = "front_MEAN_ONLY"; modelText = "SREF Mean frontogenesis" }
  if (level == "850mbtemp") { levelID = "850MB-TEMP_MEAN_SD_"; modelText = "SREF 850mb Temp" }
  if (level == "750mbtemp") { levelID = "750MB-TEMP_MEAN_SD_"; modelText = "SREF 750mb Temp" }
  if (level == "3hrsnow") { levelID = "SNOWFALL_MEAN"; modelText = "SREF Mean 3hr Snow" }
  if (level == "6hrsnow") { levelID = "SNOWFALL_MEAN6HR"; modelText = "SREF Mean 6hr Snow" }
  if (level == "12hrsnow") { levelID = "SNOWFALL_MEAN12HR"; modelText = "SREF Mean 12hr Snow" }
  if (level == "snowratio") { levelID = "snowfall_ratio"; modelText = "SREF Snowfall Ratio" }
  if (level == "1inchhrpop") { levelID = "SNOWRATE_1INCH"; modelText = "SREF 1in/hr snow PoP" }
  if (level == "dendgrowth") { levelID = "DEND_MEDIAN_MXMN_"; modelText = "SREF Dendritic Growth Zone Mean" }
  if (level == "preciptype") { levelID = "LIKELY_"; modelText = "SREF Precip Type" }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.spc.noaa.gov/exper/sref/gifs/' + initYear + initMonth + initDay + modelRunText + '/SREF_' + levelID + '_f' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}

function euro_ensemble() {
  makeValidTime(9,9,21,21);
  hsize = 1139; vsize = 470;
  if (modelRegion == "africa") {modelRegion = "Africa"}
  else if (modelRegion == "aus") {modelRegion = "Australia"}
  else if (modelRegion == "easia") {modelRegion = "Asia"}
  else if (modelRegion == "nhem") {modelRegion = "Northern%20Hemisphere"}
  else if (modelRegion == "shem") {modelRegion = "Southern%20Hemisphere"}
  else if (modelRegion == "europe") {modelRegion = "Europe"}
  else if (modelRegion == "namer" || modelRegion == "us") {modelRegion = "North%20America"}
  else if (modelRegion == "samer") {modelRegion = "South%20America"}
  else {modelRegion = "North%20America"}
  modelStart = 24; modelEnd = 240; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "Geopotential%20at%20500hPa"; modelText = "500 MB height"; 
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "MSLP"; modelText = "MSL Pressure" }
  if (level == "850") { levelID = "Temperature%20at%20850hPa"; modelText = "850 MB temperature" }
    if (level == "850wind") { levelID = "Wind%20at%20850hPa"; modelText = "850 MB temperature" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
   // if (i >= 100) { time = i }
   // else if (i < 100) { time = i }
   // else { time = i }
   time = i
    modelURL = 'http://www.ecmwf.int/products/forecasts/d/getchart/catalog/products/forecasts/medium/eps/ensm/essential!' + levelID + '!' + modelRegion + '!' + time + '!pop!od!enfo!plot_ensm_essential!' + initYear + initMonth + initDay + modelRun + '!!chart.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}

function nws() {
  makeValidTime(18,18,18,18);
//  hsize = 800; vsize = 600;
  if (modelRegion == "northplains") {modelRegion = "northplains"; hsize = 420; vsize = 492}
  else if (modelRegion == "uppermissvly") {modelRegion = "uppermissvly"; hsize = 420; vsize = 557}
  else if (modelRegion == "southmissvly") {modelRegion = "southmissvly"; hsize = 420; vsize = 482}
  else if (modelRegion == "centmissvly") {modelRegion = "centmissvly"; hsize = 420; vsize = 492}
  else if (modelRegion == "centgrtlakes") {modelRegion = "centgrtlakes"; hsize = 420; vsize = 626}
  else if (modelRegion == "centplains") {modelRegion = "centplains"; hsize = 420; vsize = 445}
  else if (modelRegion == "centrockies") {modelRegion = "centrockies"; hsize = 420; vsize = 399}
  else if (modelRegion == "pacnorthwest") {modelRegion = "pacnorthwest"; hsize = 420; vsize = 378}
  else if (modelRegion == "pacsouthwest") {modelRegion = "pacsouthwest"; hsize = 420; vsize = 432}
  else if (modelRegion == "southrockies") {modelRegion = "southrockies"; hsize = 420; vsize = 392}
  else if (modelRegion == "northrockies") {modelRegion = "northrockies"; hsize = 420; vsize = 406}
  else if (modelRegion == "southplains") {modelRegion = "southplains"; hsize = 420; vsize = 461}
  else if (modelRegion == "southmissvly") {modelRegion = "southmissvly"; hsize = 420; vsize = 482}  
  else if (modelRegion == "eastgrtlakes") {modelRegion = "eastgrtlakes"; hsize = 420; vsize = 525}
  else if (modelRegion == "midatlantic") {modelRegion = "midatlantic"; hsize = 420; vsize = 527}
  else if (modelRegion == "southeast") {modelRegion = "southeast"; hsize = 420; vsize = 441}
  else if (modelRegion == "nemetro") {modelRegion = "nemetro"; hsize = 420; vsize = 532}
  else if (modelRegion == "northeast") {modelRegion = "northeast"; hsize = 420; vsize = 608}  
  else {modelRegion = "conus"; hsize = 515; vsize = 424}
  modelStart = 1; modelEnd = 20; modelMinHoursBetweenImages = 1;
  levelID = "500"; modelText = "GFS 500 MB height, temperature, and vorticity"; 
  if (level == "wx") { levelID = "Wx"; modelText = "Weather" }
  if (level == "maxt") { levelID = "MaxT"; modelText = "NWS Max T"; modelEnd = 7  }
  if (level == "mint") { levelID = "MinT"; modelText = "NWS Min T"; modelEnd = 7  }
  if (level == "temp") { levelID = "T"; modelText = "NWS T" }
  if (level == "12pop") { levelID = "PoP12"; modelText = "NWS 12hr PoP"; modelEnd = 13  }
  if (level == "windspd") { levelID = "WindSpd"; modelText = "NWS Wind Speed" }
  if (level == "windgust") { levelID = "WindGust"; modelText = "NWS Wind Gust" }
  if (level == "sky") { levelID = "Sky"; modelText = "NWS Sky Cover" }
  if (level == "qpf") { levelID = "QPF"; modelText = "NWS QPF"; modelEnd = 10  }
  if (level == "snowamt") { levelID = "SnowAmt"; modelText = "NWS Snow Amount"; modelEnd = 6 } 
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 20) { i += i % 2 }
    if (i >= 21 && modelHoursBetweenImages < 1) { modelHoursBetweenImages = 2 }
    else if (i < 100) { time = i }
    else { time = i }
    modelURL = 'http://www.weather.gov/forecasts/graphical/images/' + modelRegion + '/' + levelID + time + '_' + modelRegion + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}

function nam_ncep_para() {
  makeValidTime(2,8,14,20);
  hsize = 640; vsize = 480;
  if (size == "l") { hsize = 1280; vsize = 1024 }
  if (size == "m") { hsize = 1024; vsize = 768 }
  if (size == "s") { hsize = 640; vsize = 480 }
  if (modelRegion == "npac") { }
  else if (modelRegion == "carib") { }
  else { modelRegion = "namer" }
  modelStart = 0; modelEnd = 84; modelMinHoursBetweenImages = 6;
  levelID = "500"; modelText = "NAM 500 MB height, vorticity, and winds"; 
  if (level == "sfc") { levelID = "slp"; modelText = "NAM MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "ref") { levelID = "ref"; modelText = "NAM REF" }
  if (level == "pcp") { levelID = "p06"; modelText = "NAM MSL Pressure, QPF, and 850 MB isotherms" }
  if (level == "850") { levelID = "850"; modelText = "NAM 850 MB height, temperature, and wind" }
  if (level == "700") { levelID = "700"; modelText = "NAM 700 MB height, RH, wind, and vertical velocity" }
  if (level == "300") { levelID = "300"; modelText = "NAM 300 MB height, winds, and isotachs" }
  if (level == "200") { levelID = "200"; modelText = "NAM 200 MB height, winds, and isotachs" }
  if (level == "p12") { levelID = "p12"; modelText = "NAM 12-hour QPF"; modelStart = 12 }
  if (level == "p24") { levelID = "p24"; modelText = "NAM 24-hour QPF"; modelStart = 24 }
  if (level == "p36") { levelID = "p36"; modelText = "NAM 36-hour QPF"; modelStart = 36 }
  if (level == "p48") { levelID = "p48"; modelText = "NAM 48-hour QPF"; modelStart = 48 }
  if (level == "p60") { levelID = "p60"; modelText = "NAM 60-hour QPF"; modelStart = 60 }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.nco.ncep.noaa.gov/pmb/nwpara/analysis/' + modelRegion + '/nam/' + run + '/images/nam_' + levelID + '_' + time + size + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}

function sref_spc() {
  makeValidTime(5.5,11.5,17.5,23.5);
  if (run < 6 ) { modelRun = "00"; modelRunText = "03" }
  else if (run < 12 && run >= 6) { modelRun = "06"; modelRunText = "09" }
  else if (run < 18 && run >= 12) { modelRun = "12"; modelRunText = "15" }
  else { modelRun = "18"; modelRunText = "21" }
  hsize = 820; vsize = 630;
  modelRegion = "namer";
  modelStart = 0; modelEnd = 87; modelMinHoursBetweenImages = 3;
  levelID = "H5_"; modelText = "GFS 500 MB height, vorticity, and winds"; 
  if (level == "omega") { levelID = "prob_H7_omega_3_"; modelText = "SREF 700mb Mean Omega" }
  if (level == "frontogenesis") { levelID = "front_MEAN_ONLY"; modelText = "SREF Mean frontogenesis" }
  if (level == "850mbtemp") { levelID = "850MB-TEMP_MEAN_SD_"; modelText = "SREF 850mb Temp" }
  if (level == "750mbtemp") { levelID = "750MB-TEMP_MEAN_SD_"; modelText = "SREF 750mb Temp" }
  if (level == "3hrsnow") { levelID = "SNOWFALL_MEAN"; modelText = "SREF Mean 3hr Snow" }
  if (level == "6hrsnow") { levelID = "SNOWFALL_MEAN6HR"; modelText = "SREF Mean 6hr Snow" }
  if (level == "12hrsnow") { levelID = "SNOWFALL_MEAN12HR"; modelText = "SREF Mean 12hr Snow" }
  if (level == "snowratio") { levelID = "snowfall_ratio"; modelText = "SREF Snowfall Ratio" }
  if (level == "1inchhrpop") { levelID = "SNOWRATE_1INCH"; modelText = "SREF 1in/hr snow PoP" }
  if (level == "dendgrowth") { levelID = "DEND_MEDIAN_MXMN_"; modelText = "SREF Dendritic Growth Zone Mean" }
  if (level == "preciptype") { levelID = "LIKELY_"; modelText = "SREF Precip Type" }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.spc.noaa.gov/exper/sref/gifs/' + initYear + initMonth + initDay + modelRunText + '/SREF_' + levelID + '_f' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}


function gfs_navy() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  if (modelRegion == "npac" || modelRegion == "epac") { modelRegion = "epac" }
  else if (modelRegion == "carib" || modelRegion == "tropatl") { modelRegion = "troplant" }
  else if (modelRegion == "samer") { modelRegion = "samer" }
  else if (modelRegion == "europe") { modelRegion = "europeg" }
  else if (modelRegion == "mideast") { modelRegion = "swasia" }
  else if (modelRegion == "africa") { modelRegion = "africa" }
  else if (modelRegion == "wpac") { modelRegion = "wpac" }
  else if (modelRegion == "epac") { modelRegion = "epac" }
  else if (modelRegion == "atlantic") { modelRegion = "atlantic" }
  else if (modelRegion == "aus") { modelRegion = "ausnz" }
  else if (modelRegion == "tropwpac") { modelRegion = "tropwpac" }
  else if (modelRegion == "tropepac") { modelRegion = "tropepac" }
  else if (modelRegion == "indian") { modelRegion = "tropio" }
  else { modelRegion = "namer" }
  makeValidTime(6,6,18,18);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "prp"; modelText = "GFS MSL pressure, 1000-500 MB thickness, and QPF"
  if (level == "850") { levelID = "850"; modelText = "GFS 850 MB height and temperature" }
  if (level == "700") { levelID = "70vv"; modelText = "GFS 700 MB height and vertical velocity" }
  if (level == "500") { levelID = "500"; modelText = "GFS 500 MB height and vorticity" }
  if (level == "300" || level == "200") { levelID = "w30"; modelText = "GFS 300 MB height and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'https://152.80.49.210/products/WXMAP/GFS/' + initYear + initMonth + initDay + modelRun + '/gfs10.' + levelID + '.' + time + '.' + modelRegion + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecm() {
  modelRun = "12";
  todayNumber-=86400000;
  makeValidTime(3,3,3,3);
  hsize = 640; vsize = 480;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "ecmwf500_H_V_F"; modelText = "ECMWF 500 MB height and vorticity";
  if (level == "sfc" || level == "700" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "ecmwf500_H_SP_F"; modelText = "ECMWF 500 MB height MSL pressure" }
  if (level == "850") { levelID = "ecmwf850_T_SP_F"; modelText = "ECMWF 850 MB temperature and MSL pressure" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i == 0) { time = "00" }
    modelURL = 'http://www.met.tamu.edu/newmodels/' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function cod_ecm() {
  if (todayHour2 < 11) { modelRun = "12" }
  else if (todayHour2 < 23) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(11,11,23,23);
//  todayNumber-=86400000;
//  makeValidTime(2,2,2,2);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "500_spd_"; modelText = "ECMWF 500 MB height and winds";
  if (level == "sfc") { levelID = "850_temp_"; modelText = "ECMWF 850 MB temperature and MSL pressure" }
  if (level == "850") { levelID = "850_temp_"; modelText = "ECMWF 850 MB temperature and MSL pressure" }
  if (level == "700") { levelID = "700_spd_"; modelText = "ECMWF 700 MB Winds" }
  if (level == "300" || level == "200") { levelID = "200_spd_"; modelText = "ECMWF 200 MB Winds" }
  for (i = startTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i == 0) { time = "0" }
    modelURL = 'http://climate.cod.edu/data/forecast/ECMWF/' + modelRun + '/NA/ecmwfNA_' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecm_uqam() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12"; todayNumber-=86400000; }
  makeValidTime(14,14,2,2);
  hsize = 592; vsize = 600;
  if (modelRegion == "europe") { modelRegion = "eur"; hsize = 516; vsize = 600; }
  else { modelRegion = "amer" }
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "GZ_PN_"; modelText = "European Model MSL pressure and 500 MB heights";
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i < 100) { time = '0' + i }
    if (i < 10) { time = '00' + i }
    modelURL = 'http://www.sca.uqam.ca/models/ecmwf_' + modelRegion + '_' + modelRun + '/' + levelID + time + '_0000.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecm_ecmwf() {
  modelRun = "12";
//  todayNumber-=86400000;
  makeValidTime(23,23,23,23);
  hsize = 705; vsize = 435;
  if (modelRegion == "europe") { modelRegion = "Europe"; hsize = 760; vsize = 421; }
  else { modelRegion = "North%20America" }
  modelStart = 72; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "Geopotential%20500%20hPa"; modelText = "European Model 500 MB heights";
  if (level == "sfc" || level == "pcp" || level == "850") { levelID = "Wind%20850%20and%20mslp"; modelText = "European Model MSL Pressure and 850 MB wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    modelURL = 'http://www.ecmwf.int/products/forecasts/d/getchart/catalog/products/forecasts/deterministic/world/msl_uv850_z500!' + levelID + '!' + time + '!' + modelRegion + '!pop!od!oper!public_plots!latest!chart.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

 function jma_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(5.5,5.5,19,19);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  if (modelRun == "00") { modelEnd = 72 }
  setTimes();
  levelID = "slp"; modelText = "JMA MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "JMA accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "JMA 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "JMA 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "JMA 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "JMA 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/24;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/jma/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}


function ggem_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(4.6,4.6,16.1,16.1);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  if (modelRun == "12") { modelEnd = 72 }
  setTimes();
  levelID = "slp"; modelText = "Global Gem MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "Global Gem accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "Global Gem 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "Global Gem 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "Global Gem 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "Global Gem 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/cmc/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function gfs_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6,6,19,19);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "slp"; modelText = "GFS MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "GFS accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "GFS 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "GFS 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "GFS 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "GFS 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/avn/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function nogaps_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6.6,6.6,18.6,18.6);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "slp"; modelText = "NOGAPS MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "NOGAPS accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "NOGAPS 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "NOGAPS 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "NOGAPS 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "NOGAPS 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/nogaps/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ukmet_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6.6,6.6,18.6,18.6);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "slp"; modelText = "UKMET MSL pressure";
  if (level == "850" || level == "850vort") { levelID = "850vort"; modelText = "UKMET 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "UKMET 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "UKMET 500 MB winds and vorticity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 72 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/ukmet/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function canadian_ensemble() {
  makeValidTime(3,9,15,21);
  hsize = 830; vsize = 642;
  modelStart = 24; modelEnd = 240; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "gz"; modelText = "Canadian Ensemble mean 500 MB height";
  if (level == "ensmeanslp" || level == "sfc") { levelID = "pnm"; modelText = "Canadian Ensemble mean surface pressure" }
  if (level == "ensallslp") { levelID = "pnmall"; modelText = "all Canadian Ensemble members surface pressure" }
  if (level == "ensall500") { levelID = "gzall"; modelText = "all Canadian Ensemble members 500 MB height" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    weatherImages[imageNum] = new Image();
    imagesToSkip[imageNum] = "false";
    time = i;
    if (i < 100) { time = '0' + i }
    weatherImages[imageNum].src = 'http://www.cmc.ec.gc.ca/rpn/ensemble_products/oper/images/' + levelID + '.' + canEnsTime + '.' + time + '.gif';
    imageNum++;
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function cfs() {
  makeValidTime(18,18,18,18);
  hsize = 1208; vsize = 805;
  modelRegion == "us"
  modelStart = 0; modelEnd = 550; modelMinHoursBetweenImages = 1;
  levelID = "SLPTHKPRP"; modelText = "CFS 12hr precip"; 
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://charlie.wxcaster.com/model/conus/cfs/CONUS_CFS_1000-500_' + levelID + '_' + time + 'HR.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + startTime + ' hours.' }
}
  
function gfs_lrem() {
  if (run < 12 ) { modelRun = "00"; modelRunText = "0" }
  else { modelRun = "12"; modelRunText = "12" }
  makeValidTime(4,10,16,22);
  hsize = 1530; vsize = 820;
  modelRegion == "namer"
  modelStart = 12; modelEnd = 384; modelMinHoursBetweenImages = 12;
  levelID = "500"; modelText = "GFS Ensemble 500mb flow"; 
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = i }
    else { time = i }
    modelURL = 'http://www.meteo.psu.edu/~gadomski/ENSHGTWIDE_' + modelRunText + 'z/f' + time + '.gif';
    makeArrays();
  }
  if (modelStartTime != modelEndTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + modelStartTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + modelStartTime + ' hours.' }
}

function sref() {
  if (run < 6 ) { modelRun = "00"; modelRunText = "3" }
  else if (run < 12 && run >= 6) { modelRun = "06"; modelRunText = "9" }
  else if (run < 18 && run >= 12) { modelRun = "12"; modelRunText = "15" }
  else { modelRun = "18"; modelRunText = "21" }
  makeValidTime(0,6,12,18);
  hsize = 1024; vsize = 820;
  modelRegion == "namer"
  modelStart = 6; modelEnd = 87; modelMinHoursBetweenImages = 3;
  levelID = "PRS"; modelText = "SREF Surface Pressure/Prcp"; 
  if (level == "500") { levelID = "500"; modelText = "SREF 500mb Vorticity" }
  if (level == "700") { levelID = "700"; modelText = "SREF 700mb RH" }
  if (level == "850") { levelID = "850"; modelText = "SREF 850mb Temps" }
  if (level == "2mtempf") { levelID = "TMP"; modelText = "SREF 2 meter temps" }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.meteo.psu.edu/~gadomski/SREF21' + levelID + 'US_' + modelRunText + 'z/f' + time + '.gif';
    makeArrays();
  }
  if (modelStartTime != modelEndTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + modelStartTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + modelStartTime + ' hours.' }
}

function ecmwf_4panel() {
  if (run < 12 ) { modelRun = "00"; modelRunText = "0z" }
  else { modelRun = "12"; modelRunText = "12z" }
  makeValidTime(4,4,16,16);
  hsize = 1024; vsize = 820;
  modelRegion == "namer"
  modelStart = 24; modelEnd = 168; modelMinHoursBetweenImages = 24;
  levelID = "PRS"; modelText = "ECMWF 4 Panel"; 
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.meteo.psu.edu/~gadomski/ECMWF_' + modelRunText + '/f' + time + '.gif';
    makeArrays();
  }
  if (modelStartTime != modelEndTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + modelStartTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + modelStartTime + ' hours.' }
}

function ecmwf_4panel240() {
  if (run < 12 ) { modelRun = "00"; modelRunText = "0z" }
  else { modelRun = "12"; modelRunText = "12z" }
  makeValidTime(4,4,16,16);
  hsize = 1024; vsize = 820;
  modelRegion == "namer"
  modelStart = 24; modelEnd = 240; modelMinHoursBetweenImages = 24;
  levelID = "PRS"; modelText = "ECMWF 4 Panel"; 
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.meteo.psu.edu/~gadomski/ECMWF0.5_' + modelRunText + '/f' + time + '.gif';
    makeArrays();
  }
  if (modelStartTime != modelEndTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + modelStartTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + modelStartTime + ' hours.' }
}

function ecmwf_ec() {
  if (run < 12) { modelRun = "00"; }
  else { modelRun = "12" }
  makeValidTime(7,7,19,19);
  hsize = 745; vsize = 490;
  modelStart = 72; modelEnd = 240; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "Wind%20850%20and%20mslp"; modelText = "ECMWF 850 wind speed/Surface Pressure"; 
  if (level == "500") { levelID = "Geopotential%20500%20hPa%20and%20Temperature%20at%20850%20hPa"; modelText = "ECMWF 500mb Vorticity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    modelURL = 'http://www.ecmwf.int/products/forecasts/d/getchart/catalog/products/forecasts/medium/deterministic/msl_uv850_z500!' + levelID + '!' + time + '!North%20America!pop!od!oper!public_plots!' + initYear + initMonth + initDay + modelRun + '!!chart.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecmwf_eus() {
  if (run < 12) { modelRun = "00"; }
  else { modelRun = "12" }
  makeValidTime(6,6,18,18);
  hsize = 800; vsize = 600;
  modelStart = 72; modelEnd = 240; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "P2TS"; modelText = "ECMWF 12 hr Precip and 850mb Temps"; 
  if (level == "500") { levelID = "H50S"; modelText = "ECMWF 500mb" }
  if (level == "850" | level == "sfc" | level == "pcp") { levelID = "P2TS"; modelText = "ECMWF 12hr Precip and 850mb Temps" } 
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 100) { time = '0' + i }
	else { time = i }
    modelURL = 'http://models.easternuswx.com/euro/ECM_' + run + '_opNA_' + levelID + '_' + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}



function ruc_ncep() {
  initTimeNumber = todayNumber-3600000;
  initTimeNumberLocal = initTimeNumber-60000*GMTOffset;
  initTime = new Date(initTimeNumber);
  initTimeLocal = new Date(initTimeNumberLocal)
  initHour = initTime.getHours();
  if (initHour < 10) { initHour = '0' + initHour }
  else { initHour = '' + initHour }
  hsize = 640; vsize = 480;
  if (size == "l") { hsize = 1280; vsize = 1024 }
  if (size == "m") { hsize = 1024; vsize = 768 }
  if (size == "s") { hsize = 640; vsize = 480 }
  if (modelRegion == "npac") { }
  else if (modelRegion == "carib") { }
  else { modelRegion = "namer" }
  modelStart = 0; modelEnd = 12; modelMinHoursBetweenImages = 1;
  setTimes();
  levelID = "500"; modelText = "RUC 500 MB height, vorticity, and winds"; 
  if (level == "sfc") { levelID = "slp"; modelText = "RUC MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "p01"; modelText = "RUC MSL Pressure, QPF, and 850 MB isotherms" }
  if (level == "850") { levelID = "850"; modelText = "RUC 850 MB height, temperature, and wind" }
  if (level == "700") { levelID = "700"; modelText = "RUC 700 MB height, RH, wind, and vertical velocity" }
  if (level == "300") { levelID = "300"; modelText = "RUC 300 MB height, winds, and isotachs" }
  if (level == "200") { levelID = "200"; modelText = "RUC 200 MB height, winds, and isotachs" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'http://www.nco.ncep.noaa.gov/pmb/nwprod/analysis/' + modelRegion + '/eta/' + run + '/images/eta_' + levelID + '_' + time + size + '.gif';
    makeArrays();
  }
  if (modelStartTime != modelEndTime) { mouseOverText = run + 'Z ' + modelText + ' from ' + modelStartTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = run + 'Z ' + modelText + ' at ' + modelStartTime + ' hours.' }
}

function eta_wisc() {
  makeValidTime(4,10,16,22);
  hsize = 900; vsize = 720;
  if (run == "06" || run == "18") { modelEnd = 48 }
  else { modelEnd = 84 }
  modelStart = 0; modelMinHoursBetweenImages = 3;
  setTimes();
  levelID = "c500"; modelText = "ETA 500 MB height and vorticity"; 
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "cprese"; modelText = "ETA MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "850") { levelID = "c850"; modelText = "ETA 850 MB height and temperature" }
  if (level == "700") { levelID = "c700"; modelText = "ETA 700 MB height and vertical velocity" }
  if (level == "300" || level == "200") { levelID = "c300"; modelText = "ETA 300 MB height and wind speed" }
  if (level == "rhli") { levelID = "crhli"; modelText = "ETA 850-500 MB relative humidity and lifted index" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    idunno = "";
    if (i == 0 && levelID == "cprese") { idunno = "0" }
    time = i;
    if (i < 10) { time = '0' + i }
    modelURL = 'http://www.aos.wisc.edu/weatherdata/u2wxp_images/eta212_' + run + 'UTC/eta_' + levelID + idunno + '_h' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function gfs_wisc() {
  makeValidTime(5,11,17,23);
  hsize = 900; vsize = 720;
  if (modelRegion == "nhem") { hsize = 750; vsize = 750; }
  else { modelRegion = "104" }
  modelStart = 0; modelEnd = 180; modelMinHoursBetweenImages = 3;
  setTimes();
  levelID = "c500"; modelText = "GFS 500 MB height and vorticity"; 
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "cpres"; modelText = "GFS MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "850") { levelID = "c850"; modelText = "GFS 850 MB height and temperature" }
  if (level == "700") { levelID = "c700"; modelText = "GFS 700 MB height and vertical velocity" }
  if (level == "300" || level == "200") { levelID = "c300"; modelText = "GFS 300 MB height and wind speed" }
  if (level == "rhli") { levelID = "crhlia"; modelText = "GFS 850-500 MB relative humidity and lifted index" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    idunno = "";
    if (i == 0 && levelID == "cpres") { idunno = "0" }
    if (modelRegion == "nhem" && (levelID == "c850" || levelID == "c700" || levelID == "c500" || levelID == "c300")) { idunno = "nv" }
    time = i;
    if (i < 100) { time = '0' + i }
    if (i < 10) { time = '00' + i }
    modelURL = 'http://www.aos.wisc.edu/weatherdata/quadwxp_images/gblav_' + modelRegion + '_' + run + 'UTC/gblav_' + levelID + idunno + '_h' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function gfs_navy() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  if (modelRegion == "npac" || modelRegion == "epac") { modelRegion = "epac" }
  else if (modelRegion == "carib" || modelRegion == "tropatl") { modelRegion = "troplant" }
  else if (modelRegion == "samer") { modelRegion = "samer" }
  else if (modelRegion == "europe") { modelRegion = "europeg" }
  else if (modelRegion == "mideast") { modelRegion = "swasia" }
  else if (modelRegion == "africa") { modelRegion = "africa" }
  else if (modelRegion == "wpac") { modelRegion = "wpac" }
  else if (modelRegion == "epac") { modelRegion = "epac" }
  else if (modelRegion == "atlantic") { modelRegion = "atlantic" }
  else if (modelRegion == "aus") { modelRegion = "ausnz" }
  else if (modelRegion == "tropwpac") { modelRegion = "tropwpac" }
  else if (modelRegion == "tropepac") { modelRegion = "tropepac" }
  else if (modelRegion == "indian") { modelRegion = "tropio" }
  else { modelRegion = "namer" }
  makeValidTime(6,6,18,18);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "prp"; modelText = "GFS MSL pressure, 1000-500 MB thickness, and QPF"
  if (level == "850") { levelID = "850"; modelText = "GFS 850 MB height and temperature" }
  if (level == "700") { levelID = "70vv"; modelText = "GFS 700 MB height and vertical velocity" }
  if (level == "500") { levelID = "500"; modelText = "GFS 500 MB height and vorticity" }
  if (level == "300" || level == "200") { levelID = "w30"; modelText = "GFS 300 MB height and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'https://152.80.49.210/products/WXMAP/GFS/' + initYear + initMonth + initDay + modelRun + '/gfs10.' + levelID + '.' + time + '.' + modelRegion + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function eta_old() {
  if (todayHour2 < 3) { modelRun = "12" }
  else if (todayHour2 < 15) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3,3,15,15);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 60; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "c500"; modelText = "ETA 500 MB height and vorticity"; 
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "cpres"; modelText = "ETA MSL Pressure, 1000-500 MB Thickness, and QPF" }
  if (level == "850") { levelID = "c850"; modelText = "ETA 850 MB height and temperature" }
  if (level == "700") { levelID = "c700"; modelText = "ETA 700 MB height and vertical velocity" }
  if (level == "300" || level == "200") { levelID = "c300"; modelText = "ETA 300 MB height and wind speed" }
  if (level == "rhli") { levelID = "crhli"; modelText = "ETA 850-500 MB relative humidity and lifted index" }
  if (level == "multi") { levelID = "6panel"; hsize = 850; vsize = 1000; ; modelText = "ETA 6-panel plot" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i > 48) { i = 60 }
    if (i < 10) { time = '0' + i }
    else { time = i }
    if (levelID == "cpres" && (i % 12 == 0) && (i != 60)) {
      modelURL = 'http://www.aos.wisc.edu/weatherdata/eta/eta_' + levelID + i + '_h' + time + '.gif';
    }
    else {
      modelURL = 'http://www.aos.wisc.edu/weatherdata/eta/eta_' + levelID + '_h' + time + '.gif';
    }
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function eta_cod() {
  if (todayHour2 < 3) { modelRun = "12" }
  else if (todayHour2 < 15) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3,3,15,15);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 84; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "0_prec_"; modelText = "ETA MSL pressure, 1000-500 MB Thickness and QPF";
  if (level == "850") { levelID = "850_temp_"; modelText = "ETA 850 MB heights, temperature, and wind barbs" }
  if (level == "700") { levelID = "700_vvel_"; modelText = "ETA 700 MB heights and vertical velocity" }
  if (level == "500") { levelID = "500_avort_"; modelText = "ETA 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "250_spd_"; modelText = "ETA 250 MB heights and wind speed" }
  if (level == "rhli") { levelID = "700_rhum_"; modelText = "ETA 700 MB heights and relative humidity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    modelURL = 'http://weather.cod.edu/forecast/ETA/etaUS_' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function meta_cod() {
  makeValidTime(3,9,15,21);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "0_prec_"; modelText = "ETA MSL pressure, 1000-500 MB Thickness and QPF";
  if (level == "850") { levelID = "850_temp_"; modelText = "ETA 850 MB heights, temperature, and wind barbs" }
  if (level == "700") { levelID = "700_vvel_"; modelText = "ETA 700 MB heights and vertical velocity" }
  if (level == "500") { levelID = "500_avort_"; modelText = "ETA 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "250_spd_"; modelText = "ETA 250 MB heights and wind speed" }
  if (level == "rhli") { levelID = "700_rhum_"; modelText = "ETA 700 MB heights and relative humidity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    modelURL = 'http://weather.cod.edu/forecast/ETA/offeta/metaUS_' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function etaxx() {
  if (todayHour2 < 12) { modelRun = "12";  }
  else { modelRun = "00" }
  makeValidTime(12,12,23,23);
  hsize = 554; vsize = 474;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "500"; modelText = "ETAXX 500 MB height and vorticity";
  if (level == "sfc") { levelID = "mslp"; modelText = "ETAXX sea level pressure and precipitation" }
  if (level == "850") { levelID = "850"; modelText = "ETAXX 850 MB heights and temperature" }
  if (level == "300" || level == "200") { levelID = "300"; modelText = "ETA10 250 MB heights and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = parseInt(i/12) + 1;
    modelURL = 'http://www.crh.noaa.gov/dtx/DTXEta/ext' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function eta08() {
  modelRun = "18";
  if (todayHour2 < 22) { modelRun = "12" }
  if (todayHour2 < 18) { modelRun = "06" }
  if (todayHour2 < 12) { modelRun = "00" }
  if (todayHour2 < 6) { modelRun = "18" }
  makeValidTime(3,9,15,21);
  hsize = 550; vsize = 425;
  if (modelRegion == "northwest" || modelRegion == "southwest") { modelRegion = "west08/west08." }
  else if (modelRegion == "northcentral" || modelRegion == "southcentral") { modelRegion = "central08/central08." }
  else { modelRegion = "east08/east08." }
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 3;
  setTimes();
  levelID = "500"; modelText = "ETA10 500 MB height and vorticity";
  if (level == "sfc") { levelID = "slp"; modelText = "ETA10 MSL pressure and 1000-500 MB thickness" }
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "pcp"; modelText = "ETA10 6 and 12 hour precip" }
  if (level == "850") { levelID = "850"; modelText = "ETA10 850 MB heights and temperature" }
  if (level == "700" || level == "rhli") { levelID = "700"; modelText = "ETA10 700 MB heights and total column precipitable water" }
  if (level == "300" || level == "200") { levelID = "250"; modelText = "ETA10 250 MB heights and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://wwwt.emc.ncep.noaa.gov/mmb/mmbpll/hiresw.' + modelRegion + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ngm_wisc() {
  if (todayHour2 < 3) { modelRun = "12" }
  else if (todayHour2 < 15) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3,3,15,15);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "c500"; modelText = "NGM 500 MB height and vorticity"
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "cpres"; modelText = "NGM MSL pressure, 1000-500 MB thickness, and QPF" }
  if (level == "850") { levelID = "c850"; modelText = "NGM 850 MB height and temperature" }
  if (level == "700") { levelID = "c700"; modelText = "NGM 700 MB vertical velocity" }
  if (level == "300" || level == "200") { levelID = "c300"; modelText = "NGM 300 MB height and wind speed" }
  if (level == "rhli") { levelID = "crhlin"; modelText = "NGM 850-500 MB relative humidity and lifted index" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = 'h' + '0' + i }
    else { time = 'h' + i }
    if (levelID == "cpres" && (i % 12 == 0)) {
      modelURL = 'http://itg1.meteor.wisc.edu/wxp_images/ngm/ngm_' + levelID + i + '_' + time + '.gif';
    }
    else {
      modelURL = 'http://itg1.meteor.wisc.edu/wxp_images/ngm/ngm_' + levelID + '_' + time + '.gif';
    }
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function avn_old() {
  if (todayHour2 < 5) { modelRun = "12" }
  else if (todayHour2 < 17) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(5,5,17,17);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 120; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "c500"; modelText = "AVN 500 MB height and vorticity";
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "cpres"; modelText = "AVN MSL pressure, 1000-500 MB thickness, and QPF" }
  if (level == "850") { levelID = "c850"; modelText = "AVN 850 MB height and temperature" }
  if (level == "700") { levelID = "c700"; modelText = "AVN 700 MB vertical velocity" }
  if (level == "300" || level == "200") { levelID = "c300"; modelText = "AVN 300 MB height and wind speed" }
  if (level == "rhli") { levelID = "crhlia"; modelText = "Plot of AVN 850-500 MB relative humidity and lifted index" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = 'h' + '0' + i }
    else { time = 'h' + i }
    if (levelID == "cpres" && i == 0) {
      modelURL = 'http://itg1.meteor.wisc.edu/wxp_images/avn/avn_cpres0_h00.gif';
    }
    else {
      modelURL = 'http://itg1.meteor.wisc.edu/wxp_images/avn/avn_' + levelID + '_' + time + '.gif';
    }
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function avn_cod() {
  if (todayHour2 < 5) { modelRun = "12" }
  else if (todayHour2 < 17) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(5,5,17,17);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 120; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "0_prec_"; modelText = "ETA MSL pressure, 1000-500 MB Thickness and QPF";
  if (level == "850") { levelID = "850_temp_"; modelText = "AVN 850 MB heights, temperature, and wind barbs" }
  if (level == "700") { levelID = "700_vvel_"; modelText = "AVN 700 MB heights and vertical velocity" }
  if (level == "500") { levelID = "500_avort_"; modelText = "AVN 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "250_spd_"; modelText = "AVN 250 MB heights and wind speed" }
  if (level == "rhli") { levelID = "700_rhum_"; modelText = "AVN 700 MB heights and relative humidity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 48 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    time = i;
    modelURL = 'http://weather.cod.edu/forecast/AVN/avn_usUS_' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function mrf_wisc() {
  modelRun = "00";
  makeValidTime(10,10,10,10);
  hsize = 800; vsize = 600;
  if (modelRegion == "namer" || modelRegion == "carib" || modelRegion == "npac") { modelRegion = "conus" }
  else if (modelRegion == "nhem") { hsize = 800; vsize = 800; }
  else { modelRegion = "g211" }
  if (modelRegion != "g211" && level == "multi") { level = "c500" }
  if (modelRegion == "nhem") { hsize = 800; vsize = 800; }
  modelStart = 12; modelEnd = 240; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "c500"; modelText = "MRF 500 MB height and vorticity";
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "cpres"; modelText = "MRF MSL pressure, 1000-500 MB thickness, and QPF" }
  if (level == "850") { levelID = "c850"; modelText = "MRF 850 MB height and temperature" }
  if (level == "300" || level == "200") { levelID = "c300"; modelText = "MRF 300 MB height and wind speed" }
  if (level == "multi") { levelID = "4panel"; hsize = 800; vsize = 600; modelText = "MRF 4-panel plot" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = 'h' + i;
    if (i > 60) {
      if (i % 24 > 0) { time = parseInt(i/24) + '.5day' }
      else { time = parseInt(i/24) + 'day' }
    }
    modelURL = 'http://itg1.meteor.wisc.edu/wxp_images/mrf/mrf_' + levelID + '_' + time + '_' + modelRegion + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function unisys_mrf() {
  modelRun = "00";
  makeValidTime(10,10,10,10);
  hsize = 640; vsize = 512;
  if (modelRegion == "nhem" || modelRegion == "carib" || modelRegion == "npac") { hsize = 620; vsize = 640; level = "500"; modelRegion = "_nhem" }
  else { modelRegion = "" }
  modelStart = 0; modelEnd = 240; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "500p"; modelText = "MRF 500 MB height and surface pressure";
  if (level == "multi") { levelID = "4panel"; hsize = 1000; vsize = 735; modelText = "MRF 4-panel plot" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i > 60) {
      if (i % 24 > 0) { time = parseInt(i/24) + 'e' }
      else { time = parseInt(i/24) + 'd' }
    }
    else { time = i + 'h' }
    if (i == 0) { time = "init" }
    modelURL = 'http://www.weather.unisys.com/mrf/' + time + '/mrf_' + levelID + '_' + time + modelRegion + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecm() {
  modelRun = "12";
  todayNumber-=86400000;
  makeValidTime(3,3,3,3);
  hsize = 640; vsize = 480;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "ecmwf500_H_V_F"; modelText = "ECMWF 500 MB height and vorticity";
  if (level == "sfc" || level == "700" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "ecmwf500_H_SP_F"; modelText = "ECMWF 500 MB height MSL pressure" }
  if (level == "850") { levelID = "ecmwf850_T_SP_F"; modelText = "ECMWF 850 MB temperature and MSL pressure" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i == 0) { time = "00" }
    modelURL = 'http://www.met.tamu.edu/newmodels/' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function cod_ecm() {
  if (todayHour2 < 11) { modelRun = "12" }
  else if (todayHour2 < 23) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(11,11,23,23);
//  todayNumber-=86400000;
//  makeValidTime(2,2,2,2);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "500_spd_"; modelText = "ECMWF 500 MB height and winds";
  if (level == "sfc") { levelID = "850_temp_"; modelText = "ECMWF 850 MB temperature and MSL pressure" }
  if (level == "850") { levelID = "850_spd_"; modelText = "ECMWF 850 MB Winds" }
  if (level == "700") { levelID = "700_spd_"; modelText = "ECMWF 700 MB Winds" }
  if (level == "300" || level == "200") { levelID = "200_spd_"; modelText = "ECMWF 200 MB Winds" }
  for (i = startTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i == 0) { time = "0" }
    modelURL = 'http://weather.cod.edu/forecast/ECMWF/ecmwf_' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + modelEndTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecm_uqam() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12"; todayNumber-=86400000; }
  makeValidTime(14,14,2,2);
  hsize = 592; vsize = 600;
  if (modelRegion == "europe") { modelRegion = "eur"; hsize = 516; vsize = 600; }
  else { modelRegion = "amer" }
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "GZ_PN_"; modelText = "European Model MSL pressure and 500 MB heights";
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i < 100) { time = '0' + i }
    if (i < 10) { time = '00' + i }
    modelURL = 'http://www.sca.uqam.ca/models/ecmwf_' + modelRegion + '_' + modelRun + '/' + levelID + time + '_0000.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ecm_ecmwf() {
  modelRun = "12";
//  todayNumber-=86400000;
  makeValidTime(23,23,23,23);
  hsize = 705; vsize = 435;
  if (modelRegion == "europe") { modelRegion = "Europe"; hsize = 760; vsize = 421; }
  else { modelRegion = "North%20America" }
  modelStart = 72; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "Geopotential%20500%20hPa"; modelText = "European Model 500 MB heights";
  if (level == "sfc" || level == "pcp" || level == "850") { levelID = "Wind%20850%20and%20mslp"; modelText = "European Model MSL Pressure and 850 MB wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    modelURL = 'http://www.ecmwf.int/products/forecasts/d/getchart/catalog/products/forecasts/deterministic/world/msl_uv850_z500!' + levelID + '!' + time + '!' + modelRegion + '!pop!od!oper!public_plots!latest!chart.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ukmet_cod() {
  if (todayHour2 < 9) { modelRun = "12" }
  else if (todayHour2 < 21) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(9,9,21,21);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 72; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "0_prec_"; modelText = "UKMET MSL pressure, 1000-500 MB Thickness and QPF";
  if (level == "850") { levelID = "850_temp_"; modelText = "UKMET 850 MB heights, temperature, and wind barbs" }
  if (level == "700") { levelID = "700_vvel_"; modelText = "UKMET 700 MB heights and vertical velocity" }
  if (level == "500") { levelID = "500_avort_"; modelText = "UKMET 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "250_spd_"; modelText = "UKMET 250 MB heights and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i >= 48 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    modelURL = 'http://weather.cod.edu/forecast/UKMET/ukmet_nhUS_' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ukmet_uqam() {
  if (modelRun < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6,6,18,18);
  hsize = 600; vsize = 555;
  if (modelRegion == "europe") { modelRegion = "eur" }
  else { modelRegion = "amer" }
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  levelID = "GZ_D5_PN_"; modelText = "UKMET MSL pressure and 500 MB heights";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "P1_PN_"; modelText = "UKMET MSL pressure and precipitation"; modelEnd = 72 }
  setTimes();
  if (modelRegion == "amer" && levelID == "GZ_D5_PN_") { hsize = 593; vsize = 600 }
  if (modelRegion == "amer" && levelID == "P1_PN_") { hsize = 600; vsize = 555 }
  if (modelRegion == "eur" && levelID == "GZ_D5_PN_") { hsize = 517; vsize = 600 }
  if (modelRegion == "eur" && levelID == "P1_PN_") { hsize = 585; vsize = 600 }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i > 42 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    if (i > 60 && modelHoursBetweenImages < 24) { modelHoursBetweenImages = 24 }
    time = i;
    if (i < 100) { time = '0' + i }
    if (i < 10) { time = '00' + i }
    modelURL = 'http://www.sca.uqam.ca/models/ukmet_' + modelRegion + '_' + modelRun + '/' + levelID + time + '_0000.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ukmet_charts() {
  if (todayHour2 < 3) { modelRun = "12" }
  else if (todayHour2 < 15) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3,3,15,15);
  modelText = "UK MET Office Surface Charts";
  hsize = '1073'; vsize = '864';
  modelStart = 0; modelEnd = 120; modelMinHoursBetweenImages = 12;
  setTimes();
  ukmoURL = new Array();
  ukmoURL[0] = "http://129.13.102.67/wz/pics/bracka.gif";
  ukmoURL[24] = "http://129.13.102.67/wz/pics/brack0.gif";
  ukmoURL[36] = "http://129.13.102.67/wz/pics/brack0a.gif";
  ukmoURL[48] = "http://129.13.102.67/wz/pics/brack1.gif";
  ukmoURL[60] = "http://129.13.102.67/wz/pics/brack1a.gif";
  ukmoURL[72] = "http://129.13.102.67/wz/pics/brack2.gif";
  ukmoURL[96] = "http://129.13.102.67/wz/pics/brack3.gif";
  ukmoURL[120] = "http://129.13.102.67/wz/pics/brack4.gif";
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i == 12) { i = 24 }
    if (i > 60 && modelHoursBetweenImages < 24) { modelHoursBetweenImages = 24 }
    modelURL = ukmoURL[i];
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function rgem() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3,3,15,15);
  modelText = "Regional GEM 4-panel plots";
  if (size == "l") { modelSize = "100"; hsize = 2427; vsize = 1794 }
  else { modelSize = "50"; hsize = 1214; vsize = 897 }
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 12;
  setTimes();
  rgemURL = new Array();
  if (modelRun == "00") {
    rgemURL[0] = "http://weatheroffice.ec.gc.ca/data/model_forecast/510_";
    rgemURL[12] = "http://weatheroffice.ec.gc.ca/data/model_forecast/511_";
    rgemURL[24] = "http://weatheroffice.ec.gc.ca/data/model_forecast/512_";
    rgemURL[36] = "http://weatheroffice.ec.gc.ca/data/model_forecast/513_";
    rgemURL[48] = "http://weatheroffice.ec.gc.ca/data/model_forecast/520_";
  }
  else {
    rgemURL[0] = "http://weatheroffice.ec.gc.ca/data/model_forecast/590_";
    rgemURL[12] = "http://weatheroffice.ec.gc.ca/data/model_forecast/591_";
    rgemURL[24] = "http://weatheroffice.ec.gc.ca/data/model_forecast/592_";
    rgemURL[36] = "http://weatheroffice.ec.gc.ca/data/model_forecast/593_";
    rgemURL[48] = "http://weatheroffice.ec.gc.ca/data/model_forecast/600_";
  }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    modelURL = rgemURL[i] + modelSize + ".gif";
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ggem() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(4,4,16,16);
  modelText = "Global GEM 4-panel plots";
  if (size == "l") { modelSize = "100"; hsize = 2428; vsize = 1788 }
  else { modelSize = "50"; hsize = 1214; vsize = 894 }
  ggemURL = new Array();
  if (modelRun == "00") {
    modelEnd = 240;
    ggemURL[0] = "http://weatheroffice.ec.gc.ca/data/model_forecast/526_"
    ggemURL[12] = "http://weatheroffice.ec.gc.ca/data/model_forecast/527_"
    ggemURL[24] = "http://weatheroffice.ec.gc.ca/data/model_forecast/528_"
    ggemURL[36] = "http://weatheroffice.ec.gc.ca/data/model_forecast/530_"
    ggemURL[48] = "http://weatheroffice.ec.gc.ca/data/model_forecast/531_"
    ggemURL[60] = "http://weatheroffice.ec.gc.ca/data/model_forecast/695_"
    ggemURL[72] = "http://weatheroffice.ec.gc.ca/data/model_forecast/492_"
    ggemURL[84] = "http://weatheroffice.ec.gc.ca/data/model_forecast/133_"
    ggemURL[96] = "http://weatheroffice.ec.gc.ca/data/model_forecast/134_"
    ggemURL[108] = "http://weatheroffice.ec.gc.ca/data/model_forecast/135_"
    ggemURL[120] = "http://weatheroffice.ec.gc.ca/data/model_forecast/136_"
    ggemURL[144] = "http://weatheroffice.ec.gc.ca/data/model_forecast/hdd_"
    ggemURL[168] = "http://weatheroffice.ec.gc.ca/data/model_forecast/hde_"
    ggemURL[192] = "http://weatheroffice.ec.gc.ca/data/model_forecast/hdj_"
    ggemURL[216] = "http://weatheroffice.ec.gc.ca/data/model_forecast/hdk_"
    ggemURL[240] = "http://weatheroffice.ec.gc.ca/data/model_forecast/hdf_"
  }
  else {
    modelEnd = 72;
    ggemURL[0] = "http://weatheroffice.ec.gc.ca/data/model_forecast/606_";
    ggemURL[12] = "http://weatheroffice.ec.gc.ca/data/model_forecast/607_";
    ggemURL[24] = "http://weatheroffice.ec.gc.ca/data/model_forecast/608_";
    ggemURL[36] = "http://weatheroffice.ec.gc.ca/data/model_forecast/610_";
    ggemURL[48] = "http://weatheroffice.ec.gc.ca/data/model_forecast/611_";
    ggemURL[60] = "http://weatheroffice.ec.gc.ca/data/model_forecast/622_";
    ggemURL[72] = "http://weatheroffice.ec.gc.ca/data/model_forecast/478_";
  }
  modelStart = 0; modelMinHoursBetweenImages = 12;
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 120 && modelHoursBetweenImages < 24) { modelHoursBetweenImages = 24 }
    if (i > 120) {
      if (modelSize == "50") { hsize = 714; vsize = 1050 }
      if (modelSize == "100") { hsize = 1427; vsize = 2100 }
    }
    modelURL = ggemURL[i] + modelSize + ".gif";
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ggem_uqam() {
  if (run < 12) { modelRun = "00"; modelEnd = 240; }
  else { modelRun = "12"; modelEnd = 144; }
  makeValidTime(4,4,16,16);
  hsize = 593; vsize = 550;
  if (modelRegion == "europe") { modelRegion = "eur" }
  else { modelRegion = "amer" }
  modelStart = 0; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "GZ_D5_PN_"; modelText = "Global GEM MSL pressure and 500 MB heights";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "P6_PN_"; modelText = "Global GEM MSL pressure and precipitation" }
  if (modelRegion == "amer" && levelID == "GZ_D5_PN_") { hsize = 558; vsize = 564 }
  if (modelRegion == "amer" && levelID == "P6_PN_") { hsize = 593; vsize = 550 }
  if (modelRegion == "eur" && levelID == "GZ_D5_PN_") { hsize = 483; vsize = 561 }
  if (modelRegion == "eur" && levelID == "P6_PN_") { hsize = 548; vsize = 563 }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i < 100) { time = '0' + i }
    if (i < 10) { time = '00' + i }
    modelURL = 'http://www.sca.uqam.ca/models/gemglb_' + modelRegion + '_' + modelRun + '/' + levelID + time + '_0000.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function korean() {
  modelRun = "12";
  todayNumber-=86400000;
  makeValidTime(0,0,0,0);
  hsize = 973; vsize = 953;
  modelStart = 0; modelEnd = 240; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "5g5t"; modelText = "Korean Model 500 MB heights and temperature"; hsize = 904; vsize = 953;
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "smsr"; modelText = "Korean Model surface pressure and precipitation"; hsize = 973; vsize = 953 }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    modelURL = 'http://www.kma.go.kr/kma03/gif/g21nh_' + levelID + '_' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function nogaps() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  if (modelRegion == "npac" || modelRegion == "epac") { modelRegion = "epac" }
  else if (modelRegion == "carib" || modelRegion == "tropatl") { modelRegion = "troplant" }
  else if (modelRegion == "samer") { modelRegion = "samer" }
  else if (modelRegion == "europe") { modelRegion = "europeg" }
  else if (modelRegion == "mideast") { modelRegion = "swasia" }
  else if (modelRegion == "africa") { modelRegion = "africa" }
  else if (modelRegion == "wpac") { modelRegion = "wpac" }
  else if (modelRegion == "epac") { modelRegion = "epac" }
  else if (modelRegion == "atlantic") { modelRegion = "atlantic" }
  else if (modelRegion == "aus") { modelRegion = "ausnz" }
  else if (modelRegion == "tropwpac") { modelRegion = "tropwpac" }
  else if (modelRegion == "tropepac") { modelRegion = "tropepac" }
  else if (modelRegion == "indian") { modelRegion = "tropio" }
  else { modelRegion = "namer" }
  makeValidTime(6,6,18,18);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 12;
  setTimes();
  levelID = "prp"; modelText = "NOGAPS MSL pressure, 1000-500 MB thickness, and QPF"
  if (level == "850") { levelID = "850"; modelText = "NOGAPS 850 MB height and temperature" }
  if (level == "700") { levelID = "70vv"; modelText = "NOGAPS 700 MB height and vertical velocity" }
  if (level == "500") { levelID = "500"; modelText = "NOGAPS 500 MB height and vorticity" }
  if (level == "300" || level == "200") { levelID = "w30"; modelText = "NOGAPS 300 MB height and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'https://152.80.49.210/products/WXMAP/NGP/' + initYear + initMonth + initDay + modelRun + '/ngp10.' + levelID + '.' + time + '.' + modelRegion + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function coamps() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(4,4,16,16);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "prp"; modelText = "COAMPS MSL pressure, 1000-500 MB thickness, and QPF"
  if (level == "850") { levelID = "850"; modelText = "COAMPS 850 MB winds, temperature, and relative humidity" }
  if (level == "700") { levelID = "u70"; modelText = "COAMPS 700 MB height, winds, and temperature" }
  if (level == "500") { levelID = "500"; modelText = "COAMPS 500 MB height and vorticity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '00' + i }
    else if (i < 100) { time = '0' + i }
    else { time = i }
    modelURL = 'https://152.80.49.210/products/WXMAP/27KM_COAMPS_CONUS/' + initYear + initMonth + initDay + modelRun + '/27km_coamps_conus10.' + levelID + '.' + time + '.conusc.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function mm5_suny_36() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3.5,3.5,15.5,15.5);
  hsize = 750; vsize = 650;
  modelStart = 0; modelEnd = 60; modelMinHoursBetweenImages = 3;
  levelID = "slp"; modelText = "SUNY 36km MM5 Sea level pressure, 10 meter winds, and 925 mb temperature"
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "pcp3"; modelText = "SUNY 36km MM5 Sea level pressure and 3-hour precipitation"; modelStart = 6 }
  if (level == "850" || level == "850vort") { levelID = "850t"; modelText = "SUNY 36km MM5 850 MB height, winds and temperature" }
  if (level == "700") { levelID = "700w"; modelText = "SUNY 36km MM5 700 MB vertical velocity and winds" }
  if (level == "rhli") { levelID = "700rh"; modelText = "SUNY 36km MM5 700 MB heights and relative humidity" }
  if (level == "500") { levelID = "500vor"; modelText = "SUNY 36km MM5 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "300j"; modelText = "SUNY 36km MM5 300 MB Heights, wind speeds, and temperature" }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i < 10) { time = '0' + i }
    modelURL = 'http://cheget.msrc.sunysb.edu/mm5rt_data/' + initYear + initMonth + initDay + modelRun + '/images_d1/' + levelID + '.' + time + '.0000' + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function mm5_suny_12() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3.5,3.5,15.5,15.5);
  hsize = 750; vsize = 650;
  modelStart = 0; modelEnd = 60; modelMinHoursBetweenImages = 1;
  setTimes();
  levelID = "slp"; modelText = "SUNY 12km MM5 Sea level pressure, 10 meter winds, and 925 mb temperature"
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") {
    if (modelHoursBetweenImages < 3) { levelID = "pcp1"; modelText = "SUNY 12km MM5 Sea level pressure and 1-hour precipitation" }
    else { levelID = "pcp3"; modelText = "SUNY 12km MM5 Sea level pressure and 3-hour precipitation" }
  }
  if (level == "850" || level == "850vort") { levelID = "850t"; modelText = "SUNY 12km MM5 850 MB height, winds and temperature" }
  if (level == "700") { levelID = "700w"; modelText = "SUNY 12km MM5 700 MB vertical velocity and winds" }
  if (level == "rhli") { levelID = "700rh"; modelText = "SUNY 12km MM5 700 MB heights and relative humidity" }
  if (level == "500") { levelID = "500vor"; modelText = "SUNY 12km MM5 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "300j"; modelText = "SUNY 12km MM5 300 MB Heights, wind speeds, and temperature" }
  if (level == "pcp" && startTime < 6) { startTime = 6 }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i < 10) { time = '0' + i }
    modelURL = 'http://cheget.msrc.sunysb.edu/mm5rt_data/' + initYear + initMonth + initDay + modelRun + '/images_d2/' + levelID + '.' + time + '.0000' + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ruc_ucar() {
  initTimeNumber = todayNumber-2400000;
  initTimeNumberLocal = initTimeNumber-60000*GMTOffset;
  initTime = new Date(initTimeNumber);
  initTimeLocal = new Date(initTimeNumberLocal)
  hsize = 680; vsize = 680;
  modelStart = 0; modelEnd = 12; modelMinHoursBetweenImages = 3;
  setTimes();
  levelID = "sfc_mslp"; modelText = "RUC MSL pressure and winds"
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "sfc_prcp"; modelText = "RUC precipitation" }
  if (level == "850") { levelID = "850_tmp"; modelText = "RUC 850 MB heights and temperature" }
  if (level == "700") { levelID = "700_tmp"; modelText = "RUC 700 MB heights and temperature" }
  if (level == "500") { levelID = "500_tmp"; modelText = "RUC 500 MB heights and temperature" }
  if (level == "300" || level == "200") { levelID = "300_wnd"; modelText = "RUC 300 MB heights and wind speed" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i + 'hr_' }
    else { time = i + 'hr_'}
    modelURL = 'http://www.rap.ucar.edu/weather/model/ruc' + time + levelID + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}


function ruc_taq_10km() {
  initTimeNumber = todayNumber-3600000;
  initTimeNumberLocal = initTimeNumber-60000*GMTOffset;
  initTime = new Date(initTimeNumber);
  initTimeLocal = new Date(initTimeNumberLocal)
  hsize = 749; vsize = 865;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 3;
  setTimes();
  levelID = "sa5_ppt_tl_"; modelText = "FSL RUC TAQ 10 km MSL pressure, precipitation and 1000-500 mb thickness";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "sa1_ptype_tl_"; modelText = "FSL RUC TAQ 10 km precipitation type" }
  if (level == "850") { levelID = "rh850mb_tl_"; modelText = "FSL RUC TAQ 10 km 850 MB RH, winds, and temperature" }
  if (level == "700") { levelID = "vv_tl_"; modelText = "FSL RUC TAQ 10 km 700 MB heights and vertical velocity" }
  if (level == "500") { levelID = "sa5_p500mb_tl_"; modelText = "FSL RUC TAQ 10 km 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "sa6_250_wind_tl_"; modelText = "FSL RUC TAQ 10 km 250 MB wind barbs and isotachs" }
  if (level == "rhli") { levelID = "pw_tl_"; modelText = "FSL RUC TAQ 10 km precipitable water" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i + ''}
    modelURL = 'http://maps.fsl.noaa.gov/rt_plots_taq///' + levelID + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ruc_dev_20km() {
  initTimeNumber = todayNumber-3600000;
  initTimeNumberLocal = initTimeNumber-60000*GMTOffset;
  initTime = new Date(initTimeNumber);
  initTimeLocal = new Date(initTimeNumberLocal)
  hsize = 747; vsize = 793;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 3;
  setTimes();
  if (modelRegion == "northeast") { modelRegion = "ne" }
  else if (modelRegion == "southeast") { modelRegion = "se" }
  else if (modelRegion == "northcentral") { modelRegion = "nc" }
  else if (modelRegion == "southcentral") { modelRegion = "sc" }
  else if (modelRegion == "northwest") { modelRegion = "nw" }
  else if (modelRegion == "southwest") { modelRegion = "sw" }
  else { modelRegion = "am"; hsize = 713; vsize = 678;}
  levelID = "sa5_ppt_"; modelText = "FSL RUC TAQ 10 km MSL pressure, precipitation and 1000-500 mb thickness";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "sa1_ptype_"; modelText = "FSL RUC TAQ 10 km precipitation type" }
  if (level == "850") { levelID = "rh850mb_"; modelText = "FSL RUC TAQ 10 km 850 MB RH, winds, and temperature" }
  if (level == "700") { levelID = "vv_"; modelText = "FSL RUC TAQ 10 km 700 MB heights and vertical velocity" }
  if (level == "500") { levelID = "sa5_p500mb_"; modelText = "FSL RUC TAQ 10 km 500 MB heights and vorticity" }
  if (level == "300" || level == "200") { levelID = "sa6_250_wind_"; modelText = "FSL RUC TAQ 10 km 250 MB wind barbs and isotachs" }
  if (level == "rhli") { levelID = "pw_"; modelText = "FSL RUC TAQ 10 km precipitable water" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i + ''}
    modelURL = 'http://maps.fsl.noaa.gov/plots_20km_dev///' + levelID + modelRegion + '_' + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function eta_ucar() {
  if (todayHour2 < 3) { modelRun = "12" }
  else if (todayHour2 < 15) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(3,3,15,15);
  hsize = 680; vsize = 680;
  modelStart = 0; modelEnd = 84; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "sfc_mslp"; modelText = "ETA MSL pressure and winds"
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "sfc_prcp"; modelText = "ETA precipitation" }
  if (level == "850") { levelID = "850_tmp"; modelText = "ETA 850 MB heights and temperature" }
  if (level == "700") { levelID = "700_tmp"; modelText = "ETA 700 MB heights and temperature" }
  if (level == "500") { levelID = "500_vrt"; modelText = "ETA 500 MB heights and vorticity" }
  if (level == "300") { levelID = "300_wnd"; modelText = "ETA 300 MB heights and wind speed" }
  if (level == "200") { levelID = "200_wnd"; modelText = "ETA 200 MB heights and wind speed" }
  if (level == "rhli") { levelID = "sfc_cape"; modelText = "ETA Surface based CAPE and CIN" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 48 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    if (i < 10) { time = '0' + i + 'hr_' }
    else { time = i + 'hr_'}
    modelURL = 'http://www.rap.ucar.edu/weather/model/eta' + time + levelID + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function gfs_ucar() {
  if (todayHour2 < 5) { modelRun = "12" }
  else if (todayHour2 < 17) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(5,5,17,17);
  hsize = 680; vsize = 680;
  modelStart = 0; modelEnd = 180; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "sfc_mslp"; modelText = "ETA MSL pressure and winds"
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "sfc_prcp"; modelText = "GFS precipitation" }
  if (level == "850") { levelID = "850_tmp"; modelText = "GFS 850 MB heights and temperature" }
  if (level == "700") { levelID = "700_tmp"; modelText = "GFS 700 MB heights and temperature" }
  if (level == "500") { levelID = "500_vrt"; modelText = "GFS 500 MB heights and vorticity" }
  if (level == "300") { levelID = "300_wnd"; modelText = "GFS 300 MB heights and wind speed" }
  if (level == "200") { levelID = "250_wnd"; modelText = "GFS 250 MB heights and wind speed" }
  if (level == "rhli") { levelID = "sfc_pwat"; modelText = "GFS Lifted Index and Precipitable Water" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 48 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    if (i < 10) { time = '00' + i + 'hr_' }
    else if (i < 100) { time = '0' + i + 'hr_' }
    else { time = i + 'hr_'}
    modelURL = 'http://www.rap.ucar.edu/weather/model/gfs' + time + levelID + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function nms() {
  hsize = 800; vsize = 800;
  if (run < 12) { modelRun2 = "01"; modelRun = "00" }
  else { modelRun2 = "21"; modelRun = "12" }
  makeValidTime(4,4,16,16);
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 6;
  if (modelRun == "00") { modelEnd = 36 }
  setTimes();
  levelID = "5001"; modelText = "UW-NMS 500 MB heights and vorticity";
  if (level == "sfc" || level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "SFC1"; modelText = "UW-NMS MSL pressure, 1000-500 MB thickness, and QPF"; }
  if (level == "850") { levelID = "8501"; modelText = "UW-NMS 850 MB heights and temperature"; }
  if (level == "700") { levelID = "7001"; modelText = "UW-NMS 700 MB heights and vertical velocity"; }
  if (level == "300" || level == "200") { levelID = "2501"; modelText = "UW-NMS 250 MB heights and wind speed"; }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://mocha.meteor.wisc.edu/GIFS/' + modelRun2 + time + levelID + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function mrfe() {
  modelRun = "00";
  makeValidTime(10,10,10,10);
  hsize = 680; vsize = 600;
  startTime -= startTime % 24;
  modelStart = 0; modelEnd = 360; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "m500z"; modelText = "MRF ensemble average 500 MB height"
  if (level == "850") { levelID = "t850anom"; modelText = "MRF ensemble average 850 MB temperature anomaly" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = 'f000' }
    else if (i < 100) { time = 'f0' + i }
    else { time = 'f' + i }
    modelURL = 'http://www.cdc.noaa.gov/~map/maproom/ENS/' + levelID + '_' + time + '_nhbg.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function comp() {
  makeValidTime(3,9,15,21);
  hsize = 896; vsize = 716;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "sfc"; modelText = "ETA/NGM/AVN MSL pressure and QPF";
  if (level == "850") { levelID = "850"; modelText = "ETA/NGM/AVN 850 MB heights, temperature, and wind barbs" }
  if (level == "700") { levelID = "700"; modelText = "ETA/NGM/AVN 700 MB heights, vertical velocity, and wind barbs" }
  if (level == "500") { levelID = "500"; modelText = "ETA/NGM/AVN 500 MB heights, vorticity, and temperature" }
  if (level == "300" || level == "200") { levelID = "300"; modelText = "ETA/NGM/AVN 300 MB heights, temperature and wind speed" }
  if (level == "multi") { levelID = "4panel"; modelText = "4-panel the ETA/NGM/AVN composite" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = 'f00' + i }
    else if (i < 100) { time = 'f0' + i }
    else { time = 'f' + i }
    modelURL = 'http://twister.sbs.ohio-state.edu/models/composites/nea_' + levelID + '_' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function mm5() {
  makeValidTime(3,9,15,21);
  hsize = 740; vsize = 740;
  modelStart = 0; modelEnd = 120; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "6hrn."; modelText = "MM5 MSL pressure and QPF"
  if (level == "850") { levelID = "850."; modelText = "MM5 850 MB height, temperature, and relative humidity" }
  if (level == "700") { levelID = "700."; modelText = "MM5 700 MB height, temperature, and relative humidity" }
  if (level == "500") { levelID = "500."; modelText = "MM5 500 MB height" }
  if (level == "300" || level == "200") { levelID = "300pv."; modelText = "MM5 300 MB height, wind speed, and potential vorticity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i < 10) { time = '0' + i }
    else { time = i }
    modelURL = 'http://rain.mmm.ucar.edu/mm5/plots/nh/na' + levelID + initYear + initMonth + initDay + run + '.hr' + time + '.lg.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function avnx() {
  makeValidTime(3,9,15,21);
  hsize = 900; vsize = 700;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  setTimes();
  modelText = "AVNX"
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i;
    if (i == 0) { time = "00" }
    if (i <= 168) { modelURL = 'http://sgi62.wwb.noaa.gov:8080/STATS/maps/avn/latest/f' + time + '.gif' }
    else { modelURL = 'http://sgi62.wwb.noaa.gov:8080/STATS/maps/avnex/latest/f' + time + '.gif' }
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function jma_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(5.5,5.5,19,19);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 168; modelMinHoursBetweenImages = 24;
  if (modelRun == "00") { modelEnd = 72 }
  setTimes();
  levelID = "slp"; modelText = "JMA MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "JMA accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "JMA 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "JMA 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "JMA 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "JMA 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/24;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/jma/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}


function ggem_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(4.6,4.6,16.1,16.1);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  if (modelRun == "12") { modelEnd = 72 }
  setTimes();
  levelID = "slp"; modelText = "Global Gem MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "Global Gem accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "Global Gem 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "Global Gem 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "Global Gem 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "Global Gem 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/cmc/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function gfs_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6,6,19,19);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "slp"; modelText = "GFS MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "GFS accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "GFS 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "GFS 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "GFS 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "GFS 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/avn/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function nogaps_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6.6,6.6,18.6,18.6);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "slp"; modelText = "NOGAPS MSL pressure";
  if (level == "pcp" || level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "rain"; modelText = "NOGAPS accumulated rainfall" }
  if (level == "850") { levelID = "850vort"; modelText = "NOGAPS 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "NOGAPS 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "NOGAPS 500 MB winds and vorticity" }
  if (level == "300" || level == "200") { levelID = "850200shear"; modelText = "NOGAPS 850 to 200 MB wind shear" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/nogaps/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function ukmet_psu() {
  if (run < 12) { modelRun = "00" }
  else { modelRun = "12" }
  makeValidTime(6.6,6.6,18.6,18.6);
  hsize = 800; vsize = 600;
  modelStart = 0; modelEnd = 144; modelMinHoursBetweenImages = 6;
  setTimes();
  levelID = "slp"; modelText = "UKMET MSL pressure";
  if (level == "850" || level == "850vort") { levelID = "850vort"; modelText = "UKMET 850 MB winds and vorticity" }
  if (level == "700") { levelID = "700vort"; modelText = "UKMET 700 MB winds and vorticity" }
  if (level == "500") { levelID = "500vort"; modelText = "UKMET 500 MB winds and vorticity" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    if (i >= 72 && modelHoursBetweenImages < 12) { modelHoursBetweenImages = 12 }
    time = i/6;
    modelURL = 'http://met.psu.edu/tropical/tcgengifs/ukmet/' + initYear + initMonth + initDay + modelRun + '/' + levelID + time + '.png';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

// http://snowball.millersville.edu/~wrf/images/0Z/250_z_wind_3.gif
// http://snowball.millersville.edu/~wrf/images/0Z/300_z_wind_3.gif
// http://snowball.millersville.edu/~wrf/images/0Z/500_z_absvort_3.gif
// http://snowball.millersville.edu/~wrf/images/0Z/700_omega_rh_5.gif
// http://snowball.millersville.edu/~wrf/images/0Z/850_z_t_8.gif
// http://snowball.millersville.edu/~wrf/images/0Z/3hr_accu_precip_5.gif
// http://snowball.millersville.edu/~wrf/images/0Z/tot_accu_precip_11.gif
// http://snowball.millersville.edu/~wrf/images/0Z/3hr_precip_slp_4.gif

function wrf_mu() {
  if (run < 12) { modelRun = "00"; modelRunText = "0" }
  else { modelRun = "12"; modelRunText = "12" }
  makeValidTime(9,9,18.6,18.6);
  hsize = 660; vsize = 570;
  modelStart = 0; modelEnd = 48; modelMinHoursBetweenImages = 3;
  levelID = "slp"; modelText = "WRF MSL pressure";
  if (level == "pcp") { levelID = "3hr_precip_slp"; modelText = "WRF MSL Pressure and 3 hour precip"; modelStart = 3 }
  if (level == "p12" || level == "p24" || level == "p36" || level == "p48" || level == "p60") { levelID = "tot_accu_precip"; modelText = "WRF accumulated rainfall"; modelStart = 3 }
  if (level == "850") { levelID = "850_z_t"; modelText = "WRF 850 MB heights and temperature" }
  if (level == "700") { levelID = "700_omega_rh"; modelText = "WRF 700 mb vertical velocity and relative humidity"; modelStart = 3 }
  if (level == "500") { levelID = "500_z_absvort"; modelText = "WRF 500 mb heights and vorticity" }
  if (level == "300") { levelID = "300_z_wind"; modelText = "WRF 300 mb heights and winds" }
  if (level == "200") { levelID = "250_z_wind"; modelText = "WRF 250 mb heights and winds" }
  setTimes();
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    time = (i-modelStart)/3 + 1;
    modelURL = 'http://snowball.millersville.edu/~wrf/images/' + modelRunText + 'Z/' + levelID + '_' + time + '.gif';
    makeArrays();
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function canadian_ensemble() {
  makeValidTime(3,9,15,21);
  hsize = 830; vsize = 642;
  modelStart = 24; modelEnd = 240; modelMinHoursBetweenImages = 24;
  setTimes();
  levelID = "gz"; modelText = "Canadian Ensemble mean 500 MB height";
  if (level == "ensmeanslp" || level == "sfc") { levelID = "pnm"; modelText = "Canadian Ensemble mean surface pressure" }
  if (level == "ensallslp") { levelID = "pnmall"; modelText = "all Canadian Ensemble members surface pressure" }
  if (level == "ensall500") { levelID = "gzall"; modelText = "all Canadian Ensemble members 500 MB height" }
  for (i = modelStartTime; i <= modelEndTime; i+=modelHoursBetweenImages) {
    weatherImages[imageNum] = new Image();
    imagesToSkip[imageNum] = "false";
    time = i;
    if (i < 100) { time = '0' + i }
    weatherImages[imageNum].src = 'http://www.cmc.ec.gc.ca/rpn/ensemble_products/oper/images/' + levelID + '.' + canEnsTime + '.' + time + '.gif';
    imageNum++;
  }
  if (startTime != endTime) { mouseOverText = modelText + ' from ' + startTime + ' hours to ' + endTime + ' hours, every ' + modelHoursBetweenImages + ' hours.' }
  else { mouseOverText = modelText + ' at ' + startTime + ' hours.' }
}

function test() {
  makeValidTime(3,9,15,21);
  weatherImages[1] = new Image();
  imagesToSkip[1] = "false";
  weatherImages[1].src = 'file:///C%7C/Webpages/metclub/EVENT_990315/ETA_99031500/eta_c300_h00.gif';
  weatherImages[2] = new Image();
  imagesToSkip[2] = "false";
  weatherImages[2].src = 'file:///C%7C/Webpages/metclub/EVENT_990315/ETA_99031500/eta_c300_h06.gif';
  weatherImages[3] = new Image();
  imagesToSkip[3] = "false";
  weatherImages[3].src = 'file:///C%7C/Webpages/metclub/EVENT_990315/ETA_99031500/eta_c300_h12.gif';
  weatherImages[4] = new Image();
  imagesToSkip[4] = "false";
  weatherImages[4].src = 'file:///C%7C/Webpages/metclub/EVENT_990315/ETA_99031500/eta_c300_h18.gif';
  weatherImages[5] = new Image();
  imagesToSkip[5] = "false";
  weatherImages[5].src = 'file:///C%7C/Webpages/metclub/EVENT_990315/ETA_99031500/eta_c300_h24.gif';
  imageNum = 6;
  mouseOverText = "Images from hard drive for testing purposes";
}

