/**
 * YouWeather - wheather reporting
 * @version		1.0.0
 * @uses MooTools 1.1
 * @author		Constantin Boiangiu <info [at] constantinb.com>
 * Copyright Youjoomla LLC
 */

var YouWeather = new Class({
	initialize: function(options) {
		this.options = Object.extend({
			updateURL:null,
			weatherContainer:null,
			startCity:null,
			formContainer: null,
			cityNameContainer: null,
			fOption: null,
			cOption: null,
			defaultScale:'c',
			inputScale: null,
			inputCity: null,
			overallCity: null,
			cityCookieName: 'YouWeatherCity',
			scaleCookieName: 'YouWeatherScale',
			cookieDuration: 30
		}, options || {});
		this.start();	
	},
	
	start: function(){
		var cityName = $(this.options.cityNameContainer);
		cityName.setStyle('display','none');
		var formContainer = $(this.options.formContainer);
		var farenheit = $(this.options.fOption);
		var celsius = $(this.options.cOption);
		var scale = $(this.options.inputScale);
		var inputCity = $(this.options.inputCity);
		var oCity = $(this.options.overallCity);
		var cookCity = this.options.cityCookieName;
		var cookScale = this.options.scaleCookieName;
		var coodDuration = this.options.cookieDuration;
		
		this.setCookies();
		this.setScales(farenheit, celsius, scale);		
		this.update(Cookie.get(cookCity), Cookie.get(cookScale));
		
		cityName.setHTML(Cookie.get(cookCity));		
		formContainer.setProperty('action', this.options.updateURL);
		var form = formContainer.getElement('form');
		form.addEvent('submit', function(event){
			new Event(event).stop();
			formContainer.send({
				onComplete: function(response) {
					$(this.options.weatherContainer).removeClass('loading').setHTML(response);
					if(!$('error')){
						cityName.setHTML(inputCity.getValue());
						Cookie.set(cookCity, inputCity.getValue(), {'duration':this.options.cookieDuration});
						Cookie.set(cookScale, scale.getValue(), {'duration':this.options.cookieDuration});
					}
				}.bind(this)
			});	
		}.bind(this))		
	},
	
	setScales: function(farenheit, celsius, scale){
		farenheit.addEvent('click', function(event){
			new Event(event).stop();
			farenheit.addClass('selected');
			celsius.removeClass('selected');
			scale.setProperty('value','f');
			Cookie.set(this.options.scaleCookieName, 'f', {'duration':this.options.cookieDuration});
			this.update(Cookie.get(this.options.cityCookieName), 'f');
		}.bind(this))
		celsius.addEvent('click', function(event){
			new Event(event).stop();
			celsius.addClass('selected');
			farenheit.removeClass('selected');
			scale.setProperty('value','c');
			Cookie.set(this.options.scaleCookieName, 'c', {'duration':this.options.cookieDuration});
			this.update(Cookie.get(this.options.cityCookieName), 'c');
		}.bind(this))
		
		if( Cookie.get(this.options.scaleCookieName) == 'c' ){
			celsius.addClass('selected');
			farenheit.removeClass('selected');
			scale.setProperty('value','c');
		}
		else{
			farenheit.addClass('selected');
			celsius.removeClass('selected');
			scale.setProperty('value','f');
		}
	},
	
	setCookies: function(){
		if(!Cookie.get(this.options.cityCookieName))
			Cookie.set(this.options.cityCookieName, this.options.startCity, {'duration':this.options.cookieDuration});			
		if(!Cookie.get(this.options.scaleCookieName))
			Cookie.set(this.options.scaleCookieName, this.options.defaultScale, {'duration':this.options.cookieDuration});
	},
	
	update: function(city, scale){
		new Ajax(this.options.updateURL, {
			method: 'post',
			onComplete: function(response){
				$(this.options.weatherContainer).removeClass('loading').setHTML(response);
				$(this.options.cityNameContainer).setStyle('display','block');
				$(this.options.formContainer).setStyle('display','block');
			}.bind(this)
		}).request({'city':city, 'scale':scale});
	}
});
