EventBrowser = Class.create ({
	initialize: function () { // MUST BE DONE WHEN PAGE IS LOADED!
		this.weekCursor = 0;
		this.rooms = ['nightclub', 'urban_room', 'tunnel'];
		this.obj = $('eventBrowser');
		this.roomSelector = $('roomSelector');
		this.setCurrentRoom ('nightclub');
		this.rooms.each (function (room) {
			var roomObj = this.roomSelector.select ('.'+room)[0];
			Event.observe (roomObj, 'click', this.roomClick.bindAsEventListener(this));
			roomObj.roomName = room;
		}, this);
		
		this.obj.select ('.nextButton')[0].observe ('click', this.next.bindAsEventListener(this));
		this.obj.select ('.previousButton')[0].observe ('click', this.previous.bindAsEventListener(this));
		this.initPannels ();
		this.load (0);
	},
	
	initPannels: function () {
		var dims = $('eventViewer').select('.window')[0].getDimensions();
		this.genWidth = dims.width;
		var pannels = $('eventViewer').select ('.pannel');
		pannels.each (function (pannel, i) {
			var left = (i-1) * dims.width;
			pannel.setStyle ({
				position: 'absolute', top: '0px', left: left+'px', width: dims.width+'px', height: dims.height+'px'
			});
		}, dims);
	},
	
	setCurrentRoom: function (room) {
		this.roomSelector.select ('div').invoke ('removeClassName', 'selected');
		this.currentRoom = room;
		this.roomSelector.select ('.'+room).invoke ('addClassName', 'selected');
		this.weekCursor = 0;
		this.load (0);
	},
	
	roomClick: function (event) {
		var element = Event.element (event);
		if (! element.hasClassName ('room')) element = element.up ('.room');
		
		this.nextRoom = element.roomName;
		var pannels = $('eventViewer').select ('.pannel');
		var height = pannels[1].getHeight();
		jQuery (pannels[1]).animate ({top: -height+"px"}, 400, null, this.afterBlindUp.bind(this));
	},
	
	afterBlindUp: function () {
		var pannels = $('eventViewer').select ('.pannel');
		pannels[1].innerHTML = '';
		pannels[1].style.top = "0px";
		this.setCurrentRoom (this.nextRoom);
	},
	
	next: function (event) {
		this.weekCursor += 1;
		this.load (+1);
	},
	
	previous: function (event) {
		this.weekCursor += -1;
		this.load (-1);
	},
	
	load: function (where) {
		if (! this.isLoading) {
			//alert (this.weekCursor);
			this.loader = { 'where' : where };
			this.isLoading = true;
			new Ajax.Request('events/GetSlice', {
				parameters: {'delta': this.weekCursor, 'room': this.currentRoom},
				onSuccess: this.loadSucceeded.bind(this),
				onFailure: this.failure.bind(this)
			});
		}
	},
	
	loadSucceeded: function (t) {
		var html = t.responseText;
		var pannels = $('eventViewer').select ('.pannel');
		pannels[this.loader.where+1].innerHTML = html;
		if (pannels[this.loader.where+1].select ('.oneEvent').size() == 0) {
			this.weekCursor -= this.loader.where;
			this.isLoading = false;	
		} else {
			var script = pannels[this.loader.where+1].select ("script.load");
			if (script.size()>0) {
				eval (script[0].innerHTML);
			}
		
			pannels[this.loader.where+1].select('.lightbox').each (function (e) {
				jQuery(e).lightBox();
			}, this);
			
			$('eventMonth').innerHTML = pannels[this.loader.where+1].select (".currentMonthValue")[0].innerHTML
			FLIR.replace('span.fontReplace' , new FLIRStyle({ cFont:'sf_speedwaystar'}) );//mode:'quickeffects', qe_Stroke: '2,006400'

			
			if (this.loader.where == 0) {
				this.isLoading = false;			
			} else if (this.loader.where == +1) {
				jQuery (pannels[1]).animate ({left: (-this.genWidth)+"px"}, 800);
				jQuery (pannels[2]).animate ({left: "0px"}, 800, null, this.afterMoveLeft.bind(this));
			} else {
				jQuery (pannels[1]).animate ({left: (this.genWidth)+"px"}, 800);
				jQuery (pannels[0]).animate ({left: "0px"}, 800, null, this.afterMoveRight.bind(this));
			}
		}
	},
		
	afterMoveLeft: function () {
		var eventList = $('eventViewer').select ('.window')[0];
		var first = eventList.select ('.pannel')[0];
		//eventList.style.left = "0px";
		var element = eventList.removeChild (first);
		var element = eventList.appendChild (element);
		element.style.left = this.genWidth+'px';
		this.isLoading = false;	
	},
	
	afterMoveRight: function () {
		var eventList = $('eventViewer').select ('.window')[0];
		var last = eventList.select ('.pannel')[2];
		var first = eventList.select ('.pannel')[0];
		//eventList.style.left = "0px";
		//alert (last.innerHTML);
		var element = eventList.removeChild (last);
		var element = eventList.insertBefore (element, first);
		element.style.left = -this.genWidth+'px';
		this.isLoading = false;	
	},
	
	failure: function (e) {
		this.isLoading = false;
		alert ('Error');
	}
});
