  /*************************************/
 /* maximize or minimize form section */
/*************************************/
function maxmin(obj) {
	var element = obj.parentNode.parentNode;
	if(element.className == 'min') {
		element.className = 'max';
	} else {
		element.className = 'min';
	}
	return false;
}


  /***************/
 /* toggle tabs */
/***************/

/*

sample html with correct style classes:
--------------------------------------

<ul class="formtabs">
	<li id="tab1" onClick="return toggleTab(this)" class="active">Tab 1</li>
	<li id="tab2" onClick="return toggleTab(this)">Tab 1</li>
</ul>
<div id="tab1_content" class="formtab">
	Tab 1 content
</div>
<div id="tab2_content" class="formtab" style="display: none;">
	Tab 2 content
</div>

remember: ID's MUST BE UNIQUE!!!!

OR

<ul class="formtabs">
	<li onclick="return toggleTab(this, true)" class="active">Tab 1</li>
	<li onclick="return toggleTab(this, true)">Tab 1</li>
</ul>
<div>
	<div class="formtab">
		Tab 1 content
	</div>
	<div class="formtab" style="display: none;">
		Tab 2 content
	</div>
</div>

Need a div with the other div's as childs after the ul tag
*/

function toggleTab(active, noIds)
{
	// check if noIds is set else set it to false
	if(typeof(noIds) == 'undefined')
	{
		noIds = false;
	}
	// get parent ul
	obj = active;
	while(obj.nodeName != 'UL')
	{
		obj = obj.parentNode;
	}
	// get all lis from ul
	listitems = obj.getElementsByTagName('LI');
	
	if(noIds)
	{
		// handle toggle without ids

		// get the next node after the ul from the list
		var div = obj.nextSibling;
		while(div.nodeName != 'DIV')
		{
			// search the next div if the next node after the ul is not a div
			div = div.nextSibling;
			
		}
		// load the items in the div
		var divitems = div.getElementsByTagName('DIV');
		var formtabs = [];
		for(var i=0;i<divitems.length;i++)
		{
			if (divitems[i].parentNode == div)
			{
				formtabs.push(divitems[i]);
			}
		}
		divitems = formtabs;
		// get the position of the clicked obj in the list
		var activeTab = -1;
		// set all inactiv
		for(var i=0;i<listitems.length;i++)
		{
			// check if the obj in the list is the same as the given from onclick
			if(listitems[i] == active)
			{
				activeTab = i;
			}
			divitems[i].style.display = 'none';
			listitems[i].className = '';
		}
		// when the clicked obj is found in the list we can change the tab
		if(activeTab >= 0)
		{
			active.className = 'active';
			divitems[activeTab].style.display = 'block';
		}
	}
	else
	{
		// handle toggle with ids
		
		// set all inactiv
		for(var i=0;i<listitems.length;i++)
		{
			document.getElementById(listitems[i].id+'_content').style.display = 'none';
			listitems[i].className = '';
		}
	
		// set active
		active.className = 'active';
		document.getElementById(active.id+'_content').style.display = 'block';
	}
	return false;
}

function toggleElement(el)
{
	if (document.getElementById(el).style.display == '')
	{
		document.getElementById(el).style.display = 'none';
		document.getElementById(el+'_plus').style.display = '';
		document.getElementById(el+'_minus').style.display = 'none';
	}
	else
	{
		document.getElementById(el).style.display = '';
		document.getElementById(el+'_plus').style.display = 'none';
		document.getElementById(el+'_minus').style.display = '';
	}
}

var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

  /**************************/
 /* multi selector methods */
/**************************/

function expandMultiSelector(obj)
{
	obj.isExpanded != obj.isExpanded;
	
	if (!obj.isExpanded)
	{		
		obj.className = 'img_collapse';
		selectionList = obj.parentNode.parentNode.parentNode.getElementsByTagName('ul')[0].parentNode;
		selectionList.style.height = 'auto';
		obj.isExpanded = true;
	} 
	else 
	{
		obj.className = 'img_expand';
		selectionList = obj.parentNode.parentNode.parentNode.getElementsByTagName('ul')[0].parentNode;
		selectionList.style.height = '180px';
		obj.isExpanded = false;
	}
}
	
function selectAllCheckBoxes(obj)
{
	obj.allSelected != obj.allSelected;
	cbItems = obj.parentNode.parentNode.getElementsByTagName('input');
	
	if (!obj.allSelected)
	{
		for (var i=0; i < cbItems.length; i++)
		{			
			if (!cbItems[i].disabled && !cbItems[i].checked)
			{
				cbItems[i].checked = true;	
			}
		}
		obj.className = 'img_any';
		obj.title = 'Keine Auswahl';
		obj.allSelected = true;
	} 
	else 
	{
		for (var i=0; i < cbItems.length; i++)
		{			
			if (!cbItems[i].disabled && cbItems[i].checked)
			{
				cbItems[i].checked = false;	
			}
		}
		obj.className = 'img_all';
		obj.title = 'Alle auswählen';
		obj.allSelected = false;
	}
}

function setFocus(element_id)
{
	try
	{
		document.getElementById(element_id).focus();
	}
	catch(e)
	{
		//if this goes wrong element is inexistent or you are in internet explorer and the field is hidden
	}
}


  /**********************/
 /* plus minus toggler */
/**********************/
function toggleCat(obj)
{
	if(obj.className == "plus")
	{
		obj.className = "minus";
	}
	else
	{
		obj.className = "plus";
	}
}


  /********************/
 /* content expander */
