function reset() {
	var personas = $('.personas-list div');

	for (var r = 0; r < personas.length; r++) {
		dehighlight(personas[r]);
		personas[r].style.display = '';
	}
}

function filterPersonas(input) {
	var personas = $('.personas-list div');
	
	var terms = input.value.toLowerCase().split(' ');

	for (var r = 0; r < personas.length; r++) {
		dehighlight(personas[r]);
		
		var display = '';
		for (var i = 0; i < terms.length; i++) {
			if (personas[r].innerHTML.replace(/<[^>]+>/g, '').toLowerCase().indexOf(terms[i]) < 0) {
				display = 'none';
			} else {
				if (terms[i].length) highlight(terms[i], personas[r]);
			}
			personas[r].style.display = display;
		}
	}
}

function dehighlight(container) {
	for (var i = 0; i < container.childNodes.length; i++) {
		var node = container.childNodes[i];

		if (node.attributes && node.attributes['class'] && node.attributes['class'].value == 'highlighted') {
			node.parentNode.parentNode.replaceChild(
					document.createTextNode(
						node.parentNode.innerHTML.replace(/<[^>]+>/g, '').replace('&amp;', '&')),
					node.parentNode);
			
			return;
		} else if (node.nodeType != 3) {
			dehighlight(node);
		}
	}
}

function highlight(term, container) {
	for (var i = 0; i < container.childNodes.length; i++) {
		var node = container.childNodes[i];

		if (node.nodeType == 3) {
			var data = node.data.replace('&amp;', '&');
			var data_low = data.toLowerCase();
			if (data_low.indexOf(term) >= 0) {
				var new_node = document.createElement('span');

				node.parentNode.replaceChild(new_node, node);

				var result;
				while ((result = data_low.indexOf(term)) != -1) {
					new_node.appendChild(document.createTextNode(data.substr(0, result)));
					new_node.appendChild(create_node(document.createTextNode(data.substr(result, term.length))));
					data = data.substr(result + term.length);
					data_low = data_low.substr(result + term.length);
				}
				new_node.appendChild(document.createTextNode(data));
			}
		} else {
			highlight(term, node);
		}
	}
}

function create_node(child) {
	var node = document.createElement('span');
	node.setAttribute('class', 'highlighted');
	node.attributes['class'].value = 'highlighted';
	node.appendChild(child);
	
	return node;
}
