/* 
    Document   : break-words
    Created on : Feb 4, 2009, 5:30:42 PM
    Author     : Luka Stojanovic l.stojanovic@inbox-online.com
 */
var breakChar="\u200b"

function breakLongWords(elem, length) {
	visitChildren(elem, function(node) {
		if (node.nodeName == "#text") {
			node.nodeValue = softSplitLongWords(node.nodeValue, length);
		}
	});
}

function visitChildren(node, procedure) {
	var children = node.childNodes;
	procedure(node);
	
	for (var i = 0; i < children.length; i++) {
		visitChildren(children.item(i), procedure);
	}
}

/**
 *
 * @param text obican tekst - moze da isece html gde ne treba
 * @param length maksimalna duzina reci, ako je recimo 30, a rec ima 35 slova secice se na 18-om
 * @return tekst gde su u duge reci umetnuti &shy; simboli
 */
function softSplitLongWords(text, length) {
	var longWordPattern = new RegExp("\\S{" + length + ",}", "g");
	var replaced = text.replace(longWordPattern, function(word) {
		return splitString(word, length).join(breakChar);
	});
	return replaced;
}


/**
 * vraca niz stringova priblizno iste duzine, ne vece od maxLength
 */
function splitString(word, maxLength) {
	var parts = Math.ceil(word.length / maxLength);
	var partLength = Math.ceil(word.length / parts);

	var ret = [];

	for (var start = 0; start < word.length; start += partLength) {
		var end = (start + partLength > word.length) ? word.length : start + partLength;
		ret.push(word.slice(start, end));
	}
	return ret;
}