/********************/
function expandPimContent()
{
	/* get height */
	var viewHeight = document.viewport.getHeight();
	
	/* resize the content div */
	var e = document.getElementById('content');
	e.style.minHeight = viewHeight-180+"px";
	
	/* resize the resizer */
	var resizers = $$(".columnResizer");
	resizers.each(function(resizer)
	{
		resizer.style.minHeight = viewHeight-340+"px";
	});
	
	/* resize the columns */
	var halfs = $$(".halfColumn");
	halfs.each(function(half)
	{
		half.style.minHeight = viewHeight-340+"px";
	});
}


  /*****************/
 /* toggleNavIcms */
/*****************/


/**
 * vars and functions needed to avoid toggling of layer
 * 
 * @param boolean toggle_state_link - true when hovering table cell
 * @param boolean toggle_state_layer - true when hovering tooltip
 */
var state_link;
var state_layer;

function toggle_state_link(bol)
{
	state_link = bol;
}
function toggle_state_layer(bol)
{
	state_layer = bol;
}

/**
 * sets timeout of actual hiding function
 */
function tooltip_hide()
{
	setTimeout("tooltip_hider()",1000);
}

/**
 * actual hiding function
 */
function tooltip_hider()
{
	if(!state_cell && !state_tooltip)
	{
		var tooltip = document.getElementById('tooltip');
		tooltip.style.display = 'none';
	}
}


function toggleNavIcms(e, url, layer)
{
	/* hide if active */
	if(e.className == 'active')
	{
		var children = e.parentNode.parentNode.getElementsByTagName('LI');
		for(var i = 0; i < children.length; i++) {
			children[i].getElementsByTagName('A')[0].className = '';
		}
		$('service_menu').style.display = 'none';
		document.getElementById("service").style.backgroundImage = "";
	}
	/* show if inactive */
	else
	{
		smc = e.getAttribute('isLoaded',false);
		console.debug(smc);
		if(smc == null)
		{
			new Ajax.Updater(layer, url, {
				onSuccess: function () {
					var children = e.parentNode.parentNode.getElementsByTagName('LI');
					for(var i = 0; i < children.length; i++) {
						children[i].getElementsByTagName('A')[0].className = '';
					}
					e.className = 'active';
					
					$('service_menu_content_feedback').style.display = 'none';
					$('service_menu_content_menu').style.display = 'none';
					$(layer).style.display = 'block';
					$('service_menu').style.display = 'block';
					document.getElementById("service").style.backgroundImage = "url('"+absCorrect+"icms/images/"+styleSet+"/bgs/service_active.gif')";
					e.setAttribute('isLoaded', true);
				}
			});
		}
		else
		{
			var children = e.parentNode.parentNode.getElementsByTagName('LI');
			for(var i = 0; i < children.length; i++) {
				children[i].getElementsByTagName('A')[0].className = '';
			}
			$('service_menu_content_feedback').style.display = 'none';
			$('service_menu_content_menu').style.display = 'none';
			e.className = 'active';
			$(layer).style.display = 'block';
			$('service_menu').style.display = 'block';
			document.getElementById("service").style.backgroundImage = "url('"+absCorrect+"icms/images/"+styleSet+"/bgs/service_active.gif')";
		}
	}
	return false;
}

/*
 * copy the content from one form element to another
 * 
 * @param string source - source field of the content
 * @param string target - target field in which the content will be copied
 */
function copyFormFieldTo(source, target)
{
	$(target).value = $(source).value;
	return false;
}

/*
 * delete the content from one form element 
 * 
 * @param string target - target field in which the content will be deleted
 */
function deleteFormField(target)
{
	$(target).value = "";
	return false;
}

/*
 * check if all checkboxes in the list are checked and show this on the template
 * 
 * @param string checkboxId - id on checkbox which marks or unmarks all checkboxes in the list
 */
function checkSelectAllCheckBoxes(checkboxId)
{
	obj = document.getElementById(checkboxId);
	cbItems = obj.parentNode.parentNode.getElementsByTagName('input');

	allChecked = true;

	// check if all checkboxes are checked
	for (var i=0; i < cbItems.length; i++)
	{			
		if (!cbItems[i].checked)
		{
			allChecked = false;
		}
	}

	// if all checkboxes are checked show this on the template
	if (allChecked)
	{
		obj.className = 'img_any';
		obj.title = 'Keine Auswahl';
		obj.allSelected = true;
	}
}

/**
 * load javascript files on request, for example via ajax
 */
var includeJsFileList = '';
function includeJsFileOnce(file) {
	if (includeJsFileList.indexOf('['+file+']') == -1) {
		var e = document.createElement('script');
		e.setAttribute("type","text/javascript");
		e.setAttribute("src", file);
		document.getElementsByTagName("head")[0].appendChild(e)
		includeJsFileList += '['+file+']';
	}
}

/**
 * load css files on request, for example via ajax
 */
var includeCssFileList = '';
function includeCssFileOnce(file) {
	if (includeCssFileList.indexOf('['+file+']') == -1) {
		var e = document.createElement('link');
		e.setAttribute("rel","stylesheet");
		e.setAttribute("href", file);
		document.getElementsByTagName("head")[0].appendChild(e)
		includeCssFileList += '['+file+']';
	}
}

// needed global var for quickedit feature
var icmsquickedit_scripts_loaded = false;
var icmsquickedit_elements = new Array();
