/*
Copyright Scand LLC
*/

/*******************************************
TOEGEVOEGD Dani�l Oosterhuis - 2007/07/25
*******************************************/
	window.dhx_globalImgPath="../../gfx/cbo/";	
	
	function getCombo(id)
	{
		if (!window.dhx_glbSelectAr) return false;
		for (var j=0;j<window.dhx_glbSelectAr.length;j++) {
			if (window.dhx_glbSelectAr[j].id == id || window.dhx_glbSelectAr[j].name == id) return window.dhx_glbSelectAr[j];
		}
	}
	
	/**
		Get the value of a combobox by id
	*/
	function getComboValue(id)
	{
		for (var j=0;j<window.dhx_glbSelectAr.length;j++) {
			if (window.dhx_glbSelectAr[j].id == id || window.dhx_glbSelectAr[j].name == id) return window.dhx_glbSelectAr[j].getSelectedValue();
		}
	}
	

	/**
	 * Look if field is combo
	 */
	Array.prototype.hasCombo=function(v){
		for (i=0; i<this.length; i++){
			if (this[i].id == v) return true;
		}
		return false;
	}
	
	
	/**
	 * Refresh the options for a dependent select field
	 */
	function refreshMultipleOptions(field,filters, frozen, key)
	{
		var child = false;
		count = key;

		XML_extra = '';

		for (var j=0;j<window.dhx_glbSelectAr.length;j++) {
			if (filters.hasCombo(window.dhx_glbSelectAr[j].id)){
				var parent = false;
				parent = window.dhx_glbSelectAr[j];
				XML_extra += '&bindatt['+count+'][1]=' + parent.getSelectedValue();
				count++;
			}else{
				if (window.dhx_glbSelectAr[j].id == field) child = window.dhx_glbSelectAr[j];
			}
		}
		
		XML_extra += frozen;
		
		if (!child || !parent) return;
		
		child.XML_extra = XML_extra;
		child.clearAll();
		child.setComboText('');
		child.filterSelf(false);
		
		child.refresh;
	}
	
	
	/**
	 * Refresh the options for a dependent select field
	 */
	function refreshOptions(field,filter)
	{
		var parent,child = false;
		
		for (var j=0;j<window.dhx_glbSelectAr.length;j++) {
			if (window.dhx_glbSelectAr[j].id == filter) parent = window.dhx_glbSelectAr[j];
			 else if (window.dhx_glbSelectAr[j].id == field) child = window.dhx_glbSelectAr[j];
		}
		if (!child || !parent) return;
	
		child.XML_extra = '&bindatt[2][1]=' + parent.getSelectedValue();
		child.clearAll();
		child.setComboText('');
		child.filterSelf(false);
		
		child.focus();
	}
	
	/**
	 * Convert all selects to CBO
	 */
	function ConvertAllToCombobox()
	{
		if (window.disableCombobox == true) return false;
		var nodes = document.getElementsByTagName("SELECT");
		for (var i=0; i<nodes.length; i++) {
			if (!nodes[i].getAttribute('multiple') && nodes[i].getAttribute('data-listview') != 'dropdown') 
			{
				var ajaxsrc = nodes[i].getAttribute('ajaxsrc');
				var z = dhtmlXComboFromSelect(nodes[i]);
				
				if (ajaxsrc) z.enableFilteringMode(true,ajaxsrc,false,false); // AJAX comboboxes
				 else z.enableFilteringMode(true);// voor pre-loaded comboboxes

				if (z) i--; // is nu uit de lijst met nodes gehaald...
			}
		}
		return window.dhx_glbSelectAr;
	}

/*******************************************
EINDE Dani�l Oosterhuis - 2007/07/25
*******************************************/


