var page = 1;
var resultsPerPage = 15;
var adjacentPages = 2;
var documentLocation = document.location.href.split('pagina.php');
var sessionMinRpm = null;
var sessionMaxRpm = null;
var sessionMinPower = null;
var sessionMaxPower = null;
var sessionMinRatio = null;
var sessionMaxRatio = null;
var currencySymbolRpm = ' RPM';
var currencySymbolPower = ' HP';
var currencySymbolRatio = ':1';
var homepageItemCounter = 0;
var showHideTimeout = 5000;
var useSorting = true;



$(document).ready(function() {

	/*if ($('a#bpLink').length != 0)	{
		var curLink = $('a#bpLink').attr('href');
		//check for real link
		var cLink = curLink.split('.');
		if (cLink[1].substring(0,4) == 'html' || cLink[1].substring(0,3) == 'php')	{
			//check if the p get var is incomming
			var getP = getVar('p');
			var getFb = getVar('fb');
			if(getP != '')	{
				//oke, generate the link
				if (cLink[1].substring(0,4) == 'html')	{
					var newLink = curLink + '?bp='+getP;
				}else	{
					var newLink = curLink + '&bp='+getP;
				}
				//replace
				$('a#bpLink').attr('href',newLink);
				//for the brand pages
			}else if (getFb != '' && getFb == 't')	{
				//oke, generate the link
				var newLink = 'Javascript:history.back()';
				//replace
				$('a#bpLink').attr('href',newLink);
			}
		}
	}*/

	//fade items on left side of screen

	homepageItemCounter = $('.homepageItem').length;
	if (homepageItemCounter != 0) {
		$('.homepageItem').hide();
		$('.homepageItem').first().show();
		setTimeout('showHideItems(\'.homepageItem\')',showHideTimeout);
	}

	// opactiy for sold product
	$("img.soldproduct").css({opacity: 0.8});


	//fader voor linksonder menu
	handleFotoFader();


	if ($('#tabs').length > 0) {
	    $.featureList(
	        $("#tabs li a"),
	        $("#output li"), {
	            start_item    :    1
	        }
	    );
	}

	if ($('.letter').length != 0) {
		$('.letter').hide();
		$('.abc').click(function() {
			$('.abc').removeClass('abcActive');
			$('.letter').removeClass('lActive');
			$(this).addClass('abcActive');
			$(this).next('div.letter').addClass('lActive');
			$('.letter:not(.lActive)').hide();
			var abcLetter = $(this).attr('id').split('_');
			var tHeight = $('#abcLetter_'+abcLetter[1]).height();
			$('#abcLetter_'+abcLetter[1]).css("height", tHeight);
			
			if ($('#abcLetter_'+abcLetter[1]).css('display') == 'none') {
				$('#abcLetter_'+abcLetter[1]).show();
				//$('#abcLetter_'+abcLetter[1]).slideDown();
			} else {
				$('#abcLetter_'+abcLetter[1]).hide();
				//$('#abcLetter_'+abcLetter[1]).slideUp();
			}			
		});
	}

	//back link from productdetail to searchresult
	if ($('a#bpLink').length != 0)	{
		var curLink = $('a#bpLink').attr('href');
		//check for real link
		var cLink = curLink.split('.');
		if (cLink[1].substring(0,4) == 'html' || cLink[1].substring(0,3) == 'php')	{
			//check if the p get var is incomming
			var getP = getVar('p');
			var getFb = getVar('fb');
			if(getP != '')	{
				//oke, generate the link
				if (cLink[1].substring(0,4) == 'html')	{
					var newLink = curLink + '?bp='+getP;
				}else	{
					var newLink = curLink + '&bp='+getP;
				}
				//replace
				$('a#bpLink').attr('href',newLink);
				//for the brand pages
			}else if (getFb != '' && getFb == 't')	{
				//oke, generate the link
				var newLink = 'Javascript:history.back()';
				//replace
				$('a#bpLink').attr('href',newLink);
			}
		}
	}
	if ($('#productdetail').length != 0)	{

		$.getScript('/handleFilterSession.php?action=loadSession&currentGroupID='+currentProductGroupID, function(data) {
			$.getJSON('/json/products_'+currentProductGroupID+'.json', false, function(data, textStatus){


				product = data.products[currentProductID];

				if (showActie ( product ) ) {

					// dit is een product als actie

					$("span.#nu_prijs").text( currencySymbol + removeCurrencySymbol( product.actie.prijs ) );

					// vervang alle productid's met actieid
					var productForm = $("#product_acc_form").html();
					//productForm = productForm.replace( currentProductID , product.actie.id );
					productForm = str_replace ( currentProductID, product.actie.id , productForm );
					$("#product_acc_form").html( productForm );

					var test = '<div class="prijs prijs_actie">Actie'
								+	'<span class="van" style="text-decoration: line-through;">' +  product.actie.prijs_van + '</span>'
								+	'<span class="voor">' + product.actie.prijs + '</span>'
								+ '</div>'
								+ '<div class="clear"> </div>';

					$("#productHoofdAfbeelding").prepend(test);


				}

			});//end getJSON

		});//end getScript

	}

	if ($('#merkdetail').length != 0)	{

		//handleBrands( page );

	}	//productfilter
	if ($('#filter').length != 0) {


		$.getScript('/handleFilterSession.php?action=loadSession&currentGroupID='+currentProductGroupID, function(data) {
			$.getJSON('/json/products_'+currentProductGroupID+'.json', false, function(data, textStatus){

				var tagsAdded = new Array();
				var taggroupsAdded = new Array();
				var sizesAdded = new Array();
				var productCount = 0;
				var minProductRpm = 0;
				var maxProductRpm = 1;
				var minProductPower = 0;
				var maxProductPower = 1;
				var minProductRatio = 0;
				var maxProductRatio = 1;

				//decide to show ratio
				var showRatio = false;
				if (currentProductGroupID == 7956)	{
					var showRatio = true;
				}

				$.each(data.products, function() {

					// breken max en min prijs voor slider
					//if (this.in_actie == 1) {
					//	var productPrijs = this.actie.prijs_unformatted;
					//} else {
					//	var productPrijs = this.prijs_unformatted;
					//}
				 	//productPrijs = Number(productPrijs.replace(',','.'));
				 	productRpm = Number(this.RPM);
				 	productPower = Number(this.power);
				 	if (this.ratio != null)	{
				 		productRatio = Number(this.ratio.replace(',','.'));
					}else	{
						productRatio = false;
					}

				    if ( productRpm) {
						 minProductRpm = Math.min( minProductRpm, productRpm);
						 maxProductRpm = Math.max( maxProductRpm, productRpm);
				    }

				    if ( productPower) {
						 minProductPower = Math.min( minProductPower, productPower);
						 maxProductPower = Math.max( maxProductPower, productPower);
				    }

				    if ( productRatio) {
						 minProductRatio = Math.min( minProductRatio, productRatio);
						 maxProductRatio = Math.max( maxProductRatio, productRatio);
				    }


					//voorkomende tags toevoegen aan de style fieldset
					tagGroupCounter = 0;
					if (this.taggroups != undefined) {
						$.each(this.taggroups, function(tagGroupID, currentTagGroup) {
							if (!in_array(tagGroupID, taggroupsAdded)) {
								taggroupsAdded[taggroupsAdded.length] = tagGroupID;
								//taggroups
								taggroupHTML = '<div class="filter_head" id="tg_' + tagGroupID + 'Header"><h3>' + currentTagGroup.name + ':</h3><!--<a class="reset floatRight" href="#" title="#" onclick="uncheckFilter(\'tg_' + tagGroupID + '\');">Reset</a>--></div>';
								taggroupHTML += '<div class="scroller" id="tg_' + tagGroupID + 'Scroller">';
								taggroupHTML += '	<fieldset id="tg_' + tagGroupID + 'Fieldset" class="tagsFieldset">';
								taggroupHTML += '		<legend>&nbsp;</legend>';
								taggroupHTML += '	</fieldset>';
								taggroupHTML += '	<br>';
								taggroupHTML += '</div><div class="border" id="stylesBorder">&nbsp;</div>';
								$('#taggroups').append(taggroupHTML);
							}
							$.each(currentTagGroup.tags, function(i, val) {
								if (!in_array(i, tagsAdded)) {
									tagsAdded[tagsAdded.length] = i;
									$('#tg_' + tagGroupID + 'Fieldset').append('<input class="checkbox floatLeft" type="checkbox" name="tg_' + tagGroupID + '[]" id="tg_' + tagGroupID + '_' + i + '" value="' + i + '" onclick="handleSearch()"><label class="active" for="tg_' + tagGroupID + '_' + i + '">' + val.naam + '</label><div class="clear"></div>');
									if (sessiontg != undefined) {
										if (in_array(i, sessiontg)) {
											$('#tg_' + tagGroupID + '_'+i).attr('checked', true);
										}
									}
								}
							});
							tagGroupCounter++;
						});
					}

					//voorkomende maten toevoegen aan de size fieldset
					//if (this.artikelen != undefined) {
//						$.each(this.artikelen, function (i, val) {
//							if (!in_array(i, sizesAdded)) {
//								sizesAdded[sizesAdded.length] = i;
//								$('#sizesFieldset').append('<input class="checkbox floatLeft" type="checkbox" name="size[]" id="size_' + i + '" value="' + i + '" onclick="handleSearch()"><label class="active" for="size_' + i + '">' + val.artikelnaam + '</label><br>');
//								if (sessionSizes != undefined) {
//									if (in_array(i, sessionSizes)) {
//										$('#size_'+i).attr('checked', true);
//									}
//								}
//							}
//						});
//					}

					//if (this.artikelen != undefined) {
//						$.each(this.artikelen, function (i, val) {
//							if (!in_array(val.artikelnaam, sizesAdded)) {
//								sizesAdded[sizesAdded.length] = val.artikelnaam;
//								$('#sizesFieldset').append('<input class="checkbox floatLeft" type="checkbox" name="size[]" id="size_' + val.artikelnaam + '" value="' + val.artikelnaam + '" onclick="handleSearch()"><label class="active" for="size_' + val.artikelnaam + '">' + val.artikelnaam + '</label><br>');
//								if (sessionSizes != undefined) {
//									if (in_array(val.artikelnaam, sessionSizes)) {
//										$('#size_'+val.artikelnaam).attr('checked', true);
//									}
//								}
//							}
//						});
//					}

					productCount++;
				});

			// max position for slider based on max product rpm and saved user setting
			if (sessionMinRpm == null) {
				sliderMinValueRpm = minProductRpm;
			} else {
				sliderMinValueRpm = Math.max ( sessionMinRpm, minProductRpm);
			}
			// min position for slider based on min product rpm and saved user setting
			if (sessionMaxRpm == null) {
				sliderMaxValueRpm = maxProductRpm;
			} else {
				sliderMaxValueRpm = Math.min ( sessionMaxRpm, maxProductRpm);
			}

			// logical slider step based on rpm range
			//sliderStepRpm = calcSliderStep( maxProductPrice - minProductPrice );
			sliderStepRpm = getSliderStep('rpm');

			$("#rpmSlider").slider({
				range: true,
				min: minProductRpm,
				max: maxProductRpm,
				values: [ sliderMinValueRpm, sliderMaxValueRpm],
				step: sliderStepRpm,
				slide: function(event, ui) {

					$("#rpmMin").html(ui.values[0] + currencySymbolRpm);
					$("#rpmMax").html(ui.values[1] + currencySymbolRpm);

					},
				change: function(event, ui) {
						handleSearch();
					}


			});
			$("#rpmMin").html($("#rpmSlider").slider("values", 0) + currencySymbolRpm);
			$("#rpmMax").html($("#rpmSlider").slider("values", 1) + currencySymbolRpm);


			//POWER//
			// max position for slider based on max product Power and saved user setting
			if (sessionMinPower == null) {
				sliderMinValuePower = minProductPower;
			} else {
				sliderMinValuePower = Math.max( sessionMinPower, minProductPower);
			}
			// min position for slider based on min product Power and saved user setting
			if (sessionMaxPower == null) {
				sliderMaxValuePower = maxProductPower;
			} else {
				sliderMaxValuePower = Math.min( sessionMaxPower, maxProductPower);
			}

			// logical slider step based on rpm range
			//sliderStepRpm = calcSliderStep( maxProductPrice - minProductPrice );
			sliderStepPower = getSliderStep('power');

			$("#powerSlider").slider({
				range: true,
				min: minProductPower,
				max: maxProductPower,
				values: [ sliderMinValuePower, sliderMaxValuePower],
				step: sliderStepPower,
				slide: function(event, ui) {

					$("#powerMin").html(ui.values[0] + currencySymbolPower);
					$("#powerMax").html(ui.values[1] + currencySymbolPower);

					},
				change: function(event, ui) {
						handleSearch();
					}


			});
			$("#powerMin").html($("#powerSlider").slider("values", 0) + currencySymbolPower);
			$("#powerMax").html($("#powerSlider").slider("values", 1) + currencySymbolPower);


			//RATIO//
			// max position for slider based on max product Ratio and saved user setting
			if (sessionMinRatio == null) {
				var sliderMinValueRatio = minProductRatio;
			} else {
				var sliderMinValueRatio = Math.max( sessionMinRatio, minProductRatio);
			}
			// min position for slider based on min product Ratio and saved user setting


			if (sessionMaxRatio == null) {
				var sliderMaxValueRatio =  maxProductRatio;
			} else {
				var sliderMaxValueRatio = Math.min( sessionMaxRatio, maxProductRatio );
			}

			// logical slider step based on Ratio range
			//sliderStepRpm = calcSliderStep( maxProductPrice - minProductPrice );
			sliderStepRatio = getSliderStep('ratio');

			$("#ratioSlider").slider({
				range: true,
				min: minProductRatio,
				max: maxProductRatio,
				values: [ sliderMinValueRatio, sliderMaxValueRatio] ,
				step: sliderStepRatio,
				slide: function(event, ui) {

					$("#ratioMin").html(ui.values[0] + currencySymbolRatio);
					$("#ratioMax").html(ui.values[1] + currencySymbolRatio);

					},
				change: function(event, ui) {

						handleSearch();
					}


			});

			$("#ratioMin").html($("#ratioSlider").slider("values", 0) + currencySymbolRatio);
			$("#ratioMax").html($("#ratioSlider").slider("values", 1) + currencySymbolRatio);


				data.brands = handleFilterSorting(data.brands,'name',false);

				$.each(data.brands, function(i, val) {

					if ( val.name != '') {

						$('#brandsFieldset').append('<input class="checkbox floatLeft" type="checkbox" name="brand[]" id="brand_' + val.structuurID + '" value="' + val.structuurID + '" onclick="handleSearch()"><label class="active" for="brand_' + i + '">' + val.name + '</label><div class="clear"></div>');
						if (sessionBrands != undefined) {
							if (in_array(val.structuurID, sessionBrands)) {
								$('#brand_'+ val.structuurID ).attr('checked', true);
							}
						}
					}
				});


				if (sessionStock != undefined) {
					if (sessionStock[0] == 1) {
						$('#stock').attr('checked', true);
					}
				}

				if (sessionNew != undefined) {
					if (sessionNew[0] == 1) {
						$('#new').attr('checked', true);
					}
				}

				//check for a diff page
				var difP = getVar('bp');
				if (difP != '')	{
					//number?
					var filter=/^[0-9]+$/i
					if (filter.test(difP)) 	{
						handleSearch(difP, true);
					}else	{
						handleSearch(1, true);
					}
				}else	{
					handleSearch(1, true);
				}
	        });//end getJSON
		});//end getScript
	}//end filterpage

	addFormAction();

});

