var current_url = window.location.href;
var slash_point = current_url.indexOf('/',7);
var current_domain = current_url.substring(0,slash_point);
window.addEvent('domready',function()
	{
	//var tags_tips = $ES('.tags li .name','#post_sidebar');
	//new Tips(tag_tips,{});
	
	var links = $ES('a');
	for(i = 0; i < links.length; i++)
		{
		var this_link = $(links[i]);
		if(!this_link.href)
			{
			continue;
			}
		if(this_link.href.substring(0,slash_point) != current_domain || this_link.hasClass('pop') || this_link.hasClass('pop_no_icon'))
			{
			if(!this_link.hasClass('pop_no_icon'))
				{
				this_link.addClass('pop');
				}
			this_link.onclick = function(event)
				{
				var link = this.href;
				//alert(this.innerHTML);
				var pop = window.open(link);
				return false;
				};
			this_link.onclick = this_link.onclick.bind(this_link);
			}
		}
		
	var image_recover = function()
		{
		var slash_at = this.src.lastIndexOf('/');
		var prefix = this.src.substr(slash_at + 1,4);
		this.src = ''+current_domain+W_ROOT+'files/'+prefix+'default.png';
		};
	var post_images = $ES('.post img','.post_holder');
	post_images.forEach(function(image)
		{
		image.onerror = image_recover;
		});
		
	var post_containers = $ES('.post','.post_holder');
	if(post_containers && prefs.hover_posts)
		{
		new Tips(post_containers,{className: 'post_tip'});
		post_containers.forEach(function(post)
			{
			var id = post.id.substring(5);
			var tags = posts[id]._cached_tags.split(' ');
			for(i = 0; i < tags.length; i++)
				{
				if(!tags[i])
					{
					continue;
					}
				post.addClass('tag_'+tags[i]);
				}
			//rewrite |pretty in javascript
			post.$tmp.myTitle = tags.join(' ');
			var myText = '<ul>';
			myText += '<li><em>By:</em> '+posts[id].user.username+'</li>';
			myText += '<li><em>Rating:</em> '+posts[id].rating+'</li>';
			myText += '<li><em>Resolution:</em> '+posts[id].sx+'x'+posts[id].sy+'</li>';
			var count = (posts[id].post_view && posts[id].post_view.count) ? posts[id].post_view.count : 0;
			myText += '<li><em>Views:</em> '+count+'</li>';
			var score = (posts[id].score && posts[id].score.score) ? posts[id].score.score : 0;
			myText += '<li><em>Score:</em> '+score+'</li>';
			
			myText += '</ul>';
			post.$tmp.myText = myText; //undocumented variables are the best :(
			});
		}
	
	var main_id = $E('.post_full');
	if(main_id)
		{
		var main_image = $E('.post_file',main_id);
		var post_id = main_id.id.substr(5);
		var post_data = posts[post_id];
		}
	if(main_id && main_image && (post_data.sx > 680 || post_data.sy > 480) && prefs.resize_posts) //see models/post.php for sizes
		{
		var filepath = main_image.src.split('/');
		var filename = filepath.pop();
		var basepath = filepath.join('/');
		
		main_image.src = basepath + '/.ds.' + filename;
		var tmp_image = new Image();
		tmp_image.src = basepath + '/.ds.' + filename;
		
		var main_div = new Element('div');
		main_div.addClass('post_file');
		main_div.style.position = 'relative';
		main_div.injectBefore(main_image);
		main_image.addClass('zoomable');
		main_image.addClass('in');
		main_image.injectInside(main_div);
		main_image.state = 0;
		
		big_image = new Element('img');
		big_image.src = basepath + '/' + filename;
		big_image.width = post_data.sx;
		big_image.height = post_data.sy;
		big_image.addClass('post_file');
		big_image.addClass('zoomable');
		big_image.addClass('out');
		big_image.addClass('big');
		big_image.style.display = 'none';
		big_image.style.position = 'absolute';
		big_image.style.top = '0px';
		big_image.style.left = '0px';
		
		big_image.injectInside(main_div);
		
		var resize = function()
			{
			if(this.state)
				{
				this.state = 0;
				big_image.style.display = 'none';
				main_image.width = tmp_image.width;
				main_image.height = tmp_image.height;
				main_div.style.width = 'auto';
				main_div.style.height = 'auto';
				
				}
			else
				{
				this.state = 1;
				big_image.style.display = 'block';
				main_image.width = post_data.sx;
				main_image.height = post_data.sy;
				main_div.style.width = post_data.sx;
				main_div.style.height = post_data.sy;
				}
			};
		main_image.onclick = resize.bind(main_image);
		big_image.onclick = resize.bind(main_image);
		}
	//var first_inputs = $ES('.tags_entry input');
	var clone_change = function()
		{
		this.changes++;
		if(this.value == '' && this.changes)
			{
			this.remove();
			return;
			}
		var new_me = this.clone();
		new_me.value = '';
		new_me.changes = 0;
		new_me.onchange = this.onchange;
		new_me.injectAfter(this);
		new_me.focus();
		}
		
	var tag_related = $E('#tag_related_label');
	
	var tag_input = $E('#tag_container #tag');
	if(tag_input)
		{
		tag_input.onchange = function()
			{
			update_tags();
			}
		}
	
	if(tag_related)
		{
		tag_related.innerHTML = 'Related';
		tag_related.addClass('fake_link');
		tag_related.onclick = function()
			{
			var input = $E('#tag').value;
			var target = $E('#related_tags');
			var last;
			var ajax = new Ajax(current_domain + W_ROOT + 'tags/related_json/' + input,
				{
				method: 'get',
				onComplete: function(tags,xml)
					{
					//WHY ARE YOU SO RETARDED?
					tags = tags.substring(0,tags.length-2);
					tags = Json.evaluate(tags);
					if(!tags)
						{
						alert('There was a problem retrieving related posts.');
						destroy_ajax_icons();
						return;
						}
					tags.forEach(function(tag)
						{
						last = li;
						var li = new Element('li');
						li.className = 'tag_'+tag;
						li.innerHTML = tag;
						li.onclick = tag_label_onclick;
						if(last)
							{
							li.injectAfter(last);
							}
						else
							{
							li.injectInside(target);
							}
							
						//vvv http://blog.thinkature.com/index.php/2006/10/23/on-non-breaking-inline-elements-that-overflow-horizontally-and-cause-anger-and-strife/
						target.appendText(' ');
						li.addClass('fake_link');
						li.addClass('fake_link_tag');
						});
					update_tags();
					destroy_ajax_icons();
					},
				onFailure: function()
					{
					alert('There was a problem retrieving related posts.');
					destroy_ajax_icons();
					}
				});
			ajax.request();
			target.innerHTML = '';
			add_ajax_icon(target,'before');
			};
		}
		
	var tag_label_onclick = function()
		{
		var classes = this.className.split(' ');
		var tag = '';
		classes.forEach(function(clas)
			{
			if(clas.substring(0,4) == 'tag_')
				{
				tag = clas.substring(4);
				}
			});
		update_tag(tag);
		}
		
	var tag_labels = $ES('.tags_list li');
	tag_labels.forEach(function(tag)
		{
		tag.onclick = tag_label_onclick;
		tag.addClass('fake_link');
		tag.addClass('fake_link_tag');
		});
	
	if($ES('.scaffold_entry .tags_list li').length)
		{
		update_tags();
		}
		
	var function_edit_post = function(event)
		{
		event.preventDefault();
		var data = posts[post_id]; //exported in view.tpl
			add_ajax_overlay();
		//alert(data.id);
		};
		
	var function_delete_post = function(event)
		{
		event.preventDefault();
		if(confirm('Are you sure you want to delete this post?'))
			{
			var ajax = new Ajax(W_ROOT + 'posts/delete/' + post_id,
				{
				method: 'post',
				postBody: 'scaffold_commit=Yes',
				onComplete: function()
					{
					window.location = current_domain + W_ROOT + 'posts/list/';
					}
				});
			add_ajax_overlay();
			ajax.request();
			}
		};
		
	var task_edit_post = $E('#tasks #edit_post');
	var task_delete_post = $E('#tasks #delete_post');
	if(task_edit_post)
		{
		//task_edit_post.onclick = function_edit_post.bindWithEvent();
		}
	if(task_delete_post)
		{
		task_delete_post.onclick = function_delete_post.bindWithEvent();
		}
	});
	
	