function dhtmlXComboFromSelect(parent){
	if(typeof(parent)=="string")
	parent=document.getElementById(parent);
	
	var size=parent.offsetWidth;

	var z=document.createElement("SPAN");
	parent.parentNode.insertBefore(z,parent);
	parent.style.display='none';

	var s_type = parent.getAttribute('opt_type');	
	
	var combowidth = parent.getAttribute('combowidth');	
	
	var innerwidth = combowidth;
	var w= new dhtmlXCombo(z,parent.name,size,s_type,innerwidth);

	// toegevoegd Daniel
	if (parent.onchange) w.onchange = parent.onchange;
	if (parent.onrecalc) w.onrecalc = parent.onrecalc;
	if (parent.refresh) w.refresh = parent.refresh;
	if (parent.getAttribute('show_for')) w.setAttribute ('show_for', parent.getAttribute('show_for'));

	var css = null;
	if (parent.className == 'lookup') { w.tinyText = true; css = 'font-size: 0.8em'; } // toegevoegd

	if(parent.getAttribute('tabindex')) w.setAttribute('tabindex', parent.getAttribute('tabindex'));
	 //IE
	if(parent.tabIndex) { 
		 w.setAttribute('tabIndex', parent.getAttribute('tabindex')); 
	}

	var x=new Array();
	var sel=0;
	for(var i=0;i<parent.options.length;i++){
		if(parent.options[i].selected)sel=i;
		var label=parent.options[i].text;
		//var label=parent.options[i].innerHTML;
		var val=parent.options[i].getAttribute("value");
		//var css=parent.options[i].getAttribute("css");
		if((typeof(val)=="undefined")||(val===null))val=label;
		x[i]=[val,label,css];
	}

	w.addOption(x);
	
	//if (typeof(parent.refresh) == 'function') w.refresh = parent.refresh; // toegevoegd Daniel 2007/07/26
	w.id = parent.id; // toegevoegd Daniel 2007/07/26
	
	parent.parentNode.removeChild(parent);
	w.selectOption(sel);
	return w;
}

var dhtmlXCombo_optionTypes = [];

function dhtmlXCombo(parent,name,width,optionType,innerwidth){
	
	if(typeof(parent)=="string")
	parent=document.getElementById(parent);	
	
	this.optionType =(optionType != window.undefined && dhtmlXCombo_optionTypes[optionType])? optionType : 'default';
	this._optionObject = dhtmlXCombo_optionTypes[this.optionType];

	this._disabled = false;

	if(!window.dhx_glbSelectAr){
		window.dhx_glbSelectAr=new Array();
		window.dhx_openedSelect=null;
		window.dhx_SelectId=1;
		dhtmlxEvent(document.body,"click",this.closeAll);
		dhtmlxEvent(document.body,"keydown",function(e){try{if((e||event).keyCode==9)window.dhx_glbSelectAr[0].closeAll();}catch(e){}return true;});
	}

	if(parent.tagName=="SELECT")
		dhtmlXComboFromSelect(parent);
	else{		
		this._createSelf(parent,name,width,innerwidth);
	}
	dhx_glbSelectAr.push(this);
}

/*
	Toegevoegd Daniel
*/
dhtmlXCombo.prototype.focus = function ()
{	
	//this.DOMelem_input.focus(); try construct is needed because of disabled elements in advanced selections
	try{this.DOMelem_input.focus();}catch(e){};	
}

/*
	Toegevoegd Daniel
*/
dhtmlXCombo.prototype.setAttribute = function(name, value){
	this.DOMelem_input.setAttribute(name, value);
}

/*
	Toegevoegd Daniel
*/
dhtmlXCombo.prototype.getAttribute = function(name){
	return this.DOMelem_input.getAttribute(name);
}

dhtmlXCombo.prototype.enableFilteringMode = function(mode,url,cache,autosubload){
	this._filter=convertStringToBoolean(mode);

	if(url){
		this._xml=url;
		this._autoxml=convertStringToBoolean(autosubload);
	}
	if(convertStringToBoolean(cache))this._xmlCache=[];

	if (this.optionsArr.length <= 1 && this._xml) { // Daniel 2007/07/26 : De lijst met de eerste X opties tonen als er nog niets is ingevuld
		return this.loadXML(url);
	}
	
	// KNOP WEL TONEN - Dani�l 2007/07/25
	//this.DOMelem_button.style.display=(this._filter?"none":"");
}

dhtmlXCombo.prototype.disable = function(mode){
	var z=convertStringToBoolean(mode);
	if(this._disabled==z)return;
	this.DOMelem_input.disabled=z;
	this._disabled=z;
}

