	function explode (delimiter, string, limit) {
	    // http://kevin.vanzonneveld.net
	    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +     improved by: kenneth
	    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +     improved by: d3x
	    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // *     example 1: explode(' ', 'Kevin van Zonneveld');
	    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
	    // *     example 2: explode('=', 'a=bc=d', 2);
	    // *     returns 2: ['a', 'bc=d']
	    var emptyArray = {
	        0: ''
	    };
	
	    // third argument is not required
	    if (arguments.length < 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined') {
	        return null;
	    }
	
	    if (delimiter === '' || delimiter === false || delimiter === null) {
	        return false;
	    }
	
	    if (typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object') {
	        return emptyArray;
	    }
	
	    if (delimiter === true) {
	        delimiter = '1';
	    }
	
	    if (!limit) {
	        return string.toString().split(delimiter.toString());
	    } else {
	        // support for limit argument
	        var splitted = string.toString().split(delimiter.toString());
	        var partA = splitted.splice(0, limit - 1);
	        var partB = splitted.join(delimiter.toString());
	        partA.push(partB);
	        return partA;
	    }
	}
	
	function number_format (number, decimals, dec_point, thousands_sep) {
	    // http://kevin.vanzonneveld.net
	    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +     bugfix by: Michael White (http://getsprink.com)
	    // +     bugfix by: Benjamin Lupton
	    // +     bugfix by: Allan Jensen (http://www.winternet.no)
	    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	    // +     bugfix by: Howard Yeend
	    // +    revised by: Luke Smith (http://lucassmith.name)
	    // +     bugfix by: Diogo Resende
	    // +     bugfix by: Rival
	    // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
	    // +   improved by: davook
	    // +   improved by: Brett Zamir (http://brett-zamir.me)
	    // +      input by: Jay Klehr
	    // +   improved by: Brett Zamir (http://brett-zamir.me)
	    // +      input by: Amir Habibi (http://www.residence-mixte.com/)
	    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
	    // +   improved by: Theriault
	    // +      input by: Amirouche
	    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // *     example 1: number_format(1234.56);
	    // *     returns 1: '1,235'
	    // *     example 2: number_format(1234.56, 2, ',', ' ');
	    // *     returns 2: '1 234,56'
	    // *     example 3: number_format(1234.5678, 2, '.', '');
	    // *     returns 3: '1234.57'
	    // *     example 4: number_format(67, 2, ',', '.');
	    // *     returns 4: '67,00'
	    // *     example 5: number_format(1000);
	    // *     returns 5: '1,000'
	    // *     example 6: number_format(67.311, 2);
	    // *     returns 6: '67.31'
	    // *     example 7: number_format(1000.55, 1);
	    // *     returns 7: '1,000.6'
	    // *     example 8: number_format(67000, 5, ',', '.');
	    // *     returns 8: '67.000,00000'
	    // *     example 9: number_format(0.9, 0);
	    // *     returns 9: '1'
	    // *    example 10: number_format('1.20', 2);
	    // *    returns 10: '1.20'
	    // *    example 11: number_format('1.20', 4);
	    // *    returns 11: '1.2000'
	    // *    example 12: number_format('1.2000', 3);
	    // *    returns 12: '1.200'
	    // *    example 13: number_format('1 000,50', 2, '.', ' ');
	    // *    returns 13: '100 050.00'
	    number = (number + '').replace(',', '').replace(' ', '');
	    var n = !isFinite(+number) ? 0 : +number,
	        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
	        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
	        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
	        s = '',
	        toFixedFix = function (n, prec) {
	            var k = Math.pow(10, prec);
	            return '' + Math.round(n * k) / k;
	        };
	    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
	    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
	    if (s[0].length > 3) {
	        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
	    }
	    if ((s[1] || '').length < prec) {
	        s[1] = s[1] || '';
	        s[1] += new Array(prec - s[1].length + 1).join('0');
	    }
	    return s.join(dec);
	}

	var currentOrder = 0;

	function calculate(id) {
		
		var hValue = parseInt($('#hValue'+id).val());
		var bValue = parseInt($('#bValue'+id).val());
		
		if(hValue > 0 && bValue > 0) {
			$('input[name=factor]').each(function(){
				var distance = $(this).attr('rel');
				
				var arr = explode('-',distance);
				var start = parseInt(arr[0]);
				var end = parseInt(arr[1]);
	
				if(hValue >= start && hValue <= end) {
					
					var price = bValue * $(this).val() / 100;
					$('input[name=productPrice[' + id + ']]').val(price);
					$('#price'+id).text('\u20ac '+number_format(price, 2, ',', '.'));
					$('#order'+id).attr('disabled',false);
					
					return false;
				}
			});	
		} else {
			
			$('#price'+id).text('\u20ac '+number_format(0, 2, ',', '.'));
			$('#order'+id).attr('disabled',true);
			
		}			
	}
	
	function calculateZonwering() {		
		var bValue = parseInt($('#bZonwering').val());
		var dValue = parseInt($('#dZonwering').val());
		
		if(dValue > 0 && bValue > 0) {					
			var price = (bValue/100) * (dValue/100) * 115 / 100;
			$('input[name=productPriceZonwering]').val(price);
			$('#priceZonwering').text('\u20ac '+number_format(price, 2, ',', '.'));
		} else {			
			$('#priceZonwering').text('\u20ac '+number_format(0, 2, ',', '.'));		
		}		
	}
	
	$(document).ready(function() {
	
		$('input[name=shipping]').live('click', function(){
			var shipping = $(this).val();
			var shippingPrice = parseInt($('input[name=shippingPrice]').val()); 
			
			if(shipping == 1) {
				
				var totalPrice = parseInt($('input[name=totalPrice]').val() * 100);
				var newPrice = (totalPrice + shippingPrice) / 100;

				$('.totalPrice').text('\u20ac '+number_format(newPrice, 2, ',', '.'));				
				$('input[name=totalPriceOrder]').val('\u20ac '+number_format(newPrice, 2, ',', '.'));
				$('input[name=shippingString]').val('Bestelling laten bezorgen');
				
				if(shippingPrice == 0) {
					$('input[name=shippingCosts]').val('gratis');	
				} 
				else {
					$('input[name=shippingCosts]').val('\u20ac '+number_format(100, 2, ',', '.'));
				}				
				
			} else if(shipping == 0){
				
				var totalPrice = parseInt($('input[name=totalPrice]').val() * 100);
				
				$('.totalPrice').text('\u20ac '+number_format((totalPrice/100), 2, ',', '.'));
				
				$('input[name=totalPriceOrder]').val('\u20ac '+number_format((totalPrice/100), 2, ',', '.'));
				$('input[name=shippingString]').val('Bestelling zelf ophalen');
				$('input[name=shippingCosts]').val('gratis');	
			}
			
		});
		
		$('input[rel=order]').live('click', function() {
			if($('input[rel=order]').is(':checked')) {
				var temp = $('#formRow0').html();
				currentOrder++;
				
				var html = temp.toString();
				html = html.replace('hValue0', 'hValue'+currentOrder);
				html = html.replace('height[0]', 'height['+currentOrder+']');
				html = html.replace('bValue0', 'bValue'+currentOrder);
				html = html.replace('width[0]', 'width['+currentOrder+']');
				html = html.replace('price0', 'price'+currentOrder);
				html = html.replace('productPrice[0]', 'productPrice['+currentOrder+']');
				html = html.replace('order0', 'order'+currentOrder);
				html = html.replace('selected[0]', 'selected['+currentOrder+']');

				$('#formRow'+(currentOrder-1)).before('<tr id="formRow' + currentOrder + '">' + html + '</tr>');
				$('#order'+currentOrder).attr('disabled',true);
			}
		});
		
		$('input[rel=calculate]').live('keyup', function(){
			var id = $(this).attr('id');
			id = id.replace('hValue', '');
			id = id.replace('bValue', '');
			calculate(id);
		});	
	});
