(function($) {

	$.fn.defaults = {
		number: 2,
		padding_left: 2,
		padding_right: 2,
		lines2display: 5
	}

	$.fn.splitToCols = function(options) {
		$(this).hide();
	
		var opts = $.extend($.fn.defaults, options);
		
		var content = jQuery.trim($(this).html());
		
		content = content.replace('<br />', '<br>');
		content = content.replace('<br/>', '<br>');
		
		var content_array = content.split(" ");
		
		var line_height = $("#split").css("line-height");
		line_height = line_height.substr(0, $("#split").css("line-height").length - 2);
		
		var no_cols = opts.number;
		
		// find column width in percent
		col_width = Math.round(100 / no_cols) - opts.padding_left - opts.padding_right;
		
		// make sure there's nothing in #split div
		$("#split").html("");
				
		// find initial column length
		var col_lengths = [];
		
		for (i = 0; i < no_cols; i++) {
			var temp_content = "";
			for (j = 0; j < (content_array.length / no_cols); j++) {
				temp_content += content_array[j + (i * Math.ceil(content_array.length / no_cols))] + " ";
			}
			
			$("#split").append("<div style='float: left; width: "+col_width+"%; padding-left: "+opts.padding_left+"%; padding-right: "+opts.padding_right+"%'>" + temp_content + "</div>");
			col_lengths[i] =  $("#split div").eq(i).height();
		}
		
		// find final column length
		var max_height = expectedColHeight.apply(this, col_lengths);
		var max_lines = Math.ceil(max_height / line_height);
		
		
		
		if (max_lines <= opts.lines2display) {		
			// refill with content - using the final column length
			content_cursor = 0;
			
			for (i = 0; i < no_cols; i++) {
				$("#split div").eq(i).html("");
				
				
				var temp_content = "";
				for (j = content_cursor; j < content_array.length; j++) {
					if (content_array[j].length == 0) continue;
					if (j == cursor_global) {
						var temp_html = $("#split div").eq(i).html();
						$("#split div").eq(i).html("<span>" + temp_html + "</span>");
					}
					
					$("#split div").eq(i).append(content_array[j] + " ");
					
					if (($("#split div").eq(i).height() / line_height) > max_lines) {
						// remove the last word
						var upto = jQuery.trim($("#split div").eq(i).html()).lastIndexOf(" ");
						$("#split div").eq(i).html($("#split div").eq(i).html().substring(0, upto));
						content_cursor = j;
						
						break;
					}
				}
				
			}
		} else {
			// refill with content - using the final column length
			var content_cursor = 0;
			for (var i = 0; i < no_cols; i++) {
				$("#split div").eq(i).html("");
				
				for (var j = content_cursor; j < content_array.length; j++) {
					if (content_array[j].length == 0) continue;
					
					$("#split div").eq(i).append(content_array[j] + " ");
					
					if (($("#split div").eq(i).height() / line_height) > opts.lines2display) {
						// remove the last word
						var upto = jQuery.trim($("#split div").eq(i).html()).lastIndexOf(" ");
						
						$("#split div").eq(i).html($("#split div").eq(i).html().substring(0, upto));
						
						content_cursor = j;
						cursor_global = j;
						break;
					}
				}
			}
			
		}
	}

	function br(t) {
		if (t.indexOf("###") > -1) {
			return t.replace("###", "<br />");
		} else {
			return t;
		}
	}
	
	function expectedColHeight() {
		var sum = 0;
		for (i = 0; i < arguments.length; i++) {
			sum += arguments[i];
		}
		return sum / arguments.length;
	}

})(jQuery);
