//TOOLS

function popup( url, code, width, height )
{
	if( code == null )
	{
		code = "newPopup";
	}
	
	if( width == null )
	{
		width = 800;
	}
	
	if( height == null )
	{
		height = 600;
	}
		
	var popup = window.open( url, code, "width=" + width + ", height=" + height + ", left=50, top=50, toolbar=no, menubar=yes, scrollbars=yes, location=0, status=no" );
	popup.focus();
}

function getLeft( element, relativeElement /*optional*/ )
{
	return accumulateProperty( element, "offsetLeft", relativeElement );
}

function getTop( element, relativeElement /*optional*/ )
{
	return accumulateProperty( element, "offsetTop", relativeElement );
}

function getScrollTop() {
	if( window.pageYOffset )
	{
		return window.pageYOffset;
	}
	if( document.documentElement )
	{
		return document.documentElement.scrollTop;
	}
	if( document.body ) 
	{
		return document.body.scrollTop;
	}
}

function getScrollLeft() {
	if( window.pageXOffset )
	{
		return window.pageXOffset;
	}
	if( document.documentElement )
	{
		return document.documentElement.scrollLeft;
	}
	if( document.body ) 
	{
		return document.body.scrollLeft;
	}
}

function getClientHeight() {
	if( window.innerHeight  )
	{
		return window.innerHeight ;
	}
	if( document.documentElement )
	{
		return document.documentElement.clientHeight;
	}
	if( document.body ) 
	{
		return document.body.clientHeight;
	}
}

function getClientWidth() {
	if( window.innerWidth  )
	{
		return window.innerWidth ;
	}
	if( document.documentElement )
	{
		return document.documentElement.clientWidth;
	}
	if( document.body ) 
	{
		return document.body.clientWidth;
	}
}

function accumulateProperty( element, attribute, relativeElement /*optional*/ )
{
	var result = 0;
	while( element != null 
			&& element != relativeElement)
	{
		result += element[ attribute ];
		element = element.offsetParent;
	}
	return result;
}

function makeVisible( idOrElement, displayMethod /*optional*/, fadeTime /*optional*/, fadeMethod /*optional*/  ) 
{
	var element = getElement( idOrElement );
	if( element != null )
	{	
		if( fadeTime == null )
		{
			fadeTime = 200;
		}
		if( fadeTime != 0 )
		{
			if( fadeMethod == "slideDown" )
			{
				$(element).slideDown(fadeTime);
			}
			else
			{
				$(element).fadeIn(fadeTime);
			}
		}
		else
		{
			if( displayMethod == null )
			{
				element.style.display = "block";
			}
			else if( typeof(displayMethod) == "string" )
			{
				if( displayMethod == "visibility" )
				{
					element.style.visibility = "visible";
				}
				{
					element.style.display = displayMethod;
				}
			}
		}
	}
}

function makeInvisible( idOrElement, fadeTime /*optional*/, onlyVisiblility ) 
{
	var element = getElement( idOrElement );
	if( element != null )
	{	
		if( fadeTime == null )
		{
			fadeTime = 100;
		}
		if( fadeTime != 0 )
		{
			$(element).fadeOut(fadeTime);
//			$(element).slideUp(fadeTime);
		}
		else
		{
			if( onlyVisiblility )
			{
				element.style.visibility = "hidden";
			}	
			else
			{
				element.style.display = "none";
			}
		}
	}
}

function getElement( idOrElement )
{
	if( typeof(idOrElement) == "string" )
	{
		return document.getElementById( idOrElement );
	}
	else if( typeof(idOrElement) == "object" )
	{
		return idOrElement;
	}
	else
	{
		return null;
	}
}

function getClassParent( element, styleClass )
{
	var myElement = element;
	do {
		if( $(myElement).hasClass( styleClass ) )
		{
			return myElement;
		}
		myElement = myElement.parentNode;
	} while( myElement != null );
	return null;
}

