/**
 * selects or deselects all elements with the given name
 * if any deselected elements are found, selects all, else deselect all
 * drop-in replacement for selectAll, can take "this" as the checking checkbox
 */
function selectAlt(sname, o)
{
	boxes = document.getElementsByName(sname);
	found = false;
	for(i=0; i<boxes.length && !found; i++) {
		if(boxes[i].checked==false)
			found = true;
	}
	for(i=0; i<boxes.length; i++) {
		boxes[i].checked = found;
	}
	if(o) o.checked = found;
}


function shCategoryTree(id,imgid)
{
	el = document.getElementById(id);
	if (imgid)
		img = document.getElementById(imgid);


	if (el.style.display=='none') {
		if (img)
			img.src='images/icons/matching_minus.gif';
		showtree(id);
	} else {
		if (img)
			img.src='images/icons/matching_plus.gif';
		hidetree(id);
	}
}


function markEntries ( name, marks )
{
	obj = document.getElementById(name);
	if (obj===undefined)
	{
		return;
	}
	for (i=0; i<marks.length; i++)
	{
		for (k=0; k<obj.length; k++)
		{
			if (obj[k].value == marks[i])
				obj[k].selected = true;
		}
	}
}

/**
 * Used for the advanced search category dropdowns
 *
 */
function changeCategories ( object, treeid )
{
	pa = document.getElementById("selectorHome_" + treeid);
	tmp = object.id.split('_');
	dd = parseInt(tmp[2]); // which dropdown?
	//console.log(dd);

	// hide all other dropdowns
	c = 1 + dd;
	k = document.getElementById("catselector_" + treeid + "_" + c)
	while(k)
	{
		//console.log(k);
		pa.removeChild(k)
		c++;
		k = document.getElementById("catselector_" + treeid + "_" + c)
	}

	// create a new selectbox
	options = children[treeid][object.value];
	if(options != "" && options != undefined)
	{
		var nextdd  = document.createElement('select');
		nextdd.id   = "catselector_" + treeid + "_" + (1 + dd);
		nextdd.name = "catselectors[" + treeid + "][" + dd + "]";
		nextdd.onchange      = new Function("changeCategories(this, " + treeid + ")");
		nextdd.style.display = "block";
		nextdd.style.width   = "475px";
		var option  = new Option(emptydropdownname, "");
		nextdd[0]   = option;
		for(c=0; c<options.length; c++)
		{
			if(typeof(names[treeid][options[c]]) != "undefined")
			{
				option                = new Option(names[treeid][options[c]], options[c]);
				nextdd[nextdd.length] = option;
			}
		}

		// If the new select box is not empty, add it
		if(nextdd.length > 1)
		{
			// insertAfter:
			pa.insertBefore(nextdd, object.nextSibling);
		}
	}

	// fill the listbox if one is present
	var lb    = document.getElementById("categorylist");
	if(lb)
	{
		lb.length = 0; // make empty
		// Add the default "all categories" item
		lb[0]     = new Option(allcatname, "");

		var items = "cattree[" + treeid + "][" + root + "]";
		var k     = document.getElementById("catselector_" + treeid + "_1");
		var path  = new Array();

		if(k.value==-1)
		{
			// Restore the entire tree here
			//addAllChildren(cattree[root].children, 0);
		}
		else
		{
			exit  = false;
			for(c=0; c<dd && !exit; c++)
			{
				k = document.getElementById("catselector_" + treeid + "_" + (1 + c))

				if(!(k.value==-1 || k.value==""))
				{
					items  += ".children[" + treeid + "][" + k.value + "]";
					object  = eval(items);
					var leader  = getIndent(c);

					lb[lb.length]     = new Option(leader + object.name, object.id);
					path[path.length] = k.value;
				}
			}
		}

		addAllChildren(eval(items).children, path.length, treeid);
	}
}


/**
 * Recursively add all children in a tree to a listbox
 * Used for the advanced search category dropdowns
 *
 */
