/* GOOGLE MAPS ................................................

- setDealerMarkers() moet in de pagina aanwezig zijn, anders worden de organisaties niet op de kaart weergegeven.

*/

var gMapsObject = {
	data: {
		startPos: null,
		startZoom: null,
		map: null,
		geocoder: null,
		userPoint: null,
		bezoekerIcon: null,
		startingPosition: null,
		mapId: 'googleMaps',
		points: []
	},
	loadGoogleMaps: function() {
		if (GBrowserIsCompatible()) {
			gMapsObject.data['startPos'] = gMapsObject.data['startingPosition'] ? new GLatLng(gMapsObject.data['startingPosition'].latitude,gMapsObject.data['startingPosition'].longitude) : new GLatLng(52.167194,5.232041);
			gMapsObject.data['startZoom'] = gMapsObject.data['startingPosition'] ? gMapsObject.data['startingPosition'].zoomlevel : 7;
			gMapsObject.data['map'] = new GMap2($(gMapsObject.data['mapId']));
			gMapsObject.data['geocoder'] = new GClientGeocoder();
			gMapsObject.data['bezoekerIcon'] = new GIcon(G_DEFAULT_ICON);
			gMapsObject.data['bezoekerIcon'].image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";
	
			gMapsObject.data['map'].setCenter(gMapsObject.data['startPos'], gMapsObject.data['startZoom']);
			gMapsObject.data['map'].addControl(new GLargeMapControl());
			var mapControl = new GMapTypeControl();
			gMapsObject.data['map'].addControl(mapControl);
			gMapsObject.data['points'].each(gMapsObject.processMarker);
		}
	},
	setStartPos: function(latitude,longitude,zoomlevel){
		gMapsObject.data['startingPosition'] = {latitude: latitude, 
												longitude:longitude, 
												zoomlevel:zoomlevel};
	},
	addMarker: function(icon){
		gMapsObject.data['points'].push(icon);
	},
	processMarker: function(newMarker) {
		var latlng = new GLatLng(newMarker.latitude,newMarker.longitude);
		var markerOptions = {
			icon: (newMarker.icon ? new GIcon(G_DEFAULT_ICON,newMarker.icon) : new GIcon(G_DEFAULT_ICON))
		};
		markerOptions.icon.shadow = '';
		var marker = new GMarker(latlng, markerOptions);
		gMapsObject.data['map'].addOverlay(marker);
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(newMarker.message);
			}
		);
	},
	calcProximityToPostcode: function(postcode, zoomlevel, callbackFunction){
		//clearShapes();
		if (gMapsObject.data['geocoder']) {
			gMapsObject.data['geocoder'].getLatLng(
				postcode + ', netherlands',
				function(point) {
					if (!point) {
						if($('geocoderRespondedFalse')) {
							$('geocoderRespondedFalse').show();
						}
						gMapsObject.data['map'].setCenter(new GLatLng(52.167194,5.232041), 6);
						// todo : take action on empty return
					} else {
						if($('geocoderRespondedFalse')) {
							$('geocoderRespondedFalse').hide();
						}
						// setting the center
						gMapsObject.data['map'].setCenter(point, zoomlevel);
						// placing an extra marker for the found location
						markerOptions = { icon:gMapsObject.data['bezoekerIcon'] };
						var marker = new GMarker(point,markerOptions);
						gMapsObject.data['map'].addOverlay(marker);
						GEvent.addListener(marker, "click", function() {
							marker.openInfoWindowHtml('Door u ingevoerde postcode: ' + postcode);
						});
						
						callbackFunction(point.lat(), point.lng());
					}
				}
			);
		}
	}
}
/***************************************************************
* PRODUCT / BASKETFEATURES
***************************************************************/

Basket = new Object();
Basket.initialize = function(){
	Basket.assignActions();	
	Basket.processTotals(); // this will launch an update of the defaultbasket. If needed, you can run your own targetBasket update afterwards.
	Basket.updateContainer();
	Basket.updateCodeContainer();
};

