/*
 * @version 1.3 7/1/2009
 * @author Swiggers Tom <swiggers.tom@gmail.com>
 * @version 1.4 12/05/2009
 * @author Dirk Vermeulen <dirk@atlanticblue.be>
 * @version 1.41 25/05/2009
 * Product id laten opslaan in cookie BeltramiProductCompareId
 * 26/05/2009
 * Product id is nu een apart hidden field in start html en verschillend van itemXXX
 * 27/05/2009
 * Product id als basis voor addCompare + checkboxes
 * 26/06/2009
 * Extra paging toevoegen
 * Url navigatie toevoegen zodat ook met vorige knop werkt
 * 13/09/2009
 * Bug voor checkbox overlay (valuesArray > moest productArray zijn)
 */

if (jQuery) (function($){
	$.extend({
		
		//startfunctie
		beltrami: function (params) {

			//DIRK Trimfunctie toegevoegd
			function trim(stringToTrim) {
				return stringToTrim.replace(/^\s+|\s+$/g,"");
			}

			//Parameter opslaan in cookie
			function createCookie(name, value, days) 
			{
				
				if (days) {
					var date = new Date();
					date.setTime(date.getTime()+(days*24*60*60*1000));
					var expires = "; expires="+date.toGMTString();
				} else {
					var expires = "";
				}
				document.cookie = name+"="+value+expires+"; path=/";
			}

			//Lees waarde uit cookie
			function readCookie(name) 
			{
				var nameEQ = name + "=";
				var ca = document.cookie.split(';');
				
				for (var i=0;i < ca.length;i++) {
					var c = ca[i];
					
					while (c.charAt(0)==' ') {
						c = c.substring(1,c.length);
					}
					
					if (c.indexOf(nameEQ) == 0) {
						return c.substring(nameEQ.length,c.length);
					}
				}
				
				return null;
			}
			
			//Reset cookies, pas formulier aan en toon producten opnieuw
			function clearCookies()
			{
				//Cookies resetten
				$("." + params.classNameSelects).each(function () {
					var selectId = $(this).attr("id");
					createCookie(pageId + "_" + selectId, "-1", 1);
				});

				//Reset formulier
				//DIRK herschreven naar jQuery
				$("." + params.classNameSelects + " option[value=-1]").attr("selected","selected");
				
				//Reset overzicht van ingestelde select items in
				createCookieSelectedProperties();
				//Pas weergave aan
				showHideProducts();
			}
						
			//Haal gegevens uit cookie en stel checkboxes & addCompare in
			function updateCheckboxes()
			{	
				//Reset weergave
				$(".frmCheckbox").attr("checked", false); //checkbox unchecked
				$(".on").removeClass("on") //Fake checkbox
				$("#addCompare").html(""); //inhoud #addCompare leeg
				
				//Haal gegevens uit cookie
				var cookie = readCookie("BeltramiProductCompare");
				// cookie = 3:naam1,4:naam2
				
				if (cookie) {
					cookieArray = cookie.split(",");
			
					if (isArray(cookieArray)) {
						//Doorloop de opgeslagen waarden
						for (i in cookieArray){
							product_arr=cookieArray[i].split(":");
							//product_arr[0]=productId
							//product_arr[1]=naam product
							
							//Checkbox van alle producten met dit productId aanvinken
							$("div[rel='" + product_arr[0]+"'] .frmCheckbox").attr("checked", true); //Checkbox zelf
							$("div[rel='" + product_arr[0]+"'] .frmCheckboxReplace").addClass("on"); // Voor form overlay
							$("div[rel='" + product_arr[0]+"'] .frmCheckboxReplace").removeClass("off"); // Voor form overlay
							
							//addCompare > koppeling toevoegen
							$("#addCompare").append("<span id=\"selectedProduct_"+product_arr[0]+"\">"+product_arr[1]+"<a href=\"#\" id=\"clearSelectedProduct_"+product_arr[0]+"\">&nbsp;(-)</a>&nbsp;</span>");
			
							//voeg onclick toe aan koppeling
							$("#clearSelectedProduct_"+product_arr[0]).click(function(event){

								//Gegevens uit id halen
								var id = $(this).attr("id"); //
								var idSplitted = id.split("_");
								var productId = idSplitted[1];
							
								// Verwijder id uit cookie
								removeFromBeltramiProductCompareCookie(productId);
								
								// Pas de weergave aan
								updateCheckboxes()

								// klik van koppeling vermijden
								event.preventDefault()
							});
						}
					}
				}
			}
			
			//Verwijder gegevens over de vergelijken producten uit de cookie
			function removeFromBeltramiProductCompareCookie(productId)
			{	
				//productId = bijv  3
				var i = 0;
				var newCookie = "";
				//bijv 2:Nog een product,3:Olifant
				var cookie = readCookie("BeltramiProductCompare");
				
				if (cookie) {
					cookieSplitted = cookie.split(",");
					
					if (isArray(cookieSplitted)) {
						//Doorloop alle cookie onderdelen
						for (i=0; i<cookieSplitted.length; i++) {
							var cookieElementSplitted = cookieSplitted[i].split(":");
							
							//cookieElementSplitted[0] = productId
							if (productId != cookieElementSplitted[0]) {
								//Nieuwe cookie samenstellen uit alle elmenten die niet verwijderd zijn
								if (newCookie.length) {
									newCookie = newCookie + ",";
								}
								newCookie = newCookie + cookieSplitted[i];
							}
						}
					}
				}

				//Sla cookie op
				createCookie("BeltramiProductCompare", newCookie, 1);
				//DIRK uitgeschakeld wegens dubbele functie?
				//removeFromBeltramiProductCompareIdCookie(productId)
				//DIRK20090525  product id laten verwijderen uit cookie voor compare formulier
				i=0;
				newCookie = "";
				cookie = readCookie("BeltramiProductCompareId");
				
				if (cookie) {
					cookieSplitted = cookie.split(",");
					
					if (isArray(cookieSplitted)) {
					
						for (i=0; i<cookieSplitted.length; i++) {
							
							if (productId != cookieSplitted[i]) {
								
								if (newCookie.length) {
									newCookie = newCookie + ",";
								}
							
								newCookie = newCookie + cookieSplitted[i];
							}
						}
					}
				}
				createCookie("BeltramiProductCompareId", newCookie, 1);
			}
			
			
			// Sla gegevens op in de cookie om bij te houden hoeveel producten al geselecteerd zijn
			function addToBeltramiProductCompareCookie(productId, productName)
			{ 
				var i = 0;
				var newCookie = "";
				var cookie = readCookie("BeltramiProductCompare");

				//Initialiseer
				if (!cookie) {
					cookie = "";
				} 
				//voeg komma toe indien al iets opgeslagen
				if (cookie.length) {
					cookie = cookie + ",";
				}
				
				//Voeg gegevens toe
				// DIRK + ":" + productName; verwijderd > wordt niet gebruikt in verwijderen & gaf fout in verwijderen
				//20090527 Checkboxname en checkbox id verwijderd, enkel productId als referentie
				newCookie = cookie+ productId+":"+trim(productName);


				//Sla op in cookie
				createCookie("BeltramiProductCompare", newCookie, 1);
				
				//DIRK uitgeschakeld wegens dubbele functie?
				//addToBeltramiProductCompareIdCookie(productId)
				//DIRK20090525  product id laten opslaan in cookie voor compare formulier
				newCookie = "";
				cookie = readCookie("BeltramiProductCompareId");
				
				if (!cookie) {
					cookie = "";
				} 
				
				if (cookie.length) {
					cookie = cookie + ",";
				}
				newCookie = cookie + productId;
				createCookie("BeltramiProductCompareId", newCookie, 1);

				
			}
			
			//Sla alle geselectecteerde opties voor deze pagina op als komma lijst bijv 40_selectedProperties="10,25," 
			function createCookieSelectedProperties()
			{
				var selectedProperties = "";
				
				//Doorloop alle geselecteerde opties van de diverse selects
				$("." + params.classNameSelects + " option:selected").each(function () {
					//Sla ze als komma seperated op
					selectedProperties = selectedProperties + $(this).val() + ",";
				});
				// Sla kommalijst op als parameter in cookie bijv 40_selectedProperties="10,25,"
				createCookie(pageId + "_selectedProperties", selectedProperties, 1);
			}
			
			// Zet string gescheiden met ; met productcodes
			function productPropertiesStringToArray(str)
			{
				
				var optionIds = str.split(";");
				optionIds = removeEmptyElementsFromArray(optionIds);
				return optionIds;
			}
			
			// Haal lege elementen uit array
			function removeEmptyElementsFromArray(arr)
			{
				var i = 0;
				var newArr = new Array();
				
				for (i=0; i<arr.length; i++) {
				
					if (typeof(arr[i]) == "string" && arr[i].length != 0) {
						newArr.push(arr[i]);
					}
				}
				
				return newArr;
			}
			
			//Kijk na of een waarde in een array zit
			function inArray(arr, key)
			{
				if (isArray(arr)) {
					var i = 0;
					
					for (i=0; i<arr.length; i++) {
						
						if (arr[i] == key) {
							return true;
						}
					}
				}
				
				return false;
			}
			
			//Kijk na of een element een array is
			function isArray(obj) 
			{
				if (obj) {

			   		if (obj.constructor.toString().indexOf("Array") == -1) {
			      		return false;
					} else {
			      		return true;
					}
				} else {
					return false;
				}
			}
			
			// Voeg 2 arrays bij elkaar > unieke waarden
			function mergeArray(arr1, arr2)
			{
				var arr3 = new Array();
				arr3 = arr1;
				var i = 0;
				
				for (i=0; i<arr2.length; i++) {
					
					if (!inArray(arr1, arr2[i])) {
						arr3.push(arr2[i]);
					}
				}
				
				return arr3;
			}

			//Kopieer gegevens van selects van formulier in array originalSelects
			function cloneSelects()
			{
				var i = 0;
				var j = 0;
				var x = 0;
				var id = "";
				
				var ids = new Array();
				var options = new Array();
				var option = new Array();
				var select = new Array();
				
				//Selecteer alle select velden
				$("." + params.classNameSelects).each(function () {
					//sla hun id op in array ids id=naam=label bijv kleur
					id = $(this).attr("id");
					if (id.length) {
						ids.push(id);
					}
				});
				
				//doorloop de verschillende select elementen
				for (x in ids) {
					
					options = new Array();
					
					//Doorloop alle opties van deze select
					//Voeg label/value waarde toe als array aan options
					$("#" + ids[x] + " option").each(function () {
						option = new Array();
						option["text"] = $(this).text();
						option["value"] = $(this).val();
						options.push(option);
					});
					
					// Gegevens van select + options opslaan in array
					select = new Array();
					select["id"] =  ids[x];
					select["options"] = options;
					
					//gegevens van select+options toevoegen aan globale 
					originalSelects.push(select);
				}
			}
					
			//Alle selects herstellen in oorspronkelijke situatie
			function recoverSelects()
			{
				var id;
				var html;
				var i;
				var j;

				//OriginalSelects is num array met array/element  met id en array options (text en value)
				for (i=0; i<originalSelects.length; i++) {
					
					//id van select element
					id = originalSelects[i]["id"];
					
					//select zichtbaar maken
					$("#" + id).parent().show(); /*added 7/1/2009 to show hidden selects again*/
					
					//Bijhouden welke geselecteerd was
					var selectedVal = $("#" + id + " option:selected").val();
					
					//verwijder alle options
					$("#" + id + " option").remove();
					
					//Options opnieuw toevoegen
					for (j=0; j<originalSelects[i]["options"].length; j++) {
						
						//indien nodig selected toevoegen
						if (selectedVal == originalSelects[i]["options"][j]["value"]) {
							html = '<option value="' + originalSelects[i]["options"][j]["value"] + '" selected="selected">' + originalSelects[i]["options"][j]["text"] + '</option>';
						} else {
							html = '<option value="' + originalSelects[i]["options"][j]["value"] + '">' + originalSelects[i]["options"][j]["text"] + '</option>';
						}
						
						//aanhangen aan select element
						$("#" + id).append(html);
					}
				}
			}
			
			//Haal properties van getoonde producten op (nummers) en plaats per productid in productProperties
			//De volledige verzameling van properties van getoonde producten zit in allProperties
			function getProductProperties()
			{
				//Lengte van woord om later weg te knippen
				//bijv values101 > 101
				var len = params.productPropertiesName.length;
				
				//Selecteer alle elementen .productProperties = input el met waarden
				$("." + params.classNameProductProperties).each(function () {
				
					if (!$(this).hasClass("hiddenProduct")) {
						//Geen verborgen product > 
						//class hiddenProduct wordt ingesteld wanneer producten verborgen zijn door selectie
						//Dus lijst met niet verborgen producten
						var productIdStr = $(this).attr("id"); // bijv values101
						var productId = productIdStr.substr(len);// values wegknippen > 101
						var productPropertiesStr = $(this).val(); // string ;55;97;95;115;113;114
						var productPropertiesArr = productPropertiesStringToArray(productPropertiesStr); //String omzetten naar array, lege elementen worden gewist

						productProperties[productId] = productPropertiesArr; // sla op in productProperties array met index code
						allProperties = mergeArray(allProperties, productPropertiesArr);
					}
				});
			}
			
			//Mysterie want geen class productId te vinden op originele pagina
			function getProductIds()
			{
				var productIds = new Array();
				
				$(".productId").each(function () {
					productIds.push($(this).val());
				});
				
				return productIds;
			}
			
			//kijk opties van selects na
			//opties die niet op deze pagina voorkomen (propertie zit niet in allProperties array) moeten verwijderd worden
			function removeUselessOptions()
			{
				$("." + params.classNameSelects + " option").each(function () {
					var propertyId = $(this).val();
					
					if (!inArray(allProperties, propertyId) && propertyId != params.dummyProductId) {
						$(this).remove();
					}
				});
			}

			//doorloop alle selects en verberg selects met enkel "Maak een keuze"
			function removeUselessSelects()
			{
				//doorloop alle selects 
				$("." + params.classNameSelects).each(function () {
					//Bepaal het aantal elementen <option>
					var len = $("option", this).length;
					
					//indien er geen andere opties zijn dan "maak een keuze" > verwijder select					
					if (len == 1 && $("option", this).val() == params.dummyProductId) {
						$(this).parent().hide(); /*added 7/1/2009 to hide the whole element that contains the label and the select*/
					}
				});
			}
			
			//Stel selects in op basis van cookie gegevens
			function selectOptionsFromCookies()
			{
				//Doorloop alle select elementen
				$("." + params.classNameSelects).each(function () {
					var selectId = $(this).attr("id");
					//Nakijken of een cookie ingesteld was
					var propertyId = readCookie(pageId + "_" + selectId);
					//DIRK samengevoegd voor betere performantie
									
					if (propertyId&&propertyId!=-1) {
						//Loop door elke option binnen deze select
						$("option", this).each(function (i, this2) {
							//Indien waarde overeenkomt met cookie waarde > instellen
							if (propertyId == $(this2).val()) {
								$(this2).attr("selected", "selected");
								//DIRK break each lus
								return false;
							}
						});
						//DIRK Verwijderd omdat het daarna globaal uitgevoerd wordt door showHideProducts()
						//$("#" + selectId).trigger("change");
					}
				});
				//Pas de weergave van de producten aan
				showHideProducts();
			}
			
			//Toon/verberg producten afh van selectie
			function showHideProducts()
			{
				var propertyIds = new Array();
				var i;
				var j;
				var content = "";

				//toon alle divs van producten
				$("." + params.classNameProduct).show();
				
				// Verwijder class hiddenProduct van productparameters
				$("." + params.classNameProductProperties).removeClass("hiddenProduct");
			
				//Doorloop alle geselecteerde opties
				$("." + params.classNameSelects + " option:selected").each(function () {
				
					if ($(this).val() != -1) {
						//Sla de value van geselecteerde options op array in propertyIds
						propertyIds.push($(this).val());
					}
				});
	
				if (propertyIds.length > 0) {
					//er zijn opties geselecteerd
					
					for (i in allProductProperties) {
						//Doorloop de lijst met producten die in de originele pagina te vinden zijn
						//i= id van div rond product 
						for (j=0; j<propertyIds.length; j++) {
							//Verberg alle elementen die NIET geselecteerd zijn
							if (!inArray(allProductProperties[i], propertyIds[j])) {
								//Verberg div
								$("#" + params.productName + i).hide();
								//Bijhouden welke inputs verborgen zijn
								$("#" + params.productPropertiesName + i).addClass("hiddenProduct");
							}
						}
					}
				}
				
				// Array allProperties vervangen > lijst met alle properties in de pagina, numerische index
				allProperties = new Array();
				// Array productProperties vervangen > lijst met de properties / productid
				productProperties = new Array();
				
				//Vul de arrays allProperties en productProperties met huidige situatie
				getProductProperties();
				
				//Herstel het formulier bovenaan
				recoverSelects();
				
				//Verwijder de ongebruikte opties
				removeUselessOptions();
				
				//Verwijder de ongebruikte selects
				removeUselessSelects();
				
				// $.paging();
				
				htmlProducts();
			}	
			
			//Maak html voor producten aan
			function htmlProducts()

			{

			
				var showHtml = "";
				var maxOnPage = 32;
				var countOnPage = 0;
				var countFound = 0;
				var startFrom=maxOnPage*o.pagerId+1;
				var len = params.productPropertiesName.length;
				
				//Doorloop alle elementen .productProperties > input met properties
				$("." + params.classNameProductProperties).each(function () {
					// Doorloop alle niet verborgen producten			
					if (!$(this).hasClass("hiddenProduct")) {
						//aantal niet verborgen producten
						countFound++;
						
						// producten tonenvanaf startFrom
						if (countFound >= startFrom) {

							//Bijhouden hoeveel producten op deze pagna getoond worden
							countOnPage++;
							
							//Er mogen nog producten getoond worden
							if (countOnPage <= maxOnPage) {
								//id ophalen uit element	bijv values5	
								var divIdStr = $(this).attr("id");
								
								//enkel cijfer overhouden bijv 5
								var divId = divIdStr.substr(len);
								
								//Product id ophalen
								var productId=$("#productId"+divId).attr("value");

								//Adresgegevens link en afbeelding ophalen
								var productLink = $("#link" + divId).attr("value");
								var productImage = $("#image" + divId).attr("value");
								
								// naam van product gaan ophalen (zit in koppeling)
								var productName = $("#item" + divId + " .productName").text();
								
								//Stel html samen
								//DIRK gewijzigd zodat productId blijft gelden
								//20090527 rel toegevoegd
								showHtml += "	<div id='item"+divId+"' class='imageItem item"+divId+"' rel='"+productId+"'>\n"; 
								showHtml += "		<div class='imgBg'>\n";
								showHtml += "			<div align='center'><a href='" + productLink + "' ><img src='" + productImage + "' /></a></div>\n";
								showHtml += "		</div>\n";
								showHtml += "		<div class='imgTxt'>\n";
								showHtml += "			<input type='checkbox' class='frmCheckbox productCheckbox' value='item"+divId+"' name='item"+divId+"' id='checkbox"+divId+"'>\n";
								//DIRK productId toegevoegd
								showHtml += "			<input type='hidden' value='"+productId+"' class='productId' name='item"+divId+"'>\n";
								showHtml += "			<a href='" + productLink + "' class='productName'>" + productName + "</a>\n";
								showHtml += "		</div>\n";
								showHtml += "	</div>\n";
							}
						}
					}
				});
				
				//Voeg div element voor paging toe
				showHtml = "<div id='pagingTop' class='paging' align='center'></div><br/>" + showHtml + "<div id='pagingBottom' class='paging' align='center'></div><br/>";
				
				//plaats alles in aparte div
				$(".image4Cols").html(showHtml);
				
				//Haal checkboxes uit cookie
				updateCheckboxes();
				
				
				/***** pager toevoegen *****/
				// var paging = "";
				// DIRK Math.ceil toegevoegd en if verwijderd
				// Aantal benodigde pagina's berekenen 
				var numberOfPages = Math.ceil(countFound / maxOnPage);
				
				//Indien er meer dan 1 pagina > toon paging
				if (numberOfPages > 1) {
					for (var i = 1; i <= numberOfPages; i++) {
						// paging += "<a href='#' id='pagingLink' name='pagingLink'>" + i + "</a> &nbsp; ";
						var showFrom = i;
						showFrom = ((showFrom - 1) * maxOnPage) + 1;
												
						//DIRK Gewijzigd zodat afbeeldingnummer in rel van koppeling zit
						//Maak koppeling voor paging
						var lnk = $("<a>"+i+"</a>").bind("click", function () {o.pagerId=this.href.split("#")[1].substr(1);htmlProducts();})
						   .attr("href", "#p"+(i-1))
						   .attr("rel", showFrom)
						   .attr("id", "pagingLink" + i)
						   .attr("style", "margin-right: 15px;");
						//Voeg koppeling toe aan paging div
						$("#pagingTop,#pagingBottom").append(lnk);
					}
				}
				
				// Toevoegen change functie aan selectievakjes
				$(".productCheckbox").click(function (event) {

					//Gegevens ophalen
					var checkboxName = $(this).attr("name");
					var productName = $("#"+checkboxName+" .productName").text();
					var productId = $("#"+checkboxName+" .productId").val();

					//Haal de selectie op van de cookie
					var cookie = readCookie("BeltramiProductCompare");
					if (cookie) {
						//opsplitsen in array
						var cookieArray = cookie.split(",");
						//Aantal reeds geselecteerde checkboxes
						var len = cookieArray.length;
					}
					
					//Nakijken max aantal te selecteren
					if (len == 4 && $(this).attr("checked")) {
						//Er zijn er al 4 geselecteerd en dit (5e) is ook gechecked

						//Verwijder check van huidige checkbox
						$(this).attr("checked", false);
						//Voor formulierscript?
						$("#fake" + $(this).attr("id")).removeClass("on");
						$("#fake" + $(this).attr("id")).addClass("off");
						
						//Toon foutmelding
						//tekst komt uit input element van compare formulier
						alert($(".compareMaxText").attr("value"));
					}
					else{
						//Item toevoegen/verwijderen
						if ($(this).attr("checked")) {
							//Toevoegen aan cookies
							addToBeltramiProductCompareCookie(productId, productName);
						} else {
							//Verwijderen uit cookies
							removeFromBeltramiProductCompareCookie(productId);
						}
						
						//Weergave aanpassen
						updateCheckboxes();
					}
				});


				
			}
			
			//Koppeling toevoegen aan #addCompare div
			function createProductName(checkboxId, productName, productId)
			{

				//Voeg span + koppeling toe aan div#addCompare
				$("#addCompare").append("<span id=\"selectedProduct_" + productId + "_" + checkboxId + "\">" + productName + "<a href=\"#\" id=\"clearSelectedProduct_" + productId + "_" + checkboxId + "\">&nbsp;(-)</a>&nbsp;</span>");

				/***** voeg onclick toe aan koppeling *****/
				$("#clearSelectedProduct_" + productId + "_" + checkboxId).click(function (event) {
					//Verwijder span en inhoud > koppeling weg
					$(this).parent().remove();
					var id = $(this).attr("id");
					
					//Gegevens uit id halen
					var idSplitted = id.split("_");
					var checkboxId = idSplitted[2];
					var productId = idSplitted[1];
					
					//Nakijken of dit product op deze pagina getoond wordt
					//DIRK productId in productProperties > productId is key van productProperties
					if (productId in productProperties) {
						//Voor formulieropmaak
						$("#fake" + checkboxId).removeClass("on");
						$("#fake" + checkboxId).addClass("off");
						//checkbox uitschakelen
						//$("div[rel='" + valuesArray[2]+"']").addClass("on"); // Voor form overlay
						$("div[rel='"+productId+"'] .frmCheckbox").attr("checked", true); //Checkbox zelf

						//$("#" + checkboxId).attr("checked", false);
						//DIRK verwijderd om eindeloze loop te vermijden
						//$("#" + checkboxId).trigger("change");
					}
					
					// Verwijder gegevens van dit product uit de cookie die bijhoudt hoeveel er geselecteerd zijn.
					removeFromBeltramiProductCompareCookie(productId);
					// klik van koppeling vermijden
					event.preventDefault()
				});
			}
			
			
			/*
			 * Ophalen pagerId
			 */
			function getPagerId(){
				return location.hash.substr(2);
				
			}
			/************** START SCRIPT ********************/
			
			
			/*
			 * Object params laden met met parameters
			 */
			if (!params) { 
				var params = {};
			}
			
			if  (params.classNameProductProperties == undefined) {
				//classname van het product dat alle waarden bevat
				params.classNameProductProperties = "productProperties";
			}
			
			if  (params.classNameSelects == undefined) {
				// classname van selectelement van formulier
				params.classNameSelects = "frmSelect";
			}
			
			if  (params.productPropertiesName == undefined) {
				//Naam van het input element dat de properties bevat
				//De volledige naam is bijv values101 waarbij 101 een unieke code is van het product
				params.productPropertiesName = "values";
			}
			
			if  (params.productName == undefined) {
				//Div element dat alles van Ã©Ã©n product bevat
				params.productName = "item";
			}
			
			if  (params.classNameProduct == undefined) {
				// class van de div die alles van Ã©Ã©n product bevat
				params.classNameProduct = "imageItem";
			}
			
			if  (params.dummyProductId == undefined) {
				params.dummyProductId = -1;
			}
			
			if  (params.pageId == undefined) {
				//Verborgen veld in selectie formulier met pageID nummer
				params.pageId = "pageId";
			}
			
			if  (params.clearCookiesId == undefined) {
				params.clearCookiesId = "clearCookies";
			}
			
			if  (params.clearSelectionText == undefined) {
				params.clearSelectionText = "selectie wissen";
			}
			
			if  (params.clearSelectionClassName == undefined) {
				params.clearSelectionClassName = "clearSelection";
			}
			
			if  (params.clearSelectionTagName == undefined) {
				params.clearSelectionTagName = "button";
			}

			
			var cCheckboxId = 0;
			var cCheckboxName = 1;
			var cProductId = 2;
			var cProductName = 3;
			
			//Array met alle properties in de pagina numerische index
			var allProperties = new Array();

			//Array met alle properties / productid (bijv 40)
			/*
			 * Array[
			 * 		"40"=>Array[
			 * 					0=>"55"
			 * 					1=>"97"
			 * 					]
			 * 		]
			 */
			var productProperties = new Array();

			//Array met select elementen
			/*
			 * Array[
			 * 		0=>Array[
			 * 				"id"=>id van selectelement
			 * 				"options"=>Array[
			 * 								"text"=>label van de optie
			 * 								"value"=>waarde van de optie
			 * 								]
			 * 				]
			 * 		]
			 */
			var originalSelects = new Array();
			
			//Mysterie > geeft geen resultaat bij start
			var productIds = getProductIds();

			// pageId geeft unieke code aan pagina > bijv 40
			//staat bovenaan selectieformulier als hidden veld
			var pageId = $("#" + params.pageId).val();
			if (!pageId.length) {
				pageId = "dummyPageId";
			}
			var o={};
			o.pagerId="0"; // Bijhouden welke pager onderdeel getoond moet worden > zit al # in url
			o.pagerId=getPagerId();
			
			//Haal properties op van producten en plaats alles in array productProperties[productId]
			//en allProperties = opsomming van alle mogelijke properties
			getProductProperties();
			
			var allProductProperties = productProperties; // Opslaan van array met alle productproperties
			
			/***** startsituatie formulier opslaan *****/
			//Verwijder opties uit selectlijst waarvoor geen product op de pagina staat
			removeUselessOptions();
			//Verwijder de selects zonder keuze opties
			removeUselessSelects();
			//DIRK > eerst formulier laten opkuisen en dan het opslaan als startsituatie			
			//Haal gegevens van selectelementen op en plaats ze in array originalSelects
			cloneSelects();

			/***** Toevoegen functie aan select elementen ****/			
			$("." + params.classNameSelects).change(function () {
				
				//geselecteerde waarde > propertyId vb 10
				var propertyId = $(this).val();

				//id van het select element vb basiskleur
				var selectId = $(this).attr("id");
				
				//label tekst van geselecteerde option bijv Blauw
				var text = $(":selected", this).html();

				//Sla de wijziging op in de cookie
				//parameter: pageId_selectId=id gekozen property bijv 40_basiskleur=10				
				createCookie(pageId + "_" + selectId, propertyId, 1);
				
				//Sla alle gekozen properties op
				createCookieSelectedProperties();

				// Toon de producten
				// Toon het formulier + aanpassen formulier
				o.pagerId=0;
				location.href="#";
				showHideProducts();
				
			});
			
			
			/***** Pagina initialiseren *****/

			//Haal formulier gegevens op en toon de inhoud
			selectOptionsFromCookies();
			
			//Voeg functie toe aan reset knop
			$("#" + params.clearCookiesId).click(function (event) {
				clearCookies();
				event.preventDefault();
			});
		} 
	
	}); 
}) (jQuery);
