/*
 * toggle icons plugin
 */	

(function($) {
	
	/*
	 * Bind all toggle icons on body load
	 */
	
	$(document).ready(function() {
		
		var iconSuffix = $.fn.iconToggle.defaultSettings["iconSuffix"];
		
		// Perform action on all toggleIcons
		$("img[id$=" + iconSuffix + "]").each(function() {
			
			var mainId = this.id.replace(iconSuffix, "");
	
			$(this).css("cursor", "pointer");
			if(this.ondblclick) {
				$(this).data("changeEvent", this.ondblclick);
				this.ondblclick = function() {};
			}
			$(this).click(function(event) {
				$("#" + mainId).iconToggle();
				event.stopPropagation();
			});
			
		});
		
	});
	
	
	/*
	 * The toggle function
	 */
	
	$.fn.iconToggle = function(options, effectIn, effectOut, callback) {
	
		if(!options)
			var options = {};
		if(!effectIn)
			var effectIn = $.fn.iconToggle.defaultEffectIn; 
		if(!effectOut)
			var effectOut = $.fn.iconToggle.defaultEffectOut;
	
		$.extend(options, $.fn.iconToggle.defaultSettings);
		var myCallback = callback;
		
		return this.each(function() {
			
			var obj = $(this);
			
			if(obj.data("animated"))
				return;
			
			if(options["toggleIcon"] == null)
				var objIcon = $("#" + obj.attr("id") + options["iconSuffix"]);
			else
				var objIcon = $(options["toggleIcon"]);
				
			var callback = function() {
				$(this).data("animated", false);
				if(!objIcon.hasClass("noChangeOnToggle")) {
					if($(this).is(":visible")) {
						objIcon.attr("src", options["upIcon"]);
						objIcon.attr("alt", options["upText"]);
					}
					else {
						objIcon.attr("src", options["downIcon"]);
						objIcon.attr("alt", options["downText"]);
					}
				}
				if($.isFunction(objIcon.data("changeEvent")))
					objIcon.each(function() { objIcon.data("changeEvent")(); });
				
				if($.isFunction(myCallback))
					$(this).each(myCallback);
			};
			
			if(obj.is(":visible") && options["force"] != "show")
				obj.ctdHide(effectOut[0], effectOut[2], effectOut[1], callback).data("animated", true);
			else if(options["force"] != "hide")
				obj.ctdShow(effectIn[0], effectIn[2], effectIn[1], callback).data("animated", true);
				
			return obj;
	
		});
		
	}
	
	
	/*
	 * Settings
	 */
	
	$.fn.iconToggle.defaultSettings = {
		"downIcon": "down.png",
		"downText": "Fold out",
		"upIcon": "up.png",
		"upText": "Fold in",
		"iconSuffix": "_ti",
		"force": null
	};
	
	$.fn.iconToggle.defaultEffectIn = ['blind', 500, {"direction": "up"}];
	
	$.fn.iconToggle.defaultEffectOut = ['blind', 500, {"direction": "up"}];

})(jQuery);

