var cForum = Class.create({
	initialize: function(_container, _parent) {
		this.container = _container;
		this.parent = _parent;
		this.data = null;
		this.page = 0;
		this.type = this.parent.type;
		this.id = this.parent.id;
		this.countPerPage = 10;
	},
	// feltolti tartalommal
	activate: function() {
		this.type = this.parent.type;
		this.id = this.parent.id;
		this.showPage(1);
	},
	showPage: function(page) {
		this.page = page;
		this.requestData();
	},
	callShowPage: function(page) {
		if (!page) page = this.page;
		this.showPage(page);
		// kill a href
		return false;
	},
	requestData: function(postId) {
		var messageType = 0;
		if ($('hozzaszolas_h')) {
			messageType += ($('hozzaszolas_h').checked)?1:0;
			messageType += ($('hozzaszolas_e').checked)?2:0;
			messageType += ($('hozzaszolas_b').checked)?3:0;
			messageType += ($('hozzaszolas_i').checked)?4:0;
		}
		if ($('beirasok_szama')) {
			countPerPage = $('beirasok_szama');
		}
		var keres = new Ajax.Request('forumActions.php?'+this.type+'='+this.id+'&page='+this.page 
			+ ((messageType > 0)?('&message_type='+messageType):'') 
			+ ((this.countPerPage > 0)?('&count_per_page='+this.countPerPage):'') 
			+ ((postId && postId > 0)?('&post_id='+postId):''), {
			method:'get',
			onSuccess: this.parseRequest.bind(this)
		});
		// unique keres, csak egy futhat belole
		universe.addRequest('forum', keres, true, 0);
	},
	parseRequest: function(transport) {
		var ret = transport.responseText.evalJSON();
		this.data = ret;
		this.totalCount = ret.totalCount;
		this.pageCount = Math.ceil(this.totalCount / this.countPerPage);
		this.page = ret.page;
		this.renderPage();
		universe.hideIndicator();
	},
	renderPage: function() {
		var templateName = 'template_forum_' + this.type;
		this.data.postPerPage = this.countPerPage;
		templater.render(this.container, templateName, this.data, this.afterRender.bind(this));
	},
	renderPosts: function() {
		var templateName = 'template_forum_' + this.type + '_post';
		templater.render($('forum-posts'), templateName, this.data, this.afterRenderPosts.bind(this));
	},
	afterRender: function() {
		this.renderPosts();
		this.renderPager();
		// bind events
		templater.bindElement($('post-answer-send'), this.sendPost.bind(this));
		
		templater.bindElement($('hozzaszolas_m'), this.callShowPage.bind(this));
		templater.bindElement($('hozzaszolas_h'), this.callShowPage.bind(this));
		templater.bindElement($('hozzaszolas_b'), this.callShowPage.bind(this));
		templater.bindElement($('hozzaszolas_e'), this.callShowPage.bind(this));
		templater.bindElement($('hozzaszolas_i'), this.callShowPage.bind(this));
	},
	afterRenderPosts: function() {
		// bind events
		for (var i=0; i<this.data.data.length; i++) {
			var post = this.data.data[i];
			post.parent = this;
			post.callPostAnswer = function() {
				this.parent.showInput();
				$('post-answer-reply').value = this.id;
				$('post-answer-replyform').show();
				$('post-answer-reply-to').innerHTML = this.assessor.usernm;
				$('post-answer-reply-to').className = (this.assessor.sex=='female')?'lany':'fiu';
				$('post-answer-reply-to').observe('mouseover', tooltipper.mouseOver.bind(tooltipper, 'ppl=' + this.assessor.azon));
				$('post-answer-reply-to').observe('mouseout', tooltipper.mouseOut.bind(tooltipper));
				return false;
			};
			post.callPostReference = function() {
				$('post-'+this.unique+'-referenceMessage').toggle();
				return false;
			};
			universe.bindDatasheets([$('post-'+post.unique+'-sender')], 'ppl', post.ref_assessor);
			if (post.ref_message) {
				universe.bindDatasheets([$('post-' + post.unique + '-refSender')], 'ppl', post.ref_message.ref_assessor);
			}
			templater.bindElement($('post-'+post.unique+'-answer'), post.callPostAnswer.bind(post));
			templater.bindElement($('post-'+post.unique+'-reference'), post.callPostReference.bind(post));
		}
		templater.bindElement($('post-answer-newpost'), this.callAddNewPost.bind(this));
	},
	callAddNewPost: function() {
		if ($('post-answer-form').visible()) {
			this.hideInput();
		} else {
			$('post-answer-reply').value = 0;
			$('post-answer-replyform').hide();
			this.showInput();
		}
		return false;
	},
	hideInput: function() {
		$('post-answer-reply').value = 0;
		$('post-answer-input').value = '';
		$('post-answer-form').hide();
		$('post-answer-replyform').hide();
		$('post-answer-newpost').value = 'Új hozzászólás';
	},
	showInput: function() {
		$('post-answer-reply').value = 0;
		$('post-answer-input').value = '';
		$('post-answer-form').show();
		$('post-answer-newpost').value = 'Mégsem';
	},
	sendPost: function() {
		if (userer.isGuest()) {
			userer.showLogin();
			return;
		}
		var refMessage = $('post-answer-reply').value;
		var messageType = getSelectedRadio('post-answer-messagetype');
		var replyType = getSelectedRadio('post-answer-replytype');
		var message = $('post-answer-input').value;
		var params = new Hash();
		params.set('refMessage', refMessage);
		params.set('messageType', messageType);
		params.set('replyType', replyType);
		params.set('message', message);
		var keres = new Ajax.Request('forumActions.php?'+this.type+'='+this.id+'&action=post', {
			parameters: params,
			method:'post',
			onSuccess: this.parseRequest.bind(this)
		});
	},
	renderPager: function() {
		var osszes = this.pageCount;
		var lapok = new Array();
		var akt_page = this.page;
		
		// kozepen 5 szam jelenjen meg
		var jobb_offset = 2;
		var bal_offset = 1;
		
		// bal szelen 2, jobb szelen 1
		var bal_count = 2;
		var jobb_count = 1;
		
		// osszesen 10 szam plussz a 2 elvalaszto '...'
		var lapok_szama_kozepen_bal = bal_offset;
		var lapok_szama_kozepen_jobb = jobb_offset;
		if ((akt_page - lapok_szama_kozepen_bal) <= bal_count) {
			lapok_szama_kozepen_jobb += bal_count - (akt_page - lapok_szama_kozepen_bal) + 1;
		}
		if ((akt_page + lapok_szama_kozepen_jobb) >= osszes - jobb_count + 1) {
			lapok_szama_kozepen_bal += (akt_page + lapok_szama_kozepen_jobb) - (osszes - jobb_count + 1) + 1;
		}
		
		var jobb_elvalaszto = false;
		var bal_elvalaszto = false;
		var szakitas = false;
		
		if (akt_page > 1) {
			opj = {
				name: '<span style="font-size: 14px">←</span>'
				,'class': 'post-answer-pager-prev'
			};
			lapok.push(opj);
		}
		for (var ko=1; ko<=osszes; ko++) {
			if (ko > bal_count && ko < akt_page - lapok_szama_kozepen_bal) {
				if (bal_elvalaszto) continue;
				szakitas = true;
				bal_elvalaszto = true;
			} else if (ko <= (osszes - jobb_count) && ko > akt_page + lapok_szama_kozepen_jobb) {
				if (jobb_elvalaszto) continue;
				szakitas = true;
				jobb_elvalaszto = true;
			}
			
			if (szakitas) {
				szakitas = false;
				lapok.push({});
				continue;
			}
		
			var element = {name: ko, 'class': 'post-answer-pager-' + ko};
			if (ko == akt_page) {
				element.selected = '1';
			} else {
				element.selected = '0';
			}
			lapok.push(element);
		}
		if (akt_page < osszes) {
			opj = {
				name: '<span style="font-size: 14px">→</span>'
				,'class': 'post-answer-pager-next'
			};
			lapok.push(opj);
		}
		templater.render($$('.post-pager'), 'template_forum_pager', {lapok: lapok}, this.afterRenderPager.bind(this));
	},
	afterRenderPager: function() {
		for (var i=1; i<=this.pageCount; i++) {
			templater.bindElements($$('.post-answer-pager-' + i), this.callShowPage.bind(this, i));
		}
		// bind next and prev pager
		templater.bindElements($$('.post-answer-pager-prev'), this.callShowPage.bind(this, this.page-1));
		templater.bindElements($$('.post-answer-pager-next'), this.callShowPage.bind(this, this.page+1));
		templater.observeElement($('beirasok_szama'), 'change', this.changePagePerCount.bind(this));
	}
	,changePagePerCount: function() {
		var count = 0
		if ($('beirasok_szama')) {
			count = parseInt($('beirasok_szama').value);
		}
		if (count > 0) {
			this.countPerPage = count;
		}
		this.requestData();
	}
	,callPostReference: function(post_id) {
		
	}
});

