function ZoekSelectie() {
	this.aMogelijkheden= new Array();				//	Aankomstdata array 			[...]

	this.isBreakLoose= 0;

	//	Elementen van aMogelijkheden array element:
	var Mogelijkheden_ReisSoort= 0;					//	reissoorten.ReisSoortID
	var Mogelijkheden_Aankomst= 1;					//	arrangvertrek.Datum
	var Mogelijkheden_Verblijfsduur= 2;				//	arrangementen.Nachten
	var Mogelijkheden_ObjType= 2;					//
	var Mogelijkheden_Personen= -1;					//	-1 betekent 'niet van invloed op het aantal mogelijkheden'

	this.aReisSoorten= new Array();					//	Reissoorten array 			[ID, Omschrijving]
	this.aLanden= new Array();						//	Landen array 				[ID, Omschrijving]
	this.aVerblijfsduur= new Array();				//	Verblijfsduur array			[ID, Omschrijving]
	this.aAankomst= new Array();					//	Aankomstdagen array			[ID, Omschrijving]
	this.aPersonen= new Array();					//	Aantal personen array 		[ID, Omschrijving]

	// Toegevoegd voor breakloose
	this.aObjType= new Array();						//	Accommodatietypes			[ID, Omschrijving]

	this.DefaultValue_ReisSoort= 0;					//	Default waarde (initiele waarde) ReisSoort
	this.DefaultValue_Verblijfsduur= 0;				//	,,
	this.DefaultValue_Aankomst= 0;					//	,,
	this.DefaultValue_Personen= 0;					//	,,
	// Breakloose
	this.DefaultValue_ObjType= 0;					//	Default waarde accommodatietype

	//	Selectiecriteria ID's:
	this.SelCrit_ReisSoort= 0;						//	Reisssoort
	this.SelCrit_Verblijfsduur= 1;					//	Verblijfsduur
	this.SelCrit_Aankomst= 2;						//	Aankomst datum
	this.SelCrit_Personen= 3;						//	Aantal personen
	this.SelCrit_ObjType= 4;						//	Accommodatie type

	var aSelCrit_ID= new Array(this.SelCrit_ReisSoort, this.SelCrit_Verblijfsduur, this.SelCrit_Aankomst, this.SelCrit_Personen);	//	
	var aSelCritValues;								//	array van (ingevulde) selectie-criteria value
	var aSelectedMogelijkheden;						//	index-array van geselecteerde mogelijkheden
	
	var aReisSoortID2LandID;						//	index-array voor bepalen van LandID    van een ReisSoortID 	(aReisSoortID2LandID[<ReisSoortID>]== <LandID>)
	var aLandID2LandDescr;							//	index-array voor bepalen van LandDescr van een LandID 		(aLandID2LandDescr[<LandID>]== <LandDescr>)

	this.Initialize = function Initialize() {
		this.Set_aReisSoortID2LandID();
		this.Set_aLandID2LandDescr();
		
		this.SetSelCritValues_2Default();
		this.SetAllSelCritOptions();
		/* for (var i in aSelCrit_ID) */
		for (var i= 0;i< aSelCrit_ID.length;i++)
			this.SetValue(aSelCrit_ID[i], this.SelCrit_DefaultValue(aSelCrit_ID[i]));
		if (this.isBreakLoose)
			this.SetValue(this.SelCrit_ObjType, this.SelCrit_DefaultValue(this.SelCrit_ObjType));
		else
			this.SetValue(this.SelCrit_Personen, this.SelCrit_DefaultValue(this.SelCrit_Personen));
	}

	this.Reset = function Reset() {
		this.Initialize();
	}

	this.Check = function Check() {
		this.SetSelCritValues_2Input();					//	Bepaal alle ingevulde selectie criteria
		this.SetAllSelCritOptions();
		/*for (var i in aSelCrit_ID)*/
		for (var i= 0;i< aSelCrit_ID.length;i++)
			this.SetValue(aSelCrit_ID[i], aSelCritValues[aSelCrit_ID[i]]);
	}

	this.SetAllSelCritOptions = function SetAllSelCritOptions() {
		/*for (var i in aSelCrit_ID)*/
		for (var i= 0;i< aSelCrit_ID.length;i++) {					//	Per selectie criterium (aSelCrit_ID[i])
			this.SelectMogelijkheden(aSelCrit_ID[i]);	//	-	Maak lijst van Mogelijkheden o.b.v. alle -behalve iSelCritID- selectiecreria.
			this.SetSelCritOptions(aSelCrit_ID[i]);		//	-	Zet resulterende option mogelijkheden voor iSelCritID
		};
	}

	this.SetValue = function SetValue(iSelCritID, Value) {
		var oControl= this.SelCrit_Control(iSelCritID);
		for (i=0; i< oControl.length; i++)
			if (oControl[i].value== Value) {
				oControl.selectedIndex= i;
			};
	}

	this.SetSelCritOptions = function SetSelCritOptions(iSelCritID)
		{
		var iMogelijkhedenField= this.SelCrit_MogelijkhedenField(iSelCritID);
		var aDescrArray= this.SelCrit_DescriptionArray(iSelCritID);
		var aOptions= new Array();
		if (iMogelijkhedenField== -1)
		{
			for (v= 0;v< aDescrArray.length;v++)
				if (aDescrArray[v])
					aOptions.push(new Array(aDescrArray[v], v));
		}
		else
		{
			var aValues= this.GetSelCritOptionValues(iSelCritID);
			
			var aGeneralValues= new Array(-1, 0);
	
			for (v= 0;v< aGeneralValues.length;v++)
				if (this.ArrayFind(aValues, aGeneralValues[v])== -1)
					if (aDescrArray[aGeneralValues[v]])
						aOptions.push(new Array(aDescrArray[aGeneralValues[v]], aGeneralValues[v], this.OptionsSortKey(iSelCritID, aGeneralValues[v], aDescrArray[aGeneralValues[v]]) ));
	
			for (v in aValues)
				if (aDescrArray[aValues[v]])
					aOptions.push(new Array(aDescrArray[aValues[v]], aValues[v], this.OptionsSortKey(iSelCritID, aValues[v], aDescrArray[aValues[v]])));
	
			aOptions.sort(OptionsSort);
		};
		var oControl= this.SelCrit_Control(iSelCritID);
		this.SetOptionProp(oControl, aOptions);
	}

	this.OptionsSortKey = function OptionsSortKey(iSelCritID, iID, sDescr)
	{
		var sKey= "";
		switch (iSelCritID) {
			case this.SelCrit_ReisSoort:
				var iLandID= (iID== 0 || iID== -1)?(0):(this.aReisSoortID2LandID[iID]);
				sKey= ((iLandID== 0)?("a"):((iLandID== 6)?("b"):("c")))+iLandID+sDescr;	//	Eerst GeenVoorkeur dan Oostenrijk en dan de rest
				break;
			default:
				sKey= iID;
				break;
		};
		return(sKey);
	}
	
	function OptionsSort(a, b) {
		var retVal;
		var aCmp= (a[2])?(a[2]):("");				//	((a[1]<2)?("a"+a[1]):("z"))+a[0];
		var bCmp= (b[2])?(b[2]):("");				//	((b[1]<2)?("a"+b[1]):("z"))+b[0];
		if (aCmp< bCmp)
			retVal= -1;
		else
			if (aCmp> bCmp)
				retVal= 1 ;
			else
				retVal= 0;
		return(retVal);
	}

	this.GetSelCritOptionValues = function GetSelCritOptionValues(iSelCrit_ID) {
		var aValues= new Array();
		/*for (var r in aSelectedMogelijkheden)*/
		for (var r= 0;r< aSelectedMogelijkheden.length;r++) {
			var iMogelijkhedenRecord= aSelectedMogelijkheden[r];
			var iMogelijkhedenField= this.SelCrit_MogelijkhedenField(iSelCrit_ID);
			var MogelijkhedenField_Value= this.aMogelijkheden[iMogelijkhedenRecord][iMogelijkhedenField];
			aValues.push(MogelijkhedenField_Value);
		};
		return(this.UniqueValues(aValues));
	}

	this.UniqueValues = function UniqueValues(anArray) {
		//	21 mei 2007 :: WindMill (Virtual Building) kan niet omgaan met een 'for x in anArray' instructie maar wel met een 'for x in Objects' instructie
		var secondArray= new Object();
		for (var i=0; i<anArray.length; i++)
		    secondArray[anArray[i]]=anArray[i];
	    return(secondArray);
    }

	this.SelectMogelijkheden = function SelectMogelijkheden(iSelCritID) {
		aSelectedMogelijkheden= new Array();
		/*for (var iMogelijkheden_Record in this.aMogelijkheden)*/
		for (var iMogelijkheden_Record= 0;iMogelijkheden_Record< this.aMogelijkheden.length;iMogelijkheden_Record++) {
			var bSelected= true;
			var i= 0;
			while ((i< aSelCrit_ID.length) && bSelected) {
				if (aSelCrit_ID[i]!= iSelCritID) {
					var iMogelijkhedenField= this.SelCrit_MogelijkhedenField(aSelCrit_ID[i]);
					if (iMogelijkhedenField!= -1)
					{
						var MogelijkhedenField_Value= this.aMogelijkheden[iMogelijkheden_Record][iMogelijkhedenField];
						var SelCrit_Value= aSelCritValues[aSelCrit_ID[i]];
						bSelected= this.TestMogelijkhedenField(aSelCrit_ID[i], MogelijkhedenField_Value, SelCrit_Value);
					};
				};
				i+= 1;
			};
			if (bSelected) {
				aSelectedMogelijkheden.push(iMogelijkheden_Record);
			};
		};
	}

	this.TestMogelijkhedenField = function TestMogelijkhedenField(iSelCritID, MogelijkhedenField_Value, SelCrit_Value) {
		var bOK= true;
		if (this.EenBetekentAlles(iSelCritID) && (MogelijkhedenField_Value== 1 || SelCrit_Value== 1)) {
			bOK= true;
		}
		else {
			if (SelCrit_Value> 0) {
				bOK= (MogelijkhedenField_Value == SelCrit_Value);
			};
		};
		return(bOK);
	}

	this.EenBetekentAlles = function EenBetekentAlles(iSelCritID) {
		var bOK= (iSelCritID== 999);
		return(bOK);
	}

	this.SetSelCritValues_2Input = function SetSelCritValues_2Input() {
		aSelCritValues= new Array();
		/*for (var i in aSelCrit_ID)*/
		for (var i= 0;i< aSelCrit_ID.length;i++) {
			var iSelCritID= aSelCrit_ID[i];
			var oControl= this.SelCrit_Control(iSelCritID);
			var iValue= parseInt(oControl.options[oControl.selectedIndex].value);
			aSelCritValues[iSelCritID]= iValue;
		};
	}

	this.SetSelCritValues_2Default = function SetSelCritValues_2Default() {
		this.DefaultValue_ReisSoort= 0;
		this.DefaultValue_Verblijfsduur= 0;
		this.DefaultValue_Aankomst= 0;
		this.DefaultValue_Personen= 0;
		this.DefaultValue_ObjType= 0;
		aSelCritValues= new Array();
		/*for (var i in aSelCrit_ID)*/
		for (var i= 0;i< aSelCrit_ID.length;i++)
			aSelCritValues[aSelCrit_ID[i]]= this.SelCrit_DefaultValue(aSelCrit_ID[i]);
	}

	this.SelCrit_Control = function SelCrit_Control(iSelCrit_ID) {
		var oControl;
		switch (iSelCrit_ID) {
			case this.SelCrit_ReisSoort: 		oControl= document.Selectiecriteria.ReisSoort; 		break;
			case this.SelCrit_Verblijfsduur:	oControl= document.Selectiecriteria.Verblijfsduur; 	break;
			case this.SelCrit_Aankomst:			oControl= document.Selectiecriteria.Aankomst; 		break;
			case this.SelCrit_Personen:			oControl= document.Selectiecriteria.Personen; 		break;
			case this.SelCrit_ObjType:			oControl= document.Selectiecriteria.ObjType;		break;
		};
		return(oControl);
	}

	this.SelCrit_InputName = function SelCrit_InputName(iSelCrit_ID) {
		var sName= "";
		switch (iSelCrit_ID) {
			case this.SelCrit_ReisSoort: 		sName= "ReisSoort"; 	break;
			case this.SelCrit_Verblijfsduur:	sName= "Verblijfsduur"; break;
			case this.SelCrit_Aankomst:			sName= "Aankomst"; 		break;
			case this.SelCrit_Personen:			sName= "Personen"; 		break;
			case this.SelCrit_ObjType:			sName= "Accommodatietype";break;
		};
		return(sName);
	}

	this.SelCrit_MogelijkhedenField = function SelCrit_MogelijkhedenField(iSelCrit_ID) {
		var iField;
		switch (iSelCrit_ID) {
			case this.SelCrit_ReisSoort: 		iField= Mogelijkheden_ReisSoort; break;
			case this.SelCrit_Verblijfsduur: 	iField= Mogelijkheden_Verblijfsduur; break;
			case this.SelCrit_Aankomst:			iField= Mogelijkheden_Aankomst; break;
			case this.SelCrit_Personen:			iField= Mogelijkheden_Personen; break;
			case this.SelCrit_ObjType:			iField= Mogelijkheden_ObjType; break;
		};
		return(iField);
	}

	this.SelCrit_DefaultValue = function SelCrit_DefaultValue(iSelCrit_ID) {
		var iValue;
		switch (iSelCrit_ID) {
			case this.SelCrit_ReisSoort:		iValue= this.DefaultValue_ReisSoort; break;
			case this.SelCrit_Verblijfsduur:	iValue= this.DefaultValue_Verblijfsduur; break;
			case this.SelCrit_Aankomst:			iValue= this.DefaultValue_Aankomst; break;
			case this.SelCrit_Personen:			iValue= this.DefaultValue_Personen; break;
			case this.SelCrit_ObjType:			iValue= this.DefaultValue_ObjType; break;
		};
		return(iValue);
	}

	this.SelCrit_DescriptionArray = function SelCrit_DescriptionArray(iSelCrit_ID) {
		var aArray1;
		switch (iSelCrit_ID) {
			case this.SelCrit_ReisSoort:		aArray1= this.aReisSoorten; break;
			case this.SelCrit_Verblijfsduur:	aArray1= this.aVerblijfsduur; break;
			case this.SelCrit_Aankomst:			aArray1= this.aAankomst; break;
			case this.SelCrit_Personen:			aArray1= this.aPersonen; break;
			case this.SelCrit_ObjType:			aArray1= this.aObjType; break;
		};

		var aArray2= new Array();
		/*for (v in aArray1)*/
		for (v= 0;v< aArray1.length;v++) {
			aArray2[aArray1[v][0]]= aArray1[v][1];
		};
		return(aArray2);
	}

	this.SetOptionProp = function SetOptionProp(oSelect, aValues)
	{
		var bOptGroups= (oSelect.name== this.SelCrit_InputName(this.SelCrit_ReisSoort) && (this.aLanden.length> 1));
		var oParent= this.clearSelect(oSelect);
		var iLandID_last= -1;
		for (var loop=0; loop < aValues.length; loop++)
		{
			if (bOptGroups)
			{
				var iReisSoortID= aValues[loop][1];
				var iLandID= (this.aReisSoortID2LandID[iReisSoortID])?(this.aReisSoortID2LandID[iReisSoortID]):(0);
				if (iLandID!= iLandID_last && iLandID!= 0)
				{
					oParent= this.create_optgroup(oSelect, this.aLandID2LandDescr[iLandID]);
					iLandID_last= iLandID;
				};
			};
			this.create_option(oParent, aValues[loop][0], aValues[loop][1]);
		};
	}

	this.ArrayFind = function ArrayFind(aArray, Value) {
		for (var keys in aArray) {
			if (aArray[keys] == Value) {
				return keys;
				break;
			};
		};
		return -1;
	}

	this.clearSelect= function clearSelect(oSelect)
	{
		var aNodeList = oSelect.childNodes;
		var v= 0;
		while (v< aNodeList.length)
		{
			var bRemove= false;
			if (aNodeList[v].tagName)
				if (aNodeList[v].tagName== 'OPTGROUP' || aNodeList[v].tagName== 'OPTION')
					bRemove= true;
			if (bRemove)
				oSelect.removeChild(aNodeList[v]);
			else
				v+= 1;
		};
		return(oSelect);
	}

	this.create_optgroup = function create_optgroup(oSelect, sText)
	{
		var oGroup = document.createElement('optgroup');
		oGroup.label = sText;
		
		oGroup.style.color= "#777777";
		oGroup.style.fontWeight= "normal";
		oGroup.style.fontStyle= "normal";
		oGroup.style.textDecoration= "none";
		oGroup.style.textIndent= "0.2em";
		oGroup.style.fontSize= "1em";
		
		oSelect.appendChild(oGroup);
		return(oGroup);
	}
	
	this.create_option = function create_option(oSelect, sText, Value)
	{
		var oOption= document.createElement("option");
		oOption.innerHTML = sText;
		oOption.value = Value;

		oOption.style.color= "#000000";
		oOption.style.fontWeight= "normal";
		oOption.style.fontStyle= "normal";
		oOption.style.textDecoration= "none";
		oOption.style.fontSize= "1em";
		
		oSelect.appendChild(oOption);
		return(oOption);
	}

	this.Set_aReisSoortID2LandID = function Set_aReisSoortID2LandID()
	{
		this.aReisSoortID2LandID= new Array();
		for (v in this.aReisSoorten)
			this.aReisSoortID2LandID[this.aReisSoorten[v][0]]= this.aReisSoorten[v][2];
	}
	
	this.Set_aLandID2LandDescr = function Set_aLandID2LandDescr()
	{
		this.aLandID2LandDescr= new Array();
		for (v in this.aLanden)
			this.aLandID2LandDescr[this.aLanden[v][0]]= this.aLanden[v][1];
	}
}