/**
 * @author Tom
 */
useBSNns = true;

Event.observe(window, "load", function() {
    if($('amount') && !$('amount').value && $('orderFormFirstForm')) {
        $('amount').toggle = false;
        $('amount').interval = setInterval(toggleAmountStyle, 330);

        $('amount').onfocus =
        $('amount').onkeydown = function() {
            txtAmount = $('amount');
            clearInterval($('amount').interval);
            txtAmount.removeClassName('togglestyle');
        };

        $('orderFormFirstForm').onclick = function() {
            txtAmount = $('amount');
            clearInterval($('amount').interval);
            txtAmount.removeClassName('togglestyle');
        }
        //alert('set');
    }
    new Ajax.Request('/livechat/image.php?v=PGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCh3aW5kb3cub3BlbignaHR0cDovL3d3dy5hbGxnaWZ0cy5ubC9saXZlY2hhdC9saXZlemlsbGEucGhwP3Jlc2V0PXRydWUnLCcnLCd3aWR0aD02MDAsaGVpZ2h0PTYwMCxsZWZ0PTAsdG9wPTAscmVzaXphYmxlPXllcyxtZW51YmFyPW5vLGxvY2F0aW9uPXllcyxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzJykpXCIgPCEtLWNsYXNzLS0-PjwhLS10ZXh0LS0-PC9hPjwhPkNoYXQgKG9ubGluZSk8IT5DaGF0IChvZmZsaW5lKTwhPg__', {
        method:'get',
        onSuccess: function (script) {
            //alert(script.responseText);
            var html = script.responseText.replace(/\s*document.write\s*\(\s*["'](.+)["']\s*\);.*/i, "$1").replace(/\\"/gi, '"');
            //alert(html);
            $$('.livechat_link').each(function (e) {
                if(html != '') {
                    e.innerHTML = html;
                } else {
                    //alert($(e).down('noscript').innerHTML);
                    e.innerHTML = $(e).down('noscript').innerHTML;
                }
            });
        }
    });
});

document.observe('dom:loaded', function() {
    Load.loadPrefilledTextFields('quickSearchFrom');
    $$('.zoekPaneel').each(function(panel) {
        Load.loadPrefilledTextFields(panel);
    });
    if($('mailAFriend')) {
        Load.loadPrefilledTextFields($('mailAFriend'));
    }
    if($('remark')) {
        Load.loadPrefilledTextFields($('remark'));
    }
    if($('ordersteps')) {
        Load.loadPrefilledTextFields($('ordersteps'));
    }
    if($('registerPage')) {
        Load.loadPrefilledTextFields($('registerPage'));
    }
    if($('quickSearchFromSemiFixed')) {
        Load.loadPrefilledTextFields($('quickSearchFromSemiFixed'));
    }
    if($('rightComponents')) {
        Load.loadPrefilledTextFields($('rightComponents'));
    }
    Load.loadActionSliders();

//    var addthisScriptElement = document.createElement('script');
//    addthisScriptElement.id = 'addthis_code';
//    addthisScriptElement.type = 'text/javascript';
//    addthisScriptElement.src = 'http://s7.addthis.com/js/250/addthis_widget.js#username=allgiftsnl&async=true';
    //addthisScriptElement.setAttribute('async', 'true');
    //document.documentElement.firstChild.appendChild(addthisScriptElement);

    //document.body.appendChild(addthisScriptElement);
    //$('addthis_code').src = 'http://s7.addthis.com/js/250/addthis_widget.js#username=allgiftsnl';



//    $$('.livechat_link').each(function (e) {
//        var chatLinkScriptElement = document.createElement('script');
//        chatLinkScriptElement.type = 'text/javascript';
//        //chatLinkScriptElement.src = '/js/test.js';
//        chatLinkScriptElement.src = 'http://www.thefarmholding.nl/livechat/image.php?v=PGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCh3aW5kb3cub3BlbignaHR0cDovL3d3dy5hbGxnaWZ0cy5ubC9saXZlY2hhdC9saXZlemlsbGEucGhwP3Jlc2V0PXRydWUnLCcnLCd3aWR0aD02MDAsaGVpZ2h0PTYwMCxsZWZ0PTAsdG9wPTAscmVzaXphYmxlPXllcyxtZW51YmFyPW5vLGxvY2F0aW9uPXllcyxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzJykpXCIgPCEtLWNsYXNzLS0-PjwhLS10ZXh0LS0-PC9hPjwhPkNoYXQgKG9ubGluZSk8IT5DaGF0IChvZmZsaW5lKTwhPg__';
//        e.innerHTML = '';
//        e.appendChild(chatLinkScriptElement);
//    });


    $$('.zoekPaneel form, #quickSearchFrom, #orderFormFirstForm, #quickSearchFromSemiFixed').each(function(f) {
        $(f).observe('submit', function(event) {
            $A($(this).getElementsByClassName('prefilled')).each(function(e) {if($(e).value == $(e).start_value) {$(e).value = '';}});
            
            try {
                if($(this).id != 'orderFormFirstForm') {
                    if($(this).select('[name=search_description]').length > 0) {
                        _gaq.push(['_trackEvent',
                            'Zoeken',
                            'Zoekwoord',
                            $(this).select('[name=search_description]')[0].value
                        ]);
                        //alert('search_description='+$(this).select('[name=search_description]')[0].value);
                    }
                    var aantal = 0;
                    if($(this).select('[name=search_amount]').length > 0
                        && parseInt($(this).select('[name=search_amount]')[0].value).toString() != 'NaN') {
                        var parsedInt = parseInt($(this).select('[name=search_amount]')[0].value);
                        if(parsedInt > 0) {
                            _gaq.push(['_trackEvent',
                                'Zoeken',
                                'Aantal',
                                parsedInt.toString(),
                                parsedInt
                            ]);
                            aantal = parsedInt;
                        }
                        //alert('search_amount='+parsedInt.toString());
                    }

                    if($(this).select('[name=lower_description]').length > 0
                        && parseFloat($(this).select('[name=lower_description]')[0].value.replace(',', '.')).toString() != 'NaN')
                    {
                        var parsedFloat = parseFloat($(this).select('[name=lower_description]')[0].value.replace(',', '.'));
                        if($(this).select('[name=upper_description]').length > 0
                            && parseFloat($(this).select('[name=upper_description]')[0].value.replace(',', '.')).toString() != 'NaN')
                        {
                            var parsedFloat2 = parseFloat($(this).select('[name=upper_description]')[0].value.replace(',', '.'));
                            if(parsedFloat2 < parsedFloat) {
                                var tmpFloat = parsedFloat2;
                                parsedFloat2 = parsedFloat;
                                parsedFloat = tmpFloat;
                            }
                            _gaq.push(['_trackEvent',
                                'Zoeken',
                                'Tussen prijs laag',
                                '\u20ac ' + parsedFloat.toString(),
                                parsedFloat
                            ]);
                            _gaq.push(['_trackEvent',
                                'Zoeken',
                                'Tussen prijs hoog',
                                '\u20ac ' + parsedFloat2.toString(),
                                parsedFloat2
                            ]);
                            if(aantal > 0) {
                                _gaq.push(['_trackEvent',
                                    'Zoeken',
                                    'Minimum budget',
                                    '\u20ac ' + (parsedFloat * aantal).toString(),
                                    (parsedFloat * aantal)
                                ]);
                                _gaq.push(['_trackEvent',
                                    'Zoeken',
                                    'Maximum budget',
                                    '\u20ac ' + (parsedFloat2 * aantal).toString(),
                                    (parsedFloat2 * aantal)
                                ]);
                                //alert('Minbudget: \u20ac ' + (parsedFloat * aantal).toString());
                                //alert('Maxbudget: \u20ac ' + (parsedFloat2 * aantal).toString());
                            }
                            //alert('lower_and_upper_description=' + '&euro; ' + parsedFloat.toString() + ' - ' + '&euro; ' + parsedFloat2.toString());
                        }
                        else
                        {
                            if(parsedFloat > 0) {
                                _gaq.push(['_trackEvent',
                                    'Zoeken',
                                    'Tussen prijs laag',
                                    '\u20ac ' + parsedFloat.toString(),
                                    parsedFloat
                                ]);
                                if(aantal > 0) {
                                    _gaq.push(['_trackEvent',
                                        'Zoeken',
                                        'Minimum budget',
                                        '\u20ac ' + (parsedFloat * aantal).toString(),
                                        (parsedFloat * aantal)
                                    ]);
                                    //alert('Minbudget: \u20ac ' + (parsedFloat * aantal).toString());
                                }
                            }
                            //alert('lower_description=' + '&euro; ' + parsedFloat.toString());
                        }
                    } else if($(this).select('[name=upper_description]').length > 0
                        && parseFloat($(this).select('[name=upper_description]')[0].value.replace(',', '.')).toString() != 'NaN') {
                        var parsedHiFloat = parseFloat($(this).select('[name=upper_description]')[0].value.replace(',', '.'));
                        if(parsedHiFloat > 0) {
                            _gaq.push(['_trackEvent',
                                'Zoeken',
                                'Tussen prijs hoog',
                                '\u20ac ' + parsedHiFloat.toString(),
                                parsedHiFloat
                            ]);
                            if(aantal > 0) {
                                _gaq.push(['_trackEvent',
                                    'Zoeken',
                                    'Maximum budget',
                                    '\u20ac ' + (parsedHiFloat * aantal).toString(),
                                    (parsedHiFloat * aantal)
                                ]);
                                //alert('Maxbudget: \u20ac ' + (parsedHiFloat * aantal).toString());
                            }
                        }
                        //alert('upper_description=' + '&euro; ' + parsedHiFloat.toString());
                    }
                    if($(this).select('[name=color_description]').length > 0
                        && $(this).select('[name=color_description]')[0].value != '0') {
                        var select = $(this).select('[name=color_description]')[0];
                        _gaq.push(['_trackEvent',
                            'Zoeken',
                            'Kleur',
                            select.options[select.selectedIndex].innerHTML
                        ]);
                        //alert('color_description='+select.options[select.selectedIndex].innerHTML);
                    }
                    if($(this).select('[name=cat_description]').length > 0
                        && $(this).select('[name=cat_description]')[0].value != '0') {
                        var catSelect = $(this).select('[name=cat_description]')[0];
                        _gaq.push(['_trackEvent',
                            'Zoeken',
                            'Categorie',
                            catSelect.options[catSelect.selectedIndex].innerHTML
                        ]);
                        //alert('cat_description='+catSelect.options[catSelect.selectedIndex].innerHTML);
                    }
                    if($(this).select('[name=material_description]').length > 0
                        && $(this).select('[name=material_description]')[0].value != '0') {
                        var matSelect = $(this).select('[name=material_description]')[0];
                        _gaq.push(['_trackEvent',
                            'Zoeken',
                            'Materiaal',
                            matSelect.options[matSelect.selectedIndex].innerHTML
                        ]);
                        //alert('material_description='+matSelect.options[matSelect.selectedIndex].innerHTML);
                    }
                    if($(this).select('[name=brand_description]').length > 0
                        && $(this).select('[name=brand_description]')[0].value != '0') {
                        var brandSelect = $(this).select('[name=brand_description]')[0];
                        _gaq.push(['_trackEvent',
                            'Zoeken',
                            'Merk',
                            brandSelect.options[brandSelect.selectedIndex].innerHTML
                        ]);
                        //alert('brand_description='+brandSelect.options[brandSelect.selectedIndex].innerHTML);
                    }
                }
            } catch(e) {alert(e.toString())}
        })
    });

    startBrowserDetect();
    
    if(addthis) {
        $$('.addthis_toolbox a').each(function(e) {$(e).hide();});
        addthis.init(); //belangrijk (voor allgifts.nl en eco-giftshop.nl)
        setTimeout(function() {$$('.addthis_toolbox a').each(function(e) {$(e).show();});}, 3000);
    }
});

/**
 * Zorgt er voor dat het formulier dat meegegeven wordt zichzelf leeg maakt als er te snel op zoeken wordt gedrukt.
 * @param HTMLFormElement formElement
 */
function clearPrefilled(formElement) {
    $(formElement).observe('submit', function(event) {
        $A($(this).getElementsByClassName('prefilled')).each(function(e) {
            if($(e).start_value) {
                //do nothing
                //let normal (from dom:loaded) event handler fix it
            } else {
                $(e).value = '';
            }
        });
    });
}

function toggleAmountStyle() {
    txtAmount = $('amount');
    txtAmount.toggle = !txtAmount.toggle;

    //alert('interval');
    if(txtAmount.toggle) {
        //style
        //manual styles
    } else {
        //style back to old style
        //manual styles
    }
    txtAmount.toggleClassName('togglestyle');
}
				
//lees cookie uit
function getCookie(naam) {
	var str = document.cookie;
	var zstr = naam + "=";
	var start = str.indexOf(zstr, 0);
	if(start == -1) {
		return false;
	} else {
		start += zstr.length;
		var eind = str.indexOf(";", start);
		if(eind == -1) eind = str.length;
		return unescape(str.substring(start, eind));
	}
}
			
//set een Cookie
function setCookie(naam, waarde) {
	//alert("blaat");
	document.cookie = naam+"="+escape(waarde)+";path=/";
}

/* snippet from Tom */
/*
function loadPrefilledTextFields(element) {
	if(element) {
		element = $(element);
	} else {
		element = $(document.body);
	}
	var prefilled_color = '#EDC200';
	var prefilled_color_textarea = '#002c76';
    if(Load.getPrefilledColor() != null) {
        prefilled_color = Load.getPrefilledColor();
        prefilled_color_textarea = Load.getPrefilledColor();
    }
	var filled = $A(element.getElementsBySelector('input.prefilled, textarea.prefilled'));
	filled.each( function (f) {
        f.normal_color = f.getStyle('color');

        if(!f.start_value) {
            if($(f).tagName.toLowerCase() != 'textarea' && !$('ordersteps')) {
                f.setStyle( {color:prefilled_color} );
            } else {
                f.setStyle( {color:prefilled_color_textarea} );
            }
        }
		f.onfocus = function() {
			if(!this.start_value || this.value.strip() == this.start_value.strip()) {
                if(this.id == undefined || !this.id.toString().startsWith("txtAflever") || (this.id.toString().startsWith("txtAflever") && !$('chkAfleveradresGelijk').checked)) {
                    this.start_value=this.value;
                    this.value='';
                    $(this).setStyle( {color:this.normal_color} );
                }
			}
		}
		f.onblur = function() {
			if($(this).value.strip() == '') {
                if(this.id == undefined || !this.id.toString().startsWith("txtAflever") || (this.id.toString().startsWith("txtAflever") && !$('chkAfleveradresGelijk').checked)) {
                    this.value = this.start_value;
                    if($(f).tagName.toLowerCase() != 'textarea' && !$('ordersteps')) {
                        f.setStyle( {color:prefilled_color} );
                    } else {
                        f.setStyle( {color:prefilled_color_textarea} );
                    }
                }
			}
		}
	});
};
*/
/* end of snippet */

/* cancel the bubbling up the DOM tree of an event */
function onclick_CancelEventBubble(oEvent) {
	//check for the proper location of the event object
	if (!oEvent) {
		oEvent = window.event;
	}


	if(document.all) {
		oEvent.cancelBubble = true;
	} else {
		oEvent.stopPropagation();
		oEvent.preventDefault();
	}
	oEvent.returnValue = false;
	return false;
};

function removeProductFromCat(e, productID, catID) {
    //alert('functie');
    //alert('/ajax.php?mode=delfromcat&productID='+productID+'&catID='+catID);
    if(confirm('Weet je zeker dat je dit artikel uit deze categorie wilt verwijderen?')) {
        new Ajax.Request('/ajax.php?mode=delfromcat&productID='+productID+'&catID='+catID, {
            method:'get',
            evalJSON: 'force',
            onSuccess: function(result) {
                //alert(result.responseJSON['result']);
                switch(result.responseJSON['result']) {
                    case 'gelukt':
                        $(e).up('div.product').hide();
                        break;
                    case 'error':
                        alert(result.responseJSON['message']);
                        break;
                    default:
                        alert('error: invalid json response');
                        break;
                }
            }
        });
    }
}

function addProductsToCat() {
    var catID = $('catSelectBox').value;

    // er moet wel een category geselecteerd zijn
    if (catID == 0) {
        alert("Selecteer een categorie");
        return;
    }

    new Ajax.Request('/ajax.php?mode=addProductsToCat&catID='+catID, {
        method:'get',
        onSuccess: function(result) {
            getSelectedProducts(); // updaten
            alert("De producten zijn toegevoegd aan de categorie");
            window.location.reload();
        },
        onFailure: function(result) {
            alert("De producten konden niet worden toegevoegd aan de categorie");
        }
    });
}

function selectProduct(productID, productName, force) {
    // niet meer selecteren
    var uncheck = '1';
    if ($('sel-'+productID) && $('sel-'+productID).checked) {
        uncheck = '0';
    }
    // forceer om te verwijderen
    if (force == '1') {
        uncheck = '1';
    }

    new Ajax.Request('/ajax.php?mode=selectProduct&productID='+productID+'&productName='+productName+'&uncheck='+uncheck, {
        method:'get',
        onSuccess: function() {
            // update geselecteerde producten overzicht
            getSelectedProducts();
            
            if (uncheck == '1') {
                $('sel-'+productID).checked = false;
            } else {
                $('sel-'+productID).checked = true;
            }
            $('internal-'+productID).toggleClassName('active');
        }
    });
}

function getSelectedProducts() {
    new Ajax.Updater('selectedProducts', '/ajax.php?mode=getSelectedProducts', {
        method:'get',
        evalScripts: true,
        onComplete: function() {
        }
    });
}

/* snippet from http://www.garyharan.com/index.php/2007/11/26/how-to-unobtrusively-scroll-a-div-with-prototype-scriptaculous/ */
/* adds Scroll animation to animation library of script.aculo.us  */
/* adds scrollTo function to Element methods of prototype library */
Element.addMethods({
    scrollTo: function(element, left, top) {
        var element = $(element);
        if (arguments.length == 1){
            var pos = element.cumulativeOffset();
            window.scrollTo(pos[0], pos[1]);
        } else {
            element.scrollLeft = left;
            element.scrollTop  = top;
        }
        return element;
    },
    cumulativeScrollOffsetBottom: function(element) {
        element = $(element);
        var cumulativeScrollTop = element.cumulativeOffset().top - element.cumulativeScrollOffset().top;
        var cumulativeScrollBottomTop = (element.offsetHeight + cumulativeScrollTop);
        return document.viewport.getDimensions().height - cumulativeScrollBottomTop;
    }
});

Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    this.start(Object.extend({x: 0, y: 0}, arguments[1] || {}));
  },
  setup: function() {
    var scrollOffsets = (this.element == window) 
                ? document.viewport.getScrollOffsets() 
                : Element._returnOffset(this.element.scrollLeft, this.element.scrollTop) ;
    this.originalScrollLeft = scrollOffsets.left;
    this.originalScrollTop  = scrollOffsets.top;
  },
  update: function(pos) {
    this.element.scrollTo(Math.round(this.options.x * pos + this.originalScrollLeft), Math.round(this.options.y * pos + this.originalScrollTop));
  }
});
/* end snippet */


