// the FireBug extension for Firefox offers a bonafide JavaScript error console
// to prevent errors in browsers without it, create a dummy console object
// with the required methods
try {
      console.log('Starting ' + window.location);
} catch (err) {
    var console = new Object;
    console.log = function() { return true };
    // console.log = function() {
    //     for(var i = 0, j = arguments.length ; i < j ; i++) {
    //         alert(arguments[i])
    //     }
    // }
};


/********************************************************************************************

 storing affiliate codes and such in cookies if the page is cached
 
********************************************************************************************/
var QueryVarsToSave = $A(['Affiliate', 'ZanoxPID', 'utm_campaign', 'utm_source', 'utm_medium', 'utm_content']);
QueryVarsToSave.each(function(varName){
    if(ECube.queryVars[varName]){
        ECube.cookies.create('sqv_' + varName, ECube.queryVars[varName], 30);
    };
})
/********************************************************************************************

 storing affiliate codes and such in cookies if the page is cached ends
 
********************************************************************************************/


/*******************************************************************************************

  Minibasket

*******************************************************************************************/


// some specific extras
EpagesShop.miniBasket.Marskramer = new Object();
EpagesShop.miniBasket.Marskramer.open = function(withEffect) {
    var but_open    = $('minibasket_button_open');
    var but_close   = $('minibasket_button_close');
    if(but_close){
        but_close.show();
    };
    if(but_open){
        but_open.hide();
    };
    var basketContent = EpagesShop.miniBasket.basketElement;
    if(basketContent){
        if(withEffect) {
            new Effect.Appear(basketContent.down('.MinibasketContent'));
        } else {
            basketContent.down('.MinibasketContent').show();
        }
    };
};
EpagesShop.miniBasket.Marskramer.close = function(withEffect) {
    var but_open    = $('minibasket_button_open');
    var but_close   = $('minibasket_button_close');
    if(but_open){
        but_open.show();
    };
    if(but_close){
        but_close.hide();
    };
    var basketContent = EpagesShop.miniBasket.basketElement;
    console.log("check",basketContent );
    if(basketContent){
        if(withEffect) {
            new Effect.SlideUp(basketContent.down('.MinibasketContent'));
        } else {
            basketContent.down('.MinibasketContent').hide();
        }
    }
};
ECube.registerOnLoadFunction(function(e){
    var defaultBasketElement = $('minibasket');
    // we're on the main basket. don't bother with closing and opening
    if(! defaultBasketElement){
        // yes, since blocks have classes rather than id's, we need to resort to this hack
        $$('.orderprocesBasketContent').each(function(elem){
            EpagesShop.miniBasket.basketElement = elem;
        });
        return;
    };
    
    // we're dealing with a minibasket
    EpagesShop.miniBasket.basketElement = defaultBasketElement;
    
    // wijs listeners toe aan de open of sluitknoppen
    var but_open    = $('minibasket_button_open');
    if(but_open){
        but_open.observe('click', function(eventObject){
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            EpagesShop.miniBasket.Marskramer.open(true)
        });
    };
    var but_close   = $('minibasket_button_close');
    if(but_close){
        but_close.observe('click', function(eventObject){
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            EpagesShop.miniBasket.Marskramer.close(true)
        });
    };
    // zet het mandje open of dicht tijdens de onload,
    
    var mustOpen = false
    if(mustOpen) {
        EpagesShop.miniBasket.Marskramer.open();
    } else {
        EpagesShop.miniBasket.Marskramer.close();
    };
    // doe wat extra's nadat we het mandje hebbe opgehaald
    var defaultOnComplete = EpagesShop.miniBasket.callBacks.onComplete;
    if(defaultOnComplete){
        var newOnComplete = function(transport){
            defaultOnComplete(transport);
            if($('minibasket_button_open')){
                $('minibasket_button_open').observe('click', function(eventObject){
                    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                    EpagesShop.miniBasket.Marskramer.open(true)
                });
            };
            if($('minibasket_button_close')){
                $('minibasket_button_close').observe('click', function(eventObject){
                    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                    EpagesShop.miniBasket.Marskramer.close(true)
                });
            };
            EpagesShop.miniBasket.Marskramer.open(true);
            // cause all basket submits to scroll to the top of the page
            scroll(0,0);
            return true;
        };
        EpagesShop.miniBasket.callBacks.onComplete = newOnComplete;
    };

});

/*******************************************************************************************

  Einde Minibasket

*******************************************************************************************/

// Sloopt alle prijzen om zodat de decimalen van de prijs in de lucht hangen
document.observe('dom:loaded',function(eventObject){
    $$('.specialFormatPrice').each(function(elem){
        elem.update(elem.innerHTML.replace(/^(.*\,)(\d\d)$/,'<span>$1</span><span class="superText">$2</span>'));        
    });
})

//Verbergt linkermenu als deze leeg is
document.observe('dom:loaded',function(eventObject){
    $$('.menuContainer').each(function(elem){
        if(elem.childElements().size() == 0){
            elem.hide();
        }
    });
});