dhtmlXCombo.prototype.readonly = function(mode){
	this.DOMelem_input.readOnly=mode ? true : false;
}

dhtmlXCombo.prototype.getOption = function(value)
{
	for(var i=0;i<this.optionsArr.length;i++)
	if(this.optionsArr[i].value==value)
	return this.optionsArr[i];
	return null;
}

function trim(value) {
	if(value == '' || !value) return '';
	value = value.replace(/^\s+/,'');
	value = value.replace(/\s+$/,'');
	return value;
}

dhtmlXCombo.prototype.getOptionByLabel = function(value)
{
	for(var i=0;i<this.optionsArr.length;i++){
		if(this.optionsArr[i].text==value){
			return this.optionsArr[i];
		}else if(trim(this.optionsArr[i].text)==value){
			return this.optionsArr[i];
		}
	}
	return null;
}

dhtmlXCombo.prototype.getOptionByIndex = function(ind){
	return this.optionsArr[ind];
}

dhtmlXCombo.prototype.clearAll = function()
{
	this.optionsArr=new Array();
	this.redrawOptions();
	//this.setComboText('');
	//this.unSelectOption();
}

dhtmlXCombo.prototype.deleteOption = function(value)
{
	var ind=this.getIndexByValue(value);
	if(ind<0)return;
	this.optionsArr.splice(ind,1);
	this.redrawOptions();
}

dhtmlXCombo.prototype.render=function(mode){
	this._skiprender=(!convertStringToBoolean(mode));
	this.redrawOptions();
}

dhtmlXCombo.prototype.updateOption = function(oldvalue,avalue,atext,acss)
{
	var dOpt=this.getOption(oldvalue);
	if(typeof(avalue)!="object")avalue={text:atext,value:avalue,css:acss};
	dOpt.setValue(avalue);
	this.redrawOptions();
}

dhtmlXCombo.prototype.addOption = function(options)
{
	if(!arguments[0].length)
		args = [arguments];
	else
		args = options;

	this.render(false);
	for(var i=0;i<args.length;i++){
		var attr = args[i];
		if(attr.length){
			attr.value = attr[0]||"";
			attr.text = attr[1]||"";
			attr.css = attr[2]||"";
		}
		this._addOption(attr);
	}
	this.render(true);
}

dhtmlXCombo.prototype._addOption = function(attr)
{
	dOpt = new this._optionObject();
	this.optionsArr.push(dOpt);
	dOpt.setValue.apply(dOpt,[attr]);
	this.redrawOptions();
}


dhtmlXCombo.prototype.getIndexByValue = function(val){
	for(var i=0;i<this.optionsArr.length;i++)
	if(this.optionsArr[i].value == val)return i;
	return -1;
}

dhtmlXCombo.prototype.getSelectedValue = function(){
	return(this._selOption?this._selOption.value:null);
}

dhtmlXCombo.prototype.getComboText = function(){
	return this.DOMelem_input.value;
}

dhtmlXCombo.prototype.setComboText = function(text){
	//here you can manipulate the selected text
	this.DOMelem_input.value=text;
}

dhtmlXCombo.prototype.getActualValue = function(){
	return this.DOMelem_hidden_input.value;
}

dhtmlXCombo.prototype.getSelectedText = function(){
	return(this._selOption?this._selOption.text:"");
}

dhtmlXCombo.prototype.getSelectedIndex = function(){
	for(var i=0;i<this.optionsArr.length;i++)
	if(this.optionsArr[i] == this._selOption)return i;	
	return -1;
}

dhtmlXCombo.prototype.setName = function(name){
	this.DOMforSbm.name = name;
	this.name = name;
}

dhtmlXCombo.prototype.show = function(mode){
	if(convertStringToBoolean(mode))
	this.DOMelem.style.display = "";
	else
	this.DOMelem.style.display = "none";
}


dhtmlXCombo.prototype.destructor = function()
{
	var _sID = this._inID;
	this.DOMParent.removeChild(this.DOMelem);
	this.DOMlist.parentNode.removeChild(this.DOMlist);
	var s=dhx_glbSelectAr;
	this.DOMParent=this.DOMlist=this.DOMelem=0;
	this.DOMlist.combo=this.DOMelem.combo=0;
	for(var i=0;i<s.length;i++)
	{
		if(s[i]._inID == _sID)
		{
			this._selectsArr[i] = null;
			this._selectsArr.splice(i,1);
			return;
		}
	}
}
 