function showHideItems(itemClass)
{
	var currentItem = false;
	var nextItem = false;
	var firstItem = 0;
	$(itemClass).each(function(i) {
		if (i == 0) {
			firstItem = $(this);
		}
		if ($(this).css('display') == 'block') {
			currentItem = $(this);
			if (i == homepageItemCounter-1) {
				nextItem = firstItem
			}
		} else if (currentItem !== false && nextItem === false) {
			nextItem = $(this);
		}
	});

	if (currentItem != undefined && nextItem != undefined) {
		currentItem.fadeOut(500, function() {
			nextItem.fadeIn(1500, function() {
				setTimeout('showHideItems(\'' + itemClass + '\')',showHideTimeout);
			});
		});
	}


}

function showResultsPerPage(results)
{
	$('#productsPerpage').val(results);
	$('#theFilterForm').submit();
}


function echo () {
    // !No description available for echo. @php.js developers: Please update the function summary text file.
    //
    // version: 1004.2314
    // discuss at: http://phpjs.org/functions/echo    // +   original by: Philip Peterson
    // +   improved by: echo is bad
    // +   improved by: Nate
    // +    revised by: Der Simon (http://innerdom.sourceforge.net/)
    // +   improved by: Brett Zamir (http://brett-zamir.me)    // +   bugfixed by: Eugene Bulkin (http://doubleaw.com/)
    // +   input by: JB
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)    // %        note 1: If browsers start to support DOM Level 3 Load and Save (parsing/serializing),
    // %        note 1: we wouldn't need any such long code (even most of the code below). See
    // %        note 1: link below for a cross-browser implementation in JavaScript. HTML5 might
    // %        note 1: possibly support DOMParser, but that is not presently a standard.
    // %        note 2: Although innerHTML is widely used and may become standard as of HTML5, it is also not ideal for    // %        note 2: use with a temporary holder before appending to the DOM (as is our last resort below),
    // %        note 2: since it may not work in an XML context
    // %        note 3: Using innerHTML to directly add to the BODY is very dangerous because it will
    // %        note 3: break all pre-existing references to HTMLElements.
    // *     example 1: echo('<div><p>abc</p><p>abc</p></div>');    // *     returns 1: undefined
    var arg = '', argc = arguments.length, argv = arguments, i = 0;
    var win = this.window;
    var d = win.document;
    var ns_xhtml = 'http://www.w3.org/1999/xhtml';    var ns_xul = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'; // If we're in a XUL context

    var holder;

    var stringToDOM = function (str, parent, ns, container) {        var extraNSs = '';
        if (ns === ns_xul) {
            extraNSs = ' xmlns:html="'+ns_xhtml+'"';
        }
        var stringContainer = '<'+container+' xmlns="'+ns+'"'+extraNSs+'>'+str+'</'+container+'>';        if (win.DOMImplementationLS &&
            win.DOMImplementationLS.createLSInput &&
            win.DOMImplementationLS.createLSParser) {
            // Follows the DOM 3 Load and Save standard, but not
            // implemented in browsers at present; HTML5 is to standardize on innerHTML, but not for XML (though
            // possibly will also standardize with DOMParser); in the meantime, to ensure fullest browser support, could            // attach http://svn2.assembla.com/svn/brettz9/DOMToString/DOM3.js (see http://svn2.assembla.com/svn/brettz9/DOMToString/DOM3.xhtml for a simple test file)
            var lsInput = DOMImplementationLS.createLSInput();
            // If we're in XHTML, we'll try to allow the XHTML namespace to be available by default
            lsInput.stringData = stringContainer;
            var lsParser = DOMImplementationLS.createLSParser(1, null); // synchronous, no schema type            return lsParser.parse(lsInput).firstChild;
        }else if (win.DOMParser) {
            // If we're in XHTML, we'll try to allow the XHTML namespace to be available by default
            try {                var fc = new DOMParser().parseFromString(stringContainer, 'text/xml');
                if (!fc || !fc.documentElement || fc.documentElement.localName !== 'parsererror' || fc.documentElement.namespaceURI !== 'http://www.mozilla.org/newlayout/xml/parsererror.xml') {
                   	return fc.documentElement.firstChild;
                }
                // If there's a parsing error, we just continue on
            }
            catch(e) {
                // If there's a parsing error, we just continue on
            }
        }else if (win.ActiveXObject) {
        	// We don't bother with a holder in Explorer as it doesn't support namespaces
            var axo = new ActiveXObject('MSXML2.DOMDocument');
            axo.loadXML(str);
            return axo.documentElement;
        }
        /*else if (win.XMLHttpRequest) { // Supposed to work in older Safari
            var req = new win.XMLHttpRequest;
            req.open('GET', 'data:application/xml;charset=utf-8,'+encodeURIComponent(str), false);            if (req.overrideMimeType) {
                req.overrideMimeType('application/xml');
            }
            req.send(null);
            return req.responseXML;        }*/
        // Document fragment did not work with innerHTML, so we create a temporary element holder
        // If we're in XHTML, we'll try to allow the XHTML namespace to be available by default
        //if (d.createElementNS && (d.contentType && d.contentType !== 'text/html')) { // Don't create namespaced elements if we're being served as HTML (currently only Mozilla supports this detection in true XHTML-supporting browsers, but Safari and Opera should work with the above DOMParser anyways, and IE doesn't support createElementNS anyways)
        if (d.createElementNS && d.documentElement.nodeName.toLowerCase() !== 'html' || (d.contentType && d.contentType !== 'text/html')) {
            holder = d.createElementNS(ns, container);
        }else {
            holder = d.createElement(container); // Document fragment did not work with innerHTML
        }
        holder.innerHTML = str;
        while (holder.firstChild) {
            parent.appendChild(holder.firstChild);
        }
        return false;
        // throw 'Your browser does not support DOM parsing as required by echo()';
    };


    var ieFix = function (node) {
        if (node.nodeType === 1) {            var newNode = d.createElement(node.nodeName);
            var i, len;
            if (node.attributes && node.attributes.length > 0) {
                for (i = 0, len = node.attributes.length; i < len; i++) {
                    newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i].nodeName));                }
            }
            if (node.childNodes && node.childNodes.length > 0) {
                for (i = 0, len = node.childNodes.length; i < len; i++) {
                    newNode.appendChild(ieFix(node.childNodes[i]));                }
            }
            return newNode;
        }
        else {            return d.createTextNode(node.nodeValue);
        }
    };

    for (i = 0; i < argc; i++ ) {        arg = argv[i];
        if (this.php_js && this.php_js.ini && this.php_js.ini['phpjs.echo_embedded_vars']) {
            arg = arg.replace(/(.?)\{\$(.*?)\}/g, function (s, m1, m2) {
                // We assume for now that embedded variables do not have dollar sign; to add a dollar sign, you currently must use {$$var} (We might change this, however.)
                // Doesn't cover all cases yet: see http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double
                if (m1 !== '\\') {
                    return m1+eval(m2);
                }else {
                    return s;
                }
            });
        }
        if (d.appendChild) {
            if (d.body) {
            	if (win.navigator.appName == 'Microsoft Internet Explorer') { // We unfortunately cannot use feature detection, since this is an IE bug with cloneNode nodes being appended
                    d.body.appendChild(stringToDOM(ieFix(arg)));
                }else {
                    var unappendedLeft = stringToDOM(arg, d.body, ns_xhtml, 'div').cloneNode(true); // We will not actually append the div tag (just using for providing XHTML namespace by default)
                    if (unappendedLeft) {
                        d.body.appendChild(unappendedLeft);
                    }
                }
            } else {
             d.documentElement.appendChild(stringToDOM(arg, d.documentElement, ns_xul, 'description')); // We will not actually append the description tag (just using for providing XUL namespace by default)
            }
        } else if (d.write) {
            d.write(arg);
        }/* else { // This could recurse if we ever add print!            print(arg);
        }*/
    }
}


