(function($) {
	_modal = {};
	modalCount = 0;
	
	$.openModal = function(arg) {
		$(".ocss_modal").remove();
		
		modalCount++;
		var modalId = modalCount;
		_modal[modalId] = arg;
		
		modal = $("<div><div class='controls'></div><div class='head'></div><div class='body-outer'><div class='body'></div></div><div class='foot'></div></div>");
		modal
			.addClass("ocss_modal")
			.addClass("modal-" + modalId)
			.attr("modal-id", modalId);
		
		$("body").append(modal);
		
		modalObj = $(".modal-" + modalId);
		
		$(modalObj)
			.append("<div class='title'>" + arg.title + "</div>");
			
		if(arg.content) $(".body", modalObj).append(arg.content);
		else $(".body", modalObj).append("<div class='loading'></div>");
			
		if(!arg.height) arg.height = 60;
		$(".body-outer", modalObj).height(arg.height-5);
		$(".body", modalObj).height(arg.height);
		
		
		modalObj.addModalControl("close", "Close", $.fn.closeModal);
		
		modalObj
			.css("marginTop", -modalObj.outerHeight()/2)
			.css("opacity", 0)
			.fadeTo("fast", 1);
	
		$(".row", modalObj).toggleActiveRow();			
		return modalObj;
	};
	
	$.fn.addModalControl = function(name, value, callback) {
		control = $("<a href=''></a>");
		control
			.addClass("modal-control")
			.addClass(name)
			.append(value)
			.click(callback);
			
		$(".controls", $(this)).append(control);
		
	}
	
	$.fn.appendToModal = function(row) {
		$(".body", $(this)).append(row);
		return this;
	};
	
	$.fn.modalLoaded = function(status) {
		if(status == true) $(".loading", $(this)).remove();
		
		arg = _modal[$(this).attr("modal-id")];
		if(arg.sortable) $(".body", $(this)).sortable({ handle: ".handle" });

		return this;
	}
	
	$.fn.closeModal = function() {
		if($(this) == $(window)) return false;
	
		if($(this).hasClass("ocss_modal")) $(this).fadeTo("fast", 0, function() { $(this).remove(); });
		else $(this).parent().closeModal();
		
		return false;
		
	}
	
	$.fn.toggleActiveRow = function() {
		a = $("<a></a>");
		a
			.attr("href", "#")
			.addClass("toggle")
			.click(function() {
				id = $(this).closest(".ocss_modal").attr("modal-id");
				type = _modal[id].type;
				
				if(type == "radio") $(this).parent().siblings().removeClass("active");
				$(this).parent().toggleClass("active");
				
				return false;
			});
			
		$(this).append(a);
		return this;
	}
	
	$.fn.addRow = function(att, text, selected, inactive) {
		arg = _modal[$(this).attr("modal-id")];


		row = $("<div></div>");
		row
			.addClass("row")
			.text(text);
			
		if(arg.sortable) {
			handle = $("<a></a>");
			handle
				.attr("href", "#")
				.addClass("handle");
				
			row.append(handle);
		}
			
		for(var i in att) row.attr(i, att[i]);
		
		if(selected && inactive) row.addClass("pre");
		else {
			if(selected) row.addClass("active");
			row.toggleActiveRow();
		}
		
		$(this).appendToModal(row);
		
		return this;
	};

})(jQuery);