Basket.processMutation = function(e){
	var elem = $(e.target);
	e.stop();
	var itemId = elem.getAttribute('itemId');
	var offerId = elem.getAttribute('offerId');
	var action = elem.getAttribute('action');
	var value = elem.tagName == 'INPUT' ? elem.value : elem.getAttribute('reqValue');
	var targetBasket = elem.getAttribute('targetBasket') ? elem.getAttribute('targetBasket') : 'defaultBasket';
	var addToValue = elem.readAttribute('addToValue');
	var basketElem = elem.up('.basketContainer');
	var params = {
				'return' : 'productAmount',
				'addToValue' : addToValue,
				'action' : action,
				'value' : value,
				'targetBasket' : targetBasket,
				'randomize' : Math.random(),
				'inBasket' : (basketElem ? 1 : 0)
		};
	if(itemId) { 	params.productId = itemId; };
	if(offerId) { 	params.offerId = offerId; };
	
	new Ajax.Request('php/basket.php' , {
		asynchronous: true,
		method: 'get',
		parameters: params,
		onSuccess: function(transport){
			jsonResponse = transport.responseText.evalJSON();
			console.log(jsonResponse);
			
			
			if(action=='deleteItem') { Basket.updateContainer(); }
			if(jsonResponse.itemId){
				$(jsonResponse.itemId+'_amountInBasket').value = jsonResponse.productAmount;
				$$('.basket_priceSubTotal[itemId='+jsonResponse.itemId+']').each(function(elem){
					elem.innerHTML = jsonResponse.calculatedPrice_Money;	
				});
			};
			if(jsonResponse.offerId){
				var amountInBasket = $('offer_' + jsonResponse.offerId + '_amountInBasket');
				if(amountInBasket) {
					amountInBasket.value = jsonResponse.productAmount;
				}
				var subTotals = $$('.basket_priceSubTotal[offerId='+jsonResponse.offerId+']');
				if(subTotals.length){
					subTotals.each(function(elem){
						elem.innerHTML = jsonResponse.calculatedPrice_Money;	
					});
				}
			};
			
			if(jsonResponse.allsoAffected.length){
				jsonResponse.allsoAffected.each(function(affectedItem){
						if(affectedItem.itemId){
							var amountInBasket = $(affectedItem.itemId+'_amountInBasket');
							console.log(affectedItem.itemId+'_amountInBasket' , amountInBasket);
							if(amountInBasket){
								amountInBasket.value = affectedItem.productAmount;
								$$('.basket_priceSubTotal[itemId='+affectedItem.itemId+']').each(function(elem){
									elem.innerHTML = affectedItem.calculatedPrice_Money;	
								});
							}
						};
						if(affectedItem.offerId){
							var amountInBasket = $('offer_' + affectedItem.offerId + '_amountInBasket');
							if(amountInBasket) {
								amountInBasket.value = affectedItem.productAmount;
							}
							var subTotals = $$('.basket_priceSubTotal[offerId='+affectedItem.offerId+']');
							if(subTotals.length){
								if(!affectedItem.productAmount){
									Basket.updateContainer();
								} else {
									subTotals.each(function(elem){
										elem.innerHTML = affectedItem.calculatedPrice_Money;	
									});
								}
							} else {
								if(affectedItem.productAmount){
									Basket.updateContainer();
								}
							}
						};
					});
			}	
				
			console.log('processing totals');
			Basket.processTotals(targetBasket);
		},
		onFailure: function(){ 
			console.log('Could not retrieve product - basket information');
		}});
}

Basket.processTotals = function(targetBasket){
	new Ajax.Request('php/basket.php' , {
		asynchronous: true,
		method: 'get',
		parameters: {
			'return' : 'totals',
			'targetBasket' : targetBasket,
			'randomize' : Math.random()
		},
		onSuccess: function(transport){
			// setting the totalprices van products
			var totalValues = $$('.basket_totalPriceValid').each(function(elem){
				if(transport.responseXML.getElementsByTagName('allowTotalPriceUpdate')[0].firstChild.nodeValue == 'TRUE'){
					elem.innerHTML = transport.responseXML.getElementsByTagName('totalSumValid_Money')[0].firstChild.nodeValue;
				}
			});
			
			// setting the totalprices
			if(transport.responseXML.getElementsByTagName('allowTotalPriceUpdate')[0].firstChild.nodeValue == 'TRUE'){
				$$('.basket_totalPrice').each(function(elem){
					elem.update(transport.responseXML.getElementsByTagName('totalSum_Money')[0].firstChild.nodeValue);
				});
	
				$$('.basket_totalPriceCodes').each(function(elem){
					elem.update(transport.responseXML.getElementsByTagName('totalSumCodes_Money')[0].firstChild.nodeValue);
				});
	
				$$('.basket_taxPrice').each(function(elem){
					elem.update(transport.responseXML.getElementsByTagName('totalSumTax_Money')[0].firstChild.nodeValue);
				});
	
				$$('.basket_grossPrice').each(function(elem){
					elem.innerHTML = transport.responseXML.getElementsByTagName('totalSumGross_Money')[0].firstChild.nodeValue;
				});
			}

			// setting the orderlines
			$$('.basket_totalLines').each(function(elem){
				elem.innerHTML = transport.responseXML.getElementsByTagName('totalLines')[0].firstChild.nodeValue;
			});

			// setting the itemtotals
			$$('.basket_totalItems').each(function(elem){
				elem.innerHTML = transport.responseXML.getElementsByTagName('totalItems')[0].firstChild.nodeValue;
			});
			Basket.updateAanbiedingen(transport.responseXML.getElementsByTagName('totalSumFreeProduct')[0].firstChild.nodeValue);
			
			// updating the proceedbuttons
			var basketPriceAccepted = transport.responseXML.getElementsByTagName('basketPriceAccepted')[0].firstChild.nodeValue;
			var merchantSelected = transport.responseXML.getElementsByTagName('merchantSelected')[0].firstChild.nodeValue;
			var merchantOrderDatesLeft = transport.responseXML.getElementsByTagName('merchantOrderDatesLeft')[0].firstChild.nodeValue;
			/* var userAccepted = transport.responseXML.getElementsByTagName('userAccepted')[0].firstChild.nodeValue; */
			Basket.updateBasketProceedButtons(basketPriceAccepted, merchantSelected, merchantOrderDatesLeft /*, userAccepted*/);
		},
		onFailure: function(){ 
			console.log('Could not retrieve totals - basket information');
		}});
}

