
var ProjectFilter = Class.create();

ProjectFilter.prototype = {
	initialize: function()
	{
		this.renderHead();
		sendRequest("tag","list",this.loadCallback());
	},
	loadCallback: function()
	{
		var self = this;
		return {
			onSuccess: function (transport) {
				debug("tag-list:onSuccess:");
				var json = transport.responseText.evalJSON(true);
				var tags = json.tags;
				for (i=0; i<tags.size(); i++)
				{
					if (tags[i]['selected'])
						var currentTag = tags[i];
				}
				self.tags = tags;
				self.renderList();
				self.setCurrent(currentTag);
				self.close();
			}
		}
	},
	renderHead: function ()
	{
		debug("ProjectFilter.renderList:");

		var element = $('tag_filter');
		element.removeClassName("hideIfJs");
		var desc = element.descendants();
		desc.each(Element.remove)

		var div = document.createElement('DIV');
		div.innerHTML='<div id="tag_filter_arrow_div">&nbsp;</div><div id="tag_filter_current">...</div><br style="clear:left">';
		div.id = 'tag_filter_head';
		Element.extend(div);
		element.appendChild(div);

		Event.observe(div, "click", this.toggle.bindAsEventListener(this));
		div.addClassName("pointer");
		
	},
	renderList: function ()
	{
		debug("ProjectFilter.renderList:");

		var element = $('tag_filter');

		var div = document.createElement('DIV');
		div.id = 'tag_filter_pulldown';
		Element.extend(div);
		div.setStyle({position:"absolute"});
		div.hide();
		element.appendChild(div);
		
		element = div;

		for (i=0; i<this.tags.size(); i++)
		{
			var div = document.createElement('DIV');
			Element.addClassName(div,'tag_filter_separator');
			element.appendChild(div);

			var div = document.createElement('DIV');
			Element.extend(div);
			div.tag = this.tags[i];
			Element.addClassName(div,'tag_filter_tag');
			div.innerHTML=this.tags[i]['ta_name'];
			div.lang=this.tags[i]['lang'];
			element.appendChild(div);

			Event.observe(div, "click", this.select.bindAsEventListener(this));
			div.addClassName("pointer");
		}

		
	},
	setCurrent: function(currentTag)
	{
		// set name in taglist
		var element = $('tag_filter_current');
		this.currentTag=currentTag;
		if (!this.currentTag)
			this.currentTag=this.tags[0];
		element.innerHTML=this.currentTag['ta_name'];
	},
	switchToCurrent: function(currentTag)
	{
		if (currentPage == "project-list")
		{
			var showElements = Element.getElementsByClassName(document.body, 'ta_id'+this.currentTag['ta_id']);
			var hideElements = Element.getElementsBySelector(document.body, '.proj_list_left','.proj_list_right');
			hideElements.each ( 
				function(it) 
				{
					if (showElements.indexOf(it)==-1)
						Effect.Fade(it)
				}
			);
			showElements.each( 
				function(it) 
				{
						Effect.Appear(it);
				}
			);
		}
		else
		if (currentPage=="project-show")
		{
			sendRequest2("/rpc/project/list/?ta_id="+this.currentTag['ta_id'], this.loadlistCallback(), {});
		}
		sendRequest("tag","setcurrent", false, {ta_id:this.currentTag['ta_id']});
	},
	loadlistCallback: function()
	{
		var self = this;
		return {
			onSuccess: function (transport) {
				debug("project-load:onSuccess:");
				var json = transport.responseText.evalJSON(true);
				if (!json.error)
				{
					if (currentPage == "project-show")
					{
//						self.unregisterLinks();

						debug("h");
						debug(json);
						document.body.addClassName("project-list");

						var element = $('middle');
						debug(element)
						if (element)
							element.replace(json.middle);
						var element = $('project_head_title');
						if (element)
							element.replace("");
						var element = $('project_pager');
						if (element)
							element.replace(json.pager);
						var element = $('right')
						if (element)
							element.replace("");

						if (currentPage == "project-show")
						{
							document.body.removeClassName(currentPage);
							currentPage = "project-list";
						}

//						self.registerLinks();
					}
					else
					{
						error("ProjectLoad: only works from project-list & project-show page");
					}
				}
				else
				{
					ajax_error(json.error)
				}
/*
				debug("project-load:onSuccess:");
				var json = transport.responseText.evalJSON(true);
				if (!json.error)
				{
					if (currentPage == "project-show")
					{
						alert(1);
						document.body.addClassName("project-list");

						(json);
						var element = $('middle');
						if (element)
							element.replace(json.middle);
						alert(1);

						if (currentPage != self.page)
						{
							document.body.removeClassName("project-show");
							currentPage = "project-list";
						}

					}
					else
					{
						error("ProjectLoad: only works from project-list & project-show page");
					}
				}
				else
				{
					ajax_error(json.error)
				}
*/
			}
		}
	},
	select: function(e)
	{
		var element = Event.element(e);
		var tag = element.tag;
		this.setCurrent(tag);
		this.switchToCurrent(tag);
		this.close();
	},
	toggle: function()
	{
		var pulldown = $('tag_filter_pulldown');
		var visible = pulldown.visible();
		
		if (visible)
			this.close();
		else
			this.open();
	},
	open: function()
	{
		var pulldown = $('tag_filter_pulldown');
		var head = $('tag_filter_head');
		var headPos = Position.cumulativeOffset(head);
		var height = head.getHeight();
		var left = headPos[0];
		var top = headPos[1];
		pulldown.setStyle({left:left,top:(top+height+2)});
		
		head.addClassName('project-list-open');
		pulldown.show();
	},
	close: function()
	{
		var pulldown = $('tag_filter_pulldown');
		var head = $('tag_filter_head');
		head.removeClassName('project-list-open');
		pulldown.hide();
	}
	
};