addAllChildren = function ( objects, depth )
{
	listbox = document.getElementById("categorylist");

	for (var c=0; c<objects.length; c++)
	{
		if(objects[c])
		{
			var leader  = getIndent(depth);
			if(typeof(names[treeid][objects[c].id]) != "undefined")
			{
				listbox[listbox.length] = new Option(leader + objects[c].name, objects[c].id);
				addAllChildren(objects[c].children, depth+1, treeid);
			}
		}
	}
}

getIndent = function ( depth )
{
	leader  = "";
	for(var k=0; k<depth; k++)
		leader += catindent;
	if(depth)
		leader += " ";
	return leader;
}

function toggleSubCategoryTree(classname,imgid,tableid){
	var img = document.getElementById(imgid);
	var tab = document.getElementById(tableid);

	var rows = tableSubCategoryTreeGetRows(tab,classname);

	if (img.alt=="-") {
		// einklappen
		img.alt = "+";
		img.src = "images/icons/matching_plus.gif";

		for (var i in rows) {
			var row = rows[i];
			row.style.display = "none";
		}

	}else{
		// ausklappen
		img.alt = "-";
		img.src = "images/icons/matching_minus.gif";

		for (var i in rows) {
			var row = rows[i];
			try{
				row.style.display = "table-row";
			}catch(e){
				row.style.display = "block";
			}
		}

	}

}

function tableSubCategoryTreeGetRows(node,classname)
{
	var r = new Array();
	for (var i=0; i<node.childNodes.length; i++) {
		var child = node.childNodes.item(i);
		if (child.nodeName=="TR" && hasClass(child,classname)) {
			r.push(child);
		}else if(child.nodeName!="#text") {
			var r2 = tableSubCategoryTreeGetRows(child,classname);
			for (var j in r2) r.push(r2[j]);
		}
	}
	return r;
}

function hasClass(node,classname)
{
	var has = node.className;
	var classnames = has.split(" ");
	for (var i in classnames) {
		if (classname==classnames[i])
			return true;
	}
	return false;
}

// returns true if a is null
function isNull(a){
	return typeof(a)=='object' && !a;
}

// removes a node from the DOM
// n is an object, not an id.
function removeNode(n){
	if(typeof(n)!="undefined" && !isNull(n)){
		p = n.parentNode;
		p.removeChild(n);
	}
}
// toggles the display setting of an object
// needs an id
// on defaults to true (show, display block/diaplay), can be true or false (hide, display none)
// display defaults to block, is always none when on is false
toggleDisplayObject = function (id, on, display) {
	if(on==undefined) on=true;
	if(display==undefined) display='block';
	el = document.getElementById(id);
	if(!isNull(el)){
		el.style.display = on ? display : 'none';
	}
}

/**
 * returns the current host
 *
 * @return String $host
 */
function getHost()
{
	var host = new String(document.location);
	host = host.split('//');
	host.shift();
	host = host[0].split('/').shift();
	return host;
}

/**
 * returns the report-suite-id for omniture
 *
 * @param String $instance
 * @return Object $s
 */
function omniturePrepareCustom(instance)
{
	var host = getHost();
	if (host != 'localhost' && host != 'minerva' && host != 'odin' && host == 'development.local') {
		var rsname = 'ngn-' + instance;
	} else {
		var rsname = 'ngndev';
	}
	var s = s_gi(rsname);
	s.linkTrackVars = '';
	s.linkTrackEvents = '';
	return s;
}

/**
 * returns the s object for the tracking of the business card link
 *
 * @param String $instance
 * @param String $link
 * @return Object $s
 */
function omnitureGetCustom(instance, link)
{
	var s = omniturePrepareCustom(instance);
	if (s) {
		s.prop4 = link;
		s.prop9 = link;
		s.eVar3 = link;
		s.events = 'event3';
		return s;
	} else {
		return false;
	}
}