Basket.offerRelevantClassName = 'offerRelevant';

Basket.updateAanbiedingen = function(totalSumValid) {
	$$('.basketAanbieding_freeItem').each(function(elem){
		if(elem.hasClassName("hiddenElement")){
			elem.hide();
			if(((!elem.readAttribute('fromPrice')) || (totalSumValid>=parseInt(elem.readAttribute('fromPrice')))) && 
				((!elem.readAttribute('toPrice')) || (totalSumValid<parseInt(elem.readAttribute('toPrice'))))){
				elem.show();
			}
		} else {
			elem.removeClassName(Basket.offerRelevantClassName);
			if(((!elem.readAttribute('fromPrice')) || (totalSumValid>=parseInt(elem.readAttribute('fromPrice')))) && 
				((!elem.readAttribute('toPrice')) || (totalSumValid<parseInt(elem.readAttribute('toPrice'))))){
				elem.addClassName(Basket.offerRelevantClassName);
			}
		}
	});
}

Basket.assignActions = function(){
	// Assigning the events to the mutationbuttons
	var product_mutateButtons = $$('button.basket_mutate');
	product_mutateButtons.each(function(elem){
		// only allow assigning buttonactions if the buttonactions wherent allready assigned
		if(!elem.assignmentCompleted){
			elem.observe('click',function(e){
				Basket.processMutation(e);
			})								 
		}
		elem.assignmentCompleted = true;
	});

	// Assigning the events to the mutationfields
	var product_itemAmounts = $$('input.basket_mutate');
	product_itemAmounts.each(function(elem){
		// only allow assigning buttonactions if the buttonactions wherent allready assigned
		if(!elem.assignmentCompleted){
			// ensuring there is only integer input
			elem.observe('keypress',function(e){
				var charCode = e.keyCode ? e.keyCode : e.which;
				var strChar = String.fromCharCode(charCode);
				if(charCode==13) { // filtering the enterkey (for submitting data)
					if(!e.target.value) e.target.value=0;
					Basket.processMutation(e);
					window.event? event.returnValue = false : e.preventDefault(); 
					return false;
				}
				if((!strChar.match(/[0-9]/))&&(charCode!=8)&&(charCode!=46)) { // re-enabeling the backspace and deletekey
					window.event? event.returnValue = false : e.preventDefault();  // preventing the eventual action of adding key to field
					return false;
				}
			});	
			// as soon as the user changes the fieldvalues, the basket needs an update
			elem.observe('change',function(e){
				// if the field is left blank we want it to become a zero
				if(!e.target.value) e.target.value=0;
				Basket.processMutation(e);
			});
			elem.assignmentCompleted = true;
		}
	});

	// Assigning the events addItem special
	var product_itemAdds = $$('form.basket_addItem');
	product_itemAdds.each(function(elem){
		if(!elem.assignmentCompleted){
			elem.observe('submit',function(e){
				window.event? event.returnValue = false : e.preventDefault(); 
				var elementsInForm = elem.getElementsByTagName('input');
				var query = new Hash();
				for(var iElem = 0; iElem < elementsInForm.length; iElem++){
					if(elementsInForm[iElem].getAttribute('name')){
						query.set(elementsInForm[iElem].getAttribute('name'),elementsInForm[iElem].value);
					}
				}
				query.set('targetBasket', (query.get('targetBasket') ? query.get('targetBasket') : 'defaultBasket'));
				query.set('randomize', Math.random());
				query.set('return','operationStatus');
				new Ajax.Request('php/basket.php' , {
					asynchronous: true,
					method: 'get',
					parameters: query,
					onSuccess: function(transport){
						Basket.processTotals(query.get('targetBasket'));
						Basket.updateContainer();
						$$('.basket_addItem .errorMessage').each(function(errorElem){
							errorElem.hide();
							// this in case there are more errorMessages
							if(errorElem.hasClassName('unknownItem')) {
								if(transport.responseXML.getElementsByTagName('productFound')[0].firstChild.nodeValue != 'SUCCESS') {
									errorElem.show();
								}
							}
						});
						e.target.reset();
					},
					onFailure: function(){ 
						console.log('Could not retrieve product - basket information');
					}});

			})
			elem.assignmentCompleted = true;
		}
	});
	
	// Assigning the events for extra basketdata
	$$('.basketSetExtraData').each(function(elem){
		if(!elem.assignmentCompleted){
			elem.observe('click',function(e){
				var sourceElem = this;
				
				var targElems = $w(this.getAttribute('basketExtraDataContainerId'));
				var elementsInContainer = [];
				targElems.each(function(elem){
						if($(elem)){
							var inputs = $(elem).select('input,select,textarea');
							inputs.each(function(inputElem){
									elementsInContainer.push(inputElem);
								});
							
						}
					}); 
				console.log(elementsInContainer);
				if(elementsInContainer.length){
					var query = new Hash();

					var errorneousFieldFound = false;
					for(var iElem = 0; iElem < elementsInContainer.length; iElem++){
						var containerElem = $(elementsInContainer[iElem]);
						if(elementsInContainer[iElem].readAttribute('name')){
							if((containerElem.readAttribute('type')=='radio')&&(!containerElem.checked)) { 
								continue;
							}
							if(containerElem.readAttribute('fieldValidation')){
								var validated = false;
								if(!(containerElem.readAttribute('type')=='checkbox')){
									var validator = new RegExp(containerElem.readAttribute('fieldValidation'));
									validated = containerElem.value.match(validator)
								} else {
									validated = containerElem.checked;
								}
								if(validated){
									containerElem.removeClassName(formValidation.errorClass);
								} else {
									containerElem.addClassName(formValidation.errorClass);
									errorneousFieldFound = true;
								}
							}
							query.set(containerElem.getAttribute('name'),containerElem.value);
						}
					}

					query.set('targetBasket', (query.get('targetBasket') ? query.get('targetBasket') : 'defaultBasket'));
					query.set('randomize', Math.random());
					query.set('action', 'setExtraData');
					if(errorneousFieldFound) {
						e.stop();
					}
					var targetURL = elem.readAttribute('targetURL');
					new Ajax.Request('php/basket.php' , {
						asynchronous: true,
						method: 'get',
						parameters: query,
						onFailure: function(){ 
							console.log('setting extra data failed');
						},
						onSuccess: function(){
							if(!errorneousFieldFound) {
								StaticLink.redirectDirect(targetURL);
							}
						}
					});
				
				} else {
					console.log('had no extra data to submit (do the container(s) exist?)');
				}
			});
			elem.assignmentCompleted = true;
		};
	});
	
	// Assigning the events addItem special
	$$('form.basket_addCode').each(function(elem){
		if(!elem.assignmentCompleted){
			elem.observe('submit',function(e){
				window.event? event.returnValue = false : e.preventDefault(); 
				var elementsInForm = elem.getElementsByTagName('input');
				var query = new Hash();
				var codeElem;
				for(var iElem = 0; iElem < elementsInForm.length; iElem++){
					if(elementsInForm[iElem].getAttribute('name')){
						query.set(elementsInForm[iElem].getAttribute('name'),elementsInForm[iElem].value);
					}
					if(elementsInForm[iElem].getAttribute('name') == 'code') codeElem = elementsInForm[iElem];
				}
				query.set('targetBasket', (query.get('targetBasket') ? query.get('targetBasket') : 'defaultBasket'));
				query.set('randomize', Math.random());
				new Ajax.Request('php/codes.php' , {
					asynchronous: true,
					method: 'get',
					parameters: query,
					onSuccess: function(transport){
						Basket.updateCodeContainer();
						$$('.basket_addCode .errorMessage').each(function(errorElem){
							errorElem.hide();
							if(errorElem.hasClassName(transport.responseXML.getElementsByTagName('status')[0].firstChild.nodeValue)) {
								errorElem.show();
							} else {
								errorElem.hide();
							}
						});
						e.target.reset();
					},
					onFailure: function(){ 
						console.log('Could not add code');
					}});
				if(codeElem) {
					codeElem.focus();
					codeElem.select();
				}
			})
			elem.assignmentCompleted = true;
		}
	});
	
	$$('.deleteCode').each(function(elem){
		if(!elem.assignmentCompleted){
			elem.observe('click',function(e){
				new Ajax.Request('php/codes.php' , {
					asynchronous: true,
					method: 'get',
					parameters: {
						'action' : 'deleteCode',
						'code' : elem.readAttribute('codeNumber'),
						'targetBasket' : elem.readAttribute('targetBasket'),
						'randomize' : Math.random()},
					onSuccess: function(transport){
						Basket.updateCodeContainer();
					},
					onFailure: function(){ 
						console.log('Could not delete code');
					}});
			});
			elem.assignmentCompleted = true;
		}
	});
	
}

