
var cleardiv = document.createElement('div');
cleardiv.setAttribute('class','clear');
cleardiv.appendChild(document.createElement('br'));

function appendAfter(obj,node) {
	if (obj.nextSibling) {
		obj.parentNode.insertBefore(node,obj.nextSibling);
	} else {
		obj.parentNode.appendChild(node);
	}
} 

function appendBefore(obj,node) {
	if (obj.nextSibling) {
		obj.parentNode.insertBefore(node,obj.nextSibling);
	} else {
		obj.parentNode.appendChild(node);
	}
} 

function eval_elements (options) {
	var elements;
	var element = $((options.id)?options.id:'');
	var attrib  = (options.attribute)?options.attribute:'onclick';
	var excludeInvisible  = (options.excludeInvisible)?options.excludeInvisible:true;
	var regex  = (options.regex)?options.regex:'*';
	var precondition  = (options.precondition)?options.precondition:'';
	
	var type  = (options.type)?options.type:'input';
	my_regex = new RegExp(regex);	
	//alert(Element.inspect(element));	
	if (element && element.getElementsByTagName ) {
		element = Element.cleanWhitespace(element);
		elements = element.getElementsByTagName(type);
		if (precondition != ''){ precondition = eval(precondition);}
		else {precondition == true;}
		for (var i=0; i<elements.length; i++){
			var e = $(elements[i]);
			
			// im IE ist getAttribute kein String, daher muss das anders behandelt werden !!!
			if (precondition && is_ie == false && e && e.getAttribute && e.getAttribute(attrib) && (e.getAttribute(attrib).search(regex) >= 0) && (!excludeInvisible || $(e).visible())){
				
				var evaluate = e.getAttribute(attrib);
				evaluate = evaluate.replace(/javascript:/,'');
				eval(evaluate);
			} else if (precondition && is_ie && e && e.getAttribute && e.getAttribute(attrib) && (!excludeInvisible || $(e).visible())){
				var evaluate = e.getAttribute(attrib);
				eval(evaluate);
			}
		}		
	}
}


function synchNode(node,params){
	node = $(node);	
	arrayparams = (params.toArray)? params.toArray():params;	
	if (!node) return;
	if (!node.getAttribute) return;
	if (arrayparams.length == 0) return;
	var index = new Number();
	hidden = node.getElementsByTagName('input');
	show = node.getElementsByTagName('div');
	
	for (i=0;i<hidden.length;i++){	
		element = hidden[i];
		if (element.getAttribute('id') && element.getAttribute('id').search(/value/) != -1 && element.getAttribute('id').search(/\d+/) != -1 ){
			var elem_id = element.getAttribute('id');
			var match = elem_id.match(/(\d+)_(\d+)/);
			var index = new Number(match[2]);
			var value = new String(((arrayparams[index] && arrayparams[index]['value'])?arrayparams[index]['value']:''));
			
			element.value = (value.length > 0)?value:'';
		}
	}
	for (i=0;i<show.length;i++){	
		element = show[i];
		if (element.getAttribute('id') && element.getAttribute('id').search(/value/) != -1 && element.getAttribute('id').search(/\d+/) != -1 ){
			var elem_id = element.getAttribute('id');
			var match = elem_id.match(/(\d+)_(\d+)/);
			//index = new Number(element.getAttribute('id').match(/(\d+)/));
			var index = new Number(match[2]);
			var value = new String((arrayparams[index] && arrayparams[index]['value'])?arrayparams[index]['value']:'');
			element.innerHTML = (value.strip().length > 0)?value:'&nbsp;';
		}
	}
}

nodeUp = function(node){
	node = $(node);	
	
	var p = node.parentNode;
	p = Element.cleanWhitespace(p);
	
	prev_node = node.previousSibling;
	if (prev_node && prev_node.getAttribute && prev_node.getAttribute('id')) {
		node.parentNode.insertBefore(node,prev_node);
	} 
}

