function ZoekSelectie() {
	this.aMogelijkheden= new Array();				//	Aankomstdata array 			[<ReisSoortID>, <ReisTypeID>, <Schip>, <AfvaartDatum>, <AantalNachten>, <AantalReizen>]

	//	Elementen van aMogelijkheden array element:
	var Mogelijkheden_ReisSoort= 0;					//	reissoorten.ReisSoortID
	var Mogelijkheden_ReisType1= 1;					//	reistypes.ReisTypeID (Vaargebied)
	var Mogelijkheden_ReisType2= 2;					//	reistypes.ReisTypeID (Land/Stad)
	var Mogelijkheden_Schip= 3;						//	accommodaties.AccID
	var Mogelijkheden_AfvaartDatum= 4;				//	arrangvertrek.Datum
	var Mogelijkheden_Verblijfsduur= 5;				//	arrangementen.Nachten
	var Mogelijkheden_Reis= 6;						//	reizen.ReisID
	var Mogelijkheden_Personen= -1;					//	-1 betekent 'niet van invloed op het aantal mogelijkheden'

	this.aReisSoorten= new Array();					//	Reissoorten array 			[ID, Omschrijving]
	this.aReisTypes1= new Array();					//	Reistypes array 			[ID, Omschrijving]
	this.aReisTypes2= new Array();					//	Reistypes array 			[ID, Omschrijving]
	this.aSchepen= new Array();						//	Schepen array 				[ID, Omschrijving]
	this.aAfvaartDatums= new Array();				//	Afvaartdatum array 			[ID, Omschrijving]
	this.aVerblijfsduur= new Array();				//	Verblijfsduur array			[ID, Omschrijving]
	this.aReizen= new Array();						//	Reis array					[ID, Omschrijving]
	this.aPersonen= new Array();					//	Aantal Personen array 		[ID, Omschrijving]

	this.DefaultValue_ReisSoort= 0;					//	Default waarde (initiele waarde) ReisSoort
	this.DefaultValue_ReisType1= 0;					//	,,
	this.DefaultValue_ReisType2= 0;					//	,,
	this.DefaultValue_Verblijfsduur= 0;				//	,,
	this.DefaultValue_Reis= 0;						//	,,
	this.DefaultValue_Schip= 0;						//	,,
	this.DefaultValue_AfvaartDatum= 0;				//	,,
	this.DefaultValue_Personen= 2;					//	,,

	//	zoekselForm ID's:
	this.SelCrit_ReisSoort= 0;						//	Reisssoort
	this.SelCrit_ReisType1= 1;						//	Reistype
	this.SelCrit_ReisType2= 2;						//	Reistype
	this.SelCrit_Schip= 3;							//	Schip
	this.SelCrit_AfvaartDatum= 4;					//	Afvaartdatum
	this.SelCrit_Verblijfsduur= 5;					//	Verblijfsduur
	this.SelCrit_Reis= 6;							//	Reis
	this.SelCrit_Personen= 7;						//	Aantal Personen
	

	var aSelCrit_ID= new Array(this.SelCrit_ReisSoort, this.SelCrit_ReisType1, this.SelCrit_ReisType2, this.SelCrit_Schip, this.SelCrit_AfvaartDatum, this.SelCrit_Verblijfsduur, this.SelCrit_Reis);	//	, this.SelCrit_Personen
	var aSelCritValues;								//	array van (ingevulde) selectie-criteria value
	var aSelectedMogelijkheden;						//	index-array van geselecteerde mogelijkheden
	
	this.Initialize = function Initialize() {
		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]));
						
		//	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.AantalReizen = function AantalReizen() {
		var oControl= this.SelCrit_Control(this.SelCrit_Reis);
		return((oControl.length- 1));
	}

	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= iID;
		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() {
		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.zoekselForm.reissoort; 	break;
			case this.SelCrit_ReisType1:		oControl= document.zoekselForm.reistype1;	break;
			case this.SelCrit_ReisType2:		oControl= document.zoekselForm.reistype2;	break;
			case this.SelCrit_Schip:			oControl= document.zoekselForm.schip;		break;
			case this.SelCrit_AfvaartDatum:		oControl= document.zoekselForm.afvaart;		break;
			case this.SelCrit_Verblijfsduur:	oControl= document.zoekselForm.reisduur; 	break;
			case this.SelCrit_Reis:				oControl= document.zoekselForm.reis; 		break;
			case this.SelCrit_Personen:			oControl= document.zoekselForm.persons;		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_ReisType1:		sName= "reistype1";	break;
			case this.SelCrit_ReisType2:		sName= "reistype2";	break;
			case this.SelCrit_Schip:			sName= "schip";		break;
			case this.SelCrit_AfvaartDatum:		sName= "afvaart";	break;
			case this.SelCrit_Verblijfsduur:	sName= "reisduur";	break;
			case this.SelCrit_Reis:				sName= "reis";	break;
			case this.SelCrit_Personen:			sName= "persons";	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_ReisType1:		iField= Mogelijkheden_ReisType1; break;
			case this.SelCrit_ReisType2:		iField= Mogelijkheden_ReisType2; break;
			case this.SelCrit_Schip:			iField= Mogelijkheden_Schip; break;
			case this.SelCrit_AfvaartDatum:		iField= Mogelijkheden_AfvaartDatum; break;
			case this.SelCrit_Verblijfsduur: 	iField= Mogelijkheden_Verblijfsduur; break;
			case this.SelCrit_Reis: 			iField= Mogelijkheden_Reis; break;
			case this.SelCrit_Personen:			iField= Mogelijkheden_Personen; 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_ReisType1:		iValue= this.DefaultValue_ReisType1; break;
			case this.SelCrit_ReisType2:		iValue= this.DefaultValue_ReisType2; break;
			case this.SelCrit_Schip:			iValue= this.DefaultValue_Schip; break;
			case this.SelCrit_AfvaartDatum:		iValue= this.DefaultValue_AfvaartDatum; break;
			case this.SelCrit_Verblijfsduur:	iValue= this.DefaultValue_Verblijfsduur; break;
			case this.SelCrit_Reis:				iValue= this.DefaultValue_Reis; break;
			case this.SelCrit_Personen:			iValue= this.DefaultValue_Personen; 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_ReisType1:		aArray1= this.aReisTypes1; break;
			case this.SelCrit_ReisType2:		aArray1= this.aReisTypes2; break;
			case this.SelCrit_Schip:			aArray1= this.aSchepen; break;
			case this.SelCrit_AfvaartDatum:		aArray1= this.aAfvaartDatums; break;
			case this.SelCrit_Verblijfsduur:	aArray1= this.aVerblijfsduur; break;
			case this.SelCrit_Reis:				aArray1= this.aReizen; break;
			case this.SelCrit_Personen:			aArray1= this.aPersonen; 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 oParent= this.clearSelect(oSelect);
		for (var loop=0; loop < aValues.length; loop++)
			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_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);
	}
}