Basket.updateContainer = function(){
	var availableContainers = $$('.basketContainer');
	availableContainers.each(function(elem){
		var targetBasket = elem.getAttribute('targetBasket') ? elem.getAttribute('targetBasket') : 'defaultBasket';
		new Ajax.Updater(elem, 'php/basket.php' , {
			asynchronous: true,
			method: 'get',
			parameters: {
				'return' : 'basket',
				'targetBasket' : targetBasket,
				'randomize' : Math.random()
			},
			onComplete: function(transport){
				Basket.assignActions();
				Basket.processTotals(targetBasket);
			}
		});
	});
}

Basket.updateCodeContainer = function(){
	var availableContainers = $$('.codeContainer');
	availableContainers.each(function(elem){
		var targetBasket = elem.getAttribute('targetBasket') ? elem.getAttribute('targetBasket') : 'defaultBasket';
		new Ajax.Updater(elem, 'php/codes.php' , {
			asynchronous: true,
			method: 'get',
			parameters: {
				'return' : 'codeList',
				'targetBasket' : targetBasket,
				'randomize' : Math.random()
			},
			onComplete: function(transport){
				Basket.assignActions();
				Basket.processTotals(targetBasket);
			}
		});
	});
}

Basket.updateBasketProceedButtons = function(basketpriceAccepted,merchantSelected,merchantOrderDatesLeft/*, userAccepted*/){
	basketpriceAccepted = basketpriceAccepted == 'TRUE' ? true : false;
	merchantSelected = merchantSelected == 'TRUE' ? true : false;
	merchantOrderDatesLeft = merchantOrderDatesLeft == 'TRUE' ? true : false;
	//userAccepted = userAccepted== 'TRUE' ? true : false;
	$$('.basketproceed').each(function(elem){
		if(elem.hasClassName('proceedpayment')){
			if((basketpriceAccepted)&&(merchantSelected)&&(merchantOrderDatesLeft)/*&&(userAccepted)*/) { elem.show(); }
			else { elem.hide(); };
		}
		/*
		if(elem.hasClassName('proceedidentification')){
			if((basketpriceAccepted)&&(!userAccepted)) { elem.show(); }
			else { elem.hide(); };
		}
		*/
		if(elem.hasClassName('proceedmerchantselection')){
			if((basketpriceAccepted)&&(!merchantSelected)/*&&(userAccepted)*/) { elem.show(); }
			else { elem.hide(); };
		}
		
		if(elem.hasClassName('proceedmarchantselection_noDates')){
			if((basketpriceAccepted)&&(merchantSelected)&&(!merchantOrderDatesLeft)/*&&(userAccepted)*/) { elem.show(); }
			else { elem.hide(); };
		}
		
		if(elem.hasClassName('proceeddenied')){
			if(!basketpriceAccepted) { elem.show(); } 
			else { elem.hide(); };
		}
	});
}