/*******************************************************************************************

  Open in overlay (should go to ECube.js once it works)

*******************************************************************************************/

ECube.overlay = {
    // elements the overlay will be displayed in (null will autodetermine the elements)
    elements: {
        displayContainer: null,
        displayBackground: null
    },
    // initialization of the overlay
    initialize: function(eventObject){
             
        $$('input.showinoverlay','select.showinoverlay').invoke('observe','change',ECube.overlay.eventObserver);
        $$('form.showinoverlay')                        .invoke('observe','submit',ECube.overlay.eventObserver);
        $$('a.showinoverlay')                           .invoke('observe','click',ECube.overlay.eventObserver);
        $$('.closePopup')                               .invoke('observe','click',function(eventObject){ECube.overlay.toggleOverlay(false);});
    },
    // determines what happens on the event
    eventObserver : function(eventObject){
        elem = $(this);
        
        ECube.d.log(2, "Showing link in overlay for " , elem);
        eventObject.stop();
        
        var params;
        var url;
        
        switch(elem.tagName){
            case 'A':
                url = elem.readAttribute('href');
                var getQueryVars = url.match(/\?(.+)/);
                if(getQueryVars){
                    params = getQueryVars[1].replace(/^\?/, '');
                };
                break;
            case 'FORM':
                url = elem.readAttribute('action');
                params = elem.serialize();
                break;
            case 'INPUT':
                var ancestors = elem.ancestors();
                var formObj = ancestors.find(function(elem){
                    if(elem.tagName == 'FORM'){
                        return true;
                    };
                    return false;
                });
                if(formObj){
                    formObj = $(formObj);
                    url = formObj.readAttribute('action');
                    params = formObj.serialize();
                }
                break;
            case 'SELECT':
                var ancestors = elem.ancestors();
                var formObj = ancestors.find(function(elem){
                    if(elem.tagName == 'FORM'){
                        return true;
                    };
                    return false;
                });
                if(formObj){
                    formObj = $(formObj);
                    url = formObj.readAttribute('action');
                    params = formObj.serialize();
                }
                break;
        }
        ECube.d.log(2, "Loading url " + url + ' in overlay');
        if(url){
            try {
                new Ajax.Request(url, Object.extend(
                    {
                        method:         'POST',
                                                // indien de params aanwezig zijn is dit een serialized string
                        parameters:     params = (params  ? params + '&ShowInOverlay=1' : {'ShowInOverlay' : 1})
                    },
                    ECube.overlay.ajaxCallbacks
                ));
            } catch(err) {
                ECube.d.log(0, 'Error creating ajax request: ', err);
            };
            return true;
        }
    },
    // deze callbacks worden toegevoegd gemerged in de request voor de content.
    // mocht je willen ingrijpen op deze gebeurtenis dan kan je deze hash overrulen / wrappen
    // TODO : tim, kun je mij (MCJ) uitleggen hoe?
    ajaxCallbacks: {
        onComplete: function(transport) {
            ECube.overlay.toggleOverlay(true,transport.responseText);
            ECube.overlay.getElements().displayContainer
                .select('.closePopup')
                .invoke('observe','click',function(eventObject){ECube.overlay.toggleOverlay(false);});
            // special treatment for forms in the popup
            var formObjects = false;
            try {
                formObjects = ECube.overlay.getElements().displayContainer.select('form');
            } catch(err) {
                console.error(err);
            }
            if(formObjects){
                ECube.d.log(3, "Attaching listeners to forms in popup");
                formObjects.each(function(formObject){
                    ECube.d.log(1, "Attaching listeners to form in popup: ", formObject);
                    // attach must match strings for email fields
                    formObject.select('input.validate_email_input').each(function(inputElement){
                        ECube.setMustMatchToEmailRegex(inputElement);
                    });
                    // attach form validators
                    ECube.formValidatorAttach(formObject);
                    // attach an observer to make sure the response is displayed in the same popup
                    if(formObject.hasClassName('continueinoverlay')){
                        formObject.observe('submit', ECube.overlay.eventObserver);
                    };

                })
            }
            
        }
    },
    // gets the elements for the overlay, creates them otherwise
    getElements: function(){
        var elements =ECube.overlay.elements;
        // no background. create it. attach it to the body
        if(! elements.displayBackground){
            var displayBackground = $('overlay_display_background');
            if(! displayBackground){
                displayBackground = new Element('div', {'id': 'overlay_display_background', 'style': 'display:none;'});
                $$('body')[0].insert(displayBackground);
            };
            elements.displayBackground = displayBackground;
            elements.displayBackground.observe('click', function(eventObject){ECube.overlay.toggleOverlay(false);});
        };
        // no custom container. create a new one
        if(! elements.displayContainer){
            var displayContainer = $('overlay_display_container');
            if(! displayContainer){
                displayContainer = new Element('div', {'id': 'overlay_display_container', 'style': 'display:none;'});
                $$('body')[0].insert(displayContainer);
            };
            elements.displayContainer = displayContainer;
        };
        return elements;
    },
    toggleOverlay: function(visibility,content){
        var elements = ECube.overlay.getElements();
        
        try {
            elements.displayContainer.update(content);
        } catch(err) { ECube.d.log(0, 'content received by ajaxcall contained javascript errors', err); }
        
        // TODO : ik had het graag met onderstaande regel opgelost, echter dat ging niet en wegens tijdsgebrek, zodoende de if
        //elements.invoke(visibility ? 'show' : 'hide');
        if(visibility){
            Effect.Appear($(elements.displayBackground), {
                duration    : 0.6,
                from        : 0,
                to          : 0.6
            });
            Effect.Appear($(elements.displayContainer), {
                duration    : 0.6,
                from        : 0,
                to          : 1
            });
        } else {
            Effect.Fade($(elements.displayBackground), {
                duration    : 0.6,
                from        : 0.6,
                to          : 0
            });
            Effect.Fade($(elements.displayContainer), {
                duration    : 1,
                from        : 1,
                to          : 0
            });            
        }
    }
};

