(function($){
	
	$.fn.advBox = function(options) {  
		var options = $.extend(advBoxHandler.DEFAULTS.options, options);  
		
		return this.each(function() {  
			var obj = $(this);
			var box = advBoxHandler.getBox(obj);
			advBoxHandler.setStatus(obj, advBoxHandler.getBoxStatus(obj));
			
			if (box.containers.heading) {
				$(box.containers.heading).bind("click", function(){
					advBoxHandler.toggleStatus(obj);
				});
			}
			
			
		});  
	};
	
	
	var advBoxHandler = {
		DEFAULTS : {
			options : {
				toolsUrl : false
			},
			box : {
				target : false,
				status : false,
				containers : {
					heading : false,
					content : false
				}
			}
		},
		
		getBox : function(obj) {
			var box = this.DEFAULTS.box;
			
			// Heading:
			if ($(obj).find("h2").length != 0) box.containers.heading = $(obj).find("h2");
			else if ($(obj).find("h3").length != 0) box.containers.heading = $(obj).find("h3");
			else if ($(obj).find("h4").length != 0) box.containers.heading = $(obj).find("h4");
			
			// Content:
			if ($(obj).find(".box-content").length != 0) {
				box.containers.content = $(obj).find(".box-content");
			}
			
			return box;
		},
		
		close : function(obj, speed) {
			var box = advBoxHandler.getBox(obj);
			if (speed == "fast") $(box.containers.content).hide();
			else  $(box.containers.content).slideUp();
			$(obj)
				.removeClass("em-advbox-status-open")
				.addClass("em-advbox-status-closed");
		},
		
		open : function(obj, speed) {
			var box = advBoxHandler.getBox(obj);
			if (speed == "fast") $(box.containers.content).show();
			else  $(box.containers.content).slideDown();
			$(obj)
				.removeClass("em-advbox-status-closed")
				.addClass("em-advbox-status-open");
		},
		
		getBoxStatus : function(obj) {
			if (!obj) return false;
			var status = ($(obj).hasClass("em-advbox-status-closed")) ? "closed" : "open";
			return status;
		},
		
		toggleStatus : function(obj) {
			if (!obj) return false;
			var status = advBoxHandler.getBoxStatus(obj);
			if (status == "open") advBoxHandler.close(obj, false);
			else advBoxHandler.open(obj, false);
		},
		
		setStatus : function(obj, status) {
			if (!obj) return false;
			if (status == "open") advBoxHandler.open(obj, "fast");
			else advBoxHandler.close(obj, "fast");
		}
	};
	
	
})(jQuery);


