// JavaScript Document
// general
function createSelectedList(hiddenSelected,obj){
	hiddenSelected.value = "";
	for(var i in obj.selected){
		if(obj.selected[i]){
			hiddenSelected.value += ((hiddenSelected.value.length>0)?",":"") + i;
		}
	}
	if(hiddenSelected.value == "" && obj.emptyvalue){
		hiddenSelected.value = obj.emptyvalue;
	}
}

function allowSelect(selSelected,obj,err){
	if(obj.maxopts){
		var maxopts = parseInt(obj.maxopts.nr);
		if(selSelected.options.length == 1 && selSelected.options[0].value == "") maxopts++;
		if(selSelected.options.length >= maxopts){
			if(err && obj.maxopts.label != "") alert(obj.maxopts.label);
			return false;
		}
	}
	return true;
}

// Parent - Child selects
function writeChildren(selParent,selChildren,obj){
	var i,aChild,txt,pid = selParent.options[selParent.selectedIndex].value;
	var before="",after="";
	if(obj.surround){
		after = obj.surround.after;
		before = obj.surround.before;
	}
	selChildren.length = 0;
	if(aChild = obj.parents[pid]){
		for(i=0;i<aChild.length;i++){
			if(!obj.selected[aChild[i]] && obj.children[aChild[i]]){
				if(pid==aChild[i])txt = before + obj.children[aChild[i]] + after;
				else txt = obj.children[aChild[i]];
				selChildren.options[selChildren.length] = new Option(txt,aChild[i],false,false);
			}
		}
	}
}
function selectChild(selChildren,selSelected,hiddenSelected,obj){
	var bDeleteFirst = (selSelected.options.length == 1 && selSelected.options[0].value == "");
	var bTransfer = false;
	var bError = true;
	for(var i=0;i<selChildren.options.length;i++){
		if(selChildren.options[i].selected){
			if(allowSelect(selSelected,obj,bError)){
				selSelected.options[selSelected.options.length] = new Option(obj.children[selChildren.options[i].value],selChildren.options[i].value,false,false);
				obj.selected[selChildren.options[i].value] = true;
				selChildren.options[i--] = null;
				bTransfer = true;
			}
			else bError = false;
		}
	}
	if(bTransfer){
		createSelectedList(hiddenSelected,obj);
		if(bDeleteFirst){
			selSelected.options[0] = null;
		}
	}
}
function deleteChild(selParent,selChildren,selSelected,hiddenSelected,obj){
	var bTransfer = false;
	if(obj.maxopts){
		var maxopts = parseInt(obj.maxopts.nr);
		if(maxopts==1 && selSelected.options.length > 0) selSelected.options[0].selected = true;
	}
	for(var i=0;i<selSelected.options.length;i++){
		if(selSelected.options[i].selected){
			obj.selected[selSelected.options[i].value] = false;
			selSelected.options[i--] = null;
			bTransfer = true;
		}
	}
	if(bTransfer){
		writeChildren(selParent,selChildren,obj);
		createSelectedList(hiddenSelected,obj);
		if(obj.label.length>0 && selSelected.options.length==0){
			selSelected.options[0] = new Option(obj.label,"",false,false);
		}
	}
}
function initParentChild(selParent,selChildren,selSelected,hiddenSelected,obj){
	selSelected.length = 0;
	hiddenSelected.value = "";
	for(var i in obj.selected){
		if(obj.selected[i]){
			if(obj.children[i] && allowSelect(selSelected,obj,false)){
				selSelected.options[selSelected.length] = new Option(obj.children[i],i,false,false);
				hiddenSelected.value += ((hiddenSelected.value.length>0)?",":"") + i;
			}
			else {
				obj.selected[i] = false;
			}
		}
	}
	if(hiddenSelected.value == "" && obj.emptyvalue){
		hiddenSelected.value = obj.emptyvalue;
	}
	writeChildren(selParent,selChildren,obj);
	if(obj.label.length>0 && selSelected.options.length==0){
		selSelected.options[0] = new Option(obj.label,"",false,false);
	}
}
// Double select
function writeLeftOptions(selLeft,obj){
	var i,aOpts,txt;
	selLeft.length = 0;
	if(aOrder = obj.order){
		for(i=0;i<aOrder.length;i++){
			if(!obj.selected[aOrder[i]] && obj.opts[aOrder[i]]){
				txt = obj.opts[aOrder[i]];
				selLeft.options[selLeft.length] = new Option(txt,aOrder[i],false,false);
			}
		}
	}
}
function selectOption(selLeft,selSelected,hiddenSelected,obj){
	var bDeleteFirst = (selSelected.options.length == 1 && selSelected.options[0].value == "");
	var bTransfer = false;
	for(var i=0;i<selLeft.options.length;i++){
		if(selLeft.options[i].selected){
			selSelected.options[selSelected.options.length] = new Option(obj.opts[selLeft.options[i].value],selLeft.options[i].value,false,false);
			obj.selected[selLeft.options[i].value] = true;
			selLeft.options[i--] = null;
			bTransfer = true;
		}
	}
	if(bTransfer){
		createSelectedList(hiddenSelected,obj);
		if(bDeleteFirst){
			selSelected.options[0] = null;
		}
	}
}
function deleteOption(selLeft,selSelected,hiddenSelected,obj){
	var bTransfer = false;
	for(var i=0;i<selSelected.options.length;i++){
		if(selSelected.options[i].selected){
			obj.selected[selSelected.options[i].value] = false;
			selSelected.options[i--] = null;
			bTransfer = true;
		}
	}
	if(bTransfer){
		writeLeftOptions(selLeft,obj);
		createSelectedList(hiddenSelected,obj);
		if(obj.label.length>0 && selSelected.options.length==0){
			selSelected.options[0] = new Option(obj.label,"",false,false);
		}
	}
}
function initTwoSelect(selLeft,selSelected,hiddenSelected,obj){
	selSelected.length = 0;
	hiddenSelected.value = "";
	for(var i in obj.selected){
		if(obj.selected[i]){
			if(obj.opts[i]){
				selSelected.options[selSelected.length] = new Option(obj.opts[i],i,false,false);
				hiddenSelected.value += ((hiddenSelected.value.length>0)?",":"") + i;
			}
			else{
				obj.selected[i] = false;
			}
		}
	}
	if(hiddenSelected.value == "" && obj.emptyvalue){
		hiddenSelected.value = obj.emptyvalue;
	}
	writeLeftOptions(selLeft,obj);
	if(obj.label.length>0 && selSelected.options.length==0){
		selSelected.options[0] = new Option(obj.label,"",false,false);
	}
}
// html buttons
function addCode(obj,code){
	if(document.selection){
		if(obj){
			var t,r = document.selection.createRange();
			if(r.parentElement() == obj){
				r.text = "<"+code+">"+r.text+"</"+code+">";
			}
			else if(t=obj.type){
				if(t=="text"||t=="textarea") obj.value += "<"+code+"></"+code+">";
			}
		}
	}
}