var SYMP =
{
	autosizeHelper : null,
	textareasAutosize : function(el)
	{
		if(SYMP.autosizeHelper == null)
		{
			$('body', document).append('<div id="autosizeHelper" style="position:absolute; top: 0; left: 0; visibility:hidden;"></div>');	
			SYMP.autosizeHelper = $('#autosizeHelper');
		}
		
		if($(el).data('initial_height') == undefined)
		{
			$(el).data('initial_height', $(el).height());
		}
		
		$(el)
			.keypress(SYMP.textareasAutosizeUpdate)
			.keyup(SYMP.textareasAutosizeUpdate);
	},
	
	textareasAutosizeUpdate : function()
	{
		var text = this.value;
		if(!text.length) return;
		
		var style = {
			fontFamily: jQuery(this).css('fontFamily')||'',
			fontSize: jQuery(this).css('fontSize')||'',
			fontWeight: jQuery(this).css('fontWeight')||'',
			fontStyle: jQuery(this).css('fontStyle')||'',
			fontStretch: jQuery(this).css('fontStretch')||'',
			fontVariant: jQuery(this).css('fontVariant')||'',
			letterSpacing: jQuery(this).css('letterSpacing')||'',
			wordSpacing: jQuery(this).css('wordSpacing')||''
		};
		SYMP.autosizeHelper.css(style);
		
		var entities = {'&':'&amp;', '<':'&lt;', '>':'&gt;', '"':'&quot;'};
		var html = text;
		for(var i in entities) { html = html.replace(new RegExp(i,'g'), entities[i]); }
		
		html = html.replace(new RegExp("\\n", 'g'), '<br />');
		SYMP.autosizeHelper.html(html);
		var height = SYMP.autosizeHelper.get(0).offsetHeight;
		var wheight = $(window).height();
		var theight = $(this).height();
		if(
			( (height > theight) && (height < wheight) ) ||
			( (height < theight) && (height > $(this).data('initial_height')) )
		)
		{
			$(this).height(height);
		}
	},
	
	insertAtCursor	: function(field, text)
	{
		// from http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript/
		var sel;
		
		//IE support
		if (document.selection)
		{
			field.focus();
			sel = document.selection.createRange();
			sel.text = text;
		}
		//MOZILLA/NETSCAPE support
		else if (field.selectionStart || field.selectionStart == '0')
		{
			var startPos = field.selectionStart;
			var endPos = field.selectionEnd;
			field.value = field.value.substring(0, startPos)
				+ text
				+ field.value.substring(endPos, field.value.length);
				
			field.selectionStart = startPos;
			field.selectionEnd = endPos + text.length;
			field.focus();
		}
		else
		{
			field.value += text;
		}
	},
	
	unfoldPager : function()
	{
		var t = $(this);
		var p = t.parent();

		var num_pages = p.find('input[type=hidden][name=pages]').attr('value') * 1;
		var base_path = p.find('input[type=hidden][name=path]').attr('value');
		var trail_slash = p.find('input[type=hidden][name=slash]').attr('value');
		var selected = p.find('.selected').text() * 1;
		
		var full_nav = '<div class="pager unfolded">';
		for(var i = 1; i <= num_pages; i++)
		{
			if(i==selected)
			{
				full_nav += '<span class="selected">' + i + '</span>';
			}
			else
			{
				full_nav += '<span><a href="' + base_path + i + trail_slash + '">' + i + '</a></span>'; 
			}
			full_nav += ' ';
		}
		full_nav += '</div>';
		t.parent().replaceWith(full_nav);
	}
};

SYMP.ui = 
{
	fx_speed		:	500,
	makeCollapsible	:	function (el_class)
	{
		$('.' + el_class + ' > h3').click(function()
		{
			$(this).next().slideToggle(SYMP.ui.fx_speed);
			$(this).toggleClass('collapsed');
		});
	},
	removeDefaults	:	function(jsearch)
	{
		$(jsearch).click(function() {
			if($(this).attr('value') == '...')
			{
				$(this).attr('value', '');
			}
		});
		$(jsearch).each(function(){
			var v = $(this).attr('value');
			if(v == '') { $(this).attr('value', '...'); }
		});
	}
}

SYMP.oneliner =
{
	refresh_timer	:	null,
	refresh			:	function()
	{
		$.get("/ajax/oneliner_get/", function(data) {
			$('#oneliner_posts').replaceWith(data);
		});
	},
	setup_form		:	function()
	{
		$('#oneliner_form').submit(function() {
			var a = $(this).attr('action');
			var t = $(this).find('input[type=text]');
			var n = t.attr('name');
			var m = t.attr('value');
			var o = {}; o[n] = m;
			
			$.post(a, o, function(data) {
				$('#oneliner_form').remove();
				$('#oneliner_posts').replaceWith(data);
				SYMP.ui.removeDefaults('#oneliner_form input[type=text]');
				SYMP.oneliner.setup_form();
			});
			
			return false;
		});
	}
}

$(document).ready(function()
{
	$('.pager select').change(function() {
		window.location.href = $(this).val();
	});
	
	$('textarea').each(function(){ SYMP.textareasAutosize($(this)); });
	
	SYMP.ui.makeCollapsible('help_textile');
	SYMP.ui.removeDefaults('#oneliner_form input[type=text],#site_search_form input[type=text]');
	$('#site_search_form form').submit(function(){
		var f = $('#site_search_form #field');
		var v = f.attr('value');
		if(v == '' || v == '...') { f.attr('value', '...'); f.blur(); return false; }
	});
	
	// highlight-able cells in tables
	$('.forum_topics tr').hover(
		function()
		{
			$(this).find('td').addClass('highlighted');
		},
		function()
		{
			$(this).find('td').removeClass('highlighted');
		}
	).click(
		function()
		{
			window.location.href = $(this).find('h2 a').attr('href');
		}
	);
	
	// hide/show post metadata in forums
	$('.forum_posts .posts .metadata').css('opacity', 0);
	$('.forum_posts .posts li').hover(
		function()
		{
			$(this).find('.metadata').css('opacity', 1);
		},
		function()
		{
			$(this).find('.metadata').css('opacity', 0);
		}
	);
	
	// convert '...' into clickable links in pagers
	$('.pager .more').addClass('clickable').click(SYMP.unfoldPager);
	
	// oneliner auto refresh + ajaxified form
	SYMP.oneliner.refresh_timer = setInterval("SYMP.oneliner.refresh()", 30000);
	SYMP.oneliner.setup_form();
	
});