dhtmlXCombo.prototype._createSelf = function(selParent,name,width,innerwidth)
{
	//this defines width of combobox element
	width=width||100;	
	this.ListPosition = "Bottom";
	this.DOMParent = selParent;
	this._inID = null;
	this.name = name;

	this._selOption = null;
	this.optionsArr = Array();

	var opt = new this._optionObject();
	
	opt.DrawHeader(this,name,width);
	if (innerwidth > 36) width = innerwidth;
	
	this.DOMlist = document.createElement("DIV");
	this.DOMlist.className = 'dhx_combo_list';
	this.DOMlist.style.width=width-(_isIE?0:0)+"px";
	this.DOMlist.style.display = "none";
	document.body.insertBefore(this.DOMlist,document.body.firstChild);
	if(_isIE){
		//this.DOMlistF = document.createElement("IFRAME");
		this.DOMlistF = document.createElement("DIV"); // HTTPS Fix (IFRAME wordt als insecure beschouwd in IE6) Daniel
		this.DOMlistF.style.border="0px";
		this.DOMlistF.className = 'dhx_combo_list';
		this.DOMlistF.style.width=width-(_isIE?0:0)+"px";
		this.DOMlistF.style.display = "none";
		document.body.insertBefore(this.DOMlistF,document.body.firstChild);
	}
	
	this.DOMlist.combo=this.DOMelem.combo=this;

	this.DOMelem_input.onkeydown = this._onKey;
	this.DOMelem_input.onkeypress = this._onKeyF;
	this.DOMelem_input.onblur = this._onChange;
	this.DOMelem.onclick = this._toggleSelect;
	//this.DOMelem.onfocus = this._toggleSelect;
	this.DOMlist.onclick = this._selectOption;
	this.DOMlist.onmouseover = this._listOver;
}

dhtmlXCombo.prototype._listOver = function(e)
{
	e = e||event;
	e.cancelBubble = true;
	var node =(_isIE?event.srcElement:e.target);
	var that = this.combo;
	if(node.parentNode == that.DOMlist){
		that.unSelectOption();
		var i=0;
		for(i;i<that.DOMlist.childNodes.length;i++){
			if(that.DOMlist.childNodes[i]==node)break;
		}
		var z=that.optionsArr[i];
		that._selOption=z;
		that._selOption.select();
	}

}

dhtmlXCombo.prototype._positList = function()
{
	var pos=this.getPosition(this.DOMelem);
	if(this.ListPosition == 'Bottom'){
		this.DOMlist.style.top = pos[1]+this.DOMelem.offsetHeight+"px";
		this.DOMlist.style.left = pos[0]+"px";
	}
	else{
		this.DOMlist.style.top = pos[1]+"px";
		this.DOMlist.style.left = pos[0]+this.DOMelem.offsetWidth+"px";
	}
}

dhtmlXCombo.prototype.getPosition = function(oNode,pNode){
	if(!pNode)
	var pNode = document.body

	var oCurrentNode=oNode;
	var iLeft=0;
	var iTop=0;
	while((oCurrentNode)&&(oCurrentNode!=pNode)){
		iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;
		iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;
		oCurrentNode=oCurrentNode.offsetParent;
	}
	if(pNode == document.body){
		if(_isIE){
			if(document.documentElement.scrollTop)
			iTop+=document.documentElement.scrollTop;
			if(document.documentElement.scrollLeft)
			iLeft+=document.documentElement.scrollLeft;
		}
		else
		if(!_isFF){
			iLeft+=document.body.offsetLeft;
			iTop+=document.body.offsetTop;
		}
	}
	return new Array(iLeft,iTop);
}

dhtmlXCombo.prototype._correctSelection = function(){
	for(var i=0;i<this.optionsArr.length;i++)
		if(!this.optionsArr[i].isHidden())
			return this.selectOption(i,true);
}

