<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs 
  title="Weather Station" 
  author="Adam Kumpf" 
  description="Animated US weather maps.  Click to view other maps and forecasts. Data is directly from NOAA, Accuweather, and WeatherUnderground.  This gadget is meant to be simple and compact." 
  author_email="kumpf@mit.edu" 
  height="175" 
  author_aboutme="I like to build things. :)" 
  author_link="http://web.mit.edu/kumpf/www" 
  screenshot="http://web.mit.edu/kumpf/Public/WeatherStation/ws-screenshot.png"
  thumbnail ="http://web.mit.edu/kumpf/Public/WeatherStation/ws-thumbnail.png" 
/>


<UserPref name="loc" display_name="Zip Code:" datatype="location" required="true" default_value="02139" />
<UserPref name="startClick" display_name="Start With:" datatype="enum" default_value="0">
  <EnumValue value="0" display_value="Regional Radar" />
  <EnumValue value="1" display_value="National Radar" />
  <EnumValue value="2" display_value="NOAA Text Forecast" />
</UserPref>
<UserPref name="offset" display_name="Regional Radar Offset:" datatype="enum" default_value="0">
  <EnumValue value="0" display_value="Center" />
  <EnumValue value="1" display_value="North" />
  <EnumValue value="2" display_value="Northeast" />
  <EnumValue value="3" display_value="East" />
  <EnumValue value="4" display_value="Southeast" />  
  <EnumValue value="5" display_value="South" /> 
  <EnumValue value="6" display_value="Southwest" /> 
  <EnumValue value="7" display_value="West" /> 
  <EnumValue value="8" display_value="Northwest" /> 
