<?xml version="1.0" encoding="UTF-8"?>
<Module>
  <ModulePrefs
    title="NOAA US Local Weather Forecast"
    author="John Hollister"
    author_email="jrhollis@gmail.com"
    author_affiliation="none"
    author_location="Milwaukee,WI"
    scaling="true"
    screenshot="http://www.carbonportraits.com/gadgets/noaa_ss.png"
    thumbnail="http://www.carbonportraits.com/gadgets/noaa_thumb.PNG"
    description="NOAA weather forecast and current conditions for your area.  Continually updated temperature, conditions, and weather summary for up to 7 days. Special thanks to http://www.weather.gov Current conditions supplied by University of Utah and the NWS. Info about the data can be found here http://www.met.utah.edu/mesowest/"
    directory_title="NOAA US Local Weather Forecast"
  >
    <Locale lang="en" country="us"/>
    <Require feature="setprefs"/>
                <Require feature="dynamic-height"/>
  </ModulePrefs>
        <UserPref name="zips_or_lls" display_name="Enter Zipcode or Lat,Lon (ex. 40.0,-80.0)" datatype="list" required="true"/>   
        <UserPref name="show_cc" display_name="Show Current Weather:" datatype="bool" default_value="true"/>
        <UserPref name="show_hazards" display_name="Show Hazards:" datatype="bool" default_value="true"/> 
        <UserPref name="show_detailed_hazards" display_name="Show Detailed Hazards:" datatype="bool" default_value="false"/> 
  <UserPref name="hide_netvibes" display_name="Hide Netvibes notification" datatype="bool" default_value="false"/> 
  <UserPref name="hide_extension" display_name="Hide Extension notification" datatype="bool" default_value="false"/>
    <UserPref name="hide_ighome" display_name="Hide igHome notification" datatype="bool" default_value="false"/> 

        <UserPref name="units"
         display_name="Degree Units:"
         datatype="enum"
         default_value="1">
          <EnumValue value="1" display_value="Fahrenheit"/>
          <EnumValue value="2" display_value="Celcius"/>
      </UserPref>
      <UserPref name="links"
         display_name="Open links:"
         datatype="enum"
         default_value="1">
          <EnumValue value="_blank" display_value="in a new window"/>
          <EnumValue value="_parent" display_value="in the same window"/>
      </UserPref>
      <UserPref name="gadget_size"
         display_name="Forecast Size:"
         datatype="enum"
         default_value="1">
          <EnumValue value="normal" display_value="Normal"/>
          <EnumValue value="large" display_value="Large"/>
      </UserPref>
  