/**
 *  @copyright the COW company © 2009
 *  @author Tom Niessink
 *  @package PackageName
 */
document.observe('dom:loaded', function() {
    //after dom is loaded
    //document.scrollMenu = new ScrollMenu('left_menu');
    Load.loadRollOverMenu();
    //Load.loadPrefilledTextFields();
    Load.loadAutoSuggest();
});
Event.observe(window, 'load', function(){
    Load.loadSemiFixed();
});

/**
 * @class Load
 */
Load = Class.create();

/**
 * @static
 */
Load.loadRollOverMenu = function() {
    if (typeof document.addEventListener != 'function') { //IE6 only
        $$('#top_menu > li').each(function (e) {
            $(e).onmouseover = function() {
                this.addClassName("over");
            };
            $(e).onmouseout = function() {
                this.removeClassName("over");
            };
        });
        $$('input.button').each(function (e) {
            $(e).onmouseover = function() {
                this.addClassName("button_over");
            };
            $(e).onmouseout = function() {
                this.removeClassName("button_over");
            };
        });
    }
}

Load.prefilledTextColor = null;

Load.getPrefilledColor = function() {
    if(Load.prefilledTextColor != null) {
        return Load.prefilledTextColor;
    }
    var e = document.createElement('input');
    $(e).addClassName('prefilledTextColor');
    /* @var e HTMLInputElement */
    e.setAttribute('type', 'hidden');
    document.body.appendChild(e);
    if(e.getStyle('color') != $(document.body).getStyle('color')) {
        Load.prefilledTextColor = e.getStyle('color');
        return Load.prefilledTextColor;
    } else {
        return null;
    }
}