function print_r (array, return_val) {
    // Prints out or returns information about the specified variable
    //
    // version: 1004.2314
    // discuss at: http://phpjs.org/functions/print_r    // +   original by: Michael White (http://getsprink.com)
    // +   improved by: Ben Bryan
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +      improved by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // -    depends on: echo
    // *     example 1: print_r(1, true);
    // *     returns 1: 1

    var output = "", pad_char = " ", pad_val = 4, d = this.window.document;    var getFuncName = function (fn) {
        var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
        if (!name) {
            return '(Anonymous)';
        }        return name[1];
    };

    var repeat_char = function (len, pad_char) {
        var str = "";        for (var i=0; i < len; i++) {
            str += pad_char;
        }
        return str;
    };
    var formatArray = function (obj, cur_depth, pad_val, pad_char) {
        if (cur_depth > 0) {
            cur_depth++;
        }
        var base_pad = repeat_char(pad_val*cur_depth, pad_char);
        var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
        var str = "";
         if (typeof obj === 'object' && obj !== null && obj.constructor && getFuncName(obj.constructor) !== 'PHPJS_Resource') {
            str += "Array\n" + base_pad + "(\n";
            for (var key in obj) {
                if (obj[key] instanceof Array) {
                    str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);                } else {
                    str += thick_pad + "["+key+"] => " + obj[key] + "\n";
                }
            }
            str += base_pad + ")\n";        } else if (obj === null || obj === undefined) {
            str = '';
        } else { // for our "resource" class
            str = obj.toString();
        }
        return str;
    };

    output = formatArray(array, 0, pad_val, pad_char);
    if (return_val !== true) {
        if (d.body) {
            this.echo(output);
        }        else {
            try {
                d = XULDocument; // We're in XUL, so appending as plain text won't work; trigger an error out of XUL
                this.echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">'+output+'</pre>');
            }            catch (e) {
                this.echo(output); // Outputting as plain text may work in some plain XML
            }
        }
        return true;    } else {
        alert(output);
    }
}