<Content type="html"><![CDATA[
<style type="text/css">
      .clearfix:after {
          content: ".";
          display: block;
          clear: both;
          visibility: hidden;
          line-height: 0;
          height: 0;
      }


      .clearfix {
          display: inline-block;
      }


      html[xmlns] .clearfix {
          display: block;
      }

      * html .clearfix {
          height: 1%;
      }

      .temp {
        font-weight: bold;
        font-size: 90%;
      }    

                  .hi-temp {
        color: red;
      }


      .lo-temp {
        color: #000080;
      }

      .lbl-day {
        font-weight: bold;
        font-size: 85%;
        display: block;
      }

      .weather-div {
        float: left;
        width: 63px;
        padding-bottom: 10px;
        text-align: center;
        height: 130px;
        border-left: solid silver 1px;
      }

      .wd_1 {
        border-left: solid white 0px !important;
      }

      .weather-summary {
        font-size: 55%;
      }

      .weather-icon {
        border: dotted silver 1px;
        width: 56px;
        height: 56px;
      }

      .current-icon {
        float: left;
      }


      .noaa-link {
                                padding: 5px;
                                font-size: 80%;
        display: block;
                                outline: 0px;
      }
  
                        .warn-link {
                                font-weight: bold;
                                color: red !important;
                        }
  
                        .curr-temp {
                          font-size: 175%;
                          float: left;
                          padding: 5px;
                        }
  
                        .curr-div {
                          height: 65px !important;
                        }
  
                        .small-text {
                          font-size: 80%;
                        }
  
                        .site-forecast {
                          overflow: hidden !important;
                          height: 130px !important;
                          margin-bottom: 5px;
                        }
  
                        .other-data {
                          float: left;
                          font-size: 80%;
                        }
  
            
    </style>
  
<script type="text/javascript">

  var prefs = new _IG_Prefs(__MODULE_ID__);
    
  _IG_RegisterOnloadHandler(geocodeZip);  
  
  function geocodeZip() {

if (prefs.getBool('hide_netvibes')) {
  document.getElementById('netvibes-note').style.display = 'none';
}

if (prefs.getBool('hide_extension')) {
  document.getElementById('extension-note').style.display = 'none';
}

if (prefs.getBool('hide_ighome')) {
  document.getElementById('ighome-note').style.display = 'none';
}

  
    var zip_or_ll = prefs.getArray('zips_or_lls');
    for (var i = 0; i < zip_or_ll.length; i++) { //>

      var forecastArea = document.getElementById('forecast-area');
                                                                            
      var site = document.createElement('div');
      site.id = 'id_' + zip_or_ll[i].replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'');   
      forecastArea.appendChild(site);
      
      var expanded = document.createElement('div');
      expanded.id = 'exp_' + zip_or_ll[i].replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'');
      site.appendChild(expanded);
       
      
      if (prefs.getBool('show_cc')) {
        var currDiv = document.createElement('div');
        currDiv.id = 'curr_' + zip_or_ll[i].replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'');
        currDiv.className = 'curr-div clearfix';
        site.appendChild(currDiv);
      }
      
      var warning = document.createElement('div');
      warning.id = 'warn_' + zip_or_ll[i].replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'');
      site.appendChild(warning);
      
      var siteForecast = document.createElement('div');
      siteForecast.className = 'site-forecast clearfix';
      siteForecast.id = 'site-id_' + zip_or_ll[i].replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'');
      site.appendChild(siteForecast);
  
      gadgets.window.adjustHeight();    
         
      if (zip_or_ll[i].indexOf(',') < 0) { //>
        //var key = 'ABQIAAAAJaTJYl803SyOI_XSD0YuJBT1saBOVhsgX9VDNfY2Ut7tzWpESRTn7ihsYp7qYI82z9yF6b3S91EOZA';
        var zip = '' + zip_or_ll[i];  
        //var geoUrl = 'http://maps.google.com/maps/geo?key=' + key + '&output=csv&q=' + zip; //'
        var geoUrl = 'http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=' + zip;
        //_IG_FetchContent(geoUrl, function(response) { parseLocation(response, zip); });
        _IG_FetchXmlContent(geoUrl, new Function("response", "parseLocation(response,'"+zip+"')"));
      } else {
        var ll = zip_or_ll[i].split(',');
        var xloc = ll[1];
        var yloc = ll[0];
        var loc = isLL(yloc + ',' + xloc);
        if (loc) {
          yloc = loc.lat;
          xloc = loc.lon;

          _IG_FetchXmlContent('http://forecast.weather.gov/MapClick.php?lat=' + yloc + '&lon=' + xloc + '&FcstType=dwml', function(xml) { parseForecastXml(xml, yloc, xloc, yloc+','+xloc); }, { refreshInterval: (60 * 15) });
        }
    }
  }
}
      
  function parseLocation(response, zip) {
//console.log(response);
    var rParts = response.getElementsByTagName('result')[0].getElementsByTagName('location')[0];
    var xloc = rParts.getElementsByTagName('lng')[0].firstChild.nodeValue;
    var yloc = rParts.getElementsByTagName('lat')[0].firstChild.nodeValue;
//console.log(xloc, yloc);
    var loc = isLL(yloc + ',' + xloc);
if (loc) {
  yloc = loc.lat;
  xloc = loc.lon;
  _IG_FetchXmlContent('http://forecast.weather.gov/MapClick.php?lat=' + yloc + '&lon=' + xloc + '&FcstType=dwml', function(xml) { parseForecastXml(xml, yloc, xloc, zip); }, { refreshInterval: (60 * 15) });
  }
}

  function parseCurrentConditionsJSON(json, lbl) {
     eval("json=" + json);
      var cw = json.stations[0];
      var currWthr = {};
    currWthr.temp = cw.Temp
    //currWthr.dewPt = cw.Dewp
    currWthr.relHum = cw.Relh
    currWthr.windSpd = cw.Winds
    currWthr.weather = cw.Weather

    createCurrentCondHTML(lbl, currWthr);


  }
          
  function parseCurrentConditions(xml, xloc, yloc, lbl) {
    var currWthr = {};

    var pt = xml.getElementsByTagName('point')[0];
    if (pt.getAttribute('latitude') == '' || pt.getAttribute('longitude') == '') {

       _IG_FetchContent('http://www.wrh.noaa.gov/mesowest/mwXJList.php?point='+yloc+','+xloc, function(json) {parseCurrentConditionsJSON(json, lbl)});

       return;
    }

    var tmps = xml.getElementsByTagName('temperature');
    currWthr.temp = (tmps[0].getElementsByTagName('value')[0].firstChild)?tmps[0].getElementsByTagName('value')[0].firstChild.nodeValue:null;
    //currWthr.dewPt = tmps[1].getElementsByTagName('value')[0].firstChild.nodeValue

    var windSpd = xml.getElementsByTagName('wind-speed');
    var windDir = xml.getElementsByTagName('direction');
   
    currWthr.windSpd = windSpd[1].getElementsByTagName('value')[0].firstChild.nodeValue;
    if (windDir && windDir[0] && windDir[0].getElementsByTagName('value')[0].firstChild) currWthr.windDir = windDir[0].getElementsByTagName('value')[0].firstChild.nodeValue;
    currWthr.relHum = xml.getElementsByTagName('humidity')[0].getElementsByTagName('value')[0].firstChild.nodeValue;
    currWthr.icon = xml.getElementsByTagName('conditions-icon')[0].getElementsByTagName('icon-link')[0].firstChild.nodeValue;
    currWthr.weather = xml.getElementsByTagName('weather-conditions')[0].getAttribute('weather-summary') || 'Not reported';

    createCurrentCondHTML(lbl, currWthr);
}