/**
 * @static
 * @param {Element|string} element
 */
Load.loadPrefilledTextFields = function(element) {
	if(element) {
		element = $(element);
	} else {
		element = $(document.body);
	}
    var prefilled_color = '#a0b5c9';
    var prefilled_color_textarea = '#a0b5c9';
    if(Load.getPrefilledColor() != null) {
        prefilled_color = Load.getPrefilledColor();
        prefilled_color_textarea = Load.getPrefilledColor();
    }
	var filled = $A(element.getElementsBySelector('input.prefilled, textarea.prefilled'));
	filled.each( function (f) {
        f = $(f);
        //console.log(f.inspect());
        f.normal_color = f.getStyle('color');
        f.normal_text_align = f.getStyle('textAlign');

        if(!f.start_value) {
            f.start_value=f.value;
            if($(f).tagName.toLowerCase() != 'textarea' && !$('ordersteps')) {
                f.setStyle( {color:prefilled_color, textAlign:"left"} );
            } else {
                f.setStyle( {color:prefilled_color_textarea, textAlign:"left"} );
            }
        }
		f.observe('focus', function() {
			if(!this.start_value || this.value.strip() == this.start_value.strip()) {
                if(this.id == undefined || !this.id.toString().startsWith("txtAflever") || (this.id.toString().startsWith("txtAflever") && !$('chkAfleveradresGelijk').checked)) {
                    this.start_value=this.value;
                    this.value='';
                    $(this).setStyle( {color:this.normal_color, textAlign:this.normal_text_align, position:'relative'} );
                    if(document.all) {
                        this.focus();
                        this.select();
                    }
                }
			}
		});
		f.observe('blur', function() {
			if($(this).value.strip() == '') {
                if(this.id == undefined || !this.id.toString().startsWith("txtAflever") || (this.id.toString().startsWith("txtAflever") && !$('chkAfleveradresGelijk').checked)) {
                    this.value = this.start_value;
                    if($(f).tagName.toLowerCase() != 'textarea' && !$('ordersteps')) {
                        f.setStyle( {color:prefilled_color, textAlign:"left"} );
                    } else {
                        f.setStyle( {color:prefilled_color_textarea, textAlign:"left"} );
                    }
                }
			}
		});
	});
}