function testIsValidObject(objToTest) 
{
	if(null==objToTest) 
	{
		return false;
	}
	if("undefined"==typeof(objToTest)) 
	{
		return false;
	}
	return true;
}

function snapRightToInside( element, clipElement, snapToElement )
{	
	var elementObj = getTopLevelElement( element );
	var clipElementObj = getElement( clipElement );
	var snapToElementObj = getTopLevelElement( snapToElement );
	
	if( elementObj != null
			&& clipElementObj != null )
	{
		var width = elementObj.offsetWidth; 
		var newLeft = getLeft( elementObj );
		
		var clipLeft = getLeft( clipElementObj ) + clipElementObj.offsetWidth - width;
		if( newLeft >= clipLeft )
		{
			newLeft = getLeft( snapToElementObj ) + snapToElementObj.offsetWidth - width;
		}
	
		elementObj.style.left = newLeft + "px";		
	}
}

/* TOP LEVEL ELEMENTS */

window.onresize = _resizeTLC;
function _resizeTLC()
{
	var topLevelContainer = document.getElementById( "__topLevelContainer" );
	if( topLevelContainer != null )
	{
		var pageElement = document.getElementById( "header" );
		topLevelContainer.style.width = (getLeft(pageElement) * 2 + 974) + "px" ;
	}
}

var _isDomManipulationEnabled = false;
function enableDomManipulation() 
{
	_isDomManipulationEnabled = true;
}

function isDomManipulationEnabled()
{
	return _isDomManipulationEnabled;
}

function addToTopLevelContainer( element )
{
	if( element != null
			&& isDomManipulationEnabled() )
	{
		var body = document.getElementsByTagName( "body" )[0];
		var topLevelContainer = document.getElementById( "__topLevelContainer" );
		
		if( topLevelContainer == null )
		{
			//create on demand
			topLevelContainer = document.createElement( "div" );
			topLevelContainer.id = "__topLevelContainer";
			if( body != null )
			{
				body.appendChild( topLevelContainer );
			}
		}	
		if( element.parentNode != topLevelContainer )
		{
			_resizeTLC();
			topLevelContainer.appendChild( element );
			element.style.display = "none";
		}
	}
}

function getTopLevelElement( id )
{
	if( isDomManipulationEnabled() )
	{
		var element = document.getElementById( id );
		var tlcElement = document.getElementById( id + "_tlc" );
		if( element != null )
		{
			if( tlcElement != null )
			{
				//remove existing tlc element
				var topLevelContainer = document.getElementById( "__topLevelContainer" );
				if( topLevelContainer != null 
						&& topLevelContainer == tlcElement.parentNode )
				{
					topLevelContainer.removeChild( tlcElement );
				}
			}
			element.id = id + "_tlc";
			addToTopLevelContainer( element );		
			return element;
		}
		else if( tlcElement != null )
		{
			_resizeTLC();
			return tlcElement;
		}
	}
	// .. else
	return null;
}


//overlays

function showOverlay( overlayId, relativeElement, left, top )
{	
	var overlayObj = getTopLevelElement( overlayId );
	var relativeElementObj = getElement( relativeElement );
	if( overlayObj != null
			&& relativeElementObj != null )
	{
		if( top == null )
		{
			top = 0;
		}
		if( left == null )
		{
			left = 0;
		}
		
		addToTopLevelContainer(overlayObj);
		overlayObj.style.top = getTop( relativeElementObj ) + top + "px";
		overlayObj.style.left = getLeft( relativeElementObj ) + left + "px";
		overlayObj.style.position = "absolute";
		makeVisible( overlayObj );
	}
}