//Sorting by a field, reverse (true or false) and type of the field (int, string)
function sort_by(field, reverse, primer){

   reverse = (reverse) ? -1 : 1;

   return function(a,b){

       a = a[field];
       b = b[field];

       if (typeof(primer) != 'undefined'){
           a = primer(a);
           b = primer(b);
       }


       if (a<b) return reverse * -1;
       if (a>b) return reverse * 1;
       return 0;

   }
}


function is_numeric (mixed_var) {

    return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') && mixed_var !== '' && !isNaN(mixed_var);
}


//Handles the filtering of the arg data(json) and orders it by the sortfield and given sortorder (false / true)
function handleFilterSorting(data,sortField,sortOrder)
{
	/*
	* Sorting order
	*/

	var x = data; //the main object with the data
	var yA = [data]; //the main object as an array
	var yAA = yA[0]; //the main object with direct key access
	var sortedData = new Object(); //the new sorted object


	var ini = new Array(); //array with the sortitems and the stuctuurid
	var def = new Array(); //array with only the correct sorted structuurids

	var eC = 0;
	$.each(x, function(count, c)	{

		//fill the ini array with the needed field
		ini[eC] = new Array(1);
		ini[eC][0] = this[sortField];
	    ini[eC][1] = this.structuurID;
	    //check for null val
	    if (ini[eC][0] == null)	{
			ini[eC][0] = 0;
	    }
	    eC = eC+1;

	});


	//check for result
	if (eC > 0)	{

		//decide the kindof data
		if (is_numeric(ini[0][0]))	{
			//sort the array on the sortedkey item (number)
			ini.sort(sort_by(0, sortOrder, parseInt));
		}else	{
			//sort the array on the sortedkey item (tekst)
			ini.sort(sort_by(0, sortOrder, function(a){return a.toUpperCase()}));
		}


		//push the structuurid in the def array
		$.each(ini, function(id, da)	{
			def.push(da[1]);
		});

		//chrome sorting object bugfix
		var ch = 0;
		//set the new order in the sortedData object
		$.each(def, function(ab, cd)	{
			sortedData[ch] = new Object();
			sortedData[ch] = yAA[cd];
			ch = ch+1;
		});

		return sortedData;

	}else	{
		return data;
	}


	/*
	* End sorting order
	*/
}

