var NewsDisplay = Class.create();

NewsDisplay.prototype = {
	initialize: function()
	{
		debug("NewsDisplay->init()");
		this.eventFunction = this.load.bindAsEventListener(this);
		this.page = "news-show";
	},
	registerLinks: function()
	{
		registerEventByClassName('.'+this.page, this.eventFunction);
	},
	unregisterLinks: function()
	{
		unregisterEventByClassName('.'+this.page, this.eventFunction);
	},
	toggle: function(element)
	{
		var image = Element.getElementsBySelector(element, ".news_list_arrow_img img")
		if (!element.hasClassName("close"))
		{
			element.removeClassName("open");
			element.addClassName("close");
			image[0].src = "/view/img/icon_news_open.gif";
		}
		else
		{
			element.addClassName("open");
			element.removeClassName("close");
			image[0].src = "/view/img/icon_news_close.gif";
		}

		element = Element.getElementsByClassName(element, "news_list_entry_body");
		new Effect.toggle(element[0],'blind', {queue:'end'});
	},
	load: function(e)
	{
		var element = Event.element(e);
		if (!element.match('a'))
			element = element.parentNode;

		// extract news id
		if (currentPage.startsWith("news"))
			var n_id = element.href.replace(/^.*\/([0-9]+)\/[0-9]+\/$/i, "$1");
		else
			var n_id = element.href.replace(/^.*\/([0-9]+)\/$/i, "$1");

		var tmp = $('news_list')
		var currentElements = Element.getElementsByClassName(tmp,'open');
		var element = $('news_list_entry'+n_id);

		// close all open news
		var self = this;
		if(!element.hasClassName('open')) currentElements.each(function(e) { if(e!=element) self.toggle(e) });

		// open selected news
		this.toggle(element);

		Event.stop(e);
	}
};

var NewsLoader = Class.create();

NewsLoader.prototype = {
	initialize: function()
	{
		debug("NewsLoader->init()");
		this.eventFunction = this.load.bindAsEventListener(this);
		this.page = "news-list";
		this.newsDisplay = new NewsDisplay();
	},
	registerLinks: function()
	{
		registerEventByClassName('.'+this.page, this.eventFunction);
		this.newsDisplay.registerLinks();
		
	},
	unregisterLinks: function()
	{
		unregisterEventByClassName('.'+this.page, this.eventFunction);
		this.newsDisplay.unregisterLinks();
	},
	load: function(e)
	{
		var element = Event.element(e);
		if (!element.match('a'))
			element = element.parentNode;
		var targetHref=element.href.replace(/^([a-z]+:\/\/[\w\.\:]+\/)([a-z]{2,4}\/)(.*)$/i, "$1rpc/$3");
		sendRequest2(targetHref, this.loadCallback());
		Event.stop(e);
	},
	loadCallback: function()
	{
		var self = this;
		return {
			onSuccess: function (transport) {
				debug("project-load:onSuccess:");
				var json = transport.responseText.evalJSON(true);
				if (!json.error)
				{
					if (currentPage==self.page)
					{
						self.unregisterLinks();

						document.body.addClassName(self.page);

							var oldelement = Element.getElementsByClassName(document.body, 'news_list_checked');

							oldelement[0].removeClassName("news_list_checked");
							oldelement[0].addClassName("news_list_unchecked");
							oldelement = Element.getElementsBySelector(oldelement[0], "img");
							oldelement[0].src="/view/img/news_filter_unchecked.gif";
							var newelement= Element.getElementsByClassName(document.body, 'news_list_cat'+json.ca_id);
							newelement[0].removeClassName("news_list_unchecked");
							newelement[0].addClassName("news_list_checked");debug("news_list_checked");
							newelement = Element.getElementsBySelector(newelement[0], "img");
							newelement[0].src="/view/img/news_filter_checked.gif";

						var element = $('news_list_fader');
						new Effect.Fade(element, {queue: 'end',
							afterFinish: function(effect) 
							{
								if (element)
									element.innerHTML = json.content;
								new Effect.Appear(element, {queue: 'end'})
								self.registerLinks();
							}
						});
					}
					else
					{
						error("Newsloader: only works from news-list");
					}
				}
				else
				{
					ajax_error(json.error)
				}
			}
		}
	}
};

