/***************************************************************
*  Copyright notice
*  
*  (c) 2007 cron IT GmbH
*  All rights reserved
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/** 
 * @author	Ernesto Baschny <ernst@cron-it.de>
 */
/*
 * General javascript helper functions
 *
 */

/* Get an object based on the ID */
function getObj(id) {
  if (document.getElementById) {
    return document.getElementById(id);
  }
  else if (document.all) {
    return document.all[id];
  }
  else if (document.layers) {
    return document.layers[id];
  }
}

/* Get elements by a class name */
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 toggleDisplayNew(field) {
	var toggleDiv = document.getElementById(field + '_toggle');
		
	if (!toggleDiv) {
		toggleDisplay(field);
		return false;
	}
	
	var toggleEleArr = toggleDiv.getElementsByTagName('div');
	var i = 0;
	for (i; i<toggleEleArr.length; i++) {
		if (toggleEleArr[i].className == 'toggleTag') {
			toggleDisplay(toggleEleArr[i].getAttribute('id'));
		}
	}
	
	var toggleEleArr = toggleDiv.getElementsByTagName('span');
	var i = 0;
	for (i; i<toggleEleArr.length; i++) {
		if (toggleEleArr[i].className == 'toggleTag') {
			toggleDisplay(toggleEleArr[i].getAttribute('id'));
		}
	}
}


/* Toggle the display of some object by its id */
function toggleDisplay(id) {
  var div = getObj(id);
  if (!div) { return; }
  
  var plus = getObj(id + '_plus');
  var minus = getObj(id + '_minus');
  if (plus) { 
	  var plus_show = 'block';
	  if (plus.nodeName == 'SPAN') {
	  	plus_show = 'inline';
	  }
  }
  if (minus) {
	  var minus_show = 'block';
	  if (minus.nodeName == 'SPAN') {
	  	minus_show = 'inline';
	  }
  }
  
  if (div.style.display == 'none') {
  	div.style.display = 'block';
  	
  	if (plus) { plus.style.display = 'none'; }
  	if (minus) { minus.style.display = minus_show; }
  } else {
  	div.style.display = 'none';
  	if (plus) { plus.style.display = plus_show; }
  	if (minus) { minus.style.display = 'none'; }
  }
}


/* Hide some object by id */
function hide(id) {
	var div = getObj(id);
	if (div) {
		div.style.display = 'none';
	}
}

/* Hide some object by id */
function show(id) {
	var div = getObj(id);
	if (div) {
		div.style.display = 'block';
	}
}

/* Hides all other tabs and display only id
 * - Tabs must have class="<selectorClass>" id="tab<tabId>"
 * - Tab-Content must have class="<tabClass>" id="<tabId>" and be of style "block" 
 */
function selectTab(id, tabClass, selectorClass, highlightClass) {
	// Display correct tab content
	var els = getElementsByClass(tabClass, null, null);
	for (i = 0; i < els.length; i++) {
		if (els[i].id == id) {
			els[i].style.display = 'block';
		} else {
			els[i].style.display = 'none';
		}
	}
	// Highlight the current tab selector, de-highlight all others
	var els = getElementsByClass(selectorClass, null, null);
	var pattern = new RegExp("(^|\\s)"+highlightClass+"(\\s|$)");
	for (i = 0; i < els.length; i++) {
		if (pattern.test(els[i].className)) {
			// De-highlight all
			els[i].className = els[i].className.replace(new RegExp("(^|\\s)"+highlightClass+"(\\s|$)"), '');
		}
		if (els[i].id == 'tab'+id) {
			els[i].className = els[i].className+' '+highlightClass;
		}
	}
}
