function SwitchFolding(cat_id) {
	var cat_items = $('cat_items_' + cat_id);
	var cat_icon = $('cat_icon_' + cat_id);

	if (!cat_items) return false;
	
	if (cat_items.is_folded == undefined) {
		cat_items.is_folded = !cat_items.visible();
	}	

	if (cat_items.is_folded) {
		cat_icon.src = "/images/cat_unfolded.gif";
	} else {
		cat_icon.src = "/images/cat_folded.gif";
	}
	cat_items.is_folded = !cat_items.is_folded;
	Effect.toggle(cat_items, 'blind', {duration: 0.2});
}

function toggle_latest(id) {
	var slide = $('latest_details_' + id);
	var img = $('latest_bottom_' + id);

	var img_up = slide.visible() ? '' : '_up';
	img.src = '/images/latest_pad_bottom' + img_up + '.gif';
	Effect.toggle(slide, 'slide', {duration:0.2});
}

function RefreshVotes(votes_id, votes_count) { 
    $(votes_id).innerHTML = votes_count; 
    new Effect.Appear(votes_id, {duration: 1}); 
}

function on(cell) { cell.style.border = '1px solid #cae7f7' }
function off(cell) { cell.style.border = '1px solid white'; }

function add_video_link(url, is_video) {
	var win_height = is_video ? 400 : 200;
	Modalbox.show(url, {width: 500, height: win_height, title: "Add link to the video"}); 
	return false;
}

function add_presentation(url) {
	Modalbox.show(url, {width: 500, height: 200, title: "Add presentation to the video"}); 
	return false;
}

function ShowEmbeddedPlayer(width, height, code, title) {
    if (!title) title = "Video Player"
    Modalbox.show(code, { width: width + 30, height: height + 40, title: title })
    return false;
}

