var cWelcome = Class.create(cView, {
	initialize: function($super, _name, _container, _reference) {
		$super(_name, _container, _reference);
		this.newsLimit = 25;
		this.data = {};	
		this.rummageAnimation = null;
		userer.on('login', this.onUserStatusChange.bind(this));
		userer.on('logout', this.onUserStatusChange.bind(this));
	},
	init: function() {
		// news, premiers, observer
		this.getData(['news', 'recommendations', 'observers', 'premiers'/*, 'rummage'*/], [{
			fn: this.render,
			scope: this
		}]);	
	},
	getData: function(options, callbacks) {
		var keres = new Ajax.Request('getWelcome.php?' + options.join('&'), {
			method:'get',
			callbacks: callbacks,
			onSuccess: this.getDataCallback.bind(this),
			onFailure: function() {
				// todo
			}
		});	
		return false;
	},
	getDataCallback: function(transport) {
		var ret = transport.responseText.evalJSON();
		this.data = FilmX.apply(this.data, ret);
		var cbs = transport.request.options.callbacks;
		for (var i=0; i<cbs.length; i++) {
			cbs[i].fn.call(cbs[i].scope);
		}
	},
	onUserStatusChange: function(id, name) {
		this.renderRummage();
		if (id != 0) {
			this.getData(['observers'], [{
				fn: this.renderObserver,
				scope: this
			}]);
		} else {
			this.data.observers = {};
			this.renderObserver();
		}
	},
	render: function() {
		templater.render(this.container, 'template_start', this.data, this.afterRender.bind(this));
	},
	afterRender: function() {
		//this.renderRummage();
		/*this.getData(['rummage'], [{
			fn: this.renderRummage,
			scope: this
		}]);*/
		this.renderNews();
		this.renderObserver();
		this.renderPremiers();
		templater.observeElements($$('.welcome-news-filter'), 'click', this.renderNews.bind(this));
		templater.observeElements($$('.welcome-observer-filter'), 'click', this.renderObserver.bind(this));
		templater.observeElement($('welcome-premiers-date'), 'change', this.switchPremier.bind(this));
		templater.observeElement($('welcome-premiers-date-next'), 'click', this.nextPremier.bind(this));
		templater.observeElement($('welcome-premiers-date-prev'), 'click', this.prevPremier.bind(this));
		this.switchPremier();
	},
	switchPremier: function() {
		var id, element;
		for (var i=0; i<this.data.premiers.length; i++) {
			element = $('welcome-premiers-' + i);
			if (element) {
				element.hide();
			}
		}
		id = $('welcome-premiers-date').value;
		element = $('welcome-premiers-' + id);
		if (element) {
			element.show();
		}
	},
	nextPremier: function() {
		this.jumpPremier(parseInt($('welcome-premiers-date').value) + 1);
		return false;
	},
	prevPremier: function() {
		this.jumpPremier(parseInt($('welcome-premiers-date').value) - 1);
		return false;
	},
	jumpPremier: function(index) {
		var items = $('welcome-premiers-date').options;
		if (index >= 0 && index < items.length) {
			items[index].selected = true;
		}
		this.switchPremier();
	},
	renderNews: function() {
		var indexes = {
			'movie': 0,
			'assess': 0,
			'forum': 0,
			'serie': 0,
			'news': 0,
			'moviepremier': 0,
			'dvdpremier': 0
		};
		var checkbox = $('ertekelesek_friss');
		if (!checkbox || !checkbox.checked) {
			delete indexes.assess;
		}
		checkbox = $('beirasok_friss');
		if (!checkbox || !checkbox.checked) {
			delete indexes.forum;
		}
		checkbox = $('filmek_friss');
		if (!checkbox || !checkbox.checked) {
			delete indexes.movie;
			delete indexes.moviepremier;
			delete indexes.dvdpremier;
		}
		checkbox = $('sorozatok_friss');
		if (!checkbox || !checkbox.checked) {
			delete indexes.serie;
		}
		checkbox = $('hirek_friss');
		if (!checkbox || !checkbox.checked) {
			delete indexes.news;
		}
		var list = this.mergeLists(this.data.news, indexes);
		templater.render($('welcome-news'), 'template_welcome_news', {
			news: list
		}, this.afterRenderNews.bind(this));
	},
	afterRenderNews: function() {
	},
	renderObserver: function() {
		var filterDiv = $('welcome-observers-filters');
		if (filterDiv) {
			if (userer.isGuest()) {
				filterDiv.hide();
			}
			else {
				filterDiv.show();
			}
			var indexes = {
				'movie': 0,
				'assessor': 0,
				'creative': 0,
				'serie': 0,
				'moviepremier': 0,
				'dvdpremier': 0
			};
			var checkbox = $('alkoto_figyelo');
			if (!checkbox || !checkbox.checked) {
				delete indexes.creative;
			}
			checkbox = $('ember_figyelo');
			if (!checkbox || !checkbox.checked) {
				delete indexes.assessor;
			}
			checkbox = $('film_figyelo');
			if (!checkbox || !checkbox.checked) {
				delete indexes.movie;
				delete indexes.moviepremier;
				delete indexes.dvdpremier;
			}
			checkbox = $('sorozatok_figyelo');
			if (!checkbox || !checkbox.checked) {
				delete indexes.serie;
			}
			
			var list = this.mergeLists(this.data.observers, indexes);
			templater.render($('welcome-observers'), 'template_welcome_observers', {
				observers: list
			}, this.afterRenderObservers.bind(this));
		}
	},
	afterRenderObservers: function() {
		templater.observeElements($$('#welcome-observers .loginLink'), 'click', userer.showLogin.bind(userer));
	},
	mergeLists: function(data, indexes, max) {
		var list = [];
		if (!data) return list;
		var notYet = false;
		max = max || this.newsLimit;
		for (var item in indexes) {
			if (!data[item] || data[item].length == 0) {
				delete indexes[item];
				continue;
			}
			notYet = true;
		}
		while (notYet) {
			var next = '';
			var nextId = 0;
			for (keys in indexes) {
				if (indexes[keys] < data[keys].length && 
						parseInt(data[keys][indexes[keys]].order) > nextId) {
					next = keys;
					nextId = parseInt(data[keys][indexes[keys]].order);
				}
			}
			list.push(data[next][indexes[next]]);
			indexes[next]++;
			
			if (list.length == max) {
				break;
			}
			notYet = false;
			for (keys in indexes) {
				if (indexes[keys] < data[keys].length) {
					notYet = true;
					break;
				}
			}
		}
		return list;
	},
	renderPremiers: function() {
		
	},
	renderRummage: function() {
		var container = $('welcome-rummage');
		templater.render(container, 'template_welcome_rummage', {rummage: this.data.rummage}, this.afterRenderRummage.bind(this));
	},
	afterRenderRummage: function() {
		var toggleAssess = $$('.show-movie');
		if (toggleAssess.length == 1) {
			toggleAssess[0].observe('click', this.toggleAssess.bind(this));
		}
		var reloader = $('velemeny_reload');
		if (reloader) {
			reloader.observe('click', this.getData.bind(this, ['rummage'], [{fn: this.renderRummage, scope: this}]));
		}
		
		var switchers = $$('#welcome-rummage .item');
		for (var i=0; i<switchers.length; i++) {
			switchers[i].observe('click', this.switchRummage.bind(this, i));
		}
		this.switchRummage(0);
	},
	switchRummage: function(index) {
		var switchers = $$('#welcome-rummage .item');
		for (var i=0; i<switchers.length; i++) {
			if (index == i) {
				switchers[i].addClassName('selected');
			}
			else {
				switchers[i].removeClassName('selected');
			}
		}
		var container = $('welcome-rummage-thumb-ppl');
		container.innerHTML = '';
		var thumb = new cThumb(container);
		thumb.loadData(FilmX.apply({type: 'ppl_small'}, this.data.rummage[index]));
		container = $('welcome-rummage-thumb-movie');
		container.innerHTML = '';
		thumb = new cThumb(container);
		thumb.loadData(FilmX.apply({type: 'movie_big'}, this.data.rummage[index]));
		return false;
	},
	toggleAssess: function() {
		if (this.rummageAnimation) {
			this.rummageAnimation.cancel();
		}
		if ($('welcome-rummage-thumbs').style.left.toString().substr(0, 1) == '-') {
			this.showRummageRecomThumb();
		} else {
			this.rummageAnimation = new Effect.Move($('welcome-rummage-thumbs'), { mode: 'absolute', x: -643, y: 0 });
		}
		return false;
	},
	showRummageRecomThumb: function() {
		this.rummageAnimation = new Effect.Move($('welcome-rummage-thumbs'), { mode: 'absolute', x: 0, y: 0 });
	}
});