dhtmlXCombo.prototype.selectNext = function(step){
	var z=this.getSelectedIndex()+step;
	while(this.optionsArr[z]){
		if(!this.optionsArr[z].isHidden())
		return this.selectOption(z);
		z+=step;		
	}
}

dhtmlXCombo.prototype._onKeyF = function(e){
	
	var that=this.parentNode.combo;
	var ev=e||event;
	
	var self = this.parentNode._self;
	var z=self.getOptionByLabel(self.DOMelem_input.value);
	self.DOMelem_hidden_input.value = z?z.value:self.DOMelem_input.value;
	self.DOMelem_hidden_input2.value =(z==null);
	
	
	if(ev.keyCode=="13" || ev.keyCode=="27"){
		//new part to close dropdown on first click and submit form on second click, Bart 16-09-2008
		if(that.DOMlist.style.display == "block"){
			that.closeAll();
			return false;
		} else {			
			document.forms['selectform'].submit();
			return false;			
		}		
	}
	return true;
}

dhtmlXCombo.prototype._onKey = function(e){
	var that=this.parentNode.combo;
	var ev=(e||event).keyCode;

	if((that.DOMlist.style.display!="block")&&(ev!="13")&&(ev!="9"))
	that.DOMelem.onclick(e||event);

	window.setTimeout(function(){that._onKeyB(ev);},1);
}

dhtmlXCombo.prototype._onKeyB = function(ev)
{
	if (ev == 16) return; // SHIFT toets negeren : Daniel 2007/07/26
	if (ev == 40){ // arrow down
		//Here you can make bigger steps,eg selectNext(2) for double step
		var z=this.selectNext(1);
		
	}else if(ev==38){ // arrow up
		//Here you can make bigger steps,eg selectNext(-2) for double step
		this.selectNext(-1);
	}else{
		if(this._filter)return this.filterSelf((ev==8)||(ev==46));
		for(var i=0;i<this.optionsArr.length;i++)
		if(this.optionsArr[i].data()[1]==this.DOMelem_input.value){
			this.selectOption(i);
			return false;
		}
		this.unSelectOption();
	}
	return true;
}

//dhtmlXCombo.prototype._onChange = function(e)
//{
//	(e||event).cancelBubble = true; // Toegevoegd Dani... om de bubble te stoppen :)
//	var self = this.parentNode._self;
//	if (self.DOMelem_input.value == self.DOMelem_hidden_text) return; // Daniel: Als er niets veranderd is, dan ook niets veranderen :)
//
//	var z=self.getOptionByLabel(self.DOMelem_input.value);
//	//this line made it unpossible to modify the text options with spaces at the beginning
//	//self.DOMelem_hidden_input.value = z?z.value:self.DOMelem_input.value;
//	self.DOMelem_hidden_input2.value =(z==null);
//	if (z) self.DOMelem_hidden_text = self.DOMelem_input.value; // Toegevoegd Daniel (als een geldige optie is geselecteerd, dan de tekst opslaan)
//	
//	if (self.onchange) self.onchange(); // DANIEL 2007/07/26 
//}

dhtmlXCombo.prototype._onChange = function(e)
{
	(e||event).cancelBubble = true; // Toegevoegd Dani... om de bubble te stoppen :)
	var self = this.parentNode._self;
	if (self.DOMelem_input.value == self.DOMelem_hidden_text) return; // Daniel: Als er niets veranderd is, dan ook niets veranderen :)

	var z=self.getOptionByLabel(self.DOMelem_input.value);

	// For the tree view in combobox he doesn't understand the whitespaces before the printed label. He is made I tell you!!!!
	if(self.name != null && z == null){
		var selected_value = getComboValue(self.name);
		self.DOMelem_hidden_input.value = selected_value;
		self.DOMelem_hidden_input2.value =(selected_value==null);
	}else{
		self.DOMelem_hidden_input.value = z?z.value:self.DOMelem_input.value;
		self.DOMelem_hidden_input2.value =(z==null);	
	}

	if (z) {
		self.DOMelem_hidden_text = self.DOMelem_input.value; // Toegevoegd Daniel (als een geldige optie is geselecteerd, dan de tekst opslaan)
	}else { // Toegevoegd Ralph (als er geen geldige optie is geselecteerd, gooi leeg)
		if(!z && (self.DOMelem_hidden_input.value == '' && self.DOMelem_hidden_input.value == null)){
			self.DOMelem_input.value = ''; // clear the value			
			self.DOMelem_hidden_input.value = '';
			self.redrawOptions();
			//self.focus();
		}
	}
	
	if (self.onchange) self.onchange(); // DANIEL 2007/07/26 
}