ECube.registerOnLoadFunction(ECube.overlay.initialize);





// specific stuff for Marskramer : 
//
// - if an overlay yields a form shippingdataform, attach a formvalidator to it
// - if an overlay yields a form forgotpasswordform, attach a formvalidator and an overlay listener to it
ECube.overlay.ajaxCallbacks.onComplete = ECube.overlay.ajaxCallbacks.onComplete.wrap(function(callOriginal, transport){
    callOriginal(transport);
    var elements = ECube.overlay.getElements();
    
    var shippingDataForm = elements.displayContainer.down('FORM[name=shippingdataform]');
    // attach a validator to the shipping data form
    if(shippingDataForm){
        ECube.formValidatorAttach(shippingDataForm);
    };
    
    var forgotPasswordForm = elements.displayContainer.down('FORM[name=forgotpasswordform]');
    // attach a validator to the forgot password data form
    if(forgotPasswordForm){
        // make sure we can't submit nonsense
        ECube.setMustMatchToEmailRegex(forgotPasswordForm['email']);
        ECube.formValidatorAttach(shippingDataForm);
        
        // make the form submit into the overlay
        forgotPasswordForm.observe('submit', function(eventObject) {
            eventObject.stop();
            var validator = new ECube.formValidator(this);
            if(validator.hasErrors()) {
                validator.markErrors();
                return false;
            };
            new Ajax.Updater(elements.displayContainer, forgotPasswordForm.action, {
                'parameters' : forgotPasswordForm.serialize(true)
            });
        });
    };
});



/*******************************************************************************************

  Begin PNG fixes voor IE6
    
*******************************************************************************************/

var version = parseFloat(navigator.appVersion.split('MSIE')[1]);