/**
 * @static
 */
Load.loadAutoSuggest = function() {
//    var stateSuggestions = null;
//    try {
//        stateSuggestions = new StateSuggestions();
//    } catch(e) {
//        return;
//    }
//    this.oTextbox = new AutoSuggestControl(
//        $('quick_search'),
//        stateSuggestions
//    );
//
//    if ($('advanced_search_1'))
//    {
//        this.oTextbox2 = new AutoSuggestControl(
//            $('advanced_search_1'),
//            stateSuggestions,
//            true
//        );
//    }
    var options = {
		script:"/ajax.php?mode=autosuggest&",
		varname:"query",
		json:true,
        cache:false,
		shownoresults:false,
        noresults:"Geen suggesties gevonden",
		//callback: function (obj) { document.getElementById('hiddenId').value = obj.id; },
        delay: 250,
        timeout: 2500, //is default
		maxentries:7
	};
	this.asJSON = new bsn.AutoSuggest('quick_search', options);
//    if ($('semifixed_search')) {
//        this.asSemiFixed = new bsn.AutoSuggest('semifixed_search', options);
//    }

    var otherOptions = Object.clone(options);
    otherOptions['submitonreturn'] = false;
    otherOptions['maxentries'] = 7;
    otherOptions['className'] = 'autosuggest as_advanced';
    if ($('advanced_search_1')) {
        this.asAdvancedJSON1 = new bsn.AutoSuggest('advanced_search_1', otherOptions);
    }
    var newOptions = Object.clone(otherOptions);
    newOptions['maxentries'] = 7;
    if ($('advanced_search_2')) {
        this.asAdvancedJSON2 = new bsn.AutoSuggest('advanced_search_2', newOptions);
    }
}

