var additionalPrice=0;
var selectedMerkmale= new Array();
function iterateOverKids(element_name){
	var parent = kmap[element_name];
	if (parent == null)
		return;
	var kids=parent['kids'];
	if (kids){
		for(var i=0; i < kids.length; i++){
			var kid = kmap[kids[i]];
			if (!kid['disabled'] && kid['selected']){
				if (kid['merkmal'])
					selectedMerkmale+=kid['merkmal'];
				if (kid['price'] != 0)
					additionalPrice+=kid['price'];
			}
			iterateOverKids(kids[i]);
		}
	}
}
function checkState(){
	checkStateOfKids('node_0');
}
function checkStateOfKids(element_name){
	var parent= kmap[element_name];
	if (parent == null)
		return;
	var disabled= parent['disabled'];
	if (!disabled && parent['type'] != 0)
		disabled = !parent['selected'];
	
	//alert("parentname:"+element_name+" parentdisabled:"+parent['disabled']+" parentselected:"+parent['selected']+" parenttype:"+parent['type']+" =disabled:"+disabled);
	
	var kids=kmap[element_name]['kids'];
	if (kids){
		var selected=0, mustbeselected=-1;
		for(var i=0; i < kids.length; i++){
			var arr = kmap[kids[i]];
			var element = document.getElementById(kids[i]);
			var type = arr['type'];
			if (type==1){
				if (arr['selected']){
					var parentElement = document.getElementById('display_'+element_name);
					if (parentElement)
						parentElement.innerHTML = arr['name'];
					selected++;
				}
				if (mustbeselected == -1) 
					mustbeselected=i;
			}
			arr['disabled'] = disabled;
			if (element){
				select_element(element, arr['selected']);
				element.disabled=disabled;
			}
		}
		if (mustbeselected >= 0 && selected == 0){
			var kidName = kids[mustbeselected];
			kmap[kidName]['selected'] = true;
			
			var kid = document.getElementById(kidName);
			if (kid){
				select_element(kid, true)
			}
			var parentElement = document.getElementById('display_'+element_name);
			if (parentElement)
				parentElement.innerHTML = kmap[kidName]['name'];
		}
		for(var i=0; i < kids.length; i++)
			checkStateOfKids(kids[i]);
	} 
}


function deselectSisters(element_name){
	var parent=kmap[element_name]['parent'];
	if (parent){
		var sisters=kmap[parent]['kids'];
		if (sisters){
			for(var i=0; i < sisters.length; i++){
				if (element_name != sisters[i] && kmap[sisters[i]]['type'] == 1){
					//alert("deselecting:"+kmap[sisters[i]]['name']);
					kmap[sisters[i]]['selected']=false;
					//var sister = document.getElementById(sisters[i]);
					//if (sister) 
					//	sisterchecked=false;
					//checkStateOfKids(sisters[i]);
				}
			}
		}
		// optional parent
		if (kmap[parent]['type'] == 1){
			kmap[parent]['selected']=true;
			kmap[parent]['disabled']=false;
			deselectSisters(parent);
		}
	}
}

function selectNode(element_name, status){
	var element=document.getElementById(element_name);
	if (element){
		if (kmap[element_name]['selected'] == /*is_selected_element(element)*/status)
			return;
			
		if (status != is_selected_element(element))
			select_element(element, status);
	}
	kmap[element_name]['selected']=status;
	if (kmap[element_name]['type'] == 2){
		checkStateOfKids(element_name);
	}
	if (kmap[element_name]['type'] == 1){
		deselectSisters(element_name);
		checkStateOfKids('node_0');
	}
}

function updateNodes(){
	additionalPrice = 0;
	selectedMerkmale = new Array();
	iterateOverKids('node_0');
}

function select_node(element_name){
	//alert('node:'+element_name);
	var element=document.getElementById(element_name);
	select_node_by_state(element_name, element?is_selected_element(element):true)
	//selectNode(element_name, element?is_selected_element(element):true);
	//updatePrice();
}

function select_node_by_state(element_name, _state){
	//alert('node:'+element_name);
	selectNode(element_name, _state);
	//typeof updatePrice !="undefined"
	if (typeof updatePrice !="undefined")
		updatePrice();
}


function is_selected_element(_element) {
	if (_element.type=='checkbox' ||_element.type=='radio') {
		if (_element.checked)
			return true;
		else
			return false;
	} else if (_element.selected) {
		return true;
	} else {
		return false;
	}
}	

function select_element(_element, _state) {
	if (_element.type=='checkbox' || _element.type=='radio')
		_element.checked=_state;
	else		
		_element.selected=_state;
}