function createCurrentCondHTML(lbl, currWthr) {
    var currDiv = document.getElementById('curr_' + lbl.replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,''));

if (!currWthr.temp) {
   var currErrDiv = document.createElement('div');
   currErrDiv.innerHTML = 'Current conditions not reported';
   currDiv.appendChild(currErrDiv);
   return;
}

    if (currWthr.icon && currWthr.icon != undefined && currWthr.icon.indexOf('NULL') < 0) {
      var tempIcon = document.createElement('img');
      tempIcon.className = 'weather-icon current-icon';
      tempIcon.src = currWthr.icon;
      currDiv.appendChild(tempIcon);
    }
    if (currWthr.temp != undefined) {
      var temp = currWthr.temp;
      if (prefs.getInt('units') == 2) temp = Math.floor((parseInt(temp,10) - 32) * (5/9))
    
      var tempDiv = document.createElement('div');
      tempDiv.className = 'curr-temp';
      tempDiv.innerHTML = temp + '\u00B0';
      if (prefs.getInt('units') == 2)
        tempDiv.innerHTML += 'C';
      else
        tempDiv.innerHTML += 'F';
    
      currDiv.appendChild(tempDiv);
    }
  
    var otherData = document.createElement('div');
    otherData.className = 'other-data';
    currDiv.appendChild(otherData);
    
    if (currWthr.weather != undefined) {
      var wthTxt = 'Weather: ' + currWthr.weather;
      var wthDiv = document.createElement('div');
      wthDiv.innerHTML = wthTxt.substring(0,25) + ((wthTxt.length>25)?'...':'');
      otherData.appendChild(wthDiv);
    }

    if (currWthr.windSpd != undefined && currWthr !== null) {    
      var windDiv = document.createElement('div');

      var windDirVal = '';
      if (currWthr.windDir != undefined) {

    if (currWthr.windDir == 999) {
         windDirVal = ' Calm';
    } else if (currWthr.windDir >= 348.75 || currWthr.windDir <= 11.25) {
      windDirVal = ' N';
    } else if (currWthr.windDir > 11.25 || currWthr.windDir < 33.75) {
      windDirVal = ' NNE';
    } else if (currWthr.windDir >= 33.75 || currWthr.windDir <= 56.25) {
      windDirVal = ' NE';
    } else if (currWthr.windDir > 56.25 || currWthr.windDir < 78.75) {
      windDirVal = ' ENE';
    } else if (currWthr.windDir >= 78.75 || currWthr.windDir <= 101.25) {
      windDirVal = ' E';
    } else if (currWthr.windDir > 101.25 || currWthr.windDir < 123.75) {
      windDirVal = ' ESE';
    } else if (currWthr.windDir >= 123.75 || currWthr.windDir <= 146.25) {
      windDirVal = ' SE';
    } else if (currWthr.windDir > 146.25 || currWthr.windDir < 168.75) {
      windDirVal = ' SSE';
    } else if (currWthr.windDir >= 168.75 || currWthr.windDir <= 191.25) {
      windDirVal = ' S';
    } else if (currWthr.windDir > 191.25 || currWthr.windDir < 213.75) {
      windDirVal = ' SSW';
    } else if (currWthr.windDir >= 213.75 || currWthr.windDir < 236.25) {
      windDirVal = ' SW';
    } else if (currWthr.windDir > 236.25 || currWthr.windDir < 258.75) {
      windDirVal = ' WSW';
    } else if (currWthr.windDir >= 258.75 || currWthr.windDir <= 281.25) {
      windDirVal = ' W';
    } else if (currWthr.windDir > 281.25 || currWthr.windDir < 303.75) {
      windDirVal = ' WNW';
    } else if (currWthr.windDir >= 303.75 || currWthr.windDir <= 326.25) {
      windDirVal = ' NW';
    } else if (currWthr.windDir > 326.25 || currWthr.windDir < 348.75) {
      windDirVal = ' NNW';
    }

      }

      var ws = currWthr.windSpd * 0.868976242;
      if (!isNaN(ws)) {
      if (prefs.getInt('units') == 2) {
         ws *= 1.609344;
         ws = Math.floor(ws);
         ws += ' kp/h';
      } else {
         ws = Math.floor(ws);
         ws += ' mph';
      }

      windDiv.innerHTML = 'Wind: ' + ws + windDirVal;
      otherData.appendChild(windDiv);
      }
    }
  
  
    if (currWthr.dewPt != undefined) {
      var temp = currWthr.dewPt;
      if (prefs.getInt('units') == 2) temp = Math.floor((parseInt(temp,10) - 32) * (5/9))
    
      var dewDiv = document.createElement('div');
      dewDiv.innerHTML = 'Dew Point: ' + temp + '\u00B0';
      if (prefs.getInt('units') == 2)
        dewDiv.innerHTML += 'C';
      else
        dewDiv.innerHTML += 'F';
    
      otherData.appendChild(dewDiv);
    }
  
    if (currWthr.relHum != undefined) {
      var relDiv = document.createElement('div');
      relDiv.innerHTML = 'Rel. Humidity: ' + currWthr.relHum + '%';
      otherData.appendChild(relDiv);
    }
  }
        
        
          
  
  function parseForecastXml(xml, yloc, xloc, link_lbl) {
    

    if (!xml) {
      _IG_FetchXmlContent('http://forecast.weather.gov/MapClick.php?lat=' + yloc + '&lon=' + xloc + '&FcstType=dwml&nocache=' + (new Date()).getTime(), function(txml) { parseForecastXml(txml, yloc, xloc, link_lbl); });
  return;
    }

    link_lbl = ''+link_lbl;

    var curXml = xml.getElementsByTagName('data')[1]

    if (prefs.getBool('show_cc')) parseCurrentConditions(curXml, yloc, xloc, link_lbl);

  
    var site = document.getElementById('id_' + link_lbl.replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,''));
    var siteForecast = document.getElementById('site-id_' + link_lbl.replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,''));
  
    var timeLayout = xml.getElementsByTagName('time-layout');
    var dayNames = timeLayout[timeLayout.length - 2].getElementsByTagName('start-valid-time');
  
    var foreText = xml.getElementsByTagName('text');
  
    var temps = xml.getElementsByTagName('temperature');
    var loTempsRaw;
    var hiTempsRaw;
    var isNightTime = false;
  
    for (var i = 0; i < temps.length; i++) { //>
      var tempType = temps[i].getAttribute('type');
      switch(tempType) {
        case 'minimum':
          loTempsRaw = temps[i].getElementsByTagName('value');
          if (i==0) isNightTime = true;
          break;
        case 'maximum':
          hiTempsRaw = temps[i].getElementsByTagName('value');
          break;
      }
    }
  
    var hiTemps = [];
    if (isNightTime) hiTemps.push(null);
    for (var i = 0; i < hiTempsRaw.length; i++) { //>
      hiTemps.push(hiTempsRaw[i]);
    }
  
    var loTemps = [];
    for (var i = 0; i < loTempsRaw.length; i++) { //>
      loTemps.push(loTempsRaw[i]);
    }
    
    var wthrConds = xml.getElementsByTagName('weather-conditions');
    var wthrIcons = xml.getElementsByTagName('icon-link');
  
    if (prefs.getBool('show_detailed_hazards')) {
    //detailed hazards
    var hazards = xml.getElementsByTagName('hazard');
      for (var i = 0; i < hazards.length; i++) {
        var hazardHeadline = hazards[i].getAttribute('headline'),
            hazardUrl = hazards[i].getElementsByTagName('hazardTextURL')[0].firstChild.nodeValue;

        var warnLink = document.createElement('a');
        warnLink.className = 'warn-link noaa-link';
        warnLink.target = prefs.getString('links');
        warnLink.href = hazardUrl;
        warnLink.innerHTML = '*** ' + hazardHeadline + ' ***';
        warnLink.style.display = (prefs.getBool('show_hazards'))?'block':'none';
        document.getElementById('warn_'+link_lbl.replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'')).appendChild(warnLink);
      }
    } else {

      //undetailed weather warnings
      var warnings = xml.getElementsByTagName('hazardTextURL');
      if (warnings.length > 0) {
        var warnLink = document.createElement('a');
        warnLink.className = 'warn-link noaa-link';
        warnLink.target = prefs.getString('links');
        warnLink.href = warnings[0].firstChild.nodeValue;
        warnLink.innerHTML = '*** Hazardous Weather Outlook ***';
        warnLink.style.display = (prefs.getBool('show_hazards'))?'block':'none';
        document.getElementById('warn_'+link_lbl.replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'')).appendChild(warnLink);
      }
    }
 
    var noaaLink = document.createElement('a');
    noaaLink.className = 'noaa-link';
    noaaLink.target = prefs.getString('links');
    noaaLink.href = 'http://forecast.weather.gov/MapClick.php?lat=' + yloc + '&lon=' + xloc;
    noaaLink.innerHTML = 'Expanded Forecast for ' + link_lbl;
 
    document.getElementById('exp_'+link_lbl.replace(/,/g,'_').replace(/\./g,'_').replace(/\s/g,'')).appendChild(noaaLink);
    gadgets.window.adjustHeight();        

    for (var i = 0; i < 7; i++) {  //>

      var idx = i * 2;
      if (isNightTime && i > 0) idx--;
      var wthrDiv = document.createElement('div');
      wthrDiv.className = 'weather-div wd_' + (i+1);
      if (prefs.getString('gadget_size') == 'large') {
          wthrDiv.style.width = '85px';
      }

      var dayName = document.createElement('span');
      dayName.className = 'lbl-day';
      if (i > 0) {
        var di = i;
        if (isNightTime) di--;
        if (dayNames[di] && dayNames[di].getAttribute('period-name')) dayName.innerHTML = dayNames[di].getAttribute('period-name').substr(0,3)
      } else
        if (!isNightTime)
          dayName.innerHTML = 'Today';
        else
          dayName.innerHTML = 'Tonight';

        
      var wthrIcon = document.createElement('img');
      wthrIcon.className = 'weather-icon';
      wthrIcon.src = wthrIcons[idx].firstChild.nodeValue;
      wthrIcon.alt = foreText[idx].firstChild.nodeValue;
      wthrIcon.title = foreText[idx].firstChild.nodeValue;


      var tempSpan = document.createElement('div');
      tempSpan.className = 'temp';

      var hiTemp = hiTemps[i];
      if (hiTemps[i]) hiTemp = hiTemps[i].firstChild.nodeValue;
        
      if (prefs.getInt('units') == 2 && hiTemp) {
        hiTemp = Math.floor((parseInt(hiTemp,10) - 32) * (5/9)) + '\u00B0';
      } else if (hiTemp) {
        hiTemp += '\u00B0';
      }

      var loTemp = loTemps[i];
      if (loTemps[i]) loTemp = loTemps[i].firstChild.nodeValue;

      if (prefs.getInt('units') == 2 && loTemp) {
        loTemp = Math.floor((parseInt(loTemp,10) - 32) * (5/9));
      } else if (loTemp) {
        loTemp += '\u00B0';
      }
  
      tempSpan.innerHTML = '<span class="hi-temp">' + (hiTemp||'N/A') + '</span> | <span class="lo-temp">' + (loTemp||'N/A') + '</span>';


      var wthrSum = document.createElement('div');
      wthrSum.className = 'weather-summary';
      wthrSum.innerHTML = wthrConds[idx].getAttribute('weather-summary');
      if (prefs.getString('gadget_size') == 'large') {
          wthrSum.style.fontSize = '13px';
      }

      wthrDiv.appendChild(dayName);    
      wthrDiv.appendChild(wthrIcon);
      wthrDiv.appendChild(tempSpan);
      wthrDiv.appendChild(wthrSum);
 
      siteForecast.appendChild(wthrDiv);
      
    }
  }
  
  
