/* weather */

YAHOO.namespace("YAHOO.DaveRoseman.weather");
YAHOO.DaveRoseman.weather.app = function() 
{
  var reZip = new RegExp(/(^\d{5}$)/);
  var rJSON;
  var wzip;
  
  return {
    init: function ()
    {  
      rJSON = '';
      pzip = '';
      YAHOO.DaveRoseman.weather.app.xhrUrl = YAHOO.DaveRoseman.data.xhrUrl;
      this.setDefault();
      YAHOO.util.Event.addListener("weather-submit", "click", this.setZipcode);
      YAHOO.util.Event.addListener("weather-update", "click", this.searchWeather);
      YAHOO.DaveRoseman.weather.app.searchWeather();
    },

    setZipcode: function()
    {
      var wzip = document.getElementById('weather-zipcode').value;
      var elt = document.getElementById('weather-zipcode');
      pzip = elt.value;
      YAHOO.DaveRoseman.weather.app.resetShowErrs();
      YAHOO.DaveRoseman.weather.app.searchWeather();
    },
    setDefault: function()
    {
      if(!pzip){ pzip = '94043'; }
      var elt = document.getElementById('weather-zipcode');
      elt.value = pzip;
    },
    showErrAjax: function()
    {
      YAHOO.util.Dom.setStyle('weather-err-ajax','display','block');
    },
    showErrZipinput: function()
    {
      YAHOO.util.Dom.setStyle('weather-err-zipinput','display','block');
    },
    showErrRemote: function()
    {
      YAHOO.util.Dom.setStyle('weather-err-remote','display','block');
    },
    showErrResult: function()
    {
      YAHOO.util.Dom.setStyle('weather-no-results','display','block');
    },
    resetShowErrs: function()
    {
      YAHOO.util.Dom.setStyle('weather-err-ajax','display','none');
      YAHOO.util.Dom.setStyle('weather-err-remote','display','none');
      YAHOO.util.Dom.setStyle('weather-err-zipinput','display','none');
      YAHOO.util.Dom.setStyle('weather-no-results','display','none');
    },
  
    searchWeather:function()
    {
      var wzip = document.getElementById('weather-zipcode').value;
      var elt = document.getElementById('weather-zipcode');
       pzip = elt.value;
      YAHOO.DaveRoseman.weather.app.resetShowErrs();
      
      if( reZip.test(pzip))
      {
        YAHOO.DaveRoseman.weather.app.doSearchWeather();
      }
      else
      {
        we = document.getElementById('weather-content');
        if( we )
        {
          we.innerHTML = "";
        }
        YAHOO.DaveRoseman.weather.app.showErrZipinput();
      }
    },
    
    doSearchWeather: function()
    {
      
      busyElt = document.getElementById('busy-search-icon');
      if(busyElt)
      {
        busyElt.style.display='inline-block';
      }
      
      var wzip = document.getElementById('weather-zipcode').value;
      var url = YAHOO.DaveRoseman.weather.app.xhrUrl + '?modid=weather&zipcode=' + wzip;
      var AjaxObject ={
      
        handleSuccess:function(o)
       {
          //alert("o.responseText=" + o.responseText );
          rJSON=eval("(" + o.responseText + ")");

          YAHOO.DaveRoseman.weather.app.displayResult();
          
          if( rJSON.err )
          {
            //alert( "There was an error: " + rJSON.err );
          }
        },
        handleFailure:function(o)
        {
          YAHOO.DaveRoseman.weather.app.showErrAjax();
        },
        startRequest:function() 
        {
          YAHOO.util.Connect.asyncRequest('GET',url,callback);
        }
      
      };
      
      var callback={
        success:AjaxObject.handleSuccess,
        failure:AjaxObject.handleFailure,
        timeout: 10000,
        scope:AjaxObject
      };
     
      AjaxObject.startRequest();
      //----------------------------------
    },
    
    displayResult:function()
    {
      var html = '';
     
      if( rJSON.err )
      {
        html = '<span class="note error">There was an error on the server</span>';
        html += '<span class="note">Please try again</span>';
      }
      else
      {
        html += '<div class="cc">';
        html +=   '<span class="title">Current conditions for ' + pzip +'</span>';
        html +=   '<div class="top">';
       
        html += '<table><tr>';
        html += '<td class="imgcell"><img src="assets/weather/icons/61x61/' + rJSON.cc.icon +'.png" alt="weather icon"></td>';
        html += '<td class="val">' +  rJSON.cc.t +'</td>';
        html += '</tr></table>';
        html +=   '</div>'; // top
        html += '<div class="clear"></div>';
   
        html += '<table>';
        html += '<tr><td class="c1">Moon:</td><td class="c2">' + rJSON.cc.moon.t +'</td></tr>';
        html += '<tr><td class="c1">Sunrise:</td><td class="c2">' + rJSON.sunr +'</td></tr>';
        html += '<tr><td class="c1">Sunset:</td><td class="c2">' + rJSON.suns +'</td></tr>';
        html += '<tr><td class="c1">Wind:</td><td class="c2">' + rJSON.cc.wind.s + ' mph from the ' + rJSON.cc.wind.t +'</td></tr>';
        html += '<tr><td class="c1">Barometer:</td><td class="c2">' + rJSON.cc.bar.r + '"Hg </td></tr>'; //+ rJSON.cc.bar.d + +'</td></tr>';
        html += '<tr><td class="c1">UV index:</td><td class="c2">' + rJSON.cc.uv.i + ' ' + rJSON.cc.uv.t +'</td></tr>';
        html += '</table>';
   
        html += '<div class="dayf">';
        html +=   '<span class="title">Forecast for ' + pzip +'</span>';
        
        for( var i=0; i < rJSON.dayf.length; i++)
        {
          var hi =  ( 'N/A' != rJSON.dayf[i].hi  ? rJSON.dayf[i].hi +  '&deg;F' : '' );
          var low = ( 'N/A' != rJSON.dayf[i].low ? rJSON.dayf[i].low + '&deg;F' : '' );
          var glue = ( hi && low ? ' / ' : '');
          var $first_day_block = ( 0 == i ? ' first ' : '');
          var dayImgPath   = 'assets/weather/icons/31x31/' + rJSON.dayf[i].day.icon   + '.png';
          var nightImgPath = 'assets/weather/icons/31x31/' + rJSON.dayf[i].night.icon + '.png';
          
          html += '<div class="day_block ' + $first_day_block + '"><span class="sh">' + rJSON.dayf[i].t + '</span>';
          html += '<span class="temp">' + hi + glue + low + '</span>'; 
          html += '<div class="clear"></div>';
          
          var day_t =   rJSON.dayf[i].day.t;
          var night_t = rJSON.dayf[i].night.t;
          
          html += '<table>';
          if ( 'N/A' != day_t )
          {
            html += '<tr><td class="sh"><span class="day">DAY</span></td>';
            html += '<td class="imgcell"><img src="assets/weather/icons/31x31/' + rJSON.dayf[i].day.icon +'.png" alt="day icon"></td>';
            html += '<td class="val">' + rJSON.dayf[i].day.t +'</td></tr>';
          }
          
          if ( 'N/A' != night_t )
          {
            html += '<tr><td class="sh"><span class="night">NIGHT</span></td>';
            html += '<td class="imgcell"><img src="assets/weather/icons/31x31/' + rJSON.dayf[i].night.icon +'.png" alt="day icon"></td>';
            html += '<td class="val">' + rJSON.dayf[i].night.t +'</td></tr>';
          }
          html += '</table>';
          
          html += '</div>'; // day_block
        } // for
        
        html += '</div>'; // dayf
      
      } // if-else
      
      we = document.getElementById('weather-content');
      if( we )
      {
        we.innerHTML = html;
      }
      else
      {
        //alert("Cannot find elt weather-content.");
      }
    }// end fcn
  };
}();
 
YAHOO.DaveRoseman.weather.app.init();
