function setCaretTo(obj, pos) { 
    if(obj.createTextRange) { 
        /* Create a TextRange, set the internal pointer to
           a specified position and show the cursor at this
           position
        */ 
        var range = obj.createTextRange(); 
        range.move("character", pos); 
        range.select(); 
    } else if(obj.selectionStart) { 
        /* Gecko is a little bit shorter on that. Simply
           focus the element and set the selection to a
           specified position
        */ 
        obj.focus(); 
        obj.setSelectionRange(pos, pos); 
    } 
} 

function tagText(element, tagstart, tagend){
	if (element.setSelectionRange) {
		var selectionLength = element.value.substring(element.selectionStart,element.selectionEnd).length;
		if (selectionLength > 0){
			var endPos = element.selectionEnd; 
			element.value = element.value.substring(0,element.selectionStart) + tagstart + element.value.substring(element.selectionStart,element.selectionEnd) + tagend + element.value.substring(element.selectionEnd,element.value.length)
			setCaretTo(element, endPos + tagstart.length + tagend.length );
		}
		else {
			var endPos = element.selectionEnd; 
			element.value = element.value.substring(0,element.selectionStart) + tagstart + element.value.substring(element.selectionStart,element.selectionEnd) + tagend + element.value.substring(element.selectionEnd,element.value.length)
			setCaretTo(element, endPos + tagstart.length);
		}
/*	}else{
		var range = document.selection.createRange();
		var selectedText = range.text;
		if (selectedText != "") {
			var newText = tagstart + selectedText + tagend;
			range.text = newText;
			setCaretTo(el, range.endPos + tagstart.length);
		}
	*/
	}
} 

function insertTaggedText(element, tagstart, tagend, thisText){
	if(thisText != null){
		if (element.setSelectionRange) {
			var startPos = element.selectionStart; 
			element.value = element.value.substring(0,element.selectionStart) + tagstart + thisText + tagend + element.value.substring(element.selectionEnd,element.value.length)
			//Cursorpos setzen.
			if(thisText.length != 0) setCaretTo(element, startPos + tagstart.length + thisText.length + tagend.length);
			else setCaretTo(element, startPos + tagstart.length);
		}
/*		else{
			var selectedText = document.selection.createRange().text;
			if (selectedText != "") {
				var newText = tagstart + thisText + tagend;
				document.selection.createRange().text = newText;
			}
		}
*/
	}
} 

function print_r(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

function randomString() {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var string_length = 10;
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}

function setText(elementId, value){
	element = document.getElementById(elementId);
	element.value = value;
}

function setRandomPassword(elementId){
	setText(elementId, randomString());
}

function showElements(elementName){
	elements = getElementsByClass(elementName);
	for(var i=0; i<elements.length; i++)
	{
		elements[i].style.display = '';
	}
}

function hideShow(elementName)
{
	elements=getElementsByClass(elementName);
	if (elements.length != 0)
	{
		if (elements[0].style.display != 'none')
		{
			for(var i=0; i<elements.length; i++)
			{
				elements[i].style.display = 'none';
			}
		}
		else
		{
			for(var i=0; i<elements.length; i++)
			{
				elements[i].style.display = '';
			}
		}
	}
}

function showSwitch($showElement, $hideElement){
	elementsHide = getElementsByClass($hideElement);
	elementsShow = getElementsByClass($showElement);
	if (elementsHide.length != 0)
	{
		for(var i=0; i<elementsHide.length; i++) elementsHide[i].style.display = 'none';
	}
	if (elementsShow.length != 0)
	{
		for(var i=0; i<elementsShow.length; i++) elementsShow[i].style.display = '';
	}
}

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 enableDisable(elementClass, enable){
	elements = getElementsByClass(elementClass);
	if (enable){
		for(var i=0; i<elements.length; i++) elements[i].disabled = '';
	}
	else{
		for(var i=0; i<elements.length; i++) elements[i].disabled = 'disabled';
	}
}

function appendCol(tableId, nodeId){
	  var table = document.getElementById(tableId);
	  var newNode = document.getElementById(nodeId).cloneNode(true);
	  table.appendChild(newNode);
}

function refillDropdown(valuesArray){
	alert(print_r(valuesArray));	
}