nodeDown = function(node){
	node = $(node);		
	var p = node.parentNode;
	p = Element.cleanWhitespace(p);
	next_node = node.nextSibling;
	if (next_node && next_node.getAttribute && next_node.getAttribute('id')) {
		node.parentNode.insertBefore(node,next_node.nextSibling);
	} else if (next_node && next_node.nextSibling && next_node.nextSibling.getAttribute && next_node.nextSibling.getAttribute('id')){
		node.parentNode.insertBefore(node,next_node.nextSibling.nextSibling);
	} else {
		node.parentNode.appendChild(node);
	}		
}

switchParentSelectChild = function(node,options){
	node = $(node);
	var root = $((options && $((options.root))?options.root:''));
	if ( !node && !root) return;	
	if (root && root.cleanWhitespace) root.cleanWhitespace();
	if (node && node.cleanWhitespace) node.cleanWhitespace();	
	
	if (node){
		// Alle Geschwisterknoten ausblenden
		nodeSiblings = node.siblings();
		nodeSiblings.each(function(n){
			if (n.tagName.toLowerCase() == 'div' && n.visible()) n.hide();
		});
		node.show();		
	} else {
		var childnodes = new Array();
		nodes = (root.immediateDescendants)?root.immediateDescendants():new Array();
		
		for (var i=0;i<nodes.length;i++){
			if (nodes[i].tagName.toLowerCase() == 'div' && nodes[i].immediateDescendants) childnodes = childnodes.concat(nodes[i].immediateDescendants());
		}
		childnodes.each(function(n){
			if (n.tagName.toLowerCase() == 'div' && n.visible()) n.hide();
		});
	}
}

parentBackwardSelectChild = function(name){
	var tmpArray = name.split('_');
}

function myCloneNode(node,index,id,source){
	var i;	
	node = Element.cleanWhitespace(node);
	if (node == null) return;	
	var MyRegExp = new RegExp('_function');	
	if (node.value) node.value = '';
	if (node.getAttribute){
		if (node.getAttribute('onclick') && String(node.getAttribute('onclick')).search(MyRegExp) != -1) 
			node.setAttribute('onClick',String(node.getAttribute('onclick')).replace(MyRegExp, id+'_'+index));
			node.setAttribute('onClick',String(node.getAttribute('onclick')).replace(MyRegExp, id+'_'+index));
		if (node.getAttribute('onclick') && String(node.getAttribute('onClick')).search(MyRegExp) != -1) 
			node.setAttribute('onClick',String(node.getAttribute('onClick')).replace(MyRegExp, id+'_'+index));
			node.setAttribute('onClick',String(node.getAttribute('onclick')).replace(MyRegExp, id+'_'+index));
		if (node.getAttribute('name')) node.setAttribute('name',node.name);
		
		if (node.getAttribute('id')) node.setAttribute('id',node.id+'_'+index);
	}
	if (node.hasChildNodes()){
		for (i=0;i<node.childNodes.length;i++){
			myCloneNode(node.childNodes[i],index,id);
		}
	}
	return node
}

function setValueRecursive(element,value){
	element = $(element);	
	if (element == undefined) element = document;
	
	if (!element.getElementsByTagName){ return; }
	var inputs = element.getElementsByTagName('input');	
	if (element.tagName.toLowerCase() == 'input' && !inputs.length) inputs = new Array(element);
	// loop through all input  tags
	for (var i=0; i<inputs.length; i++){
		var input = inputs[i];
		if (input.name != 'action' && input.type != 'button') {
			if (input.type != 'radio' && input.type != 'checkbox') {
				input.value = value;
			} else if ((input.type == 'checkbox' || input.type == 'radio') && input.value == value){
				input.checked = 'checked'
			}
		}
	}	
	
	var textAreas = element.getElementsByTagName('textarea');
	if (element.tagName.toLowerCase() == 'textarea' && !textAreas.length) textAreas = new Array(element);
	// loop through all textarea tags
	for (var i=0; i<textAreas.length; i++){
		textArea.value = value;
	}		
	
	var selects = element.getElementsByTagName('select');
	if (element.tagName.toLowerCase() == 'select' && !selects.length) selects = new Array(element);
	// loop over all select tags
	for (var i = 0; i < selects.length; i ++) {
		var select = selects[i];
		for (var j = 0; j < select.options.length; j ++) {
			var option = select.options[j];
			if (option.value == value) {
				option.selected = "selected";
			} 
		}		
	}
}