function getCompleteHtml(currentPage, isFirst, productsData)
{

	if (isFirst == undefined) {
		$('#loadingFilter').css('opacity', '0.6');
		$('#loadingFilter').fadeIn(100);
		$('#loadingProducts').css('opacity', '0.6');
		$('#loadingProducts').fadeIn(100);
	}

	if (currentPage == undefined) {
		page = 1;
	} else {
		page = currentPage;
	}

	if ($('#productGroepID').length > 0) {
		var productGroepID = $('#productGroepID')[0].value;
	} else {
		var productGroepID = false;
	}

	var checkedBoxes = '';
	var checkedBrands = $('#brandsFieldset > input:checked');
	checkedBrandIDs = new Array();
	$.each(checkedBrands, function (i, val) {
		checkedBrandIDs[checkedBrandIDs.length] = val.value;
		checkedBoxes += '&brands[]=' + val.value;
	});

	var checkedStock = $('#stockFieldset > input:checked');
	checkedStockIDs = new Array();
	$.each(checkedStock, function (i, val) {
		checkedStockIDs[checkedStockIDs.length] = val.value;
		checkedBoxes += '&stock[]=' + val.value;
	});
	var checkedNew = $('#newFieldset > input:checked');
	checkedNewIDs = new Array();
	$.each(checkedNew, function (i, val) {
		checkedNewIDs[checkedNewIDs.length] = val.value;
		checkedBoxes += '&new[]=' + val.value;
	});

	var checkedTags = $('.tagsFieldset > input:checked');
	checkedTagIDs = new Array();
	$.each(checkedTags, function (i, val) {
		var currentTagInputID = val.id;
		var splitted = currentTagInputID.split('_');
		if (checkedTagIDs[splitted[1]] == undefined) {
			checkedTagIDs[splitted[1]] = new Array();
		}
		checkedTagIDs[splitted[1]][checkedTagIDs[splitted[1]].length] = val.value;
		checkedBoxes += '&tags[]=' + val.value;
	});
	var selectedMinRpm = $("#rpmSlider").slider("values", 0);
	var selectedMaxRpm = $("#rpmSlider").slider("values", 1);

	var selectedMinPower = $("#powerSlider").slider("values", 0);
	var selectedMaxPower = $("#powerSlider").slider("values", 1);

	var selectedMinRatio = $("#ratioSlider").slider("values", 0);
	var selectedMaxRatio = $("#ratioSlider").slider("values", 1);

	//save checked items to session through ajax
	$.ajax({
		url: "/handleFilterSession.php",
		type: "POST",
		data: 'action=saveSession&productGroepID=' + productGroepID + '&' + checkedBoxes + '&min_rpm=' + selectedMinRpm  + '&max_rpm=' + selectedMaxRpm + '&min_power=' + selectedMinPower  + '&max_power=' + selectedMaxPower + '&min_ratio=' + selectedMinRatio  + '&max_ratio=' + selectedMaxRatio,
		dataType: "html",
		cache: false
	});


	if (productGroepID == spartPartsID) {

		var productHTML = headerHTML = '<table class="artikeloverzicht" width="711">'+
						'<thead><tr>'+
							'<th class="head" style="width:67px;"><img class="floatLeft" height="25" width="5" alt="head_left" src="grafix/head_left.gif"></th>'+
							'<th style="width:100px;" class="head"><a href="Javascript:void(0);" class="sortering" rel="merknaam" style="width:100px;" title="">Make</a></th>'+
							'<th class="head" style="width:130px;"><a href="Javascript:void(0);" style="width:130px;" rel="model" class="sortering" title="">Model</a></th>'+
							'<th class="head" style="width:100px;"><a href="Javascript:void(0);" style="width:100px;" rel="application" class="sortering" title="">Application</a></th>' +
							'<th class="head" style="width:100px;"><a href="Javascript:void(0);" style="width:100px;" rel="power" class="sortering" title="">Power</a></th>'+
							'<th class="head" style="width:80px;"><a href="Javascript:void(0);" style="width:80px;" rel="RPM" class="sortering" title="">RPM</a></th>' +
							'<th class="head" style="width:80px;"><a href="Javascript:void(0);" style="width:80px;" rel="reference_nr" class="sortering" title="">Ref.no.</a></th>' +
							'<th style="width: 50px;" class="head"><img height="25" width="5" src="grafix/head_right.gif" alt="head_right" class="floatRight"></th>' +
						'</tr></thead><tbody>';

	} else {

		var productHTML = headerHTML = '<table class="artikeloverzicht" width="711">'+
						'<thead><tr>'+
							'<th class="head" style="width:67px;"><img class="floatLeft" height="25" width="5" alt="head_left" src="grafix/head_left.gif"></th>'+
							'<th style="width:100px;" class="head"><a href="Javascript:void(0);" class="sortering" rel="merknaam" style="width:100px;" title="">Make</a></th>'+
							'<th class="head" style="width:150px;"><a href="Javascript:void(0);" style="width:150px;" rel="model" class="sortering" title="">Model</a></th>'+
							'<th class="head" style="width:100px;"><a href="Javascript:void(0);" style="width:100px;" rel="power" class="sortering" title="">Power</a></th>'+
							'<th class="head" style="width:80px;"><a href="Javascript:void(0);" style="width:80px;" rel="RPM" class="sortering" title="">RPM</a></th>' +
							'<th class="head" style="width:80px;"><a href="Javascript:void(0);" style="width:80px;" rel="ratio" class="sortering" title="">Ratio</a></th>' +
							'<th class="head" style="width:80px;"><a href="Javascript:void(0);" style="width:80px;" rel="reference_nr" class="sortering" title="">Ref.no.</a></th>' +
							'<th style="width: 50px;" class="head"><img height="25" width="5" src="grafix/head_right.gif" alt="head_right" class="floatRight"></th>' +
						'</tr></thead><tbody>';
	}


	var productCountTotal = productCountFound = 0;
	var teller = 1;


	$.each(productsData, function(i, currentProduct) {


		var productRpmVoorFilter = this.RPM;

		//rpm hoger dan min slider
		if ( selectedMinRpm <= productRpmVoorFilter) {
			minRpmFound = true;
		} else {
			minRpmFound = false;
		}

		//rpm lager dan max slider
		if ( selectedMaxRpm >= productRpmVoorFilter ) {
			maxRpmFound = true;
		} else {
			maxRpmFound = false;
		}

		//POWER//

		var productPowerVoorFilter = this.power;

		//power hoger dan min slider
		if ( selectedMinPower <= productPowerVoorFilter) {
			minPowerFound = true;
		} else {
			minPowerFound = false;
		}

		//power lager dan max slider
		if ( selectedMaxPower >= productPowerVoorFilter ) {
			maxPowerFound = true;
		} else {
			maxPowerFound = false;
		}

		//RATIO//
		if (this.ratio != null)	{
			var productRatioVoorFilter = this.ratio.replace(',','.');
		}else	{
			var productRatioVoorFilter = 0;
		}
		//var productRatioVoorFilter = this.ratio.replace(',','.');

		//ratio hoger dan min slider
		if ( selectedMinRatio <= productRatioVoorFilter) {
			minRatioFound = true;
		} else {
			minRatioFound = false;
		}

		//ratio lager dan max slider
		if ( selectedMaxRatio >= productRatioVoorFilter ) {
			maxRatioFound = true;
		} else {
			maxRatioFound = false;
		}

		// product valt binnen sliders range
		if ( minRpmFound && maxRpmFound && minPowerFound && maxPowerFound && minRatioFound && maxRatioFound ) {

			//merk gevonden in aangevinkte brands
			if (checkedBrandIDs.length == 0 || in_array(this.merk, checkedBrandIDs)) {

				//product doorzoeken op tags
				tagsFound = 1;
				$.each(checkedTagIDs, function (tagGroupID,tagGroupTagsChecked) {
					if (tagsFound > 0 && tagGroupTagsChecked != undefined) {
						tagsFound = 0;
						if (tagGroupTagsChecked != undefined) {
							if (currentProduct.taggroups != undefined) {
								$.each(currentProduct.taggroups, function (productTagGroupID, productTagGroupTags) {
									$.each(productTagGroupTags.tags, function (productTagID, val) {
										if (in_array(productTagID, tagGroupTagsChecked)) {
											tagsFound++;
										}
									});
								});
							}
						}
					}
				});

				//stijl gevonden in aangevinkte stijlen
				if (checkedTagIDs.length == 0 || tagsFound > 0 ) {

					//doorzoeken van producten op voorraad
					stockFound = 0;
					if (checkedStockIDs.length > 0) {
						if (this.artikelen != undefined) {
							$.each(this.artikelen, function (i, val) {
								if (val.voorraad > 0) {
									stockFound++;
								}
							});
						}
					}

					//doorzoeken van producten op new
					newFound = 0;
					if (checkedNewIDs.length > 0) {
						if (this.isNew > 0) {
							newFound++;
						}
					}

					//@TODO voorraad telling fout

					//alle maten die zijn aangevinkt zijn op voorraad
					//if (checkedStockIDs.length == 0 || stockFound > 0) {
					if (checkedNewIDs.length == 0 || newFound > 0) {
						//if (productCountTotal == 0) {
							if ( (productCountFound >= ( (page-1) * resultsPerPage) )
								&& (productCountFound < (page * resultsPerPage) )
							)
							{

								productHTML += getProductHTML(currentProduct, page, teller);



								if (teller == 3) teller = 0;

								teller++;
							}
						//}
						productCountFound++;
					}

				}
			}
		}

		productCountTotal++;
	});

	pagingHTML = $.getPaging(page, productCountFound, resultsPerPage);
	//pagingHTML = $.getSortingPagingHtml();
	$('.pageNr').html(pagingHTML);
	$('.itemOverview').html(productHTML + '</tbody></table><div class="clear">&nbsp;</div><div class="pageNr">'  + pagingHTML + '</div>');
	$('#loadingFilter').fadeOut(200);
	$('#loadingProducts').fadeOut(200);
	//$("table.artikeloverzicht").tablesorter();
	//$("table.artikeloverzicht").tablesorter().tablesorterPager({container: $("#pager")});


	//handle the sold products overlay
	if ($("td.image-overlay").length > 0)	{

		$("td.image-overlay").ImageOverlay({
			always_show_overlay: true,
			overlay_color: '#fff'
		});
	}


	/**
	* Process sortering clicks
	*/

	//decide the sorting use
	if (useSorting && $(".sortering").length > 0)	{

		//check the current sorting
		$.getScript('/handleFilterSession.php?action=loadSorting&currentGroupID='+currentProductGroupID, function(dataSorting) {

			// default sort is make
			if (currentSortingField == '') {

				currentSortingField = 'merknaam';

			}

			//check the vars
			if (currentSortingField != '')	{

				//get the classtype
				if (currentSortingOrder)	{
					var curClass = 'sort_down';
				}else	{
					var curClass = 'sort_up';
				}

				//set the classes
				$("a.sortering[rel="+currentSortingField+"]").addClass(curClass);

			}
		});


		//handle the clicks
		$("a.sortering").click(function()	{

			//sorting info
			var sortField = $(this).attr("rel");
			var sortOrder = 1;

			if ($(this).hasClass("sort_down"))	{
				$(this).removeClass("sort_down").addClass("sort_up");
				var sortOrder = 0;
			}else if ($(this).hasClass("sort_up"))	{
				$(this).removeClass("sort_up").addClass("sort_down");
				var sortOrder = 1;
			}else 	{
				//no class atall
				$(this).addClass("sort_down");
			}
			//remove the existing sorting
			$("a.sortering").not($(this)).removeClass("sort_up").removeClass("sort_down");

			//save the new sorting order to the session
			$.ajax({
				url: "/handleFilterSession.php",
				type: "POST",
				data: 'action=saveSorting&productGroepID=' + productGroepID + '&sortingField=' + sortField + '&sortingOrder=' + sortOrder,
				dataType: "html",
				cache: false,
				complete: function(XMLHttpRequest, textStatus) {
					handleSearch(1, true);
				}
			});

		})

	}

	/**
	* End process sortering clicks
	*/

}



