var Weather = new Class({

	Implements: Options,

	icons : {
		"/ig/images/weather/chance_of_snow.gif"  : ['chance_of_snow.png', 'chance_of_snow_night.png'],
		"/ig/images/weather/flurries.gif"        : ['flurries.png'],
		"/ig/images/weather/snow.gif"            : ['snow.png'],
		"/ig/images/weather/sleet.gif"           : ['sleet.png'],
		"/ig/images/weather/chance_of_rain.gif"  : ['chance_of_rain.png','chance_of_rain_night.png'],
		"/ig/images/weather/chance_of_storm.gif" : ['chance_of_storm.png','chance_of_storm_night.png'],
		"/ig/images/weather/mist.gif"            : ['mist.png','mist_night.png'],
		"/ig/images/weather/showers.gif"         : ['showers.png','showers_night.png'],
		"/ig/images/weather/rain.gif"            : ['rain.png'],
		"/ig/images/weather/storm.gif"           : ['storm.png','storm_night.png'],
		"/ig/images/weather/thunderstorm.gif"    : ['thunderstorm.png'],
		"/ig/images/weather/rain_snow.gif"       : ['rain_and_snow.png'],
		"/ig/images/weather/sunny.gif"           : ['sunny.png','sunny_night.png'],
		"/ig/images/weather/mostly_sunny.gif"    : ['sunny.png','sunny_night.png'],
		"/ig/images/weather/partly_cloudy.gif"   : ['partly_cloudy.png','partly_cloudy_night.png'],
		"/ig/images/weather/mostly_cloudy.gif"   : ['mostly_cloudy.png','mostly_cloudy_night.png'],
		"/ig/images/weather/cloudy.gif"          : ['cloudy.png'],
		"/ig/images/weather/fog.gif"             : ['foggy.png','foggy_night.png'],
		"/ig/images/weather/foggy.gif"           : ['foggy.png','foggy_night.png'],
		"/ig/images/weather/smoke.gif"           : ['smoke.png','smoke_night.png'],
		"/ig/images/weather/hazy.gif"            : ['hazy.png','hazy_night.png'],
		"/ig/images/weather/dusty.gif"           : ['dusty.png','dusty_night.png'],
		"/ig/images/weather/icy.gif"             : ['icy.png','icy_night.png']
     },

    options: {
        city: 'Budapest',
        lng: 'en',
	 unit: 'SI'
    },
	
    initialize: function(id, options){
        this.weather = $(id);
		this.weather.addClass('gkw_main');
		this.setOptions(options);
		this.request();
    },
	
    create: function(json){
		var current  = json.xml_api_reply.weather.current_conditions;
		var forecast = json.xml_api_reply.weather.forecast_conditions;
		var info     = json.xml_api_reply.weather.forecast_information;
		this.unit    = info.unit_system['@attributes'].data;
		var days     = [];

		for (var i = 0; i < 4; i++){
			var day = new Element('li', {'class':'aitems-4'}).adopt(
				new Element('div', {'class':'gkw_fday'}).adopt(
					new Element('span', {'class':'gkw_day', 'html':forecast[i].day_of_week['@attributes'].data}),
					new Element('img', {'src' : 'public/weather/icons/32/'+this.icons[forecast[i].icon['@attributes'].data][0], 'title':forecast[i].condition['@attributes'].data, 'alt':forecast[i].condition['@attributes'].data}),
					new Element('p', {'class':'gkw_day_temp'}).adopt(
						new Element('span', {'class':'gkw_day_day', 'html':this.F2C(forecast[i].high['@attributes'].data)+'&deg;C /'}),
						new Element('span', {'class':'gkw_day_night', 'html':this.F2C(forecast[i].low['@attributes'].data)+'&deg;C'})
					)
				)
			);
			days.push(day);
		}

		this.weather.adopt(
			new Element('div', {'class':'gkw_current'}).adopt(
				new Element('div', {'class':'gkw_main_left'}).adopt(
					new Element('img', {'src' : 'public/weather/icons/64/'+this.icons[current.icon['@attributes'].data][0], 'alt':current.condition['@attributes'].data})
					
				),
				new Element('div', {'class':'gkw_main_right'}).adopt(
					new Element('h2', {'html':current.temp_c['@attributes'].data+'&deg;C'}),
					new Element('p', {'class':'gkw_condition', 'html':current.condition['@attributes'].data}),
					new Element('p', {'class':'gkw_humidity', 'html':current.humidity['@attributes'].data}),
					new Element('p', {'class':'gkw_wind', 'html':current.wind_condition['@attributes'].data})
				)
			),
			new Element('ul', {'class':'gkw_next_days'}).adopt(
				days
			)
		);
	},
	
	request: function(){
		new Request.JSON({
			url:'public/weather/get_weather.php',
			onSuccess: function(json, text){
				this.create(json);
			}.bind(this)
		}).send('city='+this.options.city+'&lng='+this.options.lng);
	},
	
	
	C2F: function(value){
		return Math.floor(32 + ((5/9) * value));
	},

	F2C: function(value){
		if (this.unit == 'SI'){
			return value;
		} else {
			return Math.floor((5/9) * (value - 32));
		}
	}
});
