var TVTouringCategoriesSort, custom__webtvui__categories_scroll;

custom__webtvui__categories_scroll = function ()
{
	var cats = [], i, cat_idx, cat_id, count;
	cat_idx = usersettings.hasOwnProperty('cat_idx') ? usersettings.cat_idx:0;
	cat_idx = cat_idx < 0 ? 0:cat_idx;
	
	try{cats = $('channels').select('li.category');}catch(e){}
	
	cats.each(function(e){$(e).hide()});
	cats = [];
	for(i=0;i<webtv.tvtouringcatsort.cur_filter.categories.length;i++){
		cats.push($('channels').select('li.category.category-'+webtv.tvtouringcatsort.cur_filter.categories[i])[0]);
	}
	count = 1;
	cats.each(function(e){var c = count; c=c<10?'0'+c:c; $(e).show(); $(e).select('em')[0].update(c); count++; });
	
	Event.stopObserving('channelUp', 'click');
	Event.stopObserving('channelDown', 'click');
	
	if(cats.length > settings.cat_max){
		if(cat_idx+settings.cat_max >= cats.length) cat_idx = cats.length-settings.cat_max;
		for(i=cats.length;i--;){
			if(i < cat_idx || i >= cat_idx+settings.cat_max) $(cats[i]).hide();
			else $(cats[i]).show();
		}
		$('channelUp').show();
		$('channelDown').show();
		Event.observe('channelUp', 'click', function(){ usersettings.cat_idx-=settings.cat_max; this.categories_scroll(); }.bind(this));
		Event.observe('channelDown', 'click', function(){ usersettings.cat_idx+=settings.cat_max; this.categories_scroll(); }.bind(this));
	} else {
		cat_idx = 0;
		$('channelUp').hide();
		$('channelDown').hide();
	}
	
	usersettings.cat_idx = cat_idx;
	webtv.storage.update();
};

TVTouringCategoriesSort = function ()
{
	var filters = [
				{
					'label': 'Aktuelles',
					'categories': '204,332,317,207,369,347,379,394'
				},
				{
					'label': 'Sendungen',
					'categories': '320,321,322,323,324,325,326,327,328,329,330,338,360,371,374,383'
				}
			],
			filter_other_label = 'Andere';
			
	this.cur_filter = false;
	
	this.init = function ()
	{
		var list, el, i, j, k, check_cats = [], sorted_cats = [], rest_cats = [];
		
		webtv.ui.categories_scroll = custom__webtvui__categories_scroll;
		
		list = $(document.createElement('div'));
		$(document.body).appendChild(list);
		//list.hide();
		list.addClassName('tvtouring-category-filter-list');
		for(i=0;i<filters.length;i++){
			check_cats+=','+filters[i].categories;
			filters[i].categories = filters[i].categories.split(',');
			/* sort */
			sorted_cats = [];
			for(j = 0; j < webtv_settings.categories_ids.length; j++) {
				for(k = 0; k < filters[i].categories.length; k++) {
					if (webtv_settings.categories_ids[j] == filters[i].categories[k]) sorted_cats.push(filters[i].categories[k]);
				}
			}
			filters[i].categories = sorted_cats;
		}
		
		check_cats = " "+check_cats.replace(/,/g,' ')+" ";
		for(i=webtv_settings.categories_ids.length;i--;){
			if(check_cats.indexOf(' '+webtv_settings.categories_ids[i]+' ') < 0) rest_cats.push(webtv_settings.categories_ids[i]);
		}
		if(rest_cats.length > 0){
			filters[filters.length]= {
				'label': filter_other_label,
				'categories': rest_cats
			}
		}
		
		this.cur_filter = usersettings.hasOwnProperty('tvo_cat_filter') ? get_filter(usersettings.tvo_cat_filter) : false;
		if(this.cur_filter===false) this.cur_filter = filters[0];
		
		this.filter(this.cur_filter.label);
		
		Event.observe('tvtouring-cat-nav-prev', 'click', this.nav_filter.bind(this, "prev"));
		Event.observe('tvtouring-cat-nav-next', 'click', this.nav_filter.bind(this, "next"));
		
		Event.observe($$('ul.catSwitcher li a')[0], 'click', function (event) {
			Event.stop(event);
			if ( usersettings.tvo_cat_filter !== 'Aktuelles' ) {
				usersettings.cat_idx = 0;
				this.filter('Aktuelles');
				$$('ul.catSwitcher li a')[0].addClassName('active');
				$$('ul.catSwitcher li a')[1].removeClassName('active');
			}
		}.bind(this));
		Event.observe($$('ul.catSwitcher li a')[1], 'click', function (event) {
			Event.stop(event);
			if ( usersettings.tvo_cat_filter !== 'Sendungen' ) {
				usersettings.cat_idx = 0;
				this.filter('Sendungen');
				$$('ul.catSwitcher li a')[0].removeClassName('active');
				$$('ul.catSwitcher li a')[1].addClassName('active');
			}
		}.bind(this));
		
		if ( usersettings.tvo_cat_filter === 'Aktuelles' ) {
			$$('ul.catSwitcher li a')[0].addClassName('active');
			$$('ul.catSwitcher li a')[1].removeClassName('active');
		} else {
			$$('ul.catSwitcher li a')[0].removeClassName('active');
			$$('ul.catSwitcher li a')[1].addClassName('active');
		}
		
		Wlog('webtv.tvtouringcatsort:: init');
	};
	
	this.filter = function ()
	{
		var filter = arguments && arguments[0] ? get_filter(arguments[0]):false;
		if(filter===false) filter = filters[0];
		if(filter.label != this.cur_filter){
			this.cur_filter = filter;
			usersettings.tvo_cat_filter = filter.label;
			$('tvtouring-cat-nav-current').update(filter.label);
			webtv.ui.categories_scroll();
		}
	};
	
	this.nav_filter = function ()
	{
		var dir = arguments && arguments[0] && arguments[0] == "prev" ? -1:1, idx = get_filter_pos(this.cur_filter.label);
		idx += dir;
		idx = idx < 0 ? filters.length-1 : (idx > filters.length-1 ? 0:idx);
		usersettings.cat_idx = 0;
		this.filter(filters[idx].label);
	};
	
	get_filter = function (f)
	{
		var i;
		for(i=filters.length;i--;){
			if(filters[i].label.toLowerCase() == f.toLowerCase()) return filters[i];
		}
		return false;
	};
	get_filter_pos = function (f)
	{
		var i;
		for(i=filters.length;i--;){
			if(filters[i].label.toLowerCase() == f.toLowerCase()) return i;
		}
		return false;
	};
};
try{
	Webtv.prototype.tvtouringcatsort = new TVTouringCategoriesSort();
	Webtv_reg.push('tvtouringcatsort');
	Wlog('webtv.tvtouringcatsort:: bound');
}
catch(e){
	Wlog('webtv.tvtouringcatsort:: could not bind myself');
}

