$("document").ready(function() {
   if ($.cookie('loc_longitude') && $.cookie('loc_latitude')) {
      getWeather();
   } else {
      $.getJSON("http://www.geoplugin.net/json.gp?callback=?", function(data) {
         eval(data);
      });
   }
});

function geoPlugin(data) {
   $.cookie('loc_latitude', data.geoplugin_latitude, {
      expires: 7
   });
   $.cookie('loc_longitude', data.geoplugin_longitude, {
      expires: 7
   });
   $.cookie('loc_country', data.geoplugin_countryName, {
      expires: 7
   });
   $.cookie('loc_region', data.geoplugin_region, {
      expires: 7
   });
   $.cookie('loc_city', data.geoplugin_city, {
      expires: 7
   });
   $.cookie('loc_country_code', data.geoplugin_countryCode, {
      expires: 7
   });
   getWeather();
}

function getWeather() {
   var latitude = $.cookie('loc_latitude');
   var longitude = $.cookie('loc_longitude');
	
   var loc_conditions = $.cookie('loc_conditions');
   var loc_conditions_img = $.cookie('loc_conditions_img');
   var loc_temp = $.cookie('loc_temp');
   var loc_humidity = $.cookie('loc_humidity');
	
   if (loc_conditions && loc_conditions_img) {
      setConditions(loc_conditions, loc_conditions_img, loc_temp, loc_humidity);
   } else {
      var url = "http://ws.geonames.org/findNearByWeatherJSON?lat=" + latitude + "&lng=" + longitude + "&callback=?";
      $.getJSON(url, function(data) {
         var clouds = data.weatherObservation.clouds;
         var weather = data.weatherObservation.weatherCondition;
         var temp = data.weatherObservation.temperature;
         var humidity = data.weatherObservation.humidity;
			
         var conditions_img = getConditions(clouds, weather);
			
         var conditions = '';
         if (weather == 'n/a') {
            if (clouds == 'n/a') {
               conditions = 'fine';
            } else {
               conditions = clouds;
            }
         } else {
            conditions = weather;
         }
			
         $.cookie('loc_conditions', conditions);
         $.cookie('loc_conditions_img', conditions_img);
         $.cookie('loc_temp', temp);
         $.cookie('loc_humidity', humidity);
         setConditions(conditions, conditions_img, temp, humidity);
      });
   }
}

function getConditions(clouds, weather) {
   if (weather == 'n/a') {
      switch (clouds) {
         case 'n/a':
            return 'sun.png';
         case 'clear sky':
            return 'sun.png';
         case 'few clouds':
            return 'cloudy2.png';
         case 'scattered clouds':
            return 'cloudy.png';
         case 'broken clouds':
            return 'very_cloudy.png';
         default:
            return 'cloudy2.png';
      }
   } else {
      weather = weather.replace('light ', '').replace('heavy ', '').replace(' in vicinity', '');
      switch(weather) {
         case 'drizzle':
            return 'rain.png';
         case 'rain':
            return 'rain.png';
         case 'snow':
            return 'snow.png';
         case 'snow grains':
            return 'snow.png';
         case 'ice crystals':
            return 'snow.png';
         case 'ice pellets':
            return 'snow.png';
         case 'hail':
            return 'rain_snow.png';
         case 'small hail':
            return 'rain_snow.png';
         case 'snow pellets':
            return 'rain_snow.png';
         case 'unknown precipitation':
            return 'rain.png';
         case 'mist':
            return 'hearvy_clouds.png';
         case 'fog':
            return 'hearvy_clouds.png';
         case 'smoke':
            return 'hearvy_clouds.png';
         case 'volcanic ash':
            return 'hearvy_clouds.png';
         case 'sand':
            return 'hearvy_clouds.png';
         case 'haze':
            return 'haze.png';
         case 'spray':
            return 'rain.png';
         case 'widespread dust':
            return 'hearvy_clouds.png';
         case 'squall':
            return 'snow.png';
         case 'sandstorm':
            return 'hearvy_clouds.png';
         case 'duststorm':
            return 'hearvy_clouds.png';
         case 'well developed dust':
            return 'hearvy_clouds.png';
         case 'sand whirls':
            return 'hearvy_clouds.png';
         case 'funnel cloud':
            return 'snow.png';
         case 'tornado':
            return 'storm.png';
         case 'waterspout':
            return 'haze.png';
         case 'showers':
            return 'heavy_rain.png';
         case 'thunderstorm':
            return 'storm.png';
         default:
            if (weather.indexOf("rain")) {
               return 'rain.png';
            } else if (weather.indexOf("snow")) {
               return 'snow.png';
            } else if (weather.indexOf("thunder")) {
               return 'storm.png';
            } else if (weather.indexOf("dust")) {
               return 'hearvy_clouds.png';
            } else {
               return 'sun.png';
            }
      }
   }
}

function setConditions(conditions, conditions_img, temp, humidity) {
   var country = $.cookie('loc_country');
   var region = $.cookie('loc_region');
   var city = $.cookie('loc_city');
   var loc_country_code = $.cookie('loc_country_code');
   if (loc_country_code == 'US') {
      temp = parseInt(temp) + 32;
      temp_type = "F";
   } else {
      temp_type = "C";
   }

   $("#weather_widget").append("<img id='weather_img' src='http://www.webmasterscy.com/images/weather/" + conditions_img + "' />");
   $("#weather_widget").append("<div id='weather_conditions'><p id='weather_city'>" + city + "</p><p id='weather_country'>" + country + "</p><p id='weather_temp'>Temp: " + temp + "&deg; " + temp_type + "</p><p id='weather_hum'>Humidity: " + humidity + "%</p><p id='weather_cond'>" + conditions.substr(0, 1).toUpperCase() + conditions.substr(1) + "</p></div>");
}