function showSnapRightOverlay( overlayId, relativeElement, clipElement, snapToElement, left, top )
{	
	var overlayObj = getTopLevelElement( overlayId );
	var relativeElementObj = getElement( relativeElement );
	var clipElementObj = getElement( clipElement );
	var snapToElementObj = getTopLevelElement( snapToElement );
	
	if( overlayObj != null
			&& relativeElementObj != null
			&& clipElementObj != null
			&& snapToElementObj != null )
	{
		// pre display to get correct width
		overlayObj.style.top = "0px";
		overlayObj.style.left = "0px";
		overlayObj.style.position = "absolute";
		addToTopLevelContainer(overlayObj);
		makeVisible( overlayObj, null, 300, "slideDown" );
		var width = overlayObj.offsetWidth; 
		
		// position
		if( top == null )
		{
			top = 0;
		}
		if( left == null )
		{
			left = 0;
		}
		
		var newLeft = getLeft( relativeElementObj ) + left;
		var clipLeft = getLeft( clipElementObj ) + clipElementObj.offsetWidth - width;
		if( newLeft >= clipLeft )
		{
			newLeft = getLeft( snapToElementObj ) + snapToElementObj.offsetWidth - width;
		}
		overlayObj.style.left = newLeft + "px";
		overlayObj.style.top = getTop( relativeElementObj ) + top + "px";
	}
}

function hideOverlay( overlayId )
{
	var element = getTopLevelElement( overlayId );
	makeInvisible( element )
}

//main menu overlays

var SLOW_SHOW_TIME = 100;
var SLOW_HIDE_TIME = 200;
var overlayHideTimeoutEvents = new Array();
var overlayShowTimeoutEvents = new Array();

function showSlowOverlay( overlayId, relativeElement, left, top )
{
	keepSlowOverlayOpen( overlayId );
	if( overlayShowTimeoutEvents[ overlayId ] == null )
	{
		overlayShowTimeoutEvents[ overlayId ] = new Array();
	}
	overlayShowTimeoutEvents[ overlayId ][ 'relativeElement' ] = relativeElement;
	overlayShowTimeoutEvents[ overlayId ][ 'left' ] = left;
	overlayShowTimeoutEvents[ overlayId ][ 'top' ] = top;
	if( overlayShowTimeoutEvents[ overlayId ][ 'timeouts' ] == null )
	{
		overlayShowTimeoutEvents[ overlayId ][ 'timeouts' ] = new Array();
	}
	var method = "showSlowOverlayInternal( '" + overlayId + "' )";
	overlayShowTimeoutEvents[ overlayId ][ 'method' ] = method;
	overlayShowTimeoutEvents[ overlayId ][ 'timeouts'].push( window.setTimeout( method, SLOW_SHOW_TIME ) );	
}

function showSlowOverlayInternal( overlayId, relativeElement, left, top )
{
	var relativeElement = overlayShowTimeoutEvents[ overlayId ][ 'relativeElement' ];
	var left = overlayShowTimeoutEvents[ overlayId ][ 'left' ];
	var top = overlayShowTimeoutEvents[ overlayId ][ 'top' ];
	clearOverlayTimeouts(overlayId, overlayShowTimeoutEvents, true);
	showOverlay( overlayId, relativeElement, left, top );
}

function showSlowSnapRightOverlay( overlayId, relativeElement, clipElement, snapToElement, left, top )
{
	keepSlowOverlayOpen( overlayId );
	if( overlayShowTimeoutEvents[ overlayId ] == null )
	{
		overlayShowTimeoutEvents[ overlayId ] = new Array();
	}
	overlayShowTimeoutEvents[ overlayId ][ 'relativeElement' ] = relativeElement;
	overlayShowTimeoutEvents[ overlayId ][ 'clipElement' ] = clipElement;
	overlayShowTimeoutEvents[ overlayId ][ 'snapToElement' ] = snapToElement;
	overlayShowTimeoutEvents[ overlayId ][ 'left' ] = left;
	overlayShowTimeoutEvents[ overlayId ][ 'top' ] = top;
	if( overlayShowTimeoutEvents[ overlayId ][ 'timeouts' ] == null )
	{
		overlayShowTimeoutEvents[ overlayId ][ 'timeouts' ] = new Array();
	}
	var method = "showSlowSnapRightOverlayInternal( '" + overlayId + "' )";
	overlayShowTimeoutEvents[ overlayId ][ 'method' ] = method;
	overlayShowTimeoutEvents[ overlayId ][ 'timeouts'].push( window.setTimeout( method, SLOW_SHOW_TIME ) );	
}

