//	Document naam

function ZoekSelectie() {
	this.aReizen= new Array();						//	Reizen array (zie: Elementen van Reizen)
	this.aReisSoorten= new Array();					//	Reissoorten array 			[ID, Omschrijving]
	this.aVervoer= new Array();						//	Vervoer array 				[ID, Omschrijving]
	this.aLanden= new Array();						//	Landen array				[ID, Omschrijving]
	this.aLeeftijdCateg= new Array();				//	Leeftijdcategorien array 	[ID, Omschrijving]
	this.aSeizoenen= new Array();					//	Seizoenen array 			[ID, Omschrijving]

	//	Elementen van Reizen array element:
	var Reizen_ReisID= 0;							//	reizen.ReisID
	var Reizen_ReisSoort= 1;						//	reizen.ReisSoortID
	var Reizen_Vervoer= 2;							//	reizen.Vervoer
	var Reizen_Leeftijd= 3;							//	reizen.LeeftijdsCategorie
	var Reizen_Land= 4;								//	reizen.LandID
	var Reizen_Seizoen= 5;							//	reizen.Seizoen
	
	this.DefaultValue_ReisSoort= -1;				//	Default waarde (initiele waarde) ReisSoort
	this.DefaultValue_Vervoer= -1;					//	,,
	this.DefaultValue_Leeftijd= -1;					//	,,
	this.DefaultValue_Land= -1;						//	,,
	this.DefaultValue_Seizoen= -1;					//	,,
	
	//	Selectiecriteria ID's:
	this.SelCrit_ReisSoort= 0;						//	Reisssoort
	this.SelCrit_Vervoer= 1;							//	Vervoer
	this.SelCrit_Leeftijd= 2;						//	Leeftijdscategorie
	this.SelCrit_Land= 3;							//	Land
	this.SelCrit_Seizoen= 4;							//	Seizoen
	
	var aSelCrit_ID= new Array(this.SelCrit_ReisSoort, this.SelCrit_Vervoer, this.SelCrit_Leeftijd, this.SelCrit_Land, this.SelCrit_Seizoen);
	var aSelCritValues;								//	array van (ingevulde) selectie-criteria value
	var aSelectedReizen;							//	index-array van geselecteerde reizen

	this.Initialize = function Initialize() {
		this.SetSelCritValues_2Default();
		this.SetAllSelCritOptions();
		for (var i in aSelCrit_ID)
			this.SetValue(aSelCrit_ID[i], this.SelCrit_DefaultValue(aSelCrit_ID[i]));
	}

	this.Reset = function Reset() {
		this.DefaultValue_ReisSoort= -1;
		this.DefaultValue_Vervoer= -1;
		this.DefaultValue_Leeftijd= -1;
		this.DefaultValue_Land= -1;
		this.DefaultValue_Seizoen= -1;
		this.SetSelCritValues_2Default();
		this.SetAllSelCritOptions();
		for (var i in aSelCrit_ID)
			this.SetValue(aSelCrit_ID[i], this.SelCrit_DefaultValue(aSelCrit_ID[i]));
	}
	
	this.Check = function Check() {
		this.SetSelCritValues_2Input();					//	Bepaal alle ingevulde selectie criteria
		this.SetAllSelCritOptions();
		for (var i in aSelCrit_ID)
			this.SetValue(aSelCrit_ID[i], aSelCritValues[aSelCrit_ID[i]]);
		
	}

	this.SetAllSelCritOptions = function SetAllSelCritOptions() {
		for (var i in aSelCrit_ID) {				//	Per selectie criterium (aSelCrit_ID[i])
			this.SelectReizen(aSelCrit_ID[i]);		//	-	Maak lijst van Reizen 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 aValues= this.GetSelCritOptionValues(iSelCritID);
		var aDescrArray= this.SelCrit_DescriptionArray(iSelCritID);
		
		var aOptions= new Array();
		
		var aGeneralValues= new Array(-1, 0);
		for (v in aGeneralValues)
			if (this.ArrayFind(aValues, aGeneralValues[v])== -1)
				if (aDescrArray[aGeneralValues[v]])
					aOptions.push(new Array(aDescrArray[aGeneralValues[v]], aGeneralValues[v]));
				
		for (v in aValues) {
			aOptions.push(new Array(aDescrArray[aValues[v]], aValues[v]));
		};
		aOptions.sort(OptionsSort);
		var oControl= this.SelCrit_Control(iSelCritID);
		this.SetOptionProp(oControl, aOptions);
	}
	
	function OptionsSort(a, b) {
		var retVal;
		var aCmp= ((a[1]<2)?("a"+a[1]):("z"))+a[0];
		var bCmp= ((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 aSelectedReizen) {
			var iReizenRecord= aSelectedReizen[r];
			var iReizenField= this.SelCrit_ReizenField(iSelCrit_ID);
			var ReisField_Value= this.aReizen[iReizenRecord][iReizenField];
			aValues.push(ReisField_Value);
		};
		return(this.UniqueValues(aValues));
	}
	
	this.UniqueValues = function UniqueValues(anArray) {
		var secondArray= new Array();
		for (var i=0; i<anArray.length; i++) 
		    secondArray[anArray[i]]=anArray[i];
	    return(secondArray);
    }
	
	this.SelectReizen = function SelectReizen(iSelCritID) {
		aSelectedReizen= new Array();
		for (var iReizen_Record in this.aReizen) {
			var bSelected= true;
			var i= 0;
			while ((i< aSelCrit_ID.length) && bSelected) {
				if (aSelCrit_ID[i]!= iSelCritID) {
					var iReizenField= this.SelCrit_ReizenField(aSelCrit_ID[i]);
					var ReisField_Value= this.aReizen[iReizen_Record][iReizenField];
					var SelCrit_Value= aSelCritValues[aSelCrit_ID[i]];
					bSelected= this.TestReisField(aSelCrit_ID[i], ReisField_Value, SelCrit_Value);
				};
				i+= 1;
			};
			if (bSelected) {
				aSelectedReizen.push(iReizen_Record);
			};
		};
	}

	this.TestReisField = function TestReisField(iSelCritID, ReisField_Value, SelCrit_Value) {
		var bOK= true;
		if (this.EenBetekentAlles(iSelCritID) && (ReisField_Value== 1 || SelCrit_Value== 1)) {
			bOK= true;
		}
		else {
			if (SelCrit_Value> 0) {
				bOK= (ReisField_Value == SelCrit_Value);
			};
		};
		return(bOK);
	}
	
	this.EenBetekentAlles = function EenBetekentAlles(iSelCritID) {
		var bOK= (iSelCritID== Reizen_Seizoen);
		return(bOK);
	}

	this.SetSelCritValues_2Input = function SetSelCritValues_2Input() {
		aSelCritValues= new Array();
		for (var i in aSelCrit_ID) {
			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)
			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_Vervoer: 		oControl= document.Selectiecriteria.ReisVervoerID; 	break;
			case this.SelCrit_Leeftijd:		oControl= document.Selectiecriteria.ReisLeeftijd; 	break;
			case this.SelCrit_Land:			oControl= document.Selectiecriteria.ReisLandID; 	break;
			case this.SelCrit_Seizoen:		oControl= document.Selectiecriteria.ReisSeizoenID; 	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_Vervoer: 		sName= "ReisVervoerID"; break;
			case this.SelCrit_Leeftijd:		sName= "ReisLeeftijd"; break;
			case this.SelCrit_Land:			sName= "ReisLandID"; break;
			case this.SelCrit_Seizoen:		sName= "ReisSeizoenID"; break;
		};
		return(sName);
	}

	this.SelCrit_ReizenField = function SelCrit_ReizenField(iSelCrit_ID) {
		var iField;
		switch (iSelCrit_ID) {
			case this.SelCrit_ReisSoort: 	iField= Reizen_ReisSoort; break;
			case this.SelCrit_Vervoer: 		iField= Reizen_Vervoer; break;
			case this.SelCrit_Leeftijd:		iField= Reizen_Leeftijd; break;
			case this.SelCrit_Land:			iField= Reizen_Land; break;
			case this.SelCrit_Seizoen:		iField= Reizen_Seizoen; 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_Vervoer:		iValue= this.DefaultValue_Vervoer; break;
			case this.SelCrit_Leeftijd:		iValue= this.DefaultValue_Leeftijd; break;
			case this.SelCrit_Land:			iValue= this.DefaultValue_Land; break;
			case this.SelCrit_Seizoen:		iValue= this.DefaultValue_Seizoen; 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_Vervoer: 		aArray1= this.aVervoer; break;
			case this.SelCrit_Leeftijd:		aArray1= this.aLeeftijdCateg; break;
			case this.SelCrit_Land:			aArray1= this.aLanden; break;
			case this.SelCrit_Seizoen:		aArray1= this.aSeizoenen; break;
		};
		
		var aArray2= new Array();
		for (v in aArray1) {
			aArray2[aArray1[v][0]]= aArray1[v][1];
		};
		return(aArray2);
	}

	this.SetOptionProp = function SetOptionProp(oSelect, aValues) {
		for (loop=0; loop < aValues.length; loop++) {
			if ((loop+1)> oSelect.options.length) {
				opt= new Option('text', 'value');
				oSelect[oSelect.options.length]= opt;
			};
			oSelect.options[loop].text = aValues[loop][0];
			oSelect.options[loop].value= aValues[loop][1];
		};
		if (oSelect.options.length > aValues.length) {
			loop = oSelect.options.length - 1;
			while (loop >= aValues.length) {
				oSelect.options[loop]= null;
				loop -= 1;
			};
		};
	}

	this.ArrayFind = function ArrayFind(aArray, Value) {
		for (var keys in aArray) {
			if (aArray[keys] == Value) {
				return keys;
				break;
			};
		};
		return -1;
	}
}