/**
 * TODO document
 */
function ajaxifyCollapsible() {
	console.log("ajaxify Collapsible...");

	$(".Collapsible").not(".ajaxed").each(function() {		
		var collapsibleElement = $(this);

		collapsibleElement.addClass("ajaxed");

		var originalHeight = collapsibleElement.outerHeight();

		var maxHeight = collapsibleElement.attr("maxheight");

		var borderElement;

		var expander;

		if(collapsibleElement.outerHeight() > maxHeight) {
			function expand() {
				expander.addClass("expanded");

				collapsibleElement.stop().animate({'height' : originalHeight}, 500); 

				borderElement.fadeTo(500, 0);
			};

			function collapse() {
				expander.removeClass("expanded");

				collapsibleElement.stop().animate({'height' : maxHeight}, 500); 

				borderElement.fadeTo(500, 1);
			};

			function toggle() {
				if(expander.hasClass("expanded")) {
					collapse();
				} else {
					expand();
				}

				return false;
			};			
			
			collapsibleElement
				.append(
					borderElement = $('<span class="border"></span>')
				)
				.append(
					expander = $('<span class="expander"></span>')
						.click(toggle)
				)
				.height(maxHeight);

			collapsibleElement.dblclick(toggle);
		}

		if(window.collapsibleWidgetExpandPrompt !== undefined) {
			expander.text(window.collapsibleWidgetExpandPrompt);
		}
	});

	console.log("... ajaxify Collapsible done.");
};

if(window.ajaxifyFunctions !== undefined) {
	console.log("registering ajaxify Collapsible...");
	ajaxifyFunctions.push(ajaxifyCollapsible);
}	

$(ajaxifyCollapsible);