function handleSearch(currentPage, isFirst)
{

	//load products in this productgroup
	$.getJSON('/json/products_'+currentProductGroupID+'.json', false, function(data, textStatus){

		//check sorting enabled
		if (useSorting)	{

			//get the current sorting
		   	$.getScript('/handleFilterSession.php?action=loadSorting&currentGroupID='+currentProductGroupID, function(dataSorting) {

				//check the vars
				if (currentSortingField != '')	{
					newSortedData = handleFilterSorting(data.products,currentSortingField,currentSortingOrder);
				}else	{
					//use the basic
					newSortedData = data.products;
				}

				getCompleteHtml(currentPage, isFirst, newSortedData);

			});
		}else	{
			newSortedData = data.products;
			getCompleteHtml(currentPage, isFirst, newSortedData);
		}

	});
}



$.getPaging = function(page, productCountFound, resultsPerPage, functionCall)
{
	var prev = parseInt(page) - 1;                            					//previous page is page - 1
	var next= parseInt(page) + 1;                            						//next page is page + 1
	var lastpage = Math.ceil(productCountFound / resultsPerPage);       //lastpage is = total pages / items per page, rounded up.
	var lpm1 = lastpage - 1;                      						//last page minus 1

	if (functionCall == undefined) {
		functionCall = 'handleSearch';
	}

	var pagingHTML = '';
	if (lastpage > 1) {
		//previous button
		if (page > 1) {
			pagingHTML += '<a href="#" onclick="' + functionCall + '(' + prev + ');" class="page_next">Previous</a>';
		} else {
			pagingHTML += '<span class="disabled">Previous</span>';
		}

		//don't break up
		if (lastpage < 7 + (adjacentPages * 2)) {
			for (i = 1; i <= lastpage; i++) {
				if (i == page)	{
		            pagingHTML += '<span class="current">' + i + '</span>';
				} else {
		            pagingHTML += '<a href="#" onclick="' + functionCall + '(' + i + ');">' + i + '</a>';
				}
			}
		} else if (lastpage > 5 + (adjacentPages * 2) ) {//enough pages to hide some
		    //close to beginning; only hide later pages
		    if(page < 1 + (adjacentPages * 2)) {
		        for (i = 1; i < 4 + (adjacentPages * 2); i++) {
		            if (i == page)	{
		                pagingHTML += '<span class="current">' + i + '</span>';
					}else	{
		                pagingHTML += '<a href="#" onclick="' + functionCall + '(' + i + ');">' + i + '</a>';
					}
		        }
		        pagingHTML += '<strong>...</strong>';
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(' + lpm1 + ');">' + lpm1 + '</a>';
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(' + lastpage + ');">' + lastpage + '</a>';
		    } else if(lastpage - (adjacentPages * 2) > page && page > (adjacentPages * 2)) {

	    		//in middle; hide some front and some back
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(1)">1</a>';
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(2)">2</a>';
		        pagingHTML += '<strong>...</strong>';
		        for (i = page - adjacentPages; i <= page + adjacentPages; i++)
		        {
		            if (i == page)	{
		                pagingHTML += '<span class="current">' + i + '</span>';
					}else	{
		                pagingHTML += '<a href="#" onclick="' + functionCall + '(' + i + ')">' + i + '</a>';
					}
		        }
		        pagingHTML += '<strong>...</strong>';
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(' +  lpm1 + ')">' + lpm1 + '</a>';
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(' + lastpage + ')">' + lastpage + '</a>';
		    } else {
	    		//close to end; only hide early pages
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(1)">1</a>';
		        pagingHTML += '<a href="#" onclick="' + functionCall + '(2)">2</a>';
		        pagingHTML += '<strong>...</strong>';
		        for (i = lastpage - (2 + (adjacentPages * 2)); i <= lastpage; i++)
		        {
		            if (i == page)	{
		                pagingHTML += '<span class="current">' + i + '</span>';
					}else	{
		                pagingHTML += '<a href="#" onclick="' + functionCall + '(' + i + ')">' + i + '</a>';
					}
		        }
		    }
		}

		//next button
		if ( next <= lastpage) {
			pagingHTML += '<a href="#" onclick="' + functionCall + '(' + next + ');" class="page_next">Next</a>';
		} else {
			pagingHTML += '<span class="disabled">Next</span>';
		}
	}
	return pagingHTML;
}

function getVar( name )
{
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null ) {
		return "";
	} else {
		return results[1];
	}
}

function checkStock(number, articleID)
{
	if (articleID > 0) {
		$.getJSON('/json/products_'+currentProductGroupID+'.json', false, function(data, textStatus){
			var validStock = false;
			var stockFound = 0;
			$.each(data.products, function() {
				if (this.artikelen != undefined) {
					$.each(this.artikelen, function (i, val) {
						if (i == articleID) {
							if (number <= val.voorraad) {
								validStock = true;
							} else {
								stockFound = val.voorraad;
							}
						}
					});
				}
			});
			if (!validStock) {
				if (stockFound == 0) {
					alert('Er zijn helaas geen artikelen op voorraad!');
				} else if (stockFound == 1) {
					alert('Er is helaas nog maar ' + stockFound + ' artikel op voorraad!');
				} else {
					alert('Er zijn helaas nog maar ' + stockFound + ' artikelen op voorraad!');
				}
				$('#quantity').val(stockFound);
			}
		});
	}
}

