var EventPref = Class.create();
EventPref.prototype = {
	//Properties
	el: null,
	form: null,
	box: null,
	prefsId: null,
	parent:null,
	ajax: null,
	ajaxUrl: null,
	list: null,
	title: null,
	moreLink: null,
	
	//Constructor
	initialize: function(el) {
		//alert('ep');
		this.el = el;
		this.ajaxUrl = window.location;
		var parents = this.findParentObjects();
		this.form = parents[0];
		this.box = parents[1];
		this.list = this.box.getElementsByTagName('dl')[0];
		this.title = this.box.getElementsByTagName('h3')[0];
		this.moreLink = this.box.getElementsByTagName('p')[0];
		this.prefsId = this.box.id + '_prefs';
		this.observeLink();
	},
	
	//Methods
	observeLink: function () {
		this.removeFunc = this.EventPref.bindAsEventListener(this);
		Event.observe(this.el, 'click', this.removeFunc);
	},
	EventPref: function () {
		new Effect.toggle($(this.prefsId),'blind');
		this.AjaxOut();
	},
	AjaxOut: function() {
		var vars = Form.serialize(this.form);
		this.ajax = new Ajax.Request(this.ajaxUrl,
			{
				parameters: vars,
				onSuccess: this.AjaxIn.bind(this)
			}
		);
	},
	AjaxIn: function(req) {
		//alert(req.responseText);
		
		//read the XML file
		var result = DOM.getElementTextNS(null, 'result', req.responseXML, 0);
		var abbr = DOM.getElementTextNS(null, 'abbr', req.responseXML, 0);
		
		//replace the list
		var temp = document.createElement('div');
		temp.innerHTML = result;
		list = temp.childNodes[0];
		DOM.replace(this.list, list);
		
		//save the list
		this.list = list;
		new Effect.Highlight(this.list);
		
		//fix this.title
		var titleSpan = this.title.getElementsByTagName('span');
		if (titleSpan[0]) {
			titleSpan[0].innerHTML = 'Upcoming Events in ' + abbr;
			Element.removeClassName(titleSpan[0], 'sIFR-replaced'); // remove the sIFR-replaced class, so it will re-render.
			do_sIFR(); // generate sIFR titles
		}
		
		//fix this.moreLink
		var moreLink = this.moreLink.getElementsByTagName('a');
		if (moreLink[0]) {
			moreLink[0].href = moreLink[0].href.substring(0, -2) + abbr;
		}
		
	},
	findParentObjects: function ()
	{
		var parent = this.el.parentNode;
		var i = 0;
		while (!Element.hasClassName(parent, 'box') && i < 10)
		{
			if (parent.tagName.toUpperCase() == 'FORM')
				var form = parent;
			parent = parent.parentNode;
			i++;
		}
		return [form, parent];
	}
};
/*
var EventPref_Rules = {
	'form.eventprefs input.image' : function(el){
		new EventPref (el);
	}
};
Behaviour.register(EventPref_Rules);*/


EventSelectors.register({
	'form.eventprefs input.image' : function(el){
		new EventPref (el);
	}
}, true);