dhtmlXCombo.prototype.redrawOptions = function(){
	if(this._skiprender)return;
	for(var i=this.DOMlist.childNodes.length-1;i>=0;i--)
	this.DOMlist.removeChild(this.DOMlist.childNodes[i]);
	for(var i=0;i<this.optionsArr.length;i++)
	this.DOMlist.appendChild(this.optionsArr[i].render());
}

dhtmlXCombo.prototype.loadXML = function(url){
	this._load=true;
	if (this.XML_extra) url += this.XML_extra; // voor listfilters Daniel 2007/07/27
	
	if((this._xmlCache)&&(this._xmlCache[url]))
	this._fillFromXML(this,null,null,null,this._xmlCache[url]);
	else{
		var xml=(new dtmlXMLLoaderObject(this._fillFromXML,this,true,true));
		xml._cPath=url;
		xml.loadXML(url);
	}
}

dhtmlXCombo.prototype.loadXMLString = function(astring){
	var xml=(new dtmlXMLLoaderObject(this._fillFromXML,this,true,true));
	xml.loadXMLString(astring);
}

dhtmlXCombo.prototype._fillFromXML = function(obj,b,c,d,xml){
	if(obj._xmlCache)obj._xmlCache[xml._cPath]=xml;

	var top=xml.doXPath("//complete");
	var options=xml.doXPath("//option");
	obj.render(false);
	if((!top[0])||(!top[0].getAttribute("add"))){
		obj.clearAll();
		obj._lastLength=options.length;
	}else
		obj._lastLength+=options.length;
	
	var sel=0;	
	for(var i=0;i<options.length;i++){
		var attr = new Object();
		attr.text = options[i].firstChild? options[i].firstChild.nodeValue : "";		
		if (options[i].getAttribute('selected')) sel=i;
		if (obj.tinyText) { attr.css = 'font-size: 0.8em'; }
		for(var j=0;j<options[i].attributes.length;j++){
			var a = options[i].attributes[j];
			if(a) attr[a.nodeName] = a.nodeValue;
		}
		obj._addOption(attr);
	}
	//this.DOMlist.style.width = '300px';
	obj.render(true);
	if((obj._load)&&(obj._load!==true))
		obj.loadXML(obj._load);
	else{
		obj._load=false;
		if((!obj._lkmode)&&(!obj._filter))
		obj._correctSelection();
	}	
	
	if (options.length == 2) {		
		obj.selectOption(1); // Als er maar 1 optie is opgehaald, dan die selecteren (dependent selects)
	}
}

dhtmlXCombo.prototype.unSelectOption = function(){
	if(this._selOption)
	this._selOption.deselect();
	this._selOption=null;
}

dhtmlXCombo.prototype.selectOption = function(ind,filter){
	this.unSelectOption();
	var z=this.optionsArr[ind];
	if(!z) return;
	this._selOption=z;
	this._selOption.select();

	var corr=this._selOption.content.offsetTop+this._selOption.content.offsetHeight-this.DOMlist.scrollTop-this.DOMlist.offsetHeight;
	if(corr>0)this.DOMlist.scrollTop+=corr;
	corr=this.DOMlist.scrollTop-this._selOption.content.offsetTop;
	if(corr>0)this.DOMlist.scrollTop-=corr;

	var data=this._selOption.data();

	if (data[0]==""||data[0]==0) data[1] = ""; // Toegevoegd Daniel: Als er geen waarde bij de optie hoort, dan ook niet invullen in CBO
	
	this.DOMelem_hidden_input.value=data[0];
	this.DOMelem_hidden_input2.value = "false";
	if((this._autoxml)&&((ind+1)==this._lastLength))
	this._fetchOptions(ind+1,this._lasttext||"");

	if(filter){
		var text=this.getComboText();
		if(text!=data[1]){
			this.setComboText(data[1]);
			dhtmlXRange(this.DOMelem_input,text.length+1,data[1].length);
		}
	}
	else
		this.setComboText(data[1]);
	this._selOption.RedrawHeader(this);
}