$.preloadImages = function()
{
  for(var i = 0; i<arguments.length; i++)
  {
	$("<img>").attr("src", arguments[i]);
  }
}

function showResultsPerPage(results)
{
	$('#productsPerpage').val(results);
	$('#theFilterForm').submit();
}

function submitFilterForm()
{
	$('#page').val('1');
	$('#theFilterForm').submit();
}

//add action to filterform
function addFormAction()
{
	$('#theFilterForm').submit(function() {
		alert('nu');
		//display loadingdiv
		$("#loadingFilter").css('opacity', '0.5');
		$("#loadingFilter").css('display','block');
		$("#loadingProducts").css('opacity', '0.5');
		$("#loadingProducts").css('display','block');
		var inputs = $("#theFilterForm :input");
		var filterUrl = '';
		//create filterAjaxurl
		inputs.each(function(i){
			if ($(this).attr('type') == 'checkbox' && $(this).attr('checked') == true) {
				if (filterUrl == '') {
					filterUrl =  $(this).attr('name') + '=' + $(this).val()
				} else {
					filterUrl =  filterUrl + '&' + $(this).attr('name') + '=' + $(this).val()
				}
			} else if ($(this).attr('type') == 'text' || $(this).attr('type') == 'hidden') {
				if (filterUrl == '') {
					filterUrl =  $(this).attr('name') + '=' + $(this).val()
				} else {
					filterUrl =  filterUrl + '&' + $(this).attr('name') + '=' + $(this).val()
				}
			}
 		});

 		//process ajaxrequest
		$.ajax({
			url: "/filterProducts.php",
			type: "POST",
			data: filterUrl,
			dataType: "html",
			//cache: false,
			success: function(responseHtml) {
				var $holder = $('<div/>').html(responseHtml);
				//update filterDiv
				$('#productFilter').html($('#productFilter', $holder).html());
				//update productresultdiv
				$('.content_bb').html($('#productsFound', $holder).html());

				$("#loadingFilter").css('display','none');
				$("#loadingProducts").css('display','none');
				addFormAction();
			}
		});
		return false;
	});
}

function showLoginError(elementName){

	var element = document.getElementById(elementName);

	$.modal($(element),{

    	minHeight:17,
		containerCss:{backgroundColor:"#fff",height:130,padding:0,width:322},

		onOpen: function(dialog)
		{
			dialog.overlay.fadeIn('fast', function () {
				dialog.container.slideDown('normal', function () {
					dialog.data.fadeIn('normal');

					element.style.visibility = 'visible';


				});
			});
		},
		onClose: function(dialog)
		{
			dialog.overlay.fadeOut('fast', function () {
				dialog.container.fadeOut('fast', function () {
					dialog.data.fadeOut('fast', function () {

						$.modal.close(); // must call this!
						$("#klantLoginFoutMeldingen").remove(); // and this too!

					});
				});
			});
		}

	});
}


function showHideFilter()
{
	if ($("#filter").css('display') == 'block') {
		$("#filter").slideUp('slow', function() {
			$("#headFilter").css('margin-bottom', '10px');
		});

		$("#headFilter").removeClass('head_filter_active');
	} else {
		$("#filter").slideDown('slow');
		$("#headFilter").addClass('head_filter_active');
		$("#headFilter").css('margin-bottom', '0px');

	}
}

function showResultPage(number)
{
	$('#page').val(number);
	$('#theFilterForm').submit();
}

function uncheckFilter(id)
{
	$('#' + id + 'Fieldset > input').attr('checked', false);
	$('#theFilterForm').submit();
}

// check whether fieldvalue is unique or not
function checkFieldValue( structuurid, eigenschapnaam, element ){

		// error span verwijderen
		var id = $(element).attr('id') + '_error';
		var value = element.value;

		if (value.length > 0) {

			filterUrl =  'action=checkduplicate&id='+ structuurid + '&esnaam=' + eigenschapnaam + '&value=' + value;

 			//process ajaxrequest
			$.ajax({
				url: "/ajaxrequests.php",
				type: "POST",
				data: filterUrl,
				dataType: "html",
				cache: false,
				success: function(responseHtml) {


					if (responseHtml != 'false') {

						$("#"+id+"").remove();
						// add span
						$(element).after('<span id="' + id +'" class="error">' + responseHtml + '</span>');
						//for (var x in element ) alert(x);

					}
				}
			});

		}
}

// check length of field value
function checkFieldLength( element, min, max ){

		// error span verwijderen
		var id = $(element).attr('id') + '_error';
		var value = element.value;

		$("#"+id+"").remove();

		if ((value.length < min) || (value.length > max)){
			// add span
			$(element).after('<span id="' + id +'" class="error">Aanbevolen lengte is tussen ' + min + ' en ' + max + '.</span>');
			//for (var x in element ) alert(x);

		}
}


//laden van netto prijzen, in structuurIDPrices zitten 1 of meerdere structuren met hun prijs structuurID:prijs;structuurID2;prijs2
function loadDiscountPrices(structuurIDPrices)
{
	$.ajax({
		url: "/ajaxrequests.php",
		type: "POST",
		data: 'action=loadDiscountPrices&structuurIDPrices='+structuurIDPrices,
		dataType: "html",
		success: function(responseHtml) {
			var $holder = $('<div/>').html(responseHtml);
			var $children = $holder.children('div');
			$.each($children, function(val, i) {
				$('#' + i.id).html(i.innerHTML);
			});
		}
	});

}

function calcSliderStep( priceDiff )
{
	if (priceDiff > 50000)
		return 1000;
	else if (priceDiff > 20000)
		return 500;
	else if (priceDiff > 5000)
		return 100;
	else if (priceDiff > 2000)
		return 50;
	else if (priceDiff > 500)
		return 10;
	else if (priceDiff > 200)
		return 5;
	else return 1;
}

function getSliderStep(item)
{
	if (item == 'rpm')	{
		return 100;
	}
	if (item == 'power')	{
		return 50;
	}
	if (item == 'ratio')	{
		return 0.1;
	}
	return 1;
}

function showActie( product )
{
	if (product.in_actie == 1) {

		// check of datum tussen publicatiedatum en archiveringsdatum ligt
		var tsNow = Math.round(new Date().getTime() / 1000);
		var tsVan = product.actie.publicatiedatum;
		var tsTot = product.actie.archiveringsdatum;

		if (( tsNow > tsVan ) && ( tsNow <  tsTot ))
				return true;
		else 	return false;

	}
}

function resetProductFilter( )
{

	var minValRpm = $("#rpmSlider").slider( "option", "min");
	var maxValRpm = $("#rpmSlider").slider( "option", "max");

	$("#rpmSlider").slider({	values: [ minValRpm, maxValRpm ]	});
	$("#rpmMin").html(minValRpm + currencySymbolRpm);
	$("#rpmMax").html(maxValRpm + currencySymbolRpm);

	//POWER//
	var minValPower = $("#powerSlider").slider( "option", "min");
	var maxValPower = $("#powerSlider").slider( "option", "max");

	$("#powerSlider").slider({	values: [ minValPower, maxValPower ]	});
	$("#powerMin").html(minValPower + currencySymbolPower);
	$("#powerMax").html(maxValPower + currencySymbolPower);

	//RATIO//
	var minValRatio = $("#ratioSlider").slider( "option", "min");
	var maxValRatio = $("#ratioSlider").slider( "option", "max");

	$("#ratioSlider").slider({	values: [ minValRatio, maxValRatio ]	});
	$("#ratioMin").html(minValRatio + currencySymbolRatio);
	$("#ratioMax").html(maxValRatio + currencySymbolRatio);

	$('#brandsFieldset > input:checked').each( function (i) {
		$(this).attr("checked", false);
	});


	$('#stylesFieldset > input:checked').each( function (i) {
		$(this).attr("checked", false);
	});

	$('#newFieldset > input:checked').each( function (i) {
		$(this).attr("checked", false);
	});

	if (useSorting)	{
		$.ajax({
			url: "/handleFilterSession.php",
			type: "POST",
			data: 'action=resetSorting',
			dataType: "html",
			cache: false
		});
	}

}

