var cTagger = Class.create({
	initialize: function(_tagek) {
		this.tagek = _tagek;
		this.valasztott_tagek = new Array();
	},
	hasSelected: function() {
		return (this.valasztott_tagek.length > 0);
	},
	tagListRefresher: function(melyik, betu, lap) {
		//if (betu == '') showAllTagList();

		if (lap == null || lap < 1) lap = readCookie('tag_' + melyik + '_lap');
		if (lap == null || lap < 1) lap = 1;
		lap = parseInt(lap);

		//if (betu == null) betu = readCookie('tag_' + melyik + '_betu');
		if (betu == null) betu = '';
		/*if (melyik == '') {
			var tag_betu = readCookie('tag_' + melyik + '_betu');
			var opj = document.getElementById('tag_' + melyik + '_abclec_' + tag_betu);
			if (opj != null) opj.className = '';
			opj = document.getElementById('tag_' + melyik + '_abclec_' + betu);
			if (opj != null) opj.className = 'aktiv_link';
		}*/
		var out = document.getElementById('tag_' + melyik + '_lista');

		var max_length = 110;
		if (melyik == 'valasztott') {
			max_length = 80;
		} else if (melyik == 'osszes' || melyik == 'osszes_valasztott') {
			max_length = 20000000;
		}

		var hossza = 0;
		var akt_lap = 1;
		var lista = new Array();
		var van_meg = false;
		var elemek = this.tagek;
		if (melyik == 'valasztott' || melyik == 'osszes_valasztott') {
			elemek = this.valasztott_tagek;
		}
		var kezdjuk_a_betut = false;

		for (iu=0; iu<elemek.length; iu++) {
			var ert = elemek[iu];
			var ajdi = ert[0];
			var nejm = ert[1];
			var kaunt = ert[2];
			var desc = ert[3];
			var seriesKaunt = ert[4];
			if (
				(melyik == '' && this.isSelectedTag(nejm))
				||
				(
					(melyik == 'osszes')
					&&
					(
						this.isSelectedTag(nejm)
						||
						(betu.length > 0 && nejm.substring(0, betu.length).toLowerCase() != betu.toLowerCase() && !findInDesc(betu, desc))
					)
				)
			) {
				continue;
			}

			if (hossza > max_length) {
				if ((melyik == '' && betu.length > 0 && kezdjuk_a_betut) || ((melyik != '' || betu.length == 0) && akt_lap == lap)) {
					// kesz a lista
					van_meg = true;
					break;
				} else {
					lista = new Array();
					hossza = 0;
					akt_lap++;
				}
			}
			if (melyik == '' && betu.length > 0 && nejm.substring(0, 1).toLowerCase() == betu.toLowerCase()) {
				kezdjuk_a_betut = true;
			}

			var li = new Object();
			li.name = nejm;
			li.description = desc;
			li.count = kaunt;
			li.seriesCount = seriesKaunt;
			if (melyik == 'valasztott' || melyik == 'osszes_valasztott') {
				li.exec = 'tagger.delTag('+iu+')';
			} else {
				li.exec = 'tagger.addTag('+iu+')';
			}
			if (melyik == 'osszes' && betu.length > 0 && nejm.substring(0, betu.length).toLowerCase() != betu.toLowerCase() && findInDesc(betu, desc)) {
				li.style = 'normal';
			} else {
				li.style = 'bold';
			}
			lista[lista.length] = li;
			hossza += li.name.concat(kaunt).length+2+2;

		}

		lap = akt_lap;
		//createCookie('tag_' + melyik + '_betu', betu);
		createCookie('tag_' + melyik + '_lap', lap);

		var alma = new Object();
		alma.lista = lista;
		alma.betu = '';
		alma.melyik = melyik;
		if (van_meg) {
			alma.kovetkezo = lap+1;
		}
		if (lap > 1) {
			alma.elozo = lap-1;
		}
		if (universe && universe.active.name == "sorozatvalaszto") {
			alma.serie = true;
		} else {
			alma.serie = false;
		}

		templater.render(out, 'template_tagelo', alma);

		if (melyik != 'osszes' && melyik != 'osszes_valasztott') {
			out = document.getElementById('tag_' + melyik + '_lapozo');
			templater.render(out, 'template_tagelo_lapozo', alma);
		}
	},
	allTagListRefresher: function() {
		this.tagListRefresher('', null, null);
		this.tagListRefresher('valasztott', null, null);
		if (this.valasztott_tagek.length > 0) {
			$('tag_valasztott_help').show();
		} else {
			$('tag_valasztott_help').hide();
		}
		// az osszes taget tartalmazo divet csak akkor frissitjuk, ha lathato
		if ($('tag_osszes_lista_div').visible()) {
			this.tagListRefresher('osszes', $('tag_szuro').value, null);
			this.tagListRefresher('osszes_valasztott', null, null);
		}
	},
	showAllTagList: function() {
		showFedoLayer();
		$('tag_osszes_lista_div').show()
		$('tag_osszes_lista_div').style.top = centerY($('tag_osszes_lista_div')) + 'px';
		$('tag_osszes_lista_div').style.left = centerX($('tag_osszes_lista_div')) + 'px';
		this.tagListRefresher('osszes_valasztott', null, null);
		this.tagListRefresher('osszes', null, null);
		$('tag_szuro').focus();
	},
	hideAllTagList: function() {
		hideFedoLayer();
		$('tag_osszes_lista_div').hide();
	},
	toggleAllTagList: function() {
		if (!$('tag_osszes_lista_div').visible()) {
			this.showAllTagList();
		} else {
			this.hideAllTagList();
		}
	},
	addTagById: function(tag_id) {
		var i = 0;
		var j = 0;
		for (i=0; i<this.tagek.length; i++) {
			if (this.tagek[i][0] == tag_id) {
				j = i;
				break;
			}
		}
		this.addTag(j);
	},
	addTag: function(tag) {
		this.valasztott_tagek.push(this.tagek[tag]);
		this.valasztott_tagek.sort(sortTags);

		/*
		universe.activateViewByName('valaszto');
		universe.activeView().onParamsChange(null);
		menuer.changeIt('kategoria');
		*/

		this.allTagListRefresher();
		this.changeBrowserFilter( true );
	},
	delTag: function(tag) {
		this.valasztott_tagek.splice(tag, 1);

		//universe.activeView().onParamsChange(null);

		this.allTagListRefresher()
		this.changeBrowserFilter( true );
	},
	resetTags: function() {
		this.valasztott_tagek = [];
		this.allTagListRefresher();
		this.changeBrowserFilter( false );
	},
	isSelectedTag: function(tag) {
		for (iio=0; iio<this.valasztott_tagek.length; iio++) {
			if (this.valasztott_tagek[iio][1] == tag) {
				return true;
			}
		}
		return false;
	},
	changeBrowserFilter: function( mkSearch ) {
		if ( browserFilter ) {
			browserFilter.delAllTags();
			for ( var i = 0; i < this.valasztott_tagek.length; i++ ) {
				browserFilter.addTag( i, this.valasztott_tagek[i][1], this.valasztott_tagek[i][0] );
			}
			if ( mkSearch ) {
				if (universe && universe.active.name == "sorozatvalaszto") browserFilter['event'] = "seriesfilterchange";
				browserFilter.makeSearch();
			}
		}
	}
});

function sortTags(a, b) {
	if (a[1] == b[1]) return 0;
	return ((a[1] < b[1])? -1 : 1);
}

function findInDesc(prefix, desc) {
	var spi = desc.split(" ");
	var j=0;
	for (j=0; j<spi.length; j++) {
		if (spi[j].substring(0, prefix.length).toLowerCase() == prefix.toLowerCase()) {
			return true;
		}
	}
	return false;
}