dhtmlXCombo.prototype._selectOption = function(e){
	(e||event).cancelBubble = true;
	var node=(_isIE?event.srcElement:e.target);
	var that=this.combo;
	while(!node._self){
		node = node.parentNode;
		if(!node)
		return;
	}
	
	var i=0;
	for(i;i<that.DOMlist.childNodes.length;i++){
		if(that.DOMlist.childNodes[i]==node)break;
	}
	that.selectOption(i);
	that.closeAll();
}

dhtmlXCombo.prototype.openSelect = function(showall){
	if(this._disabled)return;
	this.closeAll();
	this._positList();
	this.DOMlist.style.display="block";
	if(_isIE)this._IEFix(true);
	this.DOMelem_input.focus();

	if(this._filter && !showall) this.filterSelf(); // Aangepast Daniel 2007/07/30: filter niet toepassen als iemand op de CBO klikt
}

dhtmlXCombo.prototype._toggleSelect = function(e)
{
	var that=this.combo;
	dhtmlXRange(that.DOMelem_input,0,that.DOMelem_input.value.length); // Toegevoegd Daniel 2007/07/26: onclick automatisch de tekst in de CBO selecteren
	if(that.DOMlist.style.display == "block"){
		that.closeAll();
	}else{		
		that.openSelect(true);
	}
	(e||event).cancelBubble = true;
}

dhtmlXCombo.prototype._fetchOptions=function(ind,text){
	//if(text=="")return this.clearAll(); // DANIEL 2007/07/26
	var url=this._xml+((this._xml.indexOf("?")!=-1)?"&":"?")+"pos="+ind+"&mask="+escape(text);
	if(text=="") return this.loadXML(url); // DANIEL 2007/07/26 - terugvallen naar de standaardlijst als er geen tekst is ingevuld
	this._lasttext=text;
	if(this._load)this._load=url;
	else this.loadXML(url);
}

dhtmlXCombo.prototype._fetchOption=function(ind,text){
	//if(text=="")return this.clearAll(); // DANIEL 2007/07/26
	var url=this._xml+((this._xml.indexOf("?")!=-1)?"&":"?")+"pos="+ind+"&exact_mask="+escape(text);
	if(text=="") return this.loadXML(url); // DANIEL 2007/07/26 - terugvallen naar de standaardlijst als er geen tekst is ingevuld
	this._lasttext=text;
	if(this._load)this._load=url;
	else this.loadXML(url);
}

dhtmlXCombo.prototype.filterSelf = function(mode)
{
	var text=this.getComboText();
	if(this._xml){ // AJAX
		this._lkmode=mode;
		this._fetchOptions(0,text);
	} 
	
	try{var filter=new RegExp("^"+text,"i");}catch(e){var filter=new RegExp("^"+text.replace(/[\[\]\{\}\(\)]/g,"\\&1"));}

	var ind=-1;
	for(var i=0;i<this.optionsArr.length;i++)
		this.optionsArr[i].hide(!filter.test(this.optionsArr[i].text));
	
	if(!mode)
		this._correctSelection();
}

dhtmlXCombo.prototype._IEFix = function(mode){
	this.DOMlistF.style.display=(mode?"block":"none");
	this.DOMlistF.style.top=this.DOMlist.style.top;
	this.DOMlistF.style.left=this.DOMlist.style.left;
}

dhtmlXCombo.prototype.closeAll = function()
{
	if(window.dhx_glbSelectAr)
	for(var i=0;i<dhx_glbSelectAr.length;i++)
	if(dhx_glbSelectAr[i].DOMlist.style.display=="block"){
		var z = dhx_glbSelectAr[i].getOptionByLabel(dhx_glbSelectAr[i].DOMelem_input.value);		
		if(!z && (dhx_glbSelectAr[i]._lasttext != '' && dhx_glbSelectAr[i]._lasttext != null)){				
			$.prompt('De waarde "' + dhx_glbSelectAr[i]._lasttext + '" komt niet voor in de lijst.', null, this);							
		}
		dhx_glbSelectAr[i].DOMlist.style.display = "none";
		if(_isIE)dhx_glbSelectAr[i]._IEFix(false);
	}
}