/**
 * @static
 */
Load.loadActionSliders = function() {
    var sliders = $A($$('.actie_slider'));

    sliders.each(function(slider) {
        if($(slider).hasClassName('actie_slider')) {
            slider.actieSliderObject = new ActieSlider(slider);
        } else if(slider.hasClassName('small_slider')) {
            //slider.smallSliderObject = new Slider(slider);
        }
    });
}

/**
 * @static
 */
Load.loadSemiFixed = function() {
    var panels = $A($$('.semi_fixed'));
    var body = $(document.body);
    body.setStyle({position:'relative'}); //yust making sure

    //alert(panels.inspect());

    var offsetHelpcontainer = $$('.Recent')[0]; //allign bottom of this box with

    panels.each(function(panel) {
        panel = $(panel);
        var fncOnScroll, fncOnResize;
        panel.startPosition = panel.cumulativeOffset();
        panel.dimensions = {height: panel.offsetHeight, width: panel.offsetWidth};
        
        //element whose bottom is aligned with maxAbsoluteposition
        panel.marginBottom = 0;
        panel.marginTop = 0;
        if(panel.getStyle('margin-bottom') != null) {
            panel.marginBottom = panel.getStyle('margin-bottom').toString().replace(/px/, '') * 1;
        }
        if(panel.getStyle('margin-top') != null) {
            panel.marginTop = panel.getStyle('margin-top').toString().replace(/px/, '') * 1;
        }
//        panel.borderBottom = 0;
//        panel.borderTop = 0;
//        if(panel.getStyle('border-bottom') != null) {
//            panel.marginBottom = panel.getStyle('border-bottom').toString().replace(/px/, '') * 1;
//        }
//        if(panel.getStyle('border-top') != null) {
//            panel.marginTop = panel.getStyle('border-top').toString().replace(/px/, '') * 1;
//        }
        panel.maxAbsolutePositionTop =
            offsetHelpcontainer.cumulativeOffset().top +
            offsetHelpcontainer.offsetHeight -
            panel.offsetHeight -
            //panel.marginBottom -  //niet meer in gebruik (voor allgifts.nl) maar wel netjes om te gebruiken.
            -2 -
            panel.marginTop;

        window.setInterval(function () {
            panel.maxAbsolutePositionTop =
                offsetHelpcontainer.cumulativeOffset().top +
                offsetHelpcontainer.offsetHeight -
                panel.offsetHeight -
                //panel.marginBottom -  //niet meer in gebruik (voor allgifts.nl) maar wel netjes om te gebruiken.
                //-2 -
                panel.marginTop;
        }, 1500);
        
        if(typeof console != 'undefined') {
            console.log(panel.maxAbsoluteposition);
        }

        if(panel.maxAbsolutePositionTop > panel.startPosition.top) {
           
            if (typeof document.body.style.maxHeight == "undefined" && document.all) { //is fixed position supported?
                //not supported (IE6)
                //do some setting up
                panel.oldParent = $(panel).up();
                panel.setStyle({position:'absolute'});
                panel.oldParent.removeChild(panel);
                panel.setStyle({
                    top: panel.startPosition.top + 'px',
                    left: panel.startPosition.left + 'px'
                });
                body.appendChild(panel);

                //create panel specific eventhandlers
                fncOnResize =
                fncOnScroll = Load.factoryOnScrollAbsolute(panel);
            } else {
                //supported
                //do some setting up

                //create panel specific eventhandlers
                fncOnResize =
                fncOnScroll = Load.factoryOnScrollFixed(panel);
            }

            Event.observe(window, 'scroll', fncOnScroll);
            Event.observe(window, 'resize', fncOnResize);
            fncOnScroll();
            fncOnResize();
        }
    });
}