/* CODES */

document.observe('dom:loaded', function(eventObject) {
	$$('form.basket_probeCode').each(function(elem) {
		if (!elem.assignmentCompleted) {
			elem.observe('submit',function(e) {
				window.event ? event.returnValue = false : e.preventDefault();
				var elementsInForm = elem.getElementsByTagName('input');
				var query = new Hash();
				for (var iElem = 0; iElem < elementsInForm.length; iElem++) {
					if (elementsInForm[iElem].getAttribute('name')) {
						query.set(elementsInForm[iElem].getAttribute('name'),elementsInForm[iElem].value);
					}
				}
				query.set('randomize', Math.random());
				$$('form.basket_probeCode .returnResult').each(function(subElem) {
					new Ajax.Updater(subElem, 'php/codes.php' , {
						asynchronous: true,
						method: 'get',
						parameters: query,
						onComplete: function(transport) {
							elem.reset();
						},
						onFailure: function() {
							console.log('Could not probe code');
						}
					});
				});
				return false;
			});
			elem.assignmentCompleted = true;
		}
	});
});


/***************************************************************
* STATIC LINKS
*
* Acts like abstract-class (no inheritance whatsoever) so 
* every script can access it
*
***************************************************************/

StaticLink = new Object();
StaticLink.repository = new Hash();
StaticLink.initialize = function(){
	$$('.staticLink').each(function(elem){
		elem.observe('click',StaticLink.eventHandler);
	});
	$$('a').each(function(elemObj){
		if(!elemObj.hasClassName('staticLink')){
			elemObj.observe('click', function(eventObject){
				if(this.readAttribute('href')){
					StaticLink.redirectDirect(this.readAttribute('href'),this.readAttribute('target'));
				}
				eventObject.stop();
				return false;
			});
		}
	});
}
StaticLink.setLink = function(linkRef,targetUrl) {
	StaticLink.repository.set(linkRef,targetUrl);
}
StaticLink.getLink = function(linkRef) {
	StaticLink.repository.get(linkRef);
}
StaticLink.eventHandler = function(e) {
	var reqLink = e.target.getAttribute('linkRef');
	StaticLink.redirect(reqLink);
}
StaticLink.redirect = function(linkRef) {
	// TODO : improve script with external window feature
	if(!StaticLink.repository.get(linkRef)) return false;
	var reposResult = StaticLink.repository.get(linkRef);
	StaticLink.redirectDirect(reposResult);
}

StaticLink.redirectDirect = function(URLPath,target) {
	if(URLPath.charAt(0) == '#') {
		document.location.hash = URLPath.substr(1);
	} else {
		var baseURL = '';
		$$('base').each(function(element) {
			baseURL = element.readAttribute('href');
		},this);
		if(!URLPath.match(/\:\/\/|mailto\:/)) {
			URLPath=baseURL+URLPath;
		}
		target ? window.open(URLPath,target) : (document.location.href = URLPath);
	}
}


// E-MAIL HANDLING

var emptyString = /^\s*$/ ;
var proceed = 2;

function evalForm(formId,validationScript) {
	if ((validationScript == "") || eval(validationScript)) {
		document.getElementById(formId).submit();
	}
}

function commonCheck(valfield, required) {
	if (!document.getElementById)  return true; 
	if (emptyString.test(valfield.value)) {
		if (required) {
			setfocus(valfield);
			return false;
		}
		else {
			return true;  
		}
	}
	return proceed;
}

function validatePresent(valfield) {
  var stat = commonCheck(valfield, true);
  if (stat != proceed) return false;
  return true;
}
function validateEmail  (valfield, required) {
	var tfld = trim(valfield.value); 
	var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
	if (!email.test(tfld)) {
		setfocus(valfield);
		return false;
	}
	var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;
	return true;
}
function validateTelnr  (valfield, required) {
	var tfld = trim(valfield.value);  
	var telnr = /^\+?[0-9 ()-]+[0-9]$/  ;
	if (!telnr.test(tfld)) {
		setfocus(valfield);
		return false;
	}
	var numdigits = 0;
	for (var j=0; j<tfld.length; j++)
	if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;
	if (numdigits<6) {
		setfocus(valfield);
		return false;
	}
	return true;
}