function _IG_FetchContent(url, callback, opt_params) {
  var params = opt_params || {};
  params["CONTENT_TYPE"] = gadgets.io.ContentType.TEXT;
  
  gadgets.io.makeRequest(url, function(obj) {
    callback(obj.data);
  }, params);
}
  
  
function _IG_FetchJsonContent(url, callback, opt_params) {
  var params = opt_params || {};
  params["CONTENT_TYPE"] = gadgets.io.ContentType.JSON;
  
  gadgets.io.makeRequest(url, function(obj) {
    callback(obj.data);
  }, params);
}

function _IG_FetchXmlContent(url, callback, opt_params) {
  var params = opt_params || {};
  params["CONTENT_TYPE"] = gadgets.io.ContentType.DOM;
  
  gadgets.io.makeRequest(url, function(obj) {
    callback(obj.data);
  }, params);
}  
  
function hideNetvibes() {
  document.getElementById('netvibes-note').style.display = 'none';
  prefs.set('hide_netvibes', true);
}

function hideExtension() {
  document.getElementById('extension-note').style.display = 'none';
  prefs.set('hide_extension', true);
}

function hideIgHome() {
  document.getElementById('ighome-note').style.display = 'none';
  prefs.set('hide_ighome', true);
}


function isLL(loc) {
  loc = loc.replace(' ','');
  if (loc.indexOf(',') < 0) return false;
  
  var locParts = loc.split(',');
  if (locParts.length != 2) return false;
  
  var lon = parseFloat(locParts[0]),
    lat = parseFloat(locParts[1]);
  
  if (isNaN(lon) || isNaN(lat)) return false;
  
  return {
    "lat": Math.max(lat,lon),
    "lon": Math.min(lon,lat)  //flip coords if they are put in reverse
  }
}  
  </script>
<div id="netvibes-note" style="font-style:italic">*Netvibes users click <a href="http://eco.netvibes.com/apps/556967/noaa-us-local-forecast" target="_blank">here</a> to get this gadget for your netvibes page* <a href="#" onclick="hideNetvibes();return false;">(hide)</a></div>
<div id="extension-note" style="font-style:italic">*Click <a href="https://chrome.google.com/webstore/detail/noaa-nws-weather-forecast/aoeeadahepglhaccmlflogngkgakfenj" target="_blank">here</a> to get the Chrome extension* <a href="#" onclick="hideExtension();return false;">(hide)</a></div>
<div id="ighome-note" style="font-style:italic">*Click <a href="http://www.ighome.com/directory.aspx?q=NOAA" target="_blank">here</a> to get this gadget for your igHome.com page* <a href="#" onclick="hideIgHome();return false;">(hide)</a></div>

<div id="forecast-area"></div>
]]></Content>
</Module>