var ThumbnailList = Class.create();

ThumbnailList.prototype = {
	initialize: function()
	{
		debug("ThumbnailLoader->init()");
		this.eventFunction = this.showImage.bindAsEventListener(this);
	},
	registerLinks: function()
	{
		registerEventByClassName('.gallery_thumbnail_a',this.eventFunction);
	},
	unregisterLinks: function()
	{
		unregisterEventByClassName('.gallery_thumbnail_a',this.eventFunction);
	},
	showImage: function(e)
	{
		var element = Event.element(e).parentNode;
		var targetHref=element.href.replace(/^([a-z]+:\/\/[\w\.\:]+\/)([a-z]{2,4}\/)(.*)$/i, "$1rpc/$3");
		sendRequest2(targetHref, this.loadCallback(), {pictureOnly:true});
		Event.stop(e);
	},
	loadCallback: function()
	{
		var self = this;
		return {
			onSuccess: function (transport) {
				debug("thumbnail-list:onSuccess:");
				var json = transport.responseText.evalJSON(true);
				if (!json.error)
				{
					// UPDATE
					// image
					var element = $('gallery_image');
					var element = Element.getElementsBySelector(element, 'img');
					element[0].src = json.projectpicture['link'];
					// thumbnails
					var elements = Element.getElementsByClassName($('gallery_thumbnails'), "gallery_thumbnail_a_selected")
					for (var i=0; i<elements.length; i++)
						elements[i].removeClassName('gallery_thumbnail_a_selected');
					var element = Element.getElementsByClassName($('gallery_thumbnails'), "pp_id"+json.projectpicture['pp_id']);
					if (element[0]) element[0].addClassName('gallery_thumbnail_a_selected');
					// description
					var element = $('gallery_description');
					element.innerHTML = json.projectpicture['pp_description'];
				}
				else
				{
					ajax_error(json.error)
				}
			}
		}
	}
};

var ProjectLoader = Class.create();

ProjectLoader.prototype = {
	initialize: function()
	{
		debug("ProjectLoader->init()");
		this.eventFunction = this.load.bindAsEventListener(this);
		this.page = "project-show";
		debug(this.eventFunction)
		this.thumbnailList = new ThumbnailList();
	},
	registerLinks: function()
	{
		registerEventByClassName('.'+this.page,this.eventFunction);
		this.thumbnailList.registerLinks();
	},
	unregisterLinks: function()
	{
		//this.eventFunction = this.load.bindAsEventListener(this);
		this.thumbnailList.unregisterLinks();
		unregisterEventByClassName('.'+this.page,this.eventFunction);
	},
	load: function(e)
	{
		if (currentPage==self.page || currentPage == "project-list")
		{
			var element = Event.element(e);
			if (element.match('img'))
				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 || currentPage == "project-list")
					{
						self.unregisterLinks();

						debug(self.page);
						document.body.addClassName(self.page);

						var element = $('middle');
						if (element)
							element.replace(json.middle);
						var element = $('project_head_title');
						if (element)
							element.replace('&nbsp;/ ' + json.projecttitle);
						var element = $('project_pager')
						if (element)
							element.replace(json.pager);
						var element = $('right')
						if (element)
							element.replace(json.right);

						if (currentPage != self.page)
						{
							document.body.removeClassName(currentPage);
							currentPage = self.page;
						}

						self.registerLinks();
					}
					else
					{
						error("ProjectLoad: only works from project-list & project-show page");
					}
				}
				else
				{
					ajax_error(json.error)
				}
			}
		}
	}
};

function init_project_list()
{
	var project_filter = new ProjectFilter();
}

