var overOptionCss = "background: #fff; color: #000";
var sizedBorderCss = "2 inset buttonhighlight";
var globalSelect;	//This is used when calling an unnamed selectbox with onclick="this.PROPERTY"

var ie4 = (document.all != null);

var q = 0;

  function validate_JS_selection(val)
  {
    
	var valarr = val.split('|');
	val = valarr[0];
	var lnk = valarr[1];
	var prodsuche_result = valarr[2];
	if(lnk) {
/*		if(lnk.substr(0,7) != "http://") {
			lnk = "http://" + lnk;
		}*/
	    location.href = lnk;
	} else {
		document.mainform.prod_service_id.value = val;
		document.mainform.page_id.value = prodsuche_result;
		document.mainform.submit()
	}
  }

function getLeft(l)
{	
  if(l.style.position == "absolute") {
  	return 0;
  }
  if (l.offsetParent) return (l.offsetLeft + getLeft(l.offsetParent));
  else return (l.offsetLeft);
}
function getTop(l)
{
  	///alert(l.nodeName+" "+l.offsetTop+" "+l.style.top+" "+l.id);
  //if (l.offsetParent) return (l.offsetTop + getTop(l.offsetParent));
  if(l.style.position == "absolute") {
  	return 0;
  }
  if (l.offsetParent) { 
     return (l.offsetTop + getTop(l.offsetParent));
  } else {
   return (l.offsetTop);
  }
}

function initSelectBox(el) {
	
	var size = el.getAttribute("size");

// These two lines combined with execution in optionClick() allow you to write:
//		onchange="alert(this.options[this.selectedIndex].value)"
	if(ie4) {
		el.options = el.children[1].children;
		dropdown = el.children[1];
	} else {
		el.options = new Array();
		dropdown = el.childNodes[3];
		j=0;
		for(i=0; i<dropdown.childNodes.length; i++) {
			if(dropdown.childNodes[i].nodeType == 1) {
				el.options[j++] = dropdown.childNodes[i];
			}
		}
	}
	copySelected(el);
	el.selectedIndex = findSelected(el);	//Set the index now!
	if (size != null) {
		if (size > 1) {
			el.size = size;
			dropdown.style.zIndex = 0;
			initSized(el);
//			window.setTimeout("initSized(" + el.id + ")", 1000);
		} else {
			el.size = 1;
			dropdown.style.zIndex = 99;
			if (dropdown.offsetHeight > 200) {
				dropdown.style.height = "200";
				dropdown.style.overflow = "auto";
			}
		}
	}
	
	highlightSelected(el,true);
}

function initSized(el) {
//alert("initSized -------->");
	var h = 0;
	el.children[0].style.display = "none";

	dropdown = el.children[1];
	dropdown.style.visibility = "visible";

	if (dropdown.children.length > el.size) {
		dropdown.style.overflow = "auto";
		for (var i=0; i<el.size; i++) {
			h += dropdown.children[i].offsetHeight;
		}

		if (dropdown.style.borderWidth != null) {
			dropdown.style.pixelHeight = h + 4; //2 * parseInt(dropdown.style.borderWidth);
		}

		else
			dropdown.style.height = h;

	}

	dropdown.style.border = sizedBorderCss;


	el.style.height = dropdown.style.pixelHeight;
}

function copySelected(el) {
	var selectedIndex = findSelected(el);
	selectedDiv = el.options[selectedIndex];
	if(ie4) {
		selectedCell = el.children[0].rows[0].cells[0];
		selectedCell.innerHTML = selectedDiv.outerHTML;
	} else {
		selectedCell = el.childNodes[1].childNodes[1].childNodes[0].childNodes[1];
		selectedCell.innerHTML = '<a href="#" class="optiondef">'+selectedDiv.innerHTML+'</div>';
	}
	
}