function showSlowSnapRightOverlayInternal( overlayId )
{
	var relativeElement = overlayShowTimeoutEvents[ overlayId ][ 'relativeElement' ];
	var clipElement = overlayShowTimeoutEvents[ overlayId ][ 'clipElement' ];
	var snapToElement = overlayShowTimeoutEvents[ overlayId ][ 'snapToElement' ];
	var left = overlayShowTimeoutEvents[ overlayId ][ 'left' ];
	var top = overlayShowTimeoutEvents[ overlayId ][ 'top' ];
	clearOverlayTimeouts(overlayId, overlayShowTimeoutEvents, true);
	showSnapRightOverlay( overlayId, relativeElement, clipElement, snapToElement, left, top );
}

function hideSlowOverlay( overlayId )
{
	clearOverlayTimeouts( overlayId, overlayShowTimeoutEvents );
	if( overlayHideTimeoutEvents[ overlayId ] == null )
	{
		overlayHideTimeoutEvents[ overlayId ] = new Array();
	}
	if( overlayHideTimeoutEvents[ overlayId ][ 'timeouts' ] == null )
	{
		overlayHideTimeoutEvents[ overlayId ][ 'timeouts' ] = new Array();
	}
	overlayHideTimeoutEvents[ overlayId ][ 'timeouts' ].push( window.setTimeout( "hideSlowOverlayInternal( '" + overlayId + "' )", SLOW_HIDE_TIME ) );			
}

function hideSlowOverlayInternal( overlayId )
{
	overlayHideTimeoutEvents[ overlayId ][ 'halted' ] = null;
	hideOverlay( overlayId );
}

function keepSlowOverlayOpen( overlayId )
{
	clearOverlayTimeouts( overlayId, overlayHideTimeoutEvents );
	if( overlayShowTimeoutEvents[ overlayId ] != null
			&& overlayShowTimeoutEvents[ overlayId ][ 'halted' ] == true )
	{
		overlayShowTimeoutEvents[ overlayId ][ 'timeouts'].push( window.setTimeout( overlayShowTimeoutEvents[ overlayId ][ 'method' ], SLOW_SHOW_TIME ) );
		overlayShowTimeoutEvents[ overlayId ][ 'halted' ] = false;
	}
}

function clearOverlayTimeouts( overlayId, timeoutQueue, dontHalt )
{
	if( timeoutQueue[ overlayId ] != null &&
			timeoutQueue[ overlayId ][ 'timeouts' ] != null &&
			timeoutQueue[ overlayId ][ 'timeouts' ].length > 0 )
	{
		for( var timeOutIndex in timeoutQueue[ overlayId ][ 'timeouts' ] )
		{
			window.clearTimeout( timeoutQueue[ overlayId ][ 'timeouts' ][ timeOutIndex ] );
		} 
		timeoutQueue[ overlayId ][ 'timeouts' ] = new Array();
		if( dontHalt != true )
		{
			timeoutQueue[ overlayId ][ 'halted' ] = true;
		} 
		else
		{
			timeoutQueue[ overlayId ][ 'halted' ] = null;
		}
	}	
}

// tabs

function initTabs( headElementId, aniMarker, maxTabHeight )
{
	if( maxTabHeight == null )
	{
		maxTabHeight = 100000;
	}
	
	var contentContainerObject = getClassParent( getElement( headElementId + "Content" ), "TabContentContainer" );
	contentContainerObject.style.height = "0px";
	contentContainerObject.style.overflow = "hidden";
	
	focusTab( headElementId, aniMarker, maxTabHeight );
}

