//flatWeatherJqueryPlugin min //2014-10-21 (function(e,t,n,r){function u(t,n){this.element=t;this.settings=e.extend({},s,n);if(!this.settings.units||this.settings.units=="auto"){this.settings.units=["united states","usa","united states of america","us"].indexOf(this.settings.country.toLowerCase())==-1?"metric":"imperial"}this.settings.forecast=Math.min(this.settings.forecast,5);this._name=i;this.once=false;this.init()}function a(e,t){var n={};if(t.api=="openweathermap"){if(e[0].name!=""){n.location=e[0].name+", "+e[0].sys.country;n.city=e[0].name}else if(e[1].city.name!=""){n.location=e[1].city.name+", "+e[1].city.country;n.city=e[1].city.name}else{n.location=t.location+", "+t.country;n.city=t.location}n.today={};n.today.temp={};n.today.temp.now=Math.round(e[0].main.temp);n.today.temp.min=Math.round(e[0].main.temp_min);n.today.temp.max=Math.round(e[0].main.temp_max);n.today.desc=e[0].weather[0].description.capitalize();n.today.code=e[0].weather[0].id;n.today.wind=e[0].wind;n.today.humidity=e[0].main.humidity;n.today.pressure=e[0].main.pressure;n.today.sunrise=l(e[0].sys.sunrise);n.today.sunset=l(e[0].sys.sunset);n.today.day=f(new Date);n.forecast=[];for(var r=0;r=12?"PM":"AM";t=t%12;t=t?t:12;n=n<10?"0"+n:n;var i=t+":"+n+" "+r;return i}function c(e,t,n){var r=t;if(r>=0&&r<=11.25||r>348.75&&r<=360){r="N"}else if(r>11.25&&r<=33.75){r="NNE"}else if(r>33.75&&r<=56.25){r="NE"}else if(r>56.25&&r<=78.75){r="ENE"}else if(r>78.75&&r<=101.25){r="E"}else if(r>101.25&&r<=123.75){r="ESE"}else if(r>123.75&&r<=146.25){r="SE"}else if(r>146.25&&r<=168.75){r="SSE"}else if(r>168.75&&r<=191.25){r="S"}else if(r>191.25&&r<=213.75){r="SSW"}else if(r>213.75&&r<=236.25){r="SW"}else if(r>236.25&&r<=258.75){r="WSW"}else if(r>258.75&&r<=281.25){r="W"}else if(r>281.25&&r<=303.75){r="WNW"}else if(r>303.75&&r<=326.25){r="NW"}else if(r>326.25&&r<=348.75){r="NNW"}var i=n=="metric"?"km/h":"mph";return r+" "+e+" "+i}var i="flatWeatherPlugin";var s={location:"Waterloo, ON",country:"Canada",displayCityNameOnly:false,api:"openweathermap",forecast:5,apikey:"",view:"full",render:true,loadingAnimation:true};var o={openweathermap:["http://api.openweathermap.org/data/2.5/weather","http://api.openweathermap.org/data/2.5/forecast/daily"],yahoo:["https://query.yahooapis.com/v1/public/yql"]};e.extend(u.prototype,{init:function(){if(this.settings.render){if(this.settings.loadingAnimation&&!this.once){this.loading=e("
",{id:"flatWeatherLoading","class":"wi loading"});this.loading.appendTo(this.element)}this.fetchWeather().then(this.render,this.error)}this.once=true},fetchWeather:function(){var t=this;var n=new e.Deferred;var r=[];var i=this.settings.location+" "+this.settings.country;if(this.settings.api=="openweathermap"){var s={};s.q=i;s.units=this.settings.units;if(this.settings.apikey)s.appid=this.settings.apikey;r.push(s);s.cnt=this.settings.forecast+1;r.push(s)}else if(this.settings.api=="yahoo"){var u=this.settings.units=="metric"?"c":"f";var s={};s.q="select * from weather.forecast where woeid in (select woeid from geo.places(1) where text='"+i+"') AND u='"+u+"'";s.env="store://datatables.org/alltableswithkeys";s.format="json";r.push(s)}var f=[];for(var l=0;l1){r=r.map(function(e){return e[0]})}else{r=r[0]}if(t.settings.api=="openweathermap"&&!(r[0].cod=="200"&&r[1].cod=="200")){console.log("Error interacting with the openweathermap api see error object below for details:");console.log(r);n.reject(r,t)}else if(t.settings.api=="yahoo"&&(r.query.count==0||r.query.results.channel.description=="Yahoo! Weather Error")){console.log("Error interacting with the yahoo api see error object below for details:");console.log(r);n.reject(r,t)}else{var i=a(r,t.settings);t._weather=i;e.data(t.element,"weather",i);n.resolve(i,t)}}).fail(function(e){console.log("fail");n.reject(e,t)});return n},error:function(t,n){if(!n){n=this}if(n.settings.loadingAnimation&&n.settings.render){n.loading.remove()}if(n.settings.api=="openweathermap"){if(t[0].cod!="200"){t=t[0].cod+" "+t[0].message+". See console log for details."}else{t=t[1]+" See console log for details."}}else if(n.settings.api=="yahoo"){if(t.query.results){t="Error: "+t.query.results.channel.item.title+". See console log for details."}else{t="Error: no results. See console log for details."}}var r=e("
",{"class":"flatWeatherPlugin "+n.settings.view});e("