/**
 * @static
 */
Load.factoryOnScrollFixed = function(panel) {
    var fncReturn;

    var resize = false;
    if(arguments.length) {
        resize = arguments[1];
    }

    fncReturn = function() {
        if(resize) {
            panel.setStyle({
                position: 'relative',
                bottom: 'auto'
            });
        }

        panel.setStyle({ //dirty fix
            marginLeft: (panel.cumulativeScrollOffset().left * -1) + 'px'
        });

        var relativeOffsetTop = panel.cumulativeScrollOffset().top +
                    document.viewport.getDimensions().height -
                    panel.clientHeight -
                    panel.marginBottom;
        var maxOffsetTop =  panel.maxAbsolutePositionTop + panel.marginTop;
        var minOffsetTop =  panel.startPosition.top;


        if(typeof console != 'undefined') {
            console.log(relativeOffsetTop, minOffsetTop);
        }

        if($(panel).cumulativeScrollOffsetBottom() > panel.marginBottom) {
            panel = $(panel);
            var btm = 0;

            if(relativeOffsetTop > maxOffsetTop) {
                btm = relativeOffsetTop - maxOffsetTop;
            }

            panel.setStyle({
                position: 'fixed',
                bottom: btm + 'px'
            });
        }
        if(relativeOffsetTop < minOffsetTop) {
            panel.setStyle({
                position: 'relative',
                bottom: 'auto',
                marginLeft: '0'
            });
        }
    }
    return fncReturn;
}

/**
 * @static
 */
Load.factoryOnScrollAbsolute = function(panel) {
    var fncReturn;

    var resize = false;
    if(arguments.length) {
        resize = arguments[1];
    }

    fncReturn = function() {
        var relativeOffsetTop = panel.cumulativeScrollOffset().top +
                    document.viewport.getDimensions().height -
                    panel.clientHeight -
                    panel.marginTop -
                    panel.marginBottom;
        var maxOffsetTop =  panel.maxAbsolutePositionTop;
        var minOffsetTop =  panel.startPosition.top;

        panel = $(panel);
        var top = relativeOffsetTop;

        if(relativeOffsetTop > maxOffsetTop) {
            top = maxOffsetTop;
        } else if(relativeOffsetTop < minOffsetTop) {
            top = minOffsetTop;
        }

        panel.setStyle({
            position: 'absolute',
            top: top + 'px'
        });

        if(resize) {
            if(typeof panel.lastViewportDimensions == 'undefined') {
                panel.lastViewportDimensions = document.viewport.getDimensions();
            }

            if(panel.lastViewportDimensions.width != document.viewport.getDimensions().width) {
                //afmaken
            }

            panel.lastViewportDimensions = document.viewport.getDimensions();
        }
    }
    return fncReturn;
}

/*
 *  @copyright the COW company © 2009
 *  @author Tom Niessink
 *  @package PackageName
 *  @class Slider
 */
Slider = Class.create();

/**
 * @static vars
 */
Slider.totalNumberOfSliders = 0;

/**
 * if alwaysStartWithFirst class is set in slider rootElement
 * then the slider doesn't take notice of the cookie that holds the current slider position
 * @copyright the COW company © 2009
 * @author Tom Niessink
 * @package PackageName
 * @class Slider
 */