function trim(str) { return str.replace(/^\s+|\s+$/g, ''); }

function setFocusDelayed() { global_valfield.focus(); }
function setfocus(valfield) {
	global_valfield = valfield;
	setTimeout('setFocusDelayed()',100);
}

/* ---------------------------------------------------------------- //
// CONFIRM                                                          //
// ---------------------------------------------------------------- */

function initiate_confirm(e){
	var elem = e.target;
	var confirmMessage = elem.getAttribute("confirmMessage").replace(/\\n/,"\n");
	if(!confirmMessage) return false;
	if(!confirm(confirmMessage)) {
		window.event? event.returnValue = false : e.preventDefault();
		return false;
	}
}



/***************************************************************
* ORDERDATES
***************************************************************/
document.observe('dom:loaded', function(event){
	if($('orderDateSwitcher')){
		$('orderDateSwitcher').observe('change', function (eventObject){
			var currentObject = eventObject.target;
			var targetDate = $(currentObject.options[currentObject.selectedIndex]).readAttribute('targetDate');
			$$('.orderDates').each(function(elem){
				elem.hide();
				if(elem.id == 'date_' + targetDate) {
					elem.show();
					$("order_afhaalDatum_hour").value = elem.value;
				}
			});
		});
		$$('.orderDates').each(function(elem){
			elem.observe('change',function(eventObject){
				$("order_afhaalDatum_hour").value = this.value;
			});
		});
		
		var firstElem = $('date_' + $($('orderDateSwitcher').options[$('orderDateSwitcher').selectedIndex]).readAttribute('targetDate'));
		firstElem.show();
		$("order_afhaalDatum_hour").value = firstElem.value;
	}
});


/***************************************************************
* DOM EVENT LISTNERS
***************************************************************/
document.observe('dom:loaded', function(event){
	StaticLink.initialize();
	Basket.initialize();

	$$('.confirmBox').each(function(elem){elem.observe('click',initiate_confirm)});
	if($('popup_name')) { popup_hide(); } // dit mag aanvankelijk niet gehide zijn, want dan vertikt je browser de swf te downloaden
});














/* SlideShow */

var SlideShow = Class.create({
	timeout: 850,
	slideshow: null,
	slides: [],
	current: 0,
	initialize: function(slideshow,timeout){
		this.slideshow = $(slideshow);
		if(!this.slideshow) return false;
		this.slides = this.slideshow.select('img');
		this.current = this.slides.length-1;
		this.timeout = timeout;
		setTimeout((function(){this.next();}).bind(this), this.timeout);
	},
	next: function() {
		for (var i = 0; i < this.slides.length; i++) {
			var slide = this.slides[(this.current + i) % this.slides.length];
			slide.style.zIndex = this.slides.length - i;
		}
		Effect.Fade(this.slides[this.current], {
			afterFinish: function(effect) {
				effect.element.style.zIndex = 0;
				Element.show(effect.element);
				Element.setOpacity(effect.element, 1);
			}
		});
		this.current = (this.current + 1) % this.slides.length;
		setTimeout((function(){this.next();}).bind(this), this.timeout + 850);
	}
});


document.observe('dom:loaded', function(eventObject) {
	$$('.slideshow').each(function(elem){new SlideShow(elem, 3000)});	
});





/* Afbeeldingen */


