/* $Id: functions.js 2736 2009-09-02 11:46:08Z stefan.schult $ */
function doOnChange(){}
function doOnFocus() {}
function doOnFormComplete() {}
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function clearDependingInputs(which, depInput) {
	var childInputs = "";
	var allBoxes = document.getElementsByName(which.name);
	for(i=0; i<allBoxes.length; i++) {
		if((which.type == "radio" && allBoxes[i].value != which.value) || (which.type == "checkbox" && !which.checked)) {
			var parentP = getParentP(allBoxes[i]);
			childInputs = parentP.getElementsByTagName("input");
			for(j=0;j<childInputs.length;j++) {
				if(childInputs[j].type == "text") {
					childInputs[j].value = "";
				}
			}
		}
	}
	if(depInput && !which.checked) document.getElementById("id-input-"+depInput).value = "";
}

function checkBoxOnEvent(objInput, destBox) {
	var parentP = getParentP(objInput);
	clearDependingInputs(objInput);
	childInputs = parentP.getElementsByTagName("input");
	for(j=0;j<childInputs.length;j++) {
		if((childInputs[j].type == "radio" || childInputs[j].type == "checkbox") && objInput.value != "") {
			childInputs[j].checked = "checked";
		} else if(childInputs[j].type == "checkbox" && objInput.value == "") {
			childInputs[j].checked = false;
		}
	}
	if(destBox && document.getElementById("id-input-"+destBox)) {
		if(document.getElementById("id-input-"+destBox).type == "checkbox" && objInput.value == "") {
			document.getElementById("id-input-"+destBox).checked = false;
		} else if (objInput.value != "") {
			document.getElementById("id-input-"+destBox).checked = "checked";
		}
	}
}

function getParentP(obj) {
	var parentP = obj.parentNode;
	while(parentP.tagName.toLowerCase() != "p") {
		parentP = parentP.parentNode;
	}
	return parentP;
}

// obj = obj to change className
// classN = which CSS-Class should be set/removed
// add = true/false for adding CSS-Class (false = remove Class)

function setCssClass(obj, classN, add) {
	if(obj != null) {
		var origClassN = obj.className;
		var hasClassAlready = (origClassN.indexOf(classN) != -1) ? true : false;
		if((hasClassAlready && add) || (!hasClassAlready && !add)) return;
		var newClassN;
		if(hasClassAlready && !add) {
			if(origClassN != classN) {
				newClassN = origClassN.substring(0, origClassN.indexOf(classN)) + origClassN.substring(origClassN.indexOf(classN)+1+classN.length, origClassN.length);
			} else {
				newClassN = "";
			}
		} else {
			newClassN = (origClassN.length != 0) ? (origClassN + " " + classN) : classN;
		}
		//alert(obj.nodeName + "---" + origClassN + "---" + newClassN);
		obj.className = newClassN;
		if((obj.getAttribute("type") == "radio") || (obj.getAttribute("type") == "checkbox")) obj.style.backgroundColor = "transparent";
	}
}

function getLabelByInput(inputObj) {
	if(inputObj !=  null) {
		var labels = document.getElementsByTagName("label");
		for(i=0; i < labels.length; i++) {
			if(labels[i].htmlFor == inputObj.id) {
				return labels[i];
			}
		}
	}
	return null;
}

function setCssClassInputAndLabel(inputObj, classN, add) {
	setCssClass(getLabelByInput(inputObj), classN, add);
	setCssClass(inputObj, classN, add);
}

function showBlock(which){
	$(which).removeClassName('inv');
}
function hideBlock(which){
	$(which).addClassName('inv');
}


/* Utils-Class */
var Utils = Class.create({
	parentObj: null,
	initialize: function(parentObj) {
		this.parentObj = $(parentObj);
	},
	createInputCurrency: function(inpName, labelText, childNode){
		var newP = document.createElement("p");
		var parent = this.insertAfter(childNode, newP);
		this.createElem(parent, "label", labelText);
		this.createElem(parent, "input");
		this.createElem(parent, "span", " EUR");
		sumID = this.parentObj.id+"-" + inpName;
		parent.getElementsByTagName("label")[0].setAttribute("for", sumID);
		parent.getElementsByTagName("input")[0].setAttribute("id", sumID);
		parent.getElementsByTagName("input")[0].readOnly = true;
		parent.getElementsByTagName("input")[0].setAttribute("name", sumID);
		parent.getElementsByTagName("input")[0].className = "disabeldInput";
		if(navigator.userAgent.indexOf("MSIE") != -1 && navigator.appVersion.indexOf("5.5") != -1) {
			document.getElementById("colsStructure").style.height = (document.getElementById("colsStructure").offsetHeight + 29) + "px";
		}
		return {"parent":parent, "input":parent.getElementsByTagName("input")[0]};
	},
	insertAfter: function(childNode, element){
		var nextSib = null;
		if(childNode != null){
			var childNode = (childNode.isElement) ? childNode : $(childNode) ;
			nextSib = childNode.next(0);
		}
		var insertChild = null;
		if(nextSib){
			insertChild = childNode.up(0).insertBefore(element, nextSib);
		} else {
			insertChild = this.parentObj.getElementsByTagName("div")[0].appendChild(element);
		}
		return insertChild;
	},
	getSelectValue: function(value){
		return value.split("|")[0];
	},
	createElem: function (parentObj, elementObj, textObj){
		var newElem = document.createElement(elementObj);
		parentObj.appendChild(newElem);
		if(textObj) {
			var newElemText = document.createTextNode(textObj);
			parentObj.getElementsByTagName(elementObj)[parentObj.getElementsByTagName(elementObj).length-1].appendChild(newElemText);
		}
	},
	cd: function(){
		return null;
		if (typeof console != "undefined") { // safari, firebug
			if (typeof console.debug != "undefined") { // firebug
				console.debug(arguments);
			}
		}
	}
});
function checkBoxesWithFieldsets(parent){
	var form = $(document.getElementsByTagName('form')[0]);
	var removeChecked = function(fieldset){
		fieldset.select("input[type='radio'], input[type='checkbox']").each(function(subInput){
			subInput.checked = false;
			toggleFieldsets(subInput, false);
		});
	};
	var toggleFieldsets = function(input, showField){
		var $fieldsets = $$("fieldset." + input.name.substring(6));
		if($fieldsets.length > 0) {
			$fieldsets.each(function(fieldset){
				if(showField){
					fieldset.removeClassName("inv");
				} else {
					if(input.hasClassName("invFieldset")) fieldset.addClassName("inv");
					removeChecked(fieldset)
				}
			});
		}
	};
	$(parent).select(".hasFieldset").each(function(input){
		if(input.type == "radio"){
			form.getInputs('radio', input.name).each(function(radioInput){
				if(radioInput != input){
					radioInput.observe("click", function(){
						toggleFieldsets(input, false);
					});
				}
			});
		};
		toggleFieldsets(input, input.checked);
		input.observe("click", function(event){
			toggleFieldsets(this, this.checked);
		});
	});
}