</UserPref>
<Content type="html"><![CDATA[

<style type="text/css">
<!--
.forecastStyle a {
    color: red;
}
-->
</style>

<div id="mister_weather__MODULE_ID__" style="position:relative; top:0; left:0;" onClick="doClick();"><span style="color:#696969;">loading...</span></div>

<script type="text/javascript">


  var prefs   = new _IG_Prefs(__MODULE_ID__);
  var zipcode = prefs.getString("loc");
  var clicked = parseInt(prefs.getString("startClick"));

  // national radar url:
  var urlNatlRadar = "http://icons.wunderground.com/data/640x480/us_rd_anim.gif";
  var dispNatlRadarH = 210;
  var dispNatlRadarW = 320;
  var dispNatlRadarLeft  = 0;   // left offset
  var dispNatlRadarTop   = 0;   // top  offset
  var dispNatlRadarScale = 1.0; // scale

  // regional radar url:
  var urlRegRadar = "";        // need to get it from accuweather...
  var dispRegRadarH = 300;
  var dispRegRadarW = 400;  
  var dispRegRadarLeft  = -50;   // left offset
  var dispRegRadarTop   = -50;   // top  offset
  var dispRegRadarScale = 1.0; // scale  
  
  // update the Regional Radar offset to allow for the user to shif the image.
  updateRegRadarOffset();

  var width  = 320;
  var height = 150;
  var forecastWidth = width - 25;

  var textForecast = "<br>NOAA.gov US forecast data not found...<br><br> There may be multiple weather station matches for that zip code. Try entering a neighboring town or city instead.";

  // GET REGIONAL RADAR MAP URL
  var regRadarFetchURL = "http://wwwa.accuweather.com/radar-state.asp?zipcode=" +zipcode + "&large=0&level=state&anim=1&type=SIR";
  _IG_FetchContent(regRadarFetchURL, function (responseText) {
    // chew on the responseText to get the URL of the animated radar map
    var indx1 = responseText.indexOf("http://sirocco.accuweather.com/nx_mosaic_", 0 ); 
    var indx2 = responseText.indexOf(".gif", indx1);  
    urlRegRadar = responseText.substr(indx1, indx2-indx1+4); // large is 640x480!
    if(clicked == 1){
      showRegRadar();
    }
  });
  
  // GET NOAA WEATHER FORECAST
  var regTextFetchURL = "http://www.srh.noaa.gov/zipcity.php?inputstring=" + zipcode;
  _IG_FetchContent(regTextFetchURL, function (responseText) {
    // chew on the responseText to get the forecast text data
    var indx1 = responseText.indexOf("<a name=\"contents\"></a>", 0 ); 
    var indx2 = responseText.indexOf("<td valign=\"top\" align=\"center\" width=\"50%\">", indx1);  
    var newTextForecast = responseText.substr(indx1+23, indx2-indx1-29); 
    // now replace all "noaa" links so that they actually work.
    var splitForecast = newTextForecast.split("href=\"");
    newTextForecast = splitForecast.join("target=\"_parent\" href=\"http://www.erh.noaa.gov/");
    if(newTextForecast.length > 5){
      textForecast = newTextForecast;
    }
    if(clicked == 0){
      showRegForecast();
    }
  });


  function updateRegRadarOffset(){
    switch(parseInt(prefs.getString("offset"))){
      case 0: { // Center
                dispRegRadarLeft  = -40;   // left offset
                dispRegRadarTop   = -66;   // top  offset
                break;
              }
      case 1: { // North
                dispRegRadarLeft  = -40;   // left offset
                dispRegRadarTop   = -16;   // top  offset
                break;
              }
      case 2: { // NorthEast
                dispRegRadarLeft  = -80;   // left offset
                dispRegRadarTop   = -16;   // top  offset
                break;
              }       
      case 3: { // East
                dispRegRadarLeft  = -80;   // left offset
                dispRegRadarTop   = -66;   // top  offset
                break;
              }        
      case 4: { // SouthEast
                dispRegRadarLeft  = -80;   // left offset
                dispRegRadarTop   = -110;   // top  offset
                break;
              }      
      case 5: { // South
                dispRegRadarLeft  = -40;   // left offset
                dispRegRadarTop   = -110;   // top  offset
                break;
              }            
      case 6: { // SouthWest
                dispRegRadarLeft  = 0;   // left offset
                dispRegRadarTop   = -110;   // top  offset
                break;
              }       
      case 7: { // West
                dispRegRadarLeft  = 0;   // left offset
                dispRegRadarTop   = -66;   // top  offset
                break;
              }          
      case 8: { // NorthWest
                dispRegRadarLeft  = 0;   // left offset
                dispRegRadarTop   = -16;   // top  offset
                break;
              }                                                                        
    }
  }

  function showNatlRadar(){
    document.getElementById("mister_weather__MODULE_ID__").style["display"] = "none";
    document.getElementById("mister_weather__MODULE_ID__").style["top"]  = dispNatlRadarTop;
    document.getElementById("mister_weather__MODULE_ID__").style["left"] = dispNatlRadarLeft;     
    document.getElementById("mister_weather__MODULE_ID__").innerHTML = "<img onClick=\"doClick();\" src='" + urlNatlRadar + 
      "' width=" + dispNatlRadarW*dispNatlRadarScale + " height=" + dispNatlRadarH*dispNatlRadarScale + ">";
    document.getElementById("mister_weather__MODULE_ID__").style["display"] = "block";
  }

  function showRegRadar(){
    document.getElementById("mister_weather__MODULE_ID__").style["display"] = "none";
    document.getElementById("mister_weather__MODULE_ID__").style["top"]  = dispRegRadarTop;
    document.getElementById("mister_weather__MODULE_ID__").style["left"] = dispRegRadarLeft;
    document.getElementById("mister_weather__MODULE_ID__").innerHTML = "<img onClick=\"doClick();\" src='" + urlRegRadar + 
      "' width=" + dispRegRadarW*dispRegRadarScale + " height=" + dispRegRadarH*dispRegRadarScale + ">"; 
    document.getElementById("mister_weather__MODULE_ID__").style["display"] = "block"; 
  }

  function showRegForecast(){
    document.getElementById("mister_weather__MODULE_ID__").style["display"] = "none";
    document.getElementById("mister_weather__MODULE_ID__").style["top"]  = 0;
    document.getElementById("mister_weather__MODULE_ID__").style["left"] = 0;
    document.getElementById("mister_weather__MODULE_ID__").innerHTML = "<span style=\"color:#696969;\"><b>Forecast for: " + zipcode + "</b> &nbsp; &nbsp;  <a href=\"javascript:void(0);\" onClick=\"doClick();\" style=\"text-decoration:none\"><b><font color=\"#3165ce\" size=\"-1\">view radar...</font></b></a></span><br>" + 
    "<div class=\"forecastStyle\" style=\"overflow:auto; width:100%; height:150px; a.link:red\"><font size=\"-2\">" + textForecast + "</font></div>";
    document.getElementById("mister_weather__MODULE_ID__").style["display"] = "block"; 
  }

  doClick();
  
  function doClick(){
    if(clicked == 0){
      showRegRadar();
      clicked = 1;
    }else{
      if(clicked == 1){
      showNatlRadar();
      clicked = 2;
      }else{
        showRegForecast();
        clicked = 0;
      }
    }  
  }
  
  // accuweather ??
  //http://wwwa.accuweather.com/radar-state.asp?zipcode=02139&large=1&level=state&anim=1&type=rs

</script>

]]></Content>
</Module>
