function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}


function sort_ul(elt, type) {
	var ul = document.getElementById(elt);
	var nodelist = ul.getElementsByTagName('li');
	
	var data = new Array();
	for (var i = 0, n = nodelist.length; i < n; i++) {
		var match = /(\d+)/i.exec(nodelist[i].id);
		if (!match) {
			alert('Error, all nodes need an id to be sorted.');
			break;
		}
		data[data.length] = new Array();
		data[data.length-1][0] = match[1];
		data[data.length-1][1] = document.getElementById(elt + '_td'+match[1]).firstChild.nodeValue;
		if (type == "num") {
			data[data.length-1][1] = parseFloat(data[data.length-1][1]);
		}
	}
	
	var sorted = false;
	var result = '';
	for (var i=1; i<data.length; i++) { 
		if (sorted == true) {
			break;
		} else {
			sorted = true; 
		}
		for (var j=0; j<data.length-i; j++) {
			//alert('comparing ' + data[j][1] + ' with ' + data[j+1][1] + "\n");
			result += 'comparing ' + data[j][1] + ' with ' + data[j+1][1] + "\n";
			if (data[j][1] > data[j+1][1]) {
				//nodelist[j].swapNode(nodelist[j+1]);
				insert_before(elt, elt + '_li' + data[j+1][0], elt + '_li' + data[j][0]);
				aux = data[j];
				data[j] = data[j+1];
				data[j+1] = aux;
				result += j + ' <-> ' + (j+1) + " \n";
				sorted = false;
			}
		}
	}
	//alert(result);
}

function remove_child(elt, id) {
	var list = document.getElementById(elt);
	var obj = document.getElementById(id);
	
	list.removeChild(obj);
}

function insert_before(list_id, element_id, dest_id) {
	var list = document.getElementById(list_id);
	var dest = document.getElementById(dest_id);
	var orig = document.getElementById(element_id);
	remove_child(list_id, element_id);
	list.insertBefore(orig, dest);
}

function get_order(elt) {
	var ul = document.getElementById(elt);
	var nodelist = ul.getElementsByTagName('li');
	
	var data = new Array();
	for (var i = 0, n = nodelist.length; i < n; i++) {
		var match = /(\d+)/i.exec(nodelist[i].id);
		if (!match) {
			alert('Error, all nodes need an id to be sorted.');
			break;
		}
		data[data.length] = match[1];
	}
	
	return data.join(';');
}

function get_pose_ids(elt) {
	var ul = document.getElementById(elt);
	var nodelist = ul.getElementsByTagName('li');
	
	var data = new Array();
	for (var i = 0, n = nodelist.length; i < n; i++) {
		var tbl = nodelist[i].getElementsByTagName('table');
		var match = /pose_(\d+)/i.exec(tbl[0].id);
		if (!match) {
			alert('Error, all nodes need an id to be sorted.');
			break;
		}
		data[data.length] = match[1];
	}
	
	return data.join(';');
}

function get_comments(elt,cls) {
	var ul = document.getElementById(elt);
	var nodelist = ul.getElementsByTagName('li');
	
	var data = new Array();
	for (var i = 0, n = nodelist.length; i < n; i++) {
		var match = /(\d+)/i.exec(nodelist[i].id);
		if (!match) {
			alert('Error, all nodes need an id to be sorted.');
			break;
		}
		data[data.length] = _comments(nodelist[i],cls);
	}
	
	return data.join('|~|');
}


function _comments (item,cls) {
	var trim = ToolMan.junkdrawer().trim;
	var identifier;
	
	var comment = getElementsByClass(cls,item);
	identifier = trim(comment[0].innerHTML)
	if (identifier != null && identifier.length > 0) return identifier;
	return '';
}


function _pose_id (item,cls) {
	var trim = ToolMan.junkdrawer().trim
	var identifier
	
	var comment = getElementsByClass(cls,item);
	identifier = trim(comment[0].innerHTML)
	if (identifier != null && identifier.length > 0) return identifier;
	
	return trim(item.innerHTML)
}


function get_count(elt) {
	var ul = document.getElementById(elt);
	var nodelist = ul.getElementsByTagName('li');
	
	var data = new Array();
	for (var i = 0, n = nodelist.length; i < n; i++) {
		var match = /(\d+)/i.exec(nodelist[i].id);
		if (!match) {
			alert('Error, all nodes need an id to be sorted.');
			break;
		}
		data[data.length] = match[1];
	}
	
	return data.length;
}


function exists_in_list(elt, id) {
	var ul = document.getElementById(elt);
	var nodelist = ul.getElementsByTagName('li');
	
	var data = new Array();
	for (var i = 0, n = nodelist.length; i < n; i++) {
		var match = /(\d+)/i.exec(nodelist[i].id);
		if (match[1] == id) {
			return 1;
		}
	}
	
	return 0;
}