var ie6BugFixes = {
    
    fixBackgrounds          : $w('div span a body'),
    fixBackgroundChildren   : $w('a input select textarea button iframe object'),
    
    initialize: function(eventobject){
        if ((version >= 5.5) && (version < 7)) {
            ie6BugFixes.backgrounds($$('body')[0]);
            ie6BugFixes.images();
        }
    },
    
    backgrounds: function(elem) {
        elem.childElements().each(function(childElem){
            if(ie6BugFixes.fixBackgrounds.indexOf(childElem.tagName.toLowerCase())!=-1){
                var bgImg = childElem.getStyle('background-image').match(/[^\(\)\"]*\.png/i);
                if(childElem.getStyle('position').match(/absolute|relative/) && bgImg){
                    ECube.d.log(0, 'unable to fix child ' , childElem , ' due to predetermined position absolute / relative');
                }
                else {
                    if(bgImg){
                        childElem.setStyle({
                            filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + bgImg[0] + "', sizingMethod='crop')",
                            backgroundImage: 'none'
                        });
                    }
                    ie6BugFixes.backgrounds(childElem);
                }
            } else {
                if(ie6BugFixes.fixBackgroundChildren.indexOf(childElem.tagName.toLowerCase())!=-1){
                    childElem.setStyle({position: 'relative'});
                }
                else {
                    ie6BugFixes.backgrounds(childElem);
                }
            }
        })
    },
    
    images: function(elem){
        // fix the images
        $$('img').each(function(elem){
            if(elem.readAttribute('src').match(/\.png$/i)) {
                var dims = elem.getDimensions(); 
                elem.replace(new Element('div').setStyle({
                    width   : dims.width + 'px',
                    height  : dims.height + 'px',
                    filter  : "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='" + elem.readAttribute('src') + "')"
                }));
            }
        });
    }
};


Event.observe(window,'load',ie6BugFixes.initialize);
    
//    Ajax.Responders.register({
//        onCreate: function(request) {
//            request.options['onComplete'] = request.options['onComplete'].fixIE6Bugs;
//        }
//    });
//    
//    EpagesShop.miniBasket.Marskramer.open = EpagesShop.miniBasket.Marskramer.open.wrap(function(callOriginal,withEffect){
//            callOriginal(withEffect);
//            fixIE6Bugs.delay(2);
//        });
//};

/*******************************************************************************************

  Einde PNG fixes voor IE6
    
*******************************************************************************************/




var productZoom = {
    productImage: null,
    zoomBox: null,
    zoomImage: null,
    mousePosition: {},
    zooming: false,
    initialize: function(){
        var version = parseFloat(navigator.appVersion.split('MSIE')[1]);
        if(version < 7 && Prototype.Browser.IE) {
          if ($('zoomBox')){
            $('zoomBox').hide();
          }
          return false;
        }
        productZoom.productImage = $('productImage');
        productZoom.zoomBox = $('zoombox');
        if(!productZoom.zoomBox || !productZoom.productImage) {
            return false;
        }

        // this will be set onError
        if (productZoom.productImage.disableListners){
            productZoom.zoomBox.hide();
            return false;
        }
        productZoom.zoomImage = $('zoombox').down('img');
        if(productZoom.productImage && productZoom.zoomBox) {
            ECube.d.log(2, 'Initializing productzoom');
            productZoom.zoomBox.hide();
            productZoom.attachEvents();
        } else {
            ECube.d.log(0, 'Did not initiate productZoom while the elements could not be found');
        }
    },
    attachEvents: function(){        
        $$('.showZoom').invoke('observe','mouseover',productZoom.eventListners.mouseOver);
        $$('.showZoom').invoke('observe','mouseout' ,productZoom.eventListners.mouseOut);
        document.observe('mousemove',productZoom.eventListners.mouseMove);
    },
    eventListners: {
        mouseOver: function(eventObject){
            productZoom.zoomBox.show();
            $$('.productDetailPriceOrder').invoke('hide');
            productZoom.zooming = true;
        },
        mouseMove: function(eventObject){
            productZoom.mousePosition = {
                mouseX: eventObject.pointerX(),
                mouseY: eventObject.pointerY()
            };
            if(productZoom.zooming) productZoom.zoomToPointer();
        },
        mouseOut: function(eventObject){
            productZoom.zooming = false;
            $$('.productDetailPriceOrder').invoke('show');
            productZoom.zoomBox.hide();
        }
    },
    zoomToPointer: function(){
        var imageOffset = productZoom.productImage.cumulativeOffset();
        var imageDimensions = productZoom.productImage.getDimensions();
        var bigImageDimensions = productZoom.zoomImage.getDimensions();
        var zoomBoxDimensions = productZoom.zoomBox.getDimensions();
        
        var mouseXInImage = productZoom.mousePosition.mouseX - imageOffset[0];
        var percentageXInImage = (mouseXInImage / imageDimensions.width) * 100;
        var mouseYInImage = productZoom.mousePosition.mouseY - imageOffset[1];
        var percentageYInImage = (mouseYInImage / imageDimensions.height) * 100;
        
        productZoom.zoomImage.setStyle({
            left: (((bigImageDimensions.width - zoomBoxDimensions.width) / 100) * percentageXInImage * -1) + 'px',
            top: (((bigImageDimensions.height - zoomBoxDimensions.height) / 100) * percentageYInImage * -1) + 'px'
        });
    }
};

Event.observe(window, 'load', productZoom.initialize);










var landkaart = {
    initialize: function(eventObject){
        ECube.d.log(1, 'initializing landkaart');
        if($('nederland_landkaart')){
            landkaart.attachEvents();
        }
    },
    attachEvents: function(){
        ECube.d.log(1, 'attaching events to landkaart');
        $$('map[name=nederland_landkaart_Map] area','#provincie_links a').invoke('observe','mouseover',landkaart.eventListners.mouseOver);
        $$('map[name=nederland_landkaart_Map] area','#provincie_links a').invoke('observe','mouseout',landkaart.eventListners.mouseOut);
    },
    eventListners: {
        mouseOver: function(eventObject){
            var currentProvincie = this.readAttribute('provincie');
            var currentImage = $('nederland_landkaart').readAttribute('src');
            $('nederland_landkaart').writeAttribute('src',currentImage.replace(/nederland(.*)\.gif/,'nederland_'+currentProvincie+'.gif'));
            $$('[provincie='+currentProvincie+']').invoke('addClassName','hovering');
        },
        mouseOut: function(eventObject){
            var currentProvincie = this.readAttribute('provincie');
            var currentImage = $('nederland_landkaart').readAttribute('src');
            $('nederland_landkaart').writeAttribute('src',currentImage.replace(/nederland(.*)\.gif/,'nederland.gif'));
            $$('[provincie='+currentProvincie+']').invoke('removeClassName','hovering');
        }
    }
};

document.observe('dom:loaded',landkaart.initialize);


var menuDropouts = {
    initialize: function(eventObject){
      ECube.d.log(1, 'initializing menuDropouts');
      $$(".menuDropouts").each(function(el){
        var offsetDropout = 0;
        ECube.d.log(2, "Setting position for menu dropout items below ", el.select('.menuItem'));
        el.select('.menuItem').each(function(item){
          if(item.hasClassName("openDropout")) $(item.readAttribute("dropoutid")).setStyle({left:offsetDropout+'px'});
          offsetDropout = offsetDropout + item.getDimensions().width;
          
        });
      });
    }
};

document.observe('dom:loaded',menuDropouts.initialize);

/*
<img class="thumnailProductImage" src="#ExternalImagePath/Images/System/#UD_Language/productDetailProductThumb.jpg" />
<img class="thumnailProductImage" src="#ExternalImagePath/Images/System/#UD_Language/productDetailProductThumb.jpg" />
<img c="thumnailProductImage" src="#ExternalImagePath/Images/System/#UD_Language/productDetailProductThumb.jpg" />
*/




var productThumbnails = {
    initialize: function(eventObject) {
        ECube.d.log(1, 'Initializing productthumbnails');
        var containerElem = $('thumbnailContainer');
        if (!containerElem) {
            return;
        }
        var images = containerElem.readAttribute('thumbnails').split(',');
        if(images.length <= 1) {
            return;
        }
        
        var thumbnailUrl = new Template(containerElem.readAttribute('srcTpl'));
        images.each(function(imageName, index){
            var thumbWrapper = new Element('div', {
                'class'     : ( !index
                    ? 'thumnailProductImage active'
                    : 'thumnailProductImage')
            });
            var newThumb = new Element('img',{
                'src'       : thumbnailUrl.evaluate({imageName: imageName}),
                'imageName' : imageName
            });
            var AlignmentTableWithImage = productThumbnails.makeAlignmentTable(newThumb);
            thumbWrapper.update(AlignmentTableWithImage);
            containerElem.appendChild(thumbWrapper);
            thumbWrapper.observe('click', productThumbnails.propagate);
        });
    },
    propagate: function(eventObject){
        var imageElement = (eventObject.element().tagName == 'IMG'
                            ? eventObject.element()
                            : eventObject.element().down('img'));
        var imageName = imageElement.readAttribute('imageName');
        
        var zoomImg = $('zoombox').down('img');
        var zoomImgTpl = new Template(zoomImg.readAttribute('srcTpl'));
        zoomImg.setAttribute(
            'src',
            zoomImgTpl.evaluate({imageName: imageName})
        );
        
        var biggerImg = $('productImage');
        var biggerImgTpl = new Template(biggerImg.readAttribute('srcTpl'));
        biggerImg.setAttribute(
            'src',
            biggerImgTpl.evaluate({imageName: imageName})
        );

        $('thumbnailContainer').select('div').invoke('removeClassName', 'active');
        imageElement.up('div').addClassName('active');
    },
    makeAlignmentTable: function(thumbnailImageSrc){ //in pixels
        var Table = new Element('table',{
          'cellspacing' : '0',
          'cellpadding': '0'
          });
        var Tbody = new Element('tbody');
        var Tr = new Element('tr');
        var Td = new Element('td',{
                'valign'    : 'middle',
                'align'     : 'center'
            });
        Td.update(thumbnailImageSrc);
        Tr.update(Td);
        Tbody.update(Tr);
        Table.update(Tbody);
        return Table;
    }
}

document.observe('dom:loaded', productThumbnails.initialize);


/*****************************************************************************

 Ogone auto redirect

*****************************************************************************/

// auto submit the ogone redirect form
ECube.registerOnLoadFunction(function(e){
    if(document.forms['gotoogoneform']){
        document.forms['gotoogoneform'].submit();
    }   
})


/*******************************************************************************************

Geen valuedefault-velden submitten

*******************************************************************************************/
document.observe("dom:loaded", function(e){
    $$('input[valuedefault]').each(function(inputElem){
        // get the containing form
        var ancestors = $(inputElem).ancestors();
        var formObj = ancestors.find(function(elem){
            if(elem.tagName == 'FORM'){
                return true;
            };
            return false;
        });
        
        var errormessage = 'Vul a.u.b. een zoekterm in';
        
        // get the default value and create a listener for the form
        var defaultValue = inputElem.readAttribute('valuedefault');
        if(formObj){
            $(formObj).observe('submit', function(eventObject){
                var currentValue = inputElem.value;
                if(currentValue == defaultValue){
                    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                    alert(errormessage);
                   return false;
                };
                if(! currentValue) {
                    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                    alert(errormessage);
                    return false;
                };
            })
        }
    });
});

/*******************************************************************************************

Einde geen valuedefault-velden submitten

*******************************************************************************************/






var modifyBasketAmount = {
    timerHandle     : false,
    timeout         : 1200,
    currentHandle   : false,
    basketSemaphore : false,
    
    messages: {
      alert: {
        cantOrderMore: 'Dit is het maximale aantal wat u kunt bestellen in verband met de beschikbare voorraad'
      }
    },
    
    initialize: function(eventObject){
        // if there is no big basket, cancel (this function currently works for
        // only the big basket)        
        if (!$$('.orderprocesBasketContent').size()){
            return;
        }
        
        ECube.d.log(2, "initializing modifyBasketAmount");
        
        modifyBasketAmount.attachFunctions();
    },
    
    attachFunctions: function(){
        $$('.orderprocesBasketContent a').each(function(anchor){
          var targetLocation = anchor.readAttribute('href');
          if (targetLocation && targetLocation.match(/RmProduct/)){
            anchor.observe('click', modifyBasketAmount._events.semaphoreCheck);
          }
        });
        
        var handles = $$('.modifyBasketAmount');
        
        ECube.d.log(3, "modifyBasketAmount found the handles:", handles);
        handles.each(modifyBasketAmount.attachHandleFunctions);
    },
    
    attachHandleFunctions: function(handle){
        handle.select('input[name=modifyAction]')
            .invoke('observe', 'click', modifyBasketAmount._events.buttonClick);
        handle.down('input[name=currentAmount]')
            .observe('change',  modifyBasketAmount._events.changeField);
        handle.down('input[name=currentAmount]')
            .observe('keydown', modifyBasketAmount._events.keyDown);
    },
    
    timer: {
        start: function(handle){
            modifyBasketAmount.currentHandle = handle;
            modifyBasketAmount.timer.stop();
            
            modifyBasketAmount.basketSemaphore = true;
            ECube.d.log(3, "modifyBasketAmount semaphore on");
            
            modifyBasketAmount.timerHandle = window.setTimeout(
                modifyBasketAmount.startUpdate,
                modifyBasketAmount.timeout
            );
        },
        stop: function(){
            modifyBasketAmount.basketSemaphore = false;
            ECube.d.log(3, "modifyBasketAmount semaphore off");
            
            if(modifyBasketAmount.timerHandle){
                window.clearTimeout(modifyBasketAmount.timerHandle);
                modifyBasketAmount.timerHandle = false;
            }
        }
    },
    
    startUpdate: function(){
        // only functional for big basket!
        var bigBasket = $$('.orderprocesBasketContent')[0];
        
        var currentHandle = modifyBasketAmount.currentHandle;
        var productNo = currentHandle.down('input[name=productNo]').value;
        var amount = currentHandle.down('input[name=currentAmount]').value;
        
        var callParams = {
            'TemplateClass'     : 'OS',
            'TemplateID'        : GLOBAL_TEMPLATEID,
            '__FromAjaxCall'    : 1
        };
        
        callParams['NumOf_'+productNo] = amount;
        
        new Ajax.Request(
            '/shop/Basket/Update',
            {
                method      : 'POST',
                parameters  : callParams,
                onComplete  : EpagesShop.miniBasket.callBacks.onComplete.wrap(
                    function(callOriginal,transport){
                        modifyBasketAmount.basketSemaphore = false;
                        ECube.d.log(3, "modifyBasketAmount semaphore off");
                        bigBasket.replace(transport.responseText);
                        bigBasket = $$('.orderprocesBasketContent')[0];
                        callOriginal(transport);
                    }
                )
            }
        );
        
        if (window['pageTracker']){
            pageTracker._trackPageview('/basket/update?product=' + productNo);
            pageTracker._trackEvent('basket','update','Product : ' + productNo);
        }
        
    },
    
    modifyHandleWithDelta: function(delta, handle){
        var value = parseInt(handle.down('input[name=currentAmount]').value);
        var maxAmount = parseInt(handle.down('input[name=availableStock]').value);
        var exceededAmount = false;
        
        value += delta;    
        
        if (maxAmount){
            if (value > maxAmount){
                value = maxAmount;
                exceededAmount = true;
            }
        }
        if (value < 0) {
            value = 0;
        }
    
        handle.down('input[name=currentAmount]').value = value;
        
        if (exceededAmount){
          modifyBasketAmount.timer.stop();
          alert(modifyBasketAmount.messages.alert.cantOrderMore);
        }
        
        // (re)start timer
        modifyBasketAmount.timer.start(handle);
    },
    
    _events: {
        semaphoreCheck: function(eventObject){
            if (modifyBasketAmount.basketSemaphore){
                eventObject.stop();
            }
        },
        buttonClick: function(eventObject){
            eventObject.stop();
            // modify field
            var elem = eventObject.element();
            var handle = elem.up('.modifyBasketAmount');
            
            
            var delta
                = elem.readAttribute('value') == 'increase'
                ? 1
                : -1;
                
            modifyBasketAmount.modifyHandleWithDelta(delta,handle);
        },
        keyDown: function(eventObject){
            // abort input of the non-numeric type
            var keyCode = eventObject.which
              ? eventObject.which
              : eventObject.keyCode;
            
            // numeric keys from the keypad deserve special treatment ;-)
            if ((keyCode >= 96) && (keyCode <= 105)){
              keyCode -= 48;
            }
            
            var isInteger = String.fromCharCode(keyCode).match(/^\d$/);
            var handle = eventObject.element().up('.modifyBasketAmount');
            
            if (eventObject.which == Event.KEY_UP) {
                modifyBasketAmount.modifyHandleWithDelta(1,handle);
                //console.log('Handle is:', handle);
                eventObject.stop();
            }
            else if(eventObject.which == Event.KEY_DOWN) {
                modifyBasketAmount.modifyHandleWithDelta(-1,handle);
                eventObject.stop();
            }
            
            if (!(isInteger ||
                  eventObject.shiftKey ||
                  eventObject.ctrlKey ||
                  (keyCode == Event.KEY_RETURN) ||
                  (keyCode == Event.KEY_BACKSPACE) ||
                  (keyCode == Event.KEY_LEFT) ||
                  (keyCode == Event.KEY_RIGHT) ||
                  (keyCode == Event.KEY_DELETE) ||
                  (keyCode == Event.KEY_HOME) ||
                  (keyCode == Event.KEY_END) ||
                  (keyCode == Event.KEY_TAB ))) {
                eventObject.stop();
            }
        },
        changeField: function(eventObject){
            eventObject.stop();
            // correct if amount exceeds maxAmount
            var elem = eventObject.element();
            var handle = elem.up('.modifyBasketAmount');
            var maxAmount = parseInt(handle.down('input[name=availableStock]').readAttribute('value'));
            var value = elem.value;
            var exceededAmount = false;
            
            if (maxAmount){
                if (value > maxAmount){
                    value = maxAmount;
                    exceededAmount = true;
                }
            }
            
            if (value < 0) {
                value = 0;
            }
            
            elem.up('.modifyBasketAmount').down('input[name=currentAmount]').value = value;
            
            if (exceededAmount){
              modifyBasketAmount.timer.stop();
              alert(modifyBasketAmount.messages.alert.cantOrderMore);
            }
            
            // (re)start timer
            modifyBasketAmount.timer.start(handle);
            
        }
    }
};

document.observe('dom:loaded', modifyBasketAmount.initialize);



var filters = {
    container           : false,
    
    timerHandle         : false,
    timeout             : 600,
    
    params              : [],
    
    priceSlider         : false,
    
    initialize: function(eventObject){
        var containers = $$('.menuContainer');
        // abort if there was no container to start with
        if (! containers.size()) {
            return;
        }
        
        filters.container = containers[0];
        filters.container.select('input[type=checkbox]').each(
            filters.attachCheckbox
        )
        
        filters.priceSlider = filters.container.down('.priceSlider');
        filters.attachPriceSlider();
            
    },
    
    attachCheckbox: function(elem){
        if (elem.checked){
            var name = elem.readAttribute('name');
            var value = elem.readAttribute('value');
            var param = '/' + name + '/' + value;
            filters.params.push(param);
        }
        elem.observe('click', filters._events.clickCheckbox);
    },
    
    attachPriceSlider: function(){
        var elem = filters.priceSlider;
        if (!elem) {
            return false;
        }
        
        var min = parseFloat(elem.down('input[name=Min]').value);
        var max = parseFloat(elem.down('input[name=Max]').value);
        var priceStart = parseFloat(elem.down('input[name=PriceStart]').value);
        var priceEnd = parseFloat(elem.down('input[name=PriceEnd]').value);

        ECube.d.log(1, "Constructing Pricesliders for", elem,
                        "with values", 'min', min, 'max', max,
                        'priceStart', priceStart, 'priceEnd', priceEnd);
        
        filters.params.push('/PriceStart/' + priceStart);
        filters.params.push('/PriceEnd/' + priceEnd);

        var leftSliderObj = new Control.Slider(elem.select('.slider'), elem, {
            range       : $R(min, max),
            values      : $R(min, max),
            sliderValue : [priceStart, priceEnd],
            spans       : elem.select('.coverage'),
            onSlide     : filters._events.priceSliderSlide,
            onChange    : filters._events.priceSliderChange,
            restricted  : true
        });
        
    },
    
    timer: {
        start: function(){
            filters.timer.stop();
            filters.timerHandle = window.setTimeout(
                filters.startUpdate,
                filters.timeout
            );
        },
        stop: function(){
            if(filters.timerHandle){
                window.clearTimeout(filters.timerHandle);
                filters.timerHandle = false;
            }
        }
    },
    
    startUpdate: function(){
        var targURL = filters.container.down('input[name=FilterBaseURL]').value.replace(/\/$/,'');
        targURL = targURL + filters.params.join('');
        document.location.href = targURL;
    },
    
    _events: {
        clickCheckbox: function (eventObject){
            var elem = eventObject.element();
            
            var name = elem.readAttribute('name');
            var value = elem.readAttribute('value');
            var checked = elem.checked;
            
            var param = '/' + name + '/' + value;
            
            if (checked) {
                filters.params.push(param);
                filters.params = filters.params.uniq();
            }
            else {
                filters.params = filters.params.without(param);
            }
            
            filters.timer.start();
        },
        
        priceSliderSlide: function(value){
            filters.priceSlider.down('.priceStart').update(parseInt(value[0]));
            filters.priceSlider.down('.priceEnd').update(parseInt(value[1]));
        },
        
        priceSliderChange: function(value){

            var tmpParams = filters.params;
            filters.params = [];
            tmpParams.each(function(param){
                if (!param.match(/PriceStart|PriceEnd/)){
                    filters.params.push(param);
                }
            });
            filters.params.push('/PriceStart/' + parseInt(value[0]));
            filters.params.push('/PriceEnd/' + parseInt(value[1]));

            filters.timer.start();
        }
    }
};

document.observe('dom:loaded', filters.initialize);

/*******************************************************************************
 * customFormSelector
 ******************************************************************************/

var CustomFormSelector ={
  initialize:function(){
      if($$('.CustomFormSelectorArea')){
        // turn off mustmatch on hidden elements
        $$(".hideableElem").each(function(elem){
          CustomFormSelector.applyToAllChildren(elem,CustomFormSelector.enableMustmatch);
        });
        // turn on mustmatch on shown elements
        CustomFormSelector.applyToAllChildren($('defaultForm'),CustomFormSelector.enableMustmatch);
        // observe change event on select box
        $$('.CustomFormSelector').invoke('observe','change',CustomFormSelector.ShowHide);
      }
    },
  ShowHide: function(eventObject){
      var selectElem = eventObject.element();
      var elementsToShow = null;
      $$("option[value='"+selectElem.value+"']").each(function(elem){
          elementsToShow = $w(elem.readAttribute("showElements"));
      });
      //console.log(elementsToShow.length);
      $$(".hideableElem").invoke("hide");
      $$(".hideableElem").each(function(elem){
          CustomFormSelector.applyToAllChildren(elem,CustomFormSelector.disableMustmatch);
      });
      if((elementsToShow != null ) && (elementsToShow.length > 0)){
          elementsToShow.each(function(elem){
              $(elem).show();
              CustomFormSelector.applyToAllChildren($(elem),CustomFormSelector.enableMustmatch);
          });
      }
      else{
        $('defaultForm').show();
      }
  },
  applyToAllChildren: function(elem,method){
    //console.log(elem,method);
      if(elem && elem.descendants()){
          elem.descendants().each(method);
      }
  },
  
  disableMustmatch: function(elem){
    if(elem.hasAttribute("mustmatch")){
      mustmatchRegExp = elem.readAttribute("mustmatch");
      //console.log(mustmatchRegExp);
      elem.writeAttribute("mustmatch", value=false);//remove attribute
      elem.writeAttribute("mustmatch_D",mustmatchRegExp); // store in new attribute
    }
  },
  enableMustmatch: function(elem){
    if(elem.hasAttribute("mustmatch_D")){
      mustmatchRegExp = elem.readAttribute("mustmatch_D");
      elem.writeAttribute("mustmatch_D", value=false); //remove attribute
      elem.writeAttribute("mustmatch",mustmatchRegExp); // store in new attribute
    }
  }
}

document.observe('dom:loaded', CustomFormSelector.initialize);

/******************************************************************************/
/***************             vacature formulier               *****************/
/******************************************************************************/

var vacatureFormulier ={
    maxCharsInTextArea : 600,
    initialize:function(eventObject){
        if($('vacatureForm')){
            $("hidden_target").observe("load",vacatureFormulier.handleContent);
            var vacatureForm = $('vacatureForm');
            $('vacMotivation').observe("keydown", vacatureFormulier.restrainNumOfCharacters);
        }
    },
    // handle max characters for textarea
    restrainNumOfCharacters:function(eventObject){
      console.log("in restrainNumOfCharacters");
        var element = eventObject.element();
        //console.log($F(element).length , (vacatureFormulier.maxCharsInTextArea));
        if($F(element).length >= (vacatureFormulier.maxCharsInTextArea)){
            
            element.setValue($F(element).substring(0,vacatureFormulier.maxCharsInTextArea-1));
        }
    },
    // refresh page content in a iframe after and upload has been done.  
    handleContent:function(evenObject){
        if($("hidden_target").contentWindow.document.body.innerHTML){
        var result = $("hidden_target").contentWindow.document.body.innerHTML;
        //console.log(result);
        if(result.length > 0){
            $('reactieFormContent').update("");
            $('goBackOption').show();
        }
      }
    }
};
$(document).observe("dom:loaded",vacatureFormulier.initialize);

/******************************************************************************/
// js code voor het tonen van een venster popup van de flash folder
/******************************************************************************/

var folder ={
    initialize: function(){
        $$(".jsLinkToFolder").invoke("observe","click",folder.showFlashPopup);
    },
    
    showFlashPopup: function(eventObject){
        var folderLink = eventObject.element();
        eventObject.stop();
        var flashFolderName = folderLink.readAttribute("flashname");
        var flashFolderPage = folderLink.readAttribute("flashPageLocation");
         //console.log(flashFolderName,flashFolderPage);
         //var attributen="width = 800, height = 600, resizable = 1, status = 1"; //scrollbars=no, toolbar=no, location=no, directories=no, status=yes, menubar=yes
        
        window.open(flashFolderPage,flashFolderName,"resizable=yes, width=800, height=600");
    }
};

$(document).observe("dom:loaded",folder.initialize);
