/*----------------------------------------------
	
	common.js
	(c) 2008-2010 Stefan Heule

----------------------------------------------*/


/* --------------------------------------------------------------
add/remove classes from elements
-------------------------------------------------------------- */
function addClassName(el, sClassName) {
	var s = el.className;
	var p = s.split(" ");
	var l = p.length;
	for (var i = 0; i < l; i++) {
		if (p[i] == sClassName)
			return;
	}
	p[p.length] = sClassName;
	el.className = p.join(" ").replace( /(^\s+)|(\s+$)/g, "" );
}
function removeClassName(el, sClassName) {
	var s = el.className;
	var p = s.split(" ");
	var np = [];
	var l = p.length;
	var j = 0;
	for (var i = 0; i < l; i++) {
		if (p[i] != sClassName)
			np[j++] = p[i];
	}
	el.className = np.join(" ").replace( /(^\s+)|(\s+$)/g, "" );
}


/* --------------------------------------------------------------
show/hide elements
-------------------------------------------------------------- */
function hide_element(el) {
	if (el != null) el.style.display = 'none';
	return false;
}
function show_element(el) {
	if (el != null) el.style.display = 'block';
	return false;
}
function hide_element_by_id(id) {
	var el = document.getElementById(id);
	if (el != null) el.style.display = 'none';
	return false;
}
function show_element_by_id(id) {
	var el = document.getElementById(id);
	if (el != null) el.style.display = 'block';
	return false;
}


/* --------------------------------------------------------------
'show help' functions
-------------------------------------------------------------- */
function help(id, only_if_needed) {
	if (only_if_needed === true && helparr[id] === false) {
		return;
	}
	show_element_by_id(id);

	document.onmouseup = function(event) {
		// only when clicking on the outside of the help
		if (!event) {
			if(window.event) {
				//Internet Explorer
				event = window.event;
		    } else {
		    	//total failure, we have no way of referencing the event
		    	return;
		    }
		}
		var target = event.target || event.srcElement;
		if (descendant(document.getElementById(id), target)) return;
		
		hide_element_by_id(id);
		document.onmouseup = null;
	};
}
function descendant(ancestor, testobj) {
    if (ancestor == testobj) {
        return true;
    }
    else {
        var kids = ancestor.childNodes;
        for(var i = 0; i < kids.length; i++) {
        	if (descendant(kids[i], testobj) === true) return true;
        }
    }
    return false;
}
var helparr = [];
function starthelp(id) {
	helparr[id] = true;
	setTimeout('help("'+id+'",true)', 750);
}
function stophelp(id) {
	helparr[id] = false;
}