// This function returns the first selected option and resets the rest
// in case some idiot has set more than one to selcted :-)
function findSelected(el) {
	var selected = null;
	//ec = el.children[1].children;	//the table is the first child
	if(ie4) {
		el =  el.children[1];
		ec = el.children;
	} else {
		el =  el.childNodes[3];
		ec = el.childNodes;
	}
	ec = el.childNodes;
	var ecl = ec.length;
	j=0;	
	for (var i=0; i<ecl; i++) {
		if (ec.nodeType == 1) {
			if (ec[i].getAttribute("selected") != null) {
				if (selected == null)	// Found first selected
					selected = j;
				else
					ec[i].removeAttribute("selected");	//Like I said. Only one selected!
			}
			j++;
		}
	}
	if (selected == null)
		selected = 0;	//When starting this is the most logic start value if none is present
	//alert(selected);
	return selected;
}

function toggleDropDown(el) {
	if (el.size == 1) {
		if(ie4) {
			dropDown = el.children[1];
		} else {
			dropDown = el.childNodes[3];
		}
		if (dropDown.style.visibility == "")
			dropDown.style.visibility = "hidden";
		if (dropDown.style.visibility == "hidden") {
			doPosition(el);
			showDropDown(dropDown);
		} else
			hideDropDown(dropDown);
	}
}

function optionClick() {
	el = getReal(window.event.srcElement, "className", "option");

	if (el.className == "option") {
		dropdown  = el.parentElement;
		selectBox = dropdown.parentElement;
		
		oldSelected = dropdown.children[findSelected(selectBox)]

		if(oldSelected != el) {
			oldSelected.removeAttribute("selected");
			el.setAttribute("selected", 1);
			selectBox.selectedIndex = findSelected(selectBox);
		}

		if (selectBox.onchange != null) {	// This executes the onchange when you chnage the option
			if (selectBox.id != "") {		// For this to work you need to replace this with an ID or name
				eval(selectBox.onchange.replace(/this/g, selectBox.id));
			}
			else {
				globalSelect = selectBox;
				eval(selectBox.onchange.replace(/this/g, "globalSelect"));
			}
		}
		
		if (el.backupCss != null)
			el.style.cssText = el.backupCss;
		copySelected(selectBox);
		toggleDropDown(selectBox);
		highlightSelected(selectBox, true);
	}
}

/*
function optionOver(e) {
	if(ie4) {
		var toEl = getReal(window.event.toElement, "className", "option");
		var fromEl = getReal(window.event.fromElement, "className", "option");
	} else {
		var toEl = getReal(e.target, "className", "option");
		var fromEl = getReal(e.relatedTarget, "className", "option");
	}
	
	if (toEl == fromEl) return;
	var el = toEl;
	if (el.className == "option") {
		if (el.backupCss == null) {
			//el.backupCss = el.style.cssText;
			el.backupCss = el.style;
		}
		highlightSelected(el.parentNode.parentNode, false);
		el.style.cssText = el.backupCss + "; " + overOptionCss;
		this.highlighted = true;
	}
}

function optionOut(e) {
	if(ie4) {
		var toEl = getReal(window.event.toElement, "className", "option");
		var fromEl = getReal(window.event.fromElement, "className", "option");
		var children = fromEl.parentElement.children;
	} else {
		var toEl = getReal(e.target, "className", "option");
		var fromEl = getReal(e.relatedTarget, "className", "option");
		var children = fromEl.parentNode.childNodes;
	}
	var index = findSelected(fromEl.parentNode.parentNode);
	if (fromEl == children[index]) {
		if (toEl == null)
			return;
		if (toEl.className != "option")
			return;
	}
	
	if (toEl != null) {
		if (toEl.className != "option") {
			if (fromEl.className == "option")
				highlightSelected(fromEl.parentNode.parentNode, true);
		}
	}
	
	if (toEl == fromEl) return;
	var el = fromEl;

	if (el.className == "option") {
		if (el.backupCss != null) {
			alert(el.backupCss);
			//el.style.cssText = el.backupCss;
			if(ie4) {
				el.style.cssText = el.backupCss;
			} else {
				el.style.backgroundColor = "white";
			}
		}
	}

}
*/