function dhtmlXRange(InputId,Start,End)
{
	var Input = typeof(InputId)=='object' ? InputId : document.getElementById(InputId);
	try{Input.focus();}catch(e){};
	var Length = Input.value.length;
	Start--;
	if(Start < 0 || Start > End || Start > Length)
	Start = 0;
	if(End > Length)
	End = Length;
	if(Input.setSelectionRange){
		Input.setSelectionRange(Start,End);
	}else if(Input.createTextRange){
		var range = Input.createTextRange();
		range.moveStart('character',Start);
		range.moveEnd('character',End-Length);
		range.select();
	}
}

dhtmlXCombo_defaultOption = function(){
	this.init();
}

dhtmlXCombo_defaultOption.prototype.init = function(){
	this.value = null;
	this.text = "";
	this.selected = false;
	this.css = "";
}

dhtmlXCombo_defaultOption.prototype.select = function(){
	if(this.content);
	this.content.className="dhx_selected_option";
}

dhtmlXCombo_defaultOption.prototype.hide = function(mode){
	this.render().style.display=mode?"none":"";
}

dhtmlXCombo_defaultOption.prototype.isHidden = function(){
	return(this.render().style.display=="none");
}

dhtmlXCombo_defaultOption.prototype.deselect = function(){
	if(this.content)this.render();
	this.content.className="";
}

dhtmlXCombo_defaultOption.prototype.setValue = function(attr){
	this.value = attr.value||"";
	this.text = attr.text||"";
	this.css = attr.css||"";
	this.content=null;
}

dhtmlXCombo_defaultOption.prototype.render = function(){
	if(!this.content){
		this.content=document.createElement("DIV");
		this.content._self = this;
		this.content.style.cssText='width:100%;overflow:hidden;'+this.css; // aangepast Daniel
		this.content.innerHTML=this.text;
	}
	return this.content;
}

dhtmlXCombo_defaultOption.prototype.data = function(){
	return [this.value,this.text];
}

dhtmlXCombo_defaultOption.prototype.DrawHeader = function(self,name,width)
{	
	var z=document.createElement("DIV");
	z.style.width = width+"px";	
	z.className = 'dhx_combo_box';
	z._self = self;
	self.DOMelem = z;	
	this._DrawHeaderInput(self,name,width);
	this._DrawHeaderButton(self,name,width);
	self.DOMParent.appendChild(self.DOMelem);
}

dhtmlXCombo_defaultOption.prototype._DrawHeaderInput = function(self,name,width)
{		
	var z=document.createElement('input');
	z.className = 'dhx_combo_input';
	z.type = 'text';
	z.style.width =(width-19)+'px';
	self.DOMelem.appendChild(z);
	self.DOMelem_input = z;

	z = document.createElement('input');
	z.type = 'hidden';
	z.name = name;
	self.DOMelem.appendChild(z);
	self.DOMelem_hidden_input = z;

	z = document.createElement('input');
	z.type = 'hidden';
	z.name = "new_value_"+name;
	z.value="true";
	self.DOMelem.appendChild(z);
	self.DOMelem_hidden_input2 = z;

	// een property waarin de tekst van de huidige geselecteerde optie wordt bewaard // Daniel
	self.DOMelem_hidden_text = null;
}

dhtmlXCombo_defaultOption.prototype._DrawHeaderButton = function(self,name,width)
{
	var z=document.createElement('img');
	z.className = 'dhx_combo_img';
	z.src =(window.dhx_globalImgPath?dhx_globalImgPath:"")+'combo_select_blue24.gif';
	self.DOMelem.appendChild(z);
	self.DOMelem_button=z;
}

dhtmlXCombo_defaultOption.prototype.RedrawHeader = function(self)
{
}


dhtmlXCombo_optionTypes['default'] = dhtmlXCombo_defaultOption;


