$(document).ready(function() {
	var ts_text			= new Array
	ts_text["list"]		= "List";
	ts_text["cloud"]	= "Cloud";
	ts_text["popular"]	= "Popular";
	ts_text["alpha"]	= "Alphabetical";
	ts_text["current"]	= ts_text["list"];

	$(".tagcloud-wrapper").each(function(){
		var wrapper = $(this)
		$(wrapper).prepend('<div class="options has-layout"></div>')
		$(wrapper).find(".options").hide()
	});
	$(".tagcloud-wrapper.sortable").each(function(){
		var wrapper = $(this)
		var h2 = $(wrapper).find("h2:first").remove()
		var title = null
		if(h2.text() != "") {
			title = '<h2>'+h2.text()+'</h2>'
		}
		var options = $(wrapper).find(".options")
		options.prepend('<a href="javascript:void(0)" class="switcher textlink" title="Click to change appearance">Change appearance</a> <span class="text-small">|</span> <a href="javascript:void(0)" class="sorter textlink" title="Click to sort">Popular</a>')
		options.show()
		var tagcloud_switcher = $(title+options)

		if( $($(wrapper).find("ul")).attr("class").search(/.list/i)!=-1 ){
			ts_text["current"] = ts_text["cloud"]
		}
		$(this).prepend(tagcloud_switcher).find(".switcher").text(ts_text["current"])

		$(wrapper.find(".options .switcher")).click(function(){
			var cloud = $(wrapper).find("ul")
			$(cloud).hide().toggleClass("list").fadeIn()
			$(this).text( $(cloud).attr("class").search(/.list/i)!=-1 ? ts_text["cloud"] : ts_text["list"])
			return false
		})

		$(wrapper.find(".options .sorter")).toggle(
			function(){ $(wrapper).find("ul>li").tsort("span.count", {order:"desc"}); $(this).text(ts_text["alpha"]) },	
			function(){ $(wrapper).find("ul>li").tsort({order:"asc"}); $(this).text(ts_text["popular"]) }
		)
	});
	$(".tagcloud-wrapper.collapsible").each(function(){
		var wrapper = $(this)
		var options = $(wrapper).find(".options")
		var sorter = $(wrapper).find(".options .sorter")
		var cloud = $(wrapper).find(".tagcloud-panel")
		var separator = ""
		if(sorter.text()!=""){
			separator = ' <span class="text-small">|</span> '
		}
		options.append(separator+'<a href="javascript:void(0)" class="collapser textlink">'+($(cloud).css("display").search(/block/i)!=-1 ? "Hide" : "Show")+'</a>')
		options.show()

		$(wrapper.find(".options .collapser")).click(function(){
			$(cloud).toggle()
			$(this).text( $(cloud).css("display").search(/block/i)!=-1 ? "Hide" : "Show")
			return false
		})
	});

	var delay = (function(){
		var timer = 0;
		return function(callback, ms){
			clearTimeout (timer);
			timer = setTimeout(callback, ms);
		};
	})();

	// Basket
	$("#basket-help").hide();
	$("#basket-help-link").click(function(){
		$("#basket-help").toggle("blind")
		return false
	});
	$(".basket-table input").keyup(function(){
		delay(function(){
			$("#basket-flash").show().effect("bounce", {times:4}, 300)
		},800)
	});

	// Outline scrubber
	$("a, button").live("focus", function(){
		this.blur();
	});
	
	// External links
	$("a[rel=external]").attr("target", "blank");

	// Placeholder
	$("input, textarea").placeholder();

})

;(function($) {
	$.fn.placeholder = function() {
		// Quit if there’s support for HTML5 placeholder
		if (this[0] && 'placeholder' in document.createElement('input')) {
			// Allow chaining
			return this
		}

		// Made this a function, because we actually need it on two different occasions:
		// 1) Once when the DOM is loaded;
		// 2) Once every time the focusout() is triggered.
		function setPlaceholder($elem) {
			if ($elem.val() === '' || $elem.val() === $elem.attr('placeholder')) {
				$elem.addClass('placeholder').val($elem.attr('placeholder'))
			} else {
				$elem.removeClass('placeholder')
			}
		}

		// Look for forms with inputs and/or textareas with a placeholder attribute in them
		$('form:has([placeholder])').submit(function() {
			// Clear the placeholder values so they don’t get submitted
			$('.placeholder', this).val('')
		})
		
		// Clear placeholder values upon page reload
		$(window).unload(function() {
			$('.placeholder').val('');
		})

		// Yes, .each() — in case .placeholder() is called on several elements, which is very likely, e.g. $('input').placeholder();
		return this.each(function() {
			var $input = $(this);
			// Quit if the current element is a password input, or not an input/textarea at all
			if ($input.is(':password') || !$input.is(':input')) {
				return;
			};
			setPlaceholder($input);
			$input.focus(function() {
				if ($input.val() === $input.attr('placeholder')) {
	 				$input.val('').removeClass('placeholder');
				};
			}).blur(function() {
				setPlaceholder($input);
			});
		});
	};
})(jQuery);