function focusTab( idOrHeadElement, aniMarker, maxTabHeight )
{
	if( maxTabHeight == null )
	{
		maxTabHeight = 100000;
	}
	
	var MAX_ANIMATION_TIME = 300;
	 
	//pixel size / height the content of the tab container can be smaller
	//than container and vertical scroll is beeing started, though. (IE7 bugfix)
	var SCROLL_HEIGHT_OFFSET = 8;
	
	var refElementObject = getElement( idOrHeadElement );
	var headElementObject = getClassParent( refElementObject, "Tab" );
	if( headElementObject != null )
	{
		var headElementId = headElementObject.id;
		var contentContainerObject = getClassParent( getElement( headElementId + "Content" ), "TabContentContainer" );
		contentContainerObject.style.overflow = "hidden";
		contentContainerObject.style.overflowY = "hidden";
		contentContainerObject.scrollTop = 0;
		var aniMarkerObject = getElement(aniMarker);
		if( aniMarkerObject != null ) 
		{
			makeVisible( aniMarkerObject, null, 0 );
			var visibleMarkerObject = $( ".On", headElementObject.parentNode ).get(0);
			var markerSourceLeft = 0;
			var markerOffsetParent = aniMarkerObject.offsetParent;
			if( visibleMarkerObject != null )
			{
				markerSourceLeft = Math.floor( getLeft( visibleMarkerObject, markerOffsetParent ) + visibleMarkerObject.offsetWidth / 2 - aniMarkerObject.offsetWidth / 2);
			}
			var markerSourceTop = getTop( headElementObject, markerOffsetParent ) + 49;
			var markerTargetLeft = Math.floor( getLeft( headElementObject, markerOffsetParent ) + headElementObject.offsetWidth / 2 - aniMarkerObject.offsetWidth / 2 );
			
			aniMarkerObject.style.zIndex = 100;
			aniMarkerObject.style.top = markerSourceTop + "px";
			aniMarkerObject.style.left = markerSourceLeft + "px";
			
			//hide all content
			var hasSwitched = false;
			for( var headSiblingIndex in headElementObject.parentNode.childNodes )
			{
				var headSibling = headElementObject.parentNode.childNodes[headSiblingIndex];
				if( headSibling != null
						&& headSibling.nodeType == 1 )
				{
					var headSiblingId = headSibling.id;
					
					var contentElementId = headSiblingId + "Content";
					var contentElementObject = getElement( contentElementId );
					if( headSibling != headElementObject 
							&& $( headSibling ).hasClass( "On" ) ) 
					{
						hasSwitched = true;
						$( headSibling ).removeClass( "On" );
						contentElementObject.style.position = "relative";
						
						// slide old tab out
						$( contentElementObject ).animate( 
							{top:"-" + (contentElementObject.clientHeight + 50) + "px" },
							Math.min( MAX_ANIMATION_TIME, contentElementObject.clientHeight / 3 ), 
							function() { 
								
								makeInvisible( this, 0 );
								//animate arrow
								$(aniMarkerObject).animate( {left:markerTargetLeft}, 200, function() {
									for( var headSiblingIndex in headElementObject.parentNode.childNodes )
									{
										var headSibling = headElementObject.parentNode.childNodes[headSiblingIndex];
										if( headSibling != null
												&& headSibling.nodeType == 1 )
										{
											var headSiblingId = headSibling.id;
											if( headSibling == headElementObject ) 
											{
												$( headSibling ).addClass( "On" );				
											}						
										}
									}
									//makeInvisible( aniMarkerObject, 0 );	
								} );
								// slide new tab in
								for( var headSiblingIndex in headElementObject.parentNode.childNodes )
								{
									var headSibling = headElementObject.parentNode.childNodes[headSiblingIndex];
									if( headSibling != null
											&& headSibling.nodeType == 1 )
									{
										var headSiblingId = headSibling.id;
										var contentElementId = headSiblingId + "Content";
										var contentElementObject = getElement( contentElementId );
										if( headSibling == headElementObject ) 
										{
											makeVisible( contentElementObject, null, 1 );
											contentElementObject.style.position = "relative";
											contentElementObject.style.top = "-" + (contentElementObject.clientHeight + 50) + "px";
											$( contentElementObject ).animate( {top:"0px"}, Math.min( MAX_ANIMATION_TIME, contentElementObject.clientHeight / 3 ) );
											
											var contentHeight = getElement( contentElementId ).clientHeight;
											var containerTargetHeight = Math.min( maxTabHeight, contentHeight );
											if( contentContainerObject.clientHeight < containerTargetHeight )
											{
												contentContainerObject.style.height = containerTargetHeight + "px";
											}
											if( contentContainerObject.clientHeight < contentHeight + SCROLL_HEIGHT_OFFSET )
											{
												contentContainerObject.style.overflowY = "scroll";
											}
										}						
									}
								}
							} );
					}
				}
			}
			if( !hasSwitched )
			{
				for( var headSiblingIndex in headElementObject.parentNode.childNodes )
				{
					var headSibling = headElementObject.parentNode.childNodes[headSiblingIndex];
					if( headSibling != null
							&& headSibling.nodeType == 1 )
					{
						var headSiblingId = headSibling.id;
						var contentElementObject = getElement( headSiblingId + "Content" );
						if( headSibling == headElementObject ) 
						{
							makeVisible( contentElementObject, null, 1 );
							var contentHeight = contentElementObject.clientHeight;
							var containerTargetHeight = Math.min( maxTabHeight, contentHeight );
							if( contentContainerObject.clientHeight < containerTargetHeight )
							{
								contentContainerObject.style.height = containerTargetHeight + "px";
							}
							if( contentContainerObject.clientHeight < contentHeight + SCROLL_HEIGHT_OFFSET )
							{
								contentContainerObject.style.overflowY = "scroll";
							}
						}						
					}
				}
			}
		} 
	}	
}