function update_tags()
	{
	var tagsv = $E('#tag').value;
	var tags = $A(tagsv.split(' '));
	remove_selected($ES('.tags_list li'));
	tags.forEach(function(tag)
		{
		if(!tag)
			{
			return;
			}
		add_selected($ES('.tag_'+tag));
		});
	}
	
function update_tag(tag,dont_update)
	{
	var input = $E('#tag');
	if(!has_in_input(input,tag))
		{
			add_to_input(input,tag);
		add_selected($ES('.tag_'+tag));
		}
	else
		{
		remove_from_input(input,tag);
		remove_selected($ES('.tag_'+tag));
		}
	}

	
	
function add_to_input(input,value)
	{
	var tags = $A(input.value.split(' '));
	tags.include(value);
	input.value = tags.join(' ');
	}
	
function has_in_input(input,value)
	{
	var tags = $A(input.value.split(' '));
	return tags.contains(value);
	}
	
function remove_from_input(input,value)
	{
	var tags = $A(input.value.split(' '));
	tags.remove(value);
	input.value = tags.join(' ');
	}
	
function add_selected(elements)
	{
	elements.forEach(function(element)
		{
		element.addClass('selected');
		});
	}
	
function remove_selected(elements)
	{
	elements.forEach(function(element)
		{
		element.removeClass('selected');
		});
	}
	
function add_ajax_overlay()
	{
	var div1 = new Element('div');
	div1.addClass('ajax_overlay');
	div1.injectInside(document.body);
	
	var div2 = new Element('div');
	div2.addClass('ajax_icon');
	div2.addClass('ajax_icon_overlay');
	div2.injectInside(document.body);
	}
	
function remove_ajax_overlay()
	{
	var overlays = $ES('.ajax_overlay');
	overlays.forEach(function(overlay)
		{
		overlay.remove();
		});
	}
	
function add_ajax_icon(element,position,inherit)
	{
	if(!position)
		{
		position = 'inside';
		}
	var icon = new Element('div');
	if(inherit)
		{
		icon.className = element.className;
		}
	icon.addClass('ajax_icon');
	switch(position)
		{
		case 'inside':
			icon.injectInside(element);
		break;
		case 'before':
			icon.injectBefore(element);
		break;
		case 'after':
			icon.injectAfter(element);
		break;
		}
	}
	
function destroy_ajax_icons()
	{
	var icons = $ES('.ajax_icon');
	icons.forEach(function(icon)
		{
		icon.remove();
		});
	}
	
function pretty(text)
	{
	
	}