function getFormParams(element,returnObj){	
	postObj = new Object();
	element = $(element);	
	if (element == undefined) element = document;	
	if (!element.getElementsByTagName){ return; }
	result = '';
	var inputs = element.getElementsByTagName('input');
	if (element.tagName && element.tagName.toLowerCase() == 'input' && !inputs.length) inputs = new Array(element);
	// loop through all input  tags
	for (var i=0; i<inputs.length; i++){
		var input = inputs[i];
		if (input.name != 'action' && input.type != 'button') {
			if (input.type != 'radio' && input.type != 'checkbox') {
				result += input.name+'='+encodeURI(input.value)+'&';
				if (!(typeof postObj[input.name] == 'object')) postObj[input.name] = new Array();
				postObj[input.name].push(input.value);
			} else if (input.type == 'checkbox'){
				result += input.name+((input.checked)?'=1&':'=&');
				if (!(typeof postObj[input.name] == 'object' || typeof postObj[input.name] == 'object')) postObj[input.name] = new Array();
				postObj[input.name].push(((input.checked)?'1':'0'));
			} else if (input.type == 'radio' && input.checked){
				result += input.name+'='+encodeURI(input.value)+'&';
				if (!(typeof postObj[input.name] == 'object' || typeof postObj[input.name] == 'object')) postObj[input.name] = new Array();
				postObj[input.name].push(input.value);
			}
		}
	}	
	
	var textAreas = element.getElementsByTagName('textarea');
	if (element.tagName && element.tagName.toLowerCase() == 'textarea' && !textAreas.length) textAreas = new Array(element);
	// loop through all textarea tags
	for (var i=0; i<textAreas.length; i++){
		var textArea = textAreas[i];
		result += textArea.name+'='+encodeURI(textArea.value)+'&';
		if (!(typeof postObj[textArea.name] == 'object')) postObj[textArea.name] = new Array();
		postObj[textArea.name].push(textArea.value);
	}		
	
	var selects = element.getElementsByTagName('select');
	if (element.tagName && element.tagName.toLowerCase() == 'select' && !selects.length) selects = new Array(element);

	// loop over all select tags
	for (var i = 0; i < selects.length; i ++) {
		var select = selects[i];
		var twoselect = (select.getAttribute) ? select.getAttribute('rel') == 'twoselect' : false;
		if (twoselect) {
			if (select.options.length <= 0)
				result += select.name + '=&';
		}
		postObj[select.name] = new Array();
		for (var j = 0; j < select.options.length; j ++) {
			var option = select.options[j];
			if (option.selected || twoselect ) {
				result += select.name + '=' + encodeURI(option.value) + '&';
				postObj[select.name].push(option.value);
			} 
		}		
	}
	return (returnObj) ? $H(postObj) : result.substr(0, result.length-1);
}


function clearFormParams(element){
	element = $(element);
	if (element == undefined) element = document;
	if (!element.getElementsByTagName){ return; }
	var inputs = element.getElementsByTagName('input');
	// loop through all input  tags
	for (var i=0; i<inputs.length; i++){
		var input = inputs[i];
		if (input.getAttribute && input.getAttribute('type') != 'hidden' && input.getAttribute('type') != 'button' && input.getAttribute('type') != 'submit' && input.getAttribute('type') != 'image' && input.getAttribute('type') != 'reset'){
			input.value='';
		}
	}	
	var textAreas = element.getElementsByTagName('textarea');
	// loop through all input  tags
	for (var i=0; i<textAreas.length; i++){
		var textArea = textAreas[i];
		textArea.value='';
	}		
	return element;
}

function createClearDiv(){
	return cleardiv.cloneNode(true);
}


var kb_prototypes = {
	/** liefert das erste gefundene eingabe Element zurück 
	 * param Element (nötig für Prototype)
	 */
	findFirstInput: function(element){
		element = $(element);
		return (['input', 'select', 'textarea'].include(element.tagName.toLowerCase())) ? element : element.descendants().find(function(element){
			return element.type != 'hidden' && !element.disabled &&['input','select','textarea'] .include(element.tagName.toLowerCase());
		});
		
	}
}
Element.addMethods(kb_prototypes);