//utilities for forms
/**
 * @param element to get an enclosing form node for
 * @return form node or null
 */
function getEnclosingForm( element )
{
	var myElement = element;
	do {
		if( myElement.submit != null )
		{
			return myElement;
		}
		myElement = myElement.parentNode;
	} while( myElement != null );
	return null;
}

/**
 * resets a select box to its initial value(s) to undo user changes
 * 
 * @param field the select box dom node
 * @param fallbackOptionValue optional value to select if no default option is available
 * 
 */

function resetDropdown( field, fallbackOptionValue /*optional*/)
{
	if( field != null )
	{
		field.selectedIndex = -1;
		for( index in field.childNodes ) 
		{
			var option = field.childNodes[index];
			if( option != null )
			{
				if( option.defaultSelected == true )
				{
					option.selected = true;
				}
				else
				{
					try {
						option.selected = false;
					} catch ( except ) { /*ie problem catched */ }
				}
			}
		}
		if( field.selectedIndex == -1 
				&& fallbackOptionValue != null )
		{
			for( index in field.childNodes ) 
			{
				var option = field.childNodes[index];
				if( option != null )
				{
					if( option.value == fallbackOptionValue )
					{
						option.selected = true;
					}
				}
			}
		}
	}
}

function getEventKeyCode( event )
{
	var keyCode = null;
	if( !event )
	{
		event = window.event;
	}
	if ( event.which ) 
	{
		keyCode = event.which;
	} else if ( event.keyCode ) 
	{
		keyCode = event.keyCode;
	}
	return keyCode;
}

/**
 * 
 * @param event
 * @return true, if the current event is the enter key pressedd
 */

function isEnterKeyEvent( event )
{
	var keyCode = getEventKeyCode( event );
	if( keyCode == 13 )
	{
		return true;
	}
	return false
}

/**
 * usage: <input name="bla" onkeyup=" onEnterSubmit( event, this ) ">..</input>
 * submits the surrounding form if enter button pushed
 *  
 * @param event
 * @param inputField 
 */