").text("Error").appendTo(r);e("

").text(t).appendTo(r);e(n.element).html(r);return e(n.element)},render:function(t,n){if(!n){n=this;t=this._weather}var r=n.settings.units=="metric"?"°C":"°F";if(n.settings.loadingAnimation&&n.settings.render){n.loading.remove()}var i=e("

",{"class":"flatWeatherPlugin "+n.settings.view});if(n.settings.displayCityNameOnly){e("

").text(t.city).appendTo(i)}else{e("

").text(t.location).appendTo(i)}if(n.settings.view!="forecast"){var s=e("
",{"class":"wiToday"});var o=e("
",{"class":"wiIconGroup"});e("
",{"class":"wi "+"wi"+t.today.code}).appendTo(o);e("

",{"class":"wiText"}).text(t.today.desc).appendTo(o);o.appendTo(s);e("

",{"class":"wiTemperature"}).html(t.today.temp.now+""+r+"").appendTo(s);s.appendTo(i)}if(n.settings.view!="simple"){var u=e("

",{"class":"wiDetail"});if(n.settings.view=="partial"){e("

",{"class":"wiDay"}).text(t.today.day).appendTo(s)}if(n.settings.view!="partial"){if(n.settings.view!="today"){e("

",{"class":"wiDay"}).text(t.today.day).appendTo(u)}var a=e("

    ",{"class":"astronomy"}).appendTo(u);e("
  • ",{"class":"wi sunrise"}).text(t.today.sunrise).appendTo(a);e("
  • ",{"class":"wi sunset"}).text(t.today.sunset).appendTo(a);var f=e("
      ",{"class":"temp"}).appendTo(u);e("
    • ").html("Max : "+t.today.temp.max+""+r+"").appendTo(f);e("
    • ").html("Min : "+t.today.temp.min+""+r+"").appendTo(f);var l=e("
        ",{"class":"atmosphere"}).appendTo(u);e("
      • ",{"class":"wi humidity"}).text(t.today.humidity).appendTo(l);e("
      • ",{"class":"wi pressure"}).text(t.today.pressure).appendTo(l);e("
      • ",{"class":"wi wind"}).text(c(t.today.wind.speed,t.today.wind.deg,n.settings.units)).appendTo(l);u.appendTo(s)}if(n.settings.view!="today"||n.settings.view=="forecast"){var h=e("
          ",{"class":"wiForecasts"});var p=n.settings.view=="forecast"?0:1;for(var d=p;d",{"class":"wiDay"}).html(""+t.forecast[d].day+"").appendTo(h);var m=e("
            ",{"class":"wiForecast"}).appendTo(v);e("
          • ",{"class":"wi "+"wi"+t.forecast[d].code}).appendTo(m);e("
          • ",{"class":"wiMax"}).html(t.forecast[d].temp.max+""+r+"").appendTo(m);e("
          • ",{"class":"wiMin"}).html(t.forecast[d].temp.min+""+r+"").appendTo(m)}h.appendTo(i)}}e(n.element).html(i);return e(n.element)}});e.fn[i]=function(t,n){if(e.isFunction(u.prototype[t])){return this.data("plugin_"+i)[t](n)}return this.each(function(){if(!e.data(this,"plugin_"+i)){var n=new u(this,t);return e.data(this,"plugin_"+i,n)}})};String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1)};})(jQuery,window,document)