protected int diff_commonOverlap(String text1, String text2)
	{
		// Cache the text lengths to prevent multiple calls.
		int text1_length = text1.length();
		int text2_length = text2.length();
		// Eliminate the null case.
		if(text1_length == 0 || text2_length == 0)
		{
			return 0;
		}
		// Truncate the longer string.
		if(text1_length > text2_length)
		{
			text1 = text1.substring(text1_length - text2_length);
		}
		else if(text1_length < text2_length)
		{
			text2 = text2.substring(0, text1_length);
		}
		int text_length = Math.min(text1_length, text2_length);
		// Quick check for the worst case.
		if(text1.equals(text2))
		{
			return text_length;
		}

		// Start by looking for a single character match
		// and increase length until no match is found.
		// Performance analysis: http://neil.fraser.name/news/2010/11/04/
		int best = 0;
		int length = 1;
		while(true)
		{
			String pattern = text1.substring(text_length - length);
			int found = text2.indexOf(pattern);
			if(found == -1)
			{
				return best;
			}
			length += found;
			if(found == 0
					|| text1.substring(text_length - length).equals(text2.substring(0, length)))
			{
				best = length;
				length++;
			}
		}
	}