var FeedManager = Class.create();
FeedManager.prototype = {
	initialize: function() {
		// Cache method pointers
		this.f_initialize_feed = this.initialize_feed.bind(this);
		this.f_view = this._view.bind(this);
		this.f_feed_checked = this._feed_checked.bind(this);
		this.f_feed_clicked = this._feed_clicked.bind(this);
		this.f_feed_removed = this._feed_removed.bind(this);
		this.f_all_clicked = this._all_clicked.bind(this);
		
		this.initialize_feeds();
		['all', 'all-categories', 'all-tags'].each(function(id){
			$(id).observe('click', this.f_all_clicked);
		}.bind(this));
		this.select('all');
	},

	/**********************************************
	/* Feeds processing
	/**********************************************/
	
	refresh: function() {
		this.select(this.selected);
	},
	
	select: function(id) {
		if (this.selected && $(this.selected)) $(this.selected).className = '';
		this.selected = id;
		$(id).className = 'selected';
		var params, matches;
		
		if (matches = id.match(/all-(.+)/))
			params = escape(matches[1]);
		else if (matches = id.match(/feed-(\d+)/))
			params = 'feed/' + matches[1];
		else
			params = '';
		new Ajax.Request('/feed_manager/refresh/' + params, {asynchronous:true, evalScripts:true});
	},
	
	// Attach events to tags on sidebar
	initialize_feeds: function() {
		$$('#feed_manager_sidebar .fm_feed').each(this.f_initialize_feed);
	},
	
	initialize_tag_feeds: function(source_type) {
		$$('#fm-tags .fm_feed').each(this.f_initialize_feed);
		if (!$(this.selected)) this.select('all-tags');
	},

	initialize_category_feeds: function(source_type) {
		$$('#fm-categories .fm_feed').each(this.f_initialize_feed);
		if (!$(this.selected)) this.select('all-categories');
	},
	
	// Attach event to specific tag on sidebar
	initialize_feed: function(feed_id) {
		var feed = $(feed_id);
		var checkbox = feed.getElementsByTagName('INPUT')[0];
		// Tag checkbox
		if (checkbox) {
			Event.observe(checkbox, 'click', this.f_feed_checked);
		}
		var links = feed.getElementsByTagName('A');
		// Tag link
		if (links[0]) {
			Event.observe(links[0], 'click', this.f_feed_clicked);
		}
		// Delete tag link
		if (links[1]) {
			Event.observe(links[1], 'click', this.f_feed_removed);
		}
	},
	
	initialize_videos: function() {
		var f_view = this.f_view;
		$$('#feeds_view .feed_short_title .title').each(function(el) {
		Event.observe(el, 'click', f_view);
	});
	},
	
	_view: function(event) {
		var el = Event.element(event || window.event);
		el = el.up('.feed_short_title');
		if (!el) return;
		var info = $$('#' + el.id + ' .feed_video_wrap')[0];
		if (info) {
			Effect.toggle(info, 'blind', {duration: 0.5});
		} else {
			var id = el.id.gsub(/video-(\d+)/, '#{1}');
			new Ajax.Request('/feed_manager/view/' + escape(id), {
				asynchronous:true,
				evalScripts:true
			});
		}
	},

	_feed_checked: function(event) {
		var feed_id = this._get_feed_id(event);
		var value = Event.element(event || window.event).checked ? '1' : 0;
		var update = this._get_update_param();
		new Ajax.Request('/feed_manager/toggle_feed/' + escape(feed_id) + '/' + value + update, {asynchronous:true, evalScripts:true});
	},

	_feed_clicked: function(event) {
		var feed = this._get_parent_element(event).id;
		this.select(feed);
		Event.stop(event);
		return false;
	},

	_feed_removed: function(event) {
		var feed = this._get_parent_element(event).id;
		var feed_id = this._get_feed_id(event);
		var update = this._get_update_param();
		new Ajax.Request('/feed_manager/delete_feed/' + escape(feed_id) + update, {asynchronous:true, evalScripts:true});
		Event.stop(event);
		return false;
	},
	
	_all_clicked: function(event) {
		var feed = this._get_parent_element(event, 'A').id;
		this.select(feed);
		Event.stop(event);
		return false;
	},
	
	/**********************************/
 
	_get_parent_element: function(event, element) {
		var div = Event.element(event || window.event);
		element = element || 'DIV';
		while (div && div.tagName != element) div = div.parentNode;
		return div;
	},
	
	_get_feed_id: function(event) {
		var feed = this._get_parent_element(event).id;
		return feed.gsub(/^feed-(\d+)$/, '#{1}');
	},
	
	_get_update_param: function() {
		var update = '';
		if (matches = this.selected.match(/all-(.+)/))
			update = '/update/' + escape(matches[1]);
		else if (matches = this.selected.match(/feed-(.+)/))
			update = '/update/feed/' + escape(matches[1]);
		else if (this.selected == 'all')
			update = '/update/all';
		return update;
	}
}

Ajax.Responders.register({
	onCreate: function() {
		var loading = $('btv_loading');
		if (!loading) {
			loading = Builder.node('div', {id: 'btv_loading'}, 'Loading...');
			document.body.appendChild(loading);
		}
		if (loading && Ajax.activeRequestCount == 1) loading.show();
	},
	onComplete: function() {
		var loading = $('btv_loading');
		if (loading && Ajax.activeRequestCount == 0) loading.hide();
	}
});

var RoundedCorners = {
	SUPPORTED_COLORS: ['green', 'blue', 'ddgray'],
	
	initialize: function() {
		var div;
		RoundedCorners.SUPPORTED_COLORS.each(function(color) {
			$$('.rounded-corners-' + color).each(function(el) {
				RoundedCorners._add_corners(el, color);
			});
		})
	},
	
	_add_corners: function(el, color) {
		var first = el.firstChild;
		div = document.createElement('DIV');
		div.className = color + '_corner_tl';
		el.insertBefore(div, first);
		div = document.createElement('DIV');
		div.className = color + '_corner_tr';
		el.insertBefore(div, first);
		
		div = document.createElement('DIV');
		div.className = 'bottom_filler';
		var div1 = document.createElement('DIV');
		div1.className = color + '_corner_bl';
		div.appendChild(div1);
		div1 = document.createElement('DIV');
		div1.className = color + '_corner_br';
		div.appendChild(div1);
		el.appendChild(div);
	}
}

Element.observe(window, 'load', RoundedCorners.initialize);

function fadeOutDelayedClear(el, delay) {
	delay = delay || 4000;
	window.setTimeout(function(){Effect.Fade(el, {afterFinish:function(){$(el).innerHTML = '';}})}, delay);
}