ActieSlider = Class.create({
    //constants
    ORIENTATION_HORIZONTAL: 1,
    ORIENTATION_VERTICAL: 2,
    DIRECTION_UP: 1,
    DIRECTION_DOWN: 2,
    DIRECTION_LEFT: 1,
    DIRECTION_RIGHT: 2,
    PREV: -1,
    NEXT: 1,
    SLIDE_AT_THE_SAME_TIME: false,      //do the sliders slide at the same time
    SLIDE_AT_THE_SAME_TIME_INTERVAL: 2, //in seconds
    
    //properties
    animate: true,
    animationDuration: 1,

    initialize: function(element, interval, orientation, direction) {
        this.rootElement = $(element);

        this.isSliding = false;
        this.sliderID = ++Slider.totalNumberOfSliders;

        //not in use (yet)
        this.orientation = orientation != null ? orientation : this.ORIENTATION_HORIZONTAL;
        this.direction = direction != null ? direction : this.DIRECTION_DOWN;

        this.sliderDiv = $A($(element).getElementsByClassName('slider')).first();
        this.slideContainer = $A($(element).getElementsByClassName('slide_container')).first();
        this.intervalDelay = interval != null && interval > 0 ? interval * 1 : 6; //in seconden
        this.items = $A($(this.sliderDiv).childElements());
        if(this.animate && this.items.length) { //todo: fix in constructor
            this.sliderDiv.appendChild(this.items[0].cloneNode(true));
        }
        this.numberOfItems = this.items.length;
        if(this.numberOfItems > 1) {
            this.navigationDiv = $A($(element).getElementsByClassName('navigation')).first();
            this.slideButtons = $A($A($(element).getElementsByClassName('slide_btns')).first().childElements());
            this.btnPrev = $A($(element).getElementsByClassName('prev')).first();
            this.btnNext = $A($(element).getElementsByClassName('next')).first();
            if(this.rootElement.hasClassName('alwaysStartWithFirst')) {
                this.currentSlide = 0;
            } else {
                this.currentSlide = this.getStartSlideFromCookies();
            }
            this.gotoSlide(null, this.currentSlide, false, false);
            this.registerEventhandlers();
            if(this.SLIDE_AT_THE_SAME_TIME) {
                this.startInterval();
            } else {
                setTimeout(this.startInterval.bindAsEventListener(this), (this.sliderID-1)*this.SLIDE_AT_THE_SAME_TIME_INTERVAL*1000);
            }
        } else if(this.numberOfItems == 0) {
            this.rootElement.hide();
        }
    },
    
    startInterval: function() {
        this.interval = setInterval(
            this.navigate.bindAsEventListener(this, this.NEXT, false),
            this.intervalDelay * 1000
        );
    },

    stopInterval: function() {
        clearInterval(this.interval);
    },

    getStartSlideFromCookies: function() {
        this.lastSlide = getCookie('lastSlide' + this.sliderID) ? getCookie('lastSlide' + this.sliderID) * 1 : this.numberOfItems - 1;
        this.lastSlide++;
        if(this.lastSlide >= this.numberOfItems) {
            this.lastSlide = 0;
        }
        setCookie('lastSlide' + this.sliderID, this.lastSlide);
        return this.lastSlide;
    },

    registerEventhandlers: function() {
        if(this.numberOfItems > 0) {
            this.navigationDiv.show();
            for(var i = 0; i < this.slideButtons.length; i++) {
            //this.slideButtons.each(function(button, i) {
                var button = this.slideButtons[i];
                if(i < this.numberOfItems) {
                    $(button).observe('click', this.gotoSlide.bindAsEventListener(this, i, true, true));
                    button.addClassName('act');
                } else {
                    $(button).observe('click', function(event) {Event.stop(event);});
                    button.setStyle({cursor: 'default'});
                }
            //});
            }
            this.btnPrev.observe('click', this.navigate.bindAsEventListener(this, this.PREV, true));
            this.btnNext.observe('click', this.navigate.bindAsEventListener(this, this.NEXT, true));
        }
    },

    navigate: function(event, stepPrevOrNext, isUserInput) {
        if(!this.isSliding) {
            this.gotoSlide(event, this.step(stepPrevOrNext), this.animate, isUserInput);
        }
    },

    /**
     * @param {int} index
     * @param {bool} animate
     * @param {bool} isUserInput
     */
    gotoSlide: function(event, index, animate, isUserInput) {

        if(index == null) {
            index = this.currentSlide;
        }
        
        //calculate the future position
        var pos = 0;
        var anchor = 'left';
        switch(this.orientation) {
            case this.ORIENTATION_HORIZONTAL:
                anchor = 'left';
                if(this.direction == 1) {
                    anchor = 'right';
                }

                pos = index * this.slideContainer.offsetWidth * -1;
                break;
            case this.ORIENTATION_VERTICAL:
                anchor = 'top';
                if(this.direction == 1) {
                    anchor = 'bottom';
                }

                pos = index * this.slideContainer.offsetHeight * -1;
                break;
        }

        if(isUserInput) {
            this.stopInterval();
        }
        
        if(animate) {
            //animate normal
            if(this.last2first) {
                pos = this.items.length * this.slideContainer.offsetWidth * -1;
            } else if (this.first2last) {
                this.sliderDiv.setStyle(anchor + ': ' + (this.items.length * this.slideContainer.offsetWidth * -1) + 'px;');
            }
            
            this.isSliding = true;
            new Effect.Morph(this.sliderDiv, {
                style: anchor + ': ' + pos + 'px;',
                duration: isUserInput ? 0.5 : this.animationDuration,
                afterFinish: this.setCookieAfterFinish.bindAsEventListener(this, index, isUserInput, anchor)
            });
        } else {
            //set start position
            this.sliderDiv.setStyle(anchor + ': ' + pos + 'px;');
            this.setCookieAfterFinish(null, index, isUserInput, anchor);
        }

        if(event != null) {
            Event.stop(event);
        }
    },

    /**
     *
     */
    step: function(step) {
        this.currentSlide += step;
        
        this.first2last = false;
        this.last2first = false;
        
        if(this.currentSlide < 0) {
            this.currentSlide = this.numberOfItems - 1;
            this.first2last = true;
        } else if(this.currentSlide >= this.numberOfItems) {
            this.currentSlide = 0;
            this.last2first = true;
        }

        return this.currentSlide;
    },

    setCookieAfterFinish: function(event, index, isUserInput, anchor) {
        if(this.last2first) {
            this.sliderDiv.setStyle(anchor + ': 0px;');
        }
        
        setCookie('lastSlide' + this.sliderID, index);
        this.slideButtons.each(function(button) {
            if($(button).hasClassName('current')) {
                button.removeClassName('current');
            }
        });
        this.slideButtons[index].addClassName('current');
        this.isSliding = false;
        if(isUserInput) {
            this.startInterval();
        }
    }
});