var actions = new Array();
var numberOfActions = 0;
var currentAction = 0;
function loadActions()
{
	$.ajax({
		url: "/ajaxrequests.php",
		type: "POST",
		data: 'action=loadActions',
		dataType: "html",
		cache: false,
		success: function(responseHtml) {
			var $holder = $('<div/>').html(responseHtml);
			numberOfActions = $('#numberOfActions', $holder).html();
			if (numberOfActions > 0) {
				$('#actieBalk').show();
				for (i = 1; i <= numberOfActions; i++) {
					actions[actions.length] = $('#actie_' + i, $holder).html();
				}
				showAction(true);
			}
		}
	});
}

function showAction(first)
{
	currentAction++;
	if (first == undefined) {
		$('#actionContainer').fadeOut(1000, function() {
			$('#actionContainer').html(actions[currentAction]);
			$('#actionContainer').fadeIn(1000);
		});
	} else {
		currentAction = 0;
		$('#actionContainer').html(actions[currentAction]);
	}

	if (currentAction == numberOfActions) {
		currentAction = 0;
	}
	if (numberOfActions > 1) {
		setTimeout('showAction();', 8000);
	}
}


function getProductHTML(product, page, teller)
{
	var productHTML='';

	if (teller == 3) {
		productLastClass = ' ';
	} else {
		productLastClass = '';
	}
	if (documentLocation.length == 1) {
		currentLink = product.link_static + '?p='+page;
	} else {
		currentLink = product.link_dynamic + '&p='+page;
	}

	var soldButton = '';

	//check sold status
	if (product.status == '0')	{
		var soldButton = '<a href="' + currentLink + '" title="' + product.merknaam + ' ' + product.productnaam + '">' +	'<img class="articleSold" height="50" width="67" alt="soldOverview" src="/grafix/soldOverview.png"></a>';
	}

	productHTML += '<tr>'
		+ '	<td class="img">'
		+ ' <div>'
		+ soldButton
			+ '<a href="' + currentLink + '" title="' + product.merknaam + ' ' + product.productnaam + '">'
				+ '<img  class="floatRight" src="/media/67x50/' + product.voorzijde + '" alt="' + product.merknaam + ' ' + product.productnaam + '">';
				/*if (product.status == '1')	{
					productHTML += '<div class="caption">'
									   + '<h3>SOLD</h3>'+
								+ '</div>'
				}*/
	//check for empty power and rpm
	if ( (product.power == '') || (product.power == '0') || (product.power == null) )	{
		var viewPower = 'N/A';
	} else {
		var viewPower = product.power + ' HP';
	}


	if ( (product.RPM == '') || (product.RPM == '0') || (product.RPM == null) )	{
		var viewRpm = 'N/A';
	} else {
		var viewRpm = product.RPM + ' RPM';
	}

	if ( (product.ratio == '') || (product.ratio == '0') || (product.ratio == null) )	{
		var viewRatio = 'N/A';
	} else {
		var viewRatio = product.ratio + ':1';
	}

	if ( (product.application == '') || (product.application == null) )	{
		var viewApplication = 'N/A';
	} else {
		var viewApplication = product.application;
	}

	if ( (product.reference_nr == '') || (product.reference_nr == null) )	{
		var viewReference_nr = 'N/A';
	} else {
		var viewReference_nr = product.reference_nr;
	}


	if (currentProductGroupID == spartPartsID) {

		productHTML += '</a>'
			+ '</div></td>'
			+ '<td style="border-left:none;"><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + product.merknaam + '</div></td>'
			+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + product.model + '</div></td>'
			+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewApplication + '</div></td>'
			+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewPower + '</div></td>'
			+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewRpm + '</div></td>'
			+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewReference_nr + '</div></td>'
			+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 0px;"><a class="more floatLeft" style="line-height:0px; font-size:0px;" href="' + currentLink + '" title="' + product.merknaam + ' ' +product.productnaam + '"></a></div></td>'
		+ '</tr>';

	} else {

	productHTML += '</a>'
		+ '</td>'
		+ '<td style="border-left:none;"><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + product.merknaam + '</div></td>'
		+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + product.model + '</div></td>'
		+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewPower + '</div></td>'
		+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewRpm + '</div></td>'
		+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewRatio + '</div></td>'
		+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 5px;">' + viewReference_nr + '</div></td>'
		+ '<td><div style="border-right:1px solid #fff; padding:10px 5px 5px 0px;"><a class="more floatLeft" style="line-height:0px; font-size:0px;" href="' + currentLink + '" title="' + product.merknaam + ' ' + product.productnaam + '"></a></div></td>'
		+ '</tr>';
	}


	return productHTML;

}

function handleBrands(currentPage) {

		var productCountFound = productCountTotal = 0;
		var productHTML = '';
		var teller = 1;

		if (currentPage == undefined) {
			page = 1;
		} else {
			page = currentPage;
		}


		$.getScript('/handleFilterSession.php?action=loadSession&currentGroupID='+currentBrandID, function(data) {
			$.getJSON('/json/brands_'+currentBrandID+'.json', false, function(data, textStatus){

				$.each(data.products, function() {
					if ( this.merk == currentBrandID) {
						if ( (productCountFound >= ( (page-1) * resultsPerPage) )
							&& (productCountFound < (page * resultsPerPage) )
						) {

							productHTML += getProductHTML(this, page, teller);

							if (teller == 3) {
								teller = 0;
							}

							teller++;
						}
						productCountFound++;
					}

					productCountTotal++;

				});

				pagingHTML = $.getPaging(page, productCountFound, resultsPerPage, 'handleBrands');
				$('.pageNr').html(pagingHTML);
				$('#concent_bb_search').html('<div class="pageNr">'  + pagingHTML + '</div><div class="clear"></div>' + productHTML + '<div class="clear"></div><div class="pageNr">'  + pagingHTML + '</div>');

			});//end getJSON

		});//end getScript

}


function removeCurrencySymbol( price) {

	price = str_replace ('&#8364;', '', price, 1)

	return price;
}


function handleFotoFader()
{
	if ($("div#content").length > 0)	{

		var cId = '1';

		$("div#fotofader").ccmsFadeBackground({
			animationSpeed: 1000,
			structuurid: cId,
			ajaxGetImagesScript: '/javascript/ajaxRequests/getImgUl.php',
			timeOut: 5000,
			showBreakOption: false
		});
	}
}

function initPrettyFotoLinks() {

	$("a[rel^='prettyPhoto']").prettyPhoto({
		showTitle:false,
		//animationSpeed: 'normal', /* fast/slow/normal */
		//padding: 40, /* padding for each side of the picture */
		//opacity: 0.35, /* Value betwee 0 and 1 */
		//showTitle: true, /* true/false */
		allowresize: true, /* true/false */
		theme: 'light_rounded', /* light_rounded / dark_rounded / light_square / dark_square */
		counter_separator_label: '/' /* The separator for the gallery counter 1 "of" 2 */
	});

}

/*
$(document).ajaxSuccess(function() {

	initPrettyFotoLinks();

});
*/