function onEnterSubmit( event, inputField )
{
	if( isEnterKeyEvent( event ) )
	{
		inputField.form.submit();
	}
}

/**
 * usage: 
 * 		<input name="bla" onkeyup=" onEnterAjaxSubmit( event, this ) ">..</input>
 * or 	<input name="bla" onkeyup=" onEnterAjaxSubmit( event, this, 'myContainerId' ) ">..</input>
 * 
 * submits the surrounding form if enter button pushed using ajax
 *  
 * @param event
 * @param inputField 
 */
function onEnterAjaxSubmit( event, inputField, singleContainerId )
{
	if( isEnterKeyEvent( event ) )
	{
		ajaxSubmitForm( inputField.form, singleContainerId );		
	}
}

/**
 * usage: <input name="bla" onkeyup=" onEnterTabNext( event, this ) ">..</input>
 * puts the cursor to the next input element
 *  
 * @param event
 * @param inputField 
 */
function onEnterTabNext( event, inputField )
{
	if( isEnterKeyEvent( event ) )
	{
		var takeThis = false;
		for( var index in inputField.form.elements )
		{
			var element = inputField.form.elements[ index ];
			if( takeThis )
			{
				element.focus();
				element.select();
				return;
			}			
			if( element == inputField )
			{
				takeThis = true;
			}
		}
	}
}

/**
 * 
 * usage: <input name="bla" onkeyup=" onEnterTabNext( event, this, myNextField ) ">..</input>
 * 
 * puts the cursor to the specified input element
 * 
 * @param event
 * @param inputField
 * @param nextField
 */
function onEnterTabNextField( event, inputField, nextField )
{
	if( isEnterKeyEvent( event ) )
	{
		nextField.focus();
		nextField.select();
	}
}

/**
 * 
 * usage: <input name="bla" onkeyup=" onInputTabNextField( event, 'x', this, myNextField ) ">..</input>
 * 
 * puts the cursor to the specified input element
 * 
 * @param event
 * @param inputField
 * @param nextField
 */
function onInputTabNext( event, inputString, inputField )
{
	var value = inputField.value;
	if( value.length > 0 )
	{
		var char = value.substr( value.length - inputString.length );
		if( char == inputString )
		{
			var trunkValue = value.substr( 0, value.length - inputString.length );
			inputField.value = trunkValue;
			
			var takeThis = false;
			for( var index in inputField.form.elements )
			{
				var element = inputField.form.elements[ index ];
				if( takeThis )
				{
					element.focus();
					element.select();
					return;
				}			
				if( element == inputField )
				{
					takeThis = true;
				}
			}
		}
	}
}

/**
 * 
 * usage: <input name="bla" onkeyup=" onInputTabNextField( event, 'x', this, myNextField ) ">..</input>
 * 
 * puts the cursor to the specified input element
 * 
 * @param event
 * @param inputField
 * @param nextField
 */
function onInputTabNextField( event, inputString, inputField, nextField )
{
	var value = inputField.value;
	if( value.length > 0 )
	{
		var char = value.substr( value.length - inputString.length );
		if( char == inputString )
		{
			var trunkValue = value.substr( 0, value.length - inputString.length - 1 );
			inputField.value = trunkValue;
			nextField.focus();
			nextField.select();
		}
	}
}


/** Message bars
 */

function hideMessageBar( backgroundId, messagesId )
{
	makeInvisible( backgroundId );
	makeInvisible( messagesId );
}	

function initMessageBars() 
{
	var backgroundElement = getElement( 'globalMessagesBackground' );
	var containerElement = getElement( 'messagesContainer' );
	if( backgroundElement != null
			&& containerElement != null )
	{
		backgroundElement.style.height = containerElement.offsetHeight + "px";
	}

	var backgroundElement = getElement( 'globalErrorsBackground' );
	var containerElement = getElement( 'errorsContainer' );
	if( backgroundElement != null
			&& containerElement != null )
	{
		backgroundElement.style.height = containerElement.offsetHeight + "px";
	}
}