String.prototype.trim = function() {
    return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); //optimized regex operations
}

String.prototype.fastTrim = function() { //optimized for large strings
	var str = this.replace(/^\s\s+/, '');
	for (var i = str.length - 1; i >= 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}

/**
 * Addthis configuration
 */
if($$('meta[name=description]').size() > 0 && $($$('meta[name=description]')[0]).getAttribute('content') != $($$('title')[0]).innerHTML) {
    var tmpSuffix = '';
    if($$('meta[name=titleSuffix]').size() > 0) {
        tmpSuffix = $($$('meta[name=titleSuffix]')[0]).getAttribute('content');
    }

    var tmpPrefix = '';
    if($$('meta[name=titlePrefix]').size() > 0) {
        tmpPrefix = $($$('meta[name=titlePrefix]')[0]).getAttribute('content');
    }

    var tmpTitle = $($$('title')[0]).innerHTML;
    if(tmpSuffix.trim() != '') {
        tmpTitle = tmpTitle.replace(' - ' + tmpSuffix, '');
    }
    if(tmpPrefix.trim() != '') {
        tmpTitle = tmpTitle.replace(tmpPrefix + ' - ', '')
    }
    tmpTitle = tmpTitle.replace('&nbsp;', ' ')
        .replace(/( - )? \(Artikelnummer: [0-9]+\)/i, '');

    var shopName = $($$('meta[name=shopName]')[0]).getAttribute('content');
    var twitterID = $($$('meta[name=twitterID]')[0]).getAttribute('content');
    var twitterString = '';
    if(twitterID.toString().length > 0) {
        twitterString = ' (via @' + twitterID + ')';
    }
    var addthis_share = {
        title: (tmpTitle.trim() == '') ? $($$('title')[0]).innerHTML : tmpTitle,
        description: $($$('meta[name=description]')[0]).getAttribute('content'),
        templates: {
            twitter: 'Check dit: {{title}} => {{url}}' + twitterString
        },
        url_transforms: {
            clean: true,
            remove: ['cattab', 'action', 'levsupid']
        }
    }

    //alert('common');
    if(addthis_config) {
        addthis_config.ui_cobrand = shopName;
        addthis_config.data_track_clickback = true;
    } else {
        var addthis_config = {
            ui_cobrand: shopName,
            data_track_clickback: true
        }
    }

    /**
     * Old code to not shorten the URL for branding purposes.
     */
//    alert(addthis_share.templates.twitter.replace(/\{\{[^\}]\}\}/i, ''));
//    alert(addthis_share.templates.twitter.replace(/\{\{[^\}]\}\}/i, '').length);
//    alert(addthis_share.title);
//    alert(addthis_share.title.length);
//    alert(escape(document.location.toString()));
//    alert(document.location.toString().length);
//    if(addthis_share.templates.twitter.replace(/\{\{[^\}]\}\}/i, '').length + addthis_share.title.length + document.location.toString().length <= 140) {
//
//        addthis_share.templates.twitter = addthis_share.templates.twitter.replace('{{url}}', escape(document.location.toString()));
//    }
}


// placeholders registreren (nodig om weer leeg te halen)
var placeholders = $H();

function HasPlaceholderSupport()
{
    return ("placeholder" in document.createElement("input"));
}

// Fallback voor HTML5 placeholder (oudere browsers)
function PlaceholderFallback(name)
{
    // No placeholder support
    if (!HasPlaceholderSupport()) { 
        placeholders.set(name);
        
        var element = $(name);
        var placeholderText = element.readAttribute('placeholder');

        element.toggleClassName('placeholder');
        element.value = placeholderText;

        element.onfocus = function() {
            if (element.hasClassName('placeholder')) { 
                element.toggleClassName('placeholder');
                this.value = ""; 
            }
        }

        element.onblur = function() {
            if (this.value == "") { 
                element.toggleClassName('placeholder');
                this.value = placeholderText; 
            }
        }
    }
}

function ClearPlaceholders()
{
    // No placeholder support
    if (!HasPlaceholderSupport() && placeholders) { 
        placeholders.each(function(pair) {
            var element = $(pair.key);  
            if (element.value == element.readAttribute('placeholder')) {
                $(element).value = "";
            }
        });
    }
}