function highlightSelected(el,add) {
	var selectedIndex = findSelected(el);
	//selected = el.children[1].children[selectedIndex];
	selected = el.options[selectedIndex];
	
	if (add) {
		if (selected.backupCss == null)
			selected.backupCss = selected.style.cssText;
		selected.style.cssText = selected.backupCss + "; " + overOptionCss;
	}
	else if (!add) {
		if (selected.backupCss != null)
			selected.style.cssText = selected.backupCss;
	}
}

function hideShownDropDowns(e) {
	if(ie4) {
		var e = window.event;
		var src = e.srcElement;
	} else {
		var src = e.target
	}
	var el = getReal(src, "className", "select");
	
	var spans = document.getElementsByTagName("SPAN");
	var selects = new Array();
	var index = 0;
	
	for (var i=0; i<spans.length; i++) {
		if ((spans[i].className == "select") && (spans[i] != el)) {
			if(ie4) {
				dropdown = spans[i].children[1];
			} else {
				dropdown = spans[i].childNodes[3];
			}
			if ((spans[i].size == 1) && (dropdown.style.visibility == "visible"))
				selects[index++] = dropdown;
		}
	}
	
	for (var j=0; j<selects.length; j++) {
		hideDropDown(selects[j]);
	}	

}

function hideDropDown(el) {
	if (typeof(fade) == "function")
		fade(el, false);
	else {
		el.style.visibility = "hidden";
		//alert(el.style.visibility);
	}
}

function showDropDown(el) {
	if (typeof(fade) == "function")
		fade(el, true);
	else if (typeof(swipe) == "function")
		swipe(el, 2);
	else
		el.style.visibility = "visible";
}

function initSelectBoxes() {
	var spans = document.getElementsByTagName("SPAN");
	var selects = new Array();
	var index = 0;
	
	for (var i=0; i<spans.length; i++) {
		if (spans[i].className == "select")
			selects[index++] = spans[i];
	}
	
	for (var j=0; j<selects.length; j++) {
		initSelectBox(selects[j]);
	}	
}

function getReal(el, type, value) {
	temp = el;
	while ((temp != null) && (temp.tagName != "BODY")) {
		if (eval("temp." + type) == value) {
			el = temp;
			return el;
		}
		temp = temp.parentNode;
	}
	return el;
}

function selectOption(onchange, value) {
	eval(onchange +"('"+value+"')");
}

function doPosition(el) {
	if(ie4) {
		var box = document.getElementById("box_"+el.id);
	} else {
		var box = document.getElementById("solutionbox");
		if(!box) {
			alert('Warum?');
		}
	}
	var top = getTop(box);
	var box = document.getElementById("box_"+el.id);
	var left = getLeft(box);
	if(!ie4) {
		top += 22;
		var left2 = window.innerWidth;
		var top2 = window.innerHeight;
		dropDown = el.childNodes[3];
		var elwidth = parseInt(el.style.width);
		var elheight = parseInt(el.style.height);
	} else {
		var left2 = document.body.clientWidth;
		var top2 = document.body.clientHeight;
		top += 22;
		dropDown = el.children[1];
		var elwidth = el.offsetWidth;
		var elheight = el.offsetHeight;
	}
	//alert(left + " " + top + " " + left2 + " " + top2 + " " + dropDown.offsetWidth + " " + dropDown.offsetHeight + "  " + elwidth + " " + elheight);
	if(left + dropDown.offsetWidth <= left2) {
		dropDown.style.left = left;
	} else if ( (left + el.offsetWidth - dropDown.offsetWidth) > 0 ) {
		dropDown.style.left = left + elwidth - dropDown.offsetWidth;
	} else {
		dropDown.style.left = 0;
	}
	//dropDown.style.top = top - dropDown.offsetHeight;
	dropDown.style.top = top;
	/*
	if(top + dropDown.offsetHeight <= top2) {
		dropDown.style.top = top + elheight;
	} else if ( (top - dropDown.offsetHeight) > 0 ) {
		dropDown.style.top = top - dropDown.offsetHeight;
	} else {
		dropDown.style.top = 0;
	}
	*/
}

	window.onload = initSelectBoxes;
	document.onclick = hideShownDropDowns;
/*
if (ie4) {
}
*/