var images = {
	initialize: function(){
		$$('a.imageContainerController').invoke('observe','click',images.click_controller);		
		$$('a.selectImg').invoke('observe','click',images.click_image);
		$$('.imageContainer.horizontal .imageContainerSlider').each(function(imageContainerSlider){
			imageContainerSlider.setStyle({
				width: (imageContainerSlider.select('a').length * parseInt(imageContainerSlider.select('a')[0].getDimensions().width)) + 'px'
			});
		});
		$$('.imageContainer.vertical .imageContainerSlider').each(function(imageContainerSlider){
			imageContainerSlider.setStyle({
				height: (imageContainerSlider.select('a').length * parseInt(imageContainerSlider.select('a')[0].getDimensions().height)) + 'px'
			});
		});
		// verbergen van de controller knoppen / elementen als ze niet nodig zijn
		$$('.imageContainer').each(function(elem){
			if(elem.hasClassName('horizontal')){
				if(elem.select('.imageContainerSlider')[0].getDimensions().width <= elem.getDimensions().width){
					$$('.imageContainerController[imageContainer=' + elem.readAttribute('id') + ']').invoke('hide');
				}
			} else if(elem.hasClassName('vertical')) {
				if(elem.select('.imageContainerSlider')[0].getDimensions().height <= elem.getDimensions().height){
					$$('.imageContainerController[imageContainer=' + elem.readAttribute('id') + ']').invoke('hide');
				}
			}
		});
	},
	click_controller: function(eventObject){
		var imageContainer = $(this.readAttribute('imageContainer'));
		if(!imageContainer) {
			return false;
		};
		var action = this.readAttribute('action');
		var imageContainerSlider = imageContainer.select('.imageContainerSlider')[0];
		var imageDimension, moveByChanging, sliderDimension, containerDimension;
		if(imageContainer.hasClassName('horizontal')){
			imageDimension = parseInt(imageContainerSlider.select('a')[0].getDimensions().width);
			sliderDimension = imageContainerSlider.getDimensions().width;
			containerDimension = imageContainer.getDimensions().width;
			moveByChanging = 'left';
		} else {
			imageDimension = parseInt(imageContainerSlider.select('a')[0].getDimensions().height);
			sliderDimension = imageContainerSlider.getDimensions().height;
			containerDimension = imageContainer.getDimensions().height;
			moveByChanging = 'top';
		}
		console.log(imageContainerSlider,imageDimension,sliderDimension,containerDimension,moveByChanging);
		if(!(imageDimension && moveByChanging)) {
			console.log('Could not determine imageheight or width. Does the imageContainer have a class horizontal or vertical?');
			return false;
		}
		if(action == 'first'){
			new Effect.Morph(imageContainerSlider, {
				style: moveByChanging + ':0px;',
				duration: 0.5 
			});
		};
		if(action == 'previous'){
			
			var currentPosition = parseInt(imageContainerSlider.getStyle(moveByChanging).replace(/[^\d\-]/g,''));
			var targetPosition = ((currentPosition + imageDimension) <= 0) ? (currentPosition+imageDimension) : 0;
			new Effect.Morph(imageContainerSlider, {
				style: moveByChanging + ':' + targetPosition + 'px;',
				duration: 0.5 
			});
		};
		if(action == 'next'){
			var currentPosition = parseInt(imageContainerSlider.getStyle(moveByChanging).replace(/[^\d\-]/g,''));
			var minDimension = (-sliderDimension + containerDimension);
			var targetPosition = ((currentPosition - imageDimension) >= minDimension) ? (currentPosition-imageDimension) : minDimension;
			new Effect.Morph(imageContainerSlider, {
				style: moveByChanging + ':' + targetPosition + 'px;',
				duration: 0.5 
			});
		};
		if(action == 'last'){
			new Effect.Morph(imageContainerSlider, {
				style: moveByChanging + ':' + (-sliderDimension + containerDimension) + 'px;',
				duration: 0.5 
			});
		};

	},
	click_image: function(eventObject){
		var targetImg = $(this.readAttribute('targetImg'));
		if(targetImg) {
			targetImg.setAttribute('src',this.readAttribute('bigImg'));
		}
	}
}
	
document.observe('dom:loaded',images.initialize);


/* CARROUSEL

0 Meervoudig instantieerbaar maken

*/

var carrousel = {
	initialize: function() {
		$$('.js_carrousel .js_carrouselHeader a.js_moveCarrousel').invoke('observe','click',carrousel.click_controller);
		$$('.js_carrousel .js_carrouselHeader a.js_moveCarrousel').invoke('observe','carrousel:click',carrousel.click_controller);
		if($$('.js_carrousel .js_carrouselHeader a.js_moveCarrousel').length){
      $$('.js_carrousel .js_carrouselHeader a.js_moveCarrousel')[0].addClassName('js_active');
    }
		$$('.js_carrousel .js_carrouselBody').each(function(carrouselAlinea) {
				carrouselAlinea.setStyle({
						width: (carrouselAlinea.select('.js_carrouselItem').length * parseInt(carrouselAlinea.select('.js_carrouselItem')[0].getDimensions().width)) + 'px'
				});
		});
		$$('.js_carrousel').invoke('observe','mouseout',carrousel.timer.startTimer);
		$$('.js_carrousel').invoke('observe','mouseover',carrousel.timer.stopTimer);
		carrousel.timer.startTimer();
	},
	timer: {
		timeout: 5000,
		timer: 0,
		nextItem: function() {
			var ControllerButtons = $$('.js_carrousel .js_carrouselHeader a.js_moveCarrousel')
			for (var pos = 0; pos < ControllerButtons.length; pos++) {
				if (ControllerButtons[pos].hasClassName('js_active')) {
					if (pos == ControllerButtons.length -1) {
						ControllerButtons[0].fire('carrousel:click');
					} else {
						ControllerButtons[pos+1].fire('carrousel:click');
					}
					break;
				}
			};
			carrousel.timer.startTimer();
		},
		
		startTimer: function() {
			carrousel.timer.timer = window.setTimeout('carrousel.timer.nextItem()',carrousel.timer.timeout);
		},
		
		stopTimer: function() {
			window.clearTimeout(carrousel.timer.timer);
			carrousel.timer.timer = 0;
		}
	},
	click_controller: function(eventObject) {
		$$('.js_carrousel .js_carrouselHeader a.js_moveCarrousel').invoke('removeClassName','js_active');
		this.addClassName('js_active');
		var carrouselContainer = $(this.readAttribute('carrouselContainer'));
		if (!carrouselContainer) {
			return false;
		};
		var carrouselAlinea = carrouselContainer.select('.js_carrouselBody')[0];
		var containerWidth = parseInt(carrouselAlinea.select('.js_carrouselItem')[0].getDimensions().width);
		var wantedContainer = carrouselAlinea.select('.js_carrouselItem[itemId=' + this.readAttribute('targetItemId') + ']')[0];
		var targetPosition = parseInt(wantedContainer.readAttribute('num')) * parseInt(carrouselAlinea.select('.js_carrouselItem')[0].getDimensions().width);
		new Effect.Morph(carrouselAlinea, {
				style: 'left: -' + targetPosition + 'px;',
				duration: 0.5
				});
	}
};

