/* Feedback Weather Control */
var FeedbackWidgetControl = Class.create();

FeedbackWidgetControl.prototype = {
	
	control_url: '/scripts/feedback_widget_control.php',
	
	initialize: function() {
		if ($('widget-feedback')) {
	        this.observe_widget();
	    }
	},
	
	observe_widget: function() {
		var form = $('feedback-form');
		form.onsubmit = this.send_feedback.bindAsEventListener(this);
	},
	
	send_feedback: function(e) {
		e = e || window.event;
		Event.stop(e);
		$('feedback-form').elements['feedback_send'].disabled = 'disabled';
		var value = $('feedback-form').elements['feedback_text'].value;
		if (value) {
			new Ajax.Request(this.control_url, {method: 'post', parameters: 'feedback_text='+value, onComplete: this.update_feedback.bind(this)});
		}
	},
	
	update_feedback: function(r) {
		var response = '<div class="error">Sorry, we could not send your feedback, please try again later</div>';
		if (r.responseText && r.responseText != 'error') {
	        response = '<div class="success">Thank you, you feedback has been received</div>';
	    } else {
	    	$('feedback-form').elements['feedback_send'].disabled = false;
	    }
	    new Insertion.Before($('feedback-form'), response);
	}
	
}

/* Weather Widget Control */
var WeatherWidgetControl = Class.create();

WeatherWidgetControl.prototype = {

	control_url: '/scripts/weather_widget_control.php',

	initialize: function() {
	    if ($('widget-weather')) {
	        this.observe_widget();
	    }
	},
	
	observe_widget: function() {
	    var select = $('widget-weather').getElementsByTagName('select')[0];
		select.onchange = this.get_weather.bindAsEventListener(this);
	},
	
	get_weather: function(e) {
		e = e || window.event;
		var value = Event.element(e).value;
		if (value) {
			new Ajax.Request(this.control_url, {method: 'get', parameters: 'selectCity='+value, onComplete: this.update_weather.bind(this)});
		}
	},
	
	update_weather: function(r) {
	    if (r.responseText && r.responseText != 'error') {
	        $('widget-weather').innerHTML = r.responseText;
	        this.observe_widget();
			widget_control.initialize(); // we need to recreate the widgetControl object so menus work again
			advanced_hover.initialize({'node':'alt_adv', 'hover':'widget-hover'});
	    }
	}

}

/* Widget Control */
var WidgetControl = Class.create();

WidgetControl.prototype = {

	control_url: '/scripts/widget_control.php',
	show_anim: 1,
	widgets: [],
	
	initialize: function(no_anim) {
	    if (no_anim) {
	        this.show_anim = 0;
	    }
		var widget_list = document.getElementsByClassName('widget');
		if (widget_list) {
			for (var i=0; i<widget_list.length; i++) {
				this.widgets[i] = {
					'main': widget_list[i].getElementsByClassName('widget-main')[0],
					'control': widget_list[i].getElementsByClassName('widget-control')[0]
				};
				this.set_action(i);
			}
		}
	},
	
	clear_action: function(ev,widget) {
	   	ev = ev || window.event;
	   	Event.stop(ev);
	    this.widgets[widget].control.onclick = null;
	},

	set_action: function(widget) {
     	if (Element.hasClassName(this.widgets[widget].control, 'collapse')) {
			this.widgets[widget].control.onclick = function(ev) { this.open_menu(ev,widget); }.bindAsEventListener(this);
	    } else {
	    	this.widgets[widget].control.onclick = function(ev) { this.close_menu(ev,widget); }.bindAsEventListener(this);
	    }
	},
	
	open_menu: function(ev,widget){
	    this.clear_action(ev,widget);
	    Element.removeClassName(this.widgets[widget].control, 'collapse');
	    this.store_position(widget,'expand');
	    if (this.show_anim) {
		    new Effect.SlideDown(this.widgets[widget].main, { duration: .5, from: 0.0, to: 1.0, queue: 'front'});
		    new Effect.Opacity(this.widgets[widget].main, { duration: .5, from: 0.0, to: 1.0, delay: .5, afterFinish: function() {this.set_action(widget)}.bind(this) });
		} else {
		    this.widgets[widget].main.style.display = '';
		    Element.setOpacity(this.widgets[widget].main, 100);
		    this.set_action(widget);
		}
	},
	
	close_menu: function(ev,widget) {
	    this.clear_action(ev,widget);
	    Element.addClassName(this.widgets[widget].control, 'collapse');
	    this.store_position(widget,'collapse');
	    if (this.show_anim) {
		    new Effect.Opacity(this.widgets[widget].main, { duration: .5, from: 1.0, to: 0.0, queue: 'front' });
		    new Effect.SlideUp(this.widgets[widget].main, { duration: .5, from: 0.0, to: 1.0, delay: .5, afterFinish: function() {this.set_action(widget)}.bind(this) });
		} else {
      		this.widgets[widget].main.style.display = 'none';
      		Element.setOpacity(this.widgets[widget].main, 0);
		    this.set_action(widget);
		}
	},
	
	store_position: function(widget,position) {
	    var widget_id = this.widgets[widget].main.parentNode.id.split('widget-')[1];
	    new Ajax.Request(this.control_url, { method: 'get', parameters: position+'&widget='+widget_id});
	}

}


/* Main Menu Control */
var MenuControl = Class.create();

MenuControl.prototype = {

	menu_link: {},
	nav_area: {},
	control_url: '/scripts/menu_control.php',
	show_anim: 1,

	initialize: function(no_anim) {
	    if (no_anim) {
	        this.show_anim = 0;
	    }
	    if ( $('menu-control') && $('nav-container')) {
		    this.menu_link = $('menu-control');
		    this.nav_area = $('nav-container');
		    this.set_action();
		}
	},
	
	set_action: function() {
	    if (Element.hasClassName(this.menu_link, 'collapse')) {
			this.menu_link.onclick = this.open_menu.bindAsEventListener(this);
	    } else {
	    	this.menu_link.onclick = this.close_menu.bindAsEventListener(this);
	    }
	},
	
	no_anim: function() {
	    this.show_anim = 0;
	},
	
	clear_action: function(ev) {
	   	ev = ev || window.event;
	   	Event.stop(ev);
	    this.menu_link.onclick = null;
	},
	
	open_menu: function(ev) {
	    this.clear_action(ev);
	    Element.removeClassName(this.menu_link, 'collapse');
	    this.store_position('expand');
	    if (this.show_anim) {
		    new Effect.Parallel([
		        new Effect.SlideDown(this.nav_area, { sync: true, duration: 1.2, from: -.2, to: 1.0 }),
		        new Effect.Appear(this.nav_area, { sync: true, duration: 1.2 })
		    ], {afterFinish: function() {this.set_action()}.bind(this)});
		} else {
		    this.nav_area.style.display = '';
		    this.set_action();
		}
	},
	
	close_menu: function(ev) {
	    this.clear_action(ev);
	    Element.addClassName(this.menu_link, 'collapse');
	    this.store_position('collapse');
	    if (this.show_anim) {
		    new Effect.Parallel([
		        new Effect.SlideUp(this.nav_area, { sync: true, duration: 1.2, from: 0.0, to: 1.2 }),
		        new Effect.Fade(this.nav_area, { sync: true, duration: 1.2 })
		    ], {afterFinish: function() {this.set_action()}.bind(this)});
		} else {
      		this.nav_area.style.display = 'none';
		    this.set_action();
		}
	   
	},
	
	store_position: function(position) {
	    new Ajax.Request(this.control_url, { method: 'get', parameters: position});
	}

}