document.observe('dom:loaded',carrousel.initialize);




/* retailers zoeken */

var retailerList = {
	settings: {},
	initialize: function(){
		$$('.dealer_calcProximityForPostcode').each(function(elem){
			elem.observe('click',retailerList.calcProximityForPostcode);
			elem.observe('retailerList:click',retailerList.calcProximityForPostcode)
		});
		if($$('.dealer_calcProximityForPostcode').length && $('googleMaps')){
			new Ajax.Request('template_pagina/speciaal/retailer/select_retailer/markers.php', { method:'get',
					onSuccess: function(transport){
						markerlist = eval(transport.responseText);
						$(markerlist).each(function(marker){
								gMapsObject.processMarker(marker);
							})
					}
				});
		}
	},
	calcProximityForPostcode: function(eventObject){
		retailerList.settings = {
			postcodeElem: $(this.readAttribute("postcodeId")),
			proximityElem: $(this.readAttribute("proximityId")),
			targetContainer: $(this.readAttribute("targetContainer")),
			errorElem: $(this.readAttribute("errorMessage"))
		}
		if((!retailerList.settings.postcodeElem)||(!retailerList.settings.proximityElem)||(!retailerList.settings.targetContainer)){
			console.log('could not complete request, missing elements');
			return false;	
		}
		eventObject.stop();
		
		if(retailerList.settings.postcodeElem.value.match(/^[0-9]{4}\s?[a-z|A-Z]{2}$/)){
			retailerList.settings.postcodeElem.removeClassName(formValidation.errorClass);
			if(retailerList.settings.errorElem) {
				retailerList.settings.errorElem.hide();
			}
			// get the latitude and longitude an pass them to the updateDealerContainerfunction
			var zoomlevel = parseInt($(retailerList.settings.proximityElem.options[retailerList.settings.proximityElem.selectedIndex]).readAttribute('googleZoomLevel'));
			gMapsObject.calcProximityToPostcode(retailerList.settings.postcodeElem.value, zoomlevel, retailerList.updateContainer);
		} else {
			if(retailerList.settings.errorElem) {
				retailerList.settings.errorElem.show();
			}
			retailerList.settings.postcodeElem.addClassName(formvalueIncorrectClassExtention);
		}
	},
	updateContainer: function(latitude, longitude){
		new Ajax.Updater($(retailerList.settings.targetContainer), $('basePath').readAttribute('href') + 'retailerList' , {
			asynchronous: true,
			method: 'get',
			parameters: {
				'proximity' : retailerList.settings.proximityElem.value,
				'latitude' : latitude,
				'longitude' : longitude,
				'randomize' : Math.random()
			}
		})
	}
}

document.observe('dom:loaded',function(eventObject){
		
		// kennelijk werkt de volgorde van dom attachen anders in IE7 ten opzichten van de rest van de browsers
		if($('googleMaps')) { 
			gMapsObject.loadGoogleMaps();
			retailerList.initialize();
			$$('.dealer_calcProximityForPostcode').each(function(elem){
				if($F(elem.readAttribute('postcodeId'))){
					elem.fire('retailerList:click');
				}
			});
		}		
	});


/* formulieren */

var formValidation = {
	errorClass: 'error'
};


/* popup */

var popup = {
	initialize: function(eventObject){
		if($('popup_content')){
			$$('img.js_openPopup').invoke('observe','click',popup.openPopup);
			$$('.js_closePopup').invoke('observe','click',popup.closePopup);
			popup.closePopup();
		}
	},
	openPopup: function(eventObject){
		$('popup_windowName').update(this.readAttribute('popupTitle'));
		$('popup_content').show();
		$('popup_achtergrond').show();
		$('popup_img').src = this.readAttribute('popupImage');
	},
	closePopup: function(eventObject){
		$('popup_windowName').update('Een moment geduld a.u.b.');
		$('popup_content').hide();
		$('popup_achtergrond').hide();
		$('popup_img').src = "images/popup_loading.gif";
	}
}

document.observe('dom:loaded',popup.initialize);


/* special verkoop_orders */

document.observe('dom:loaded',function(eventObject){
	var changeDay = $('verkoop_orders_changeDay');
	if(changeDay){
		changeDay.observe('change',function(eventObject){
			var targetUrl = this.readAttribute('targetPage');
			if(targetUrl) {
				document.location.href = targetUrl + '?setDate=' + this.getValue();
			}
		});
	}
});


/* Automatisch printen via de querystring */

document.observe('dom:loaded',function(eventObject){
	var queryString = document.location.search.toQueryParams();
	if(queryString.autoPrint == 'true'){
		window.print();
	}
});


/* automatisch naar de waarde van een pulldown gaan (url) zodra de pulldown veranderd */

document.observe('dom:loaded',function(eventObject){
		$$('select.js_autoJump').invoke('observe','change',function(eventObject){
				StaticLink.redirectDirect(this.getValue());
			});
	});