// 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
 
********************************************************************************************/

/********************************************************************************************

 Refinement-menu
 
********************************************************************************************/

var RefinementMenu = new Object();
RefinementMenu.numItemsToShow = 5;
RefinementMenu.init = function(secondLevelRefinementsHaveBeenLoaded){
    // if we have chosen refinements, we want to delay doing this until
    // the second level refinements have been added to the html
    if(RefinementMenu.Refinements){
        if(! secondLevelRefinementsHaveBeenLoaded){
            return false;
        }
    };
    var divObj = $('block_Refinement');
    if(! divObj) {
        return false;
    };
    RefinementMenu.divObj = divObj;
    RefinementMenu.divObj.select('UL').each(function(refinements){
        refinements.select('.refinements_showmore').each(function(showMoreLinkObj){
            showMoreLinkObj.observe('click', function(eventObject){

                window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                refinements.childElements().each(function(elemObj){
                    if(! elemObj.visible()){
                        elemObj.show();
                    };
                });
                if($(this.parentNode).visible()){
                    $(this.parentNode).hide();
                };
            })
        });
        refinements.select('.refinements_showless').each(function(showLessLinkObj){
            showLessLinkObj.observe('click', function(eventObject){
                // console.log('detected request to shrink');
                window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                var counter = 0;
                refinements.childElements().each(function(elemObj){
                    if(elemObj.select('.refinements_showmore').length){
                        if(! elemObj.visible()){
                            elemObj.show();
                        };
                    } else {
                        if(counter >= RefinementMenu.numItemsToShow){
                            if(elemObj.visible()){
                                elemObj.hide()
                            };
                        };
                        counter++;
                    };
                });
                if($(this.parentNode).visible()){
                    $(this.parentNode).hide();
                };
            });
            
        })
    })
    
}
ECube.registerOnLoadFunction(RefinementMenu.init)
/********************************************************************************************

 Einde refinement-menu
 
********************************************************************************************/

/*******************************************************************************************

    DROPOUT
    
*******************************************************************************************/

var Dropout = {
  buttonRepos: $A(),
  timer: null,
  delayTime: 500,
  initialize: function(){
    var buttons = $$('.openDropout');
    buttons.each(function(elem){
      var dropoutInstance = new SingleDropout(elem,$(elem.readAttribute('dropoutId')))
      Dropout.buttonRepos.push(dropoutInstance);
    },this);
  },
  _triggerOn: function(eventObject){
    window.clearTimeout(Dropout.timer);
  },
  _triggerOff: function(eventObject){
    Dropout.timer = setTimeout("Dropout.buttonRepos.invoke('_deactivate');",Dropout.delayTime);
  }
};

var SingleDropout = Class.create({  
  targElem: null,
  buttonElem: null,
  initialize: function(buttonElem,targElem) {
    this.buttonElem = buttonElem;
    this.targElem = targElem;
    this.buttonElem.observe('mouseover',function(eventObject){this._activate(eventObject); eventObject.stop();}.bind(this));
    this.buttonElem.observe('mouseout',function(eventObject){Dropout._triggerOff(eventObject); eventObject.stop();}.bind(this));
    if(this.targElem){
         this.targElem.observe('mouseover',function(eventObject){Dropout._triggerOn(eventObject); eventObject.stop();});
         this.targElem.observe('mouseout',function(eventObject){Dropout._triggerOff(eventObject); eventObject.stop();});
     }
 },
  _activate: function(eventObject){
    Dropout.buttonRepos.invoke('_deactivate');
    Dropout._triggerOn();
    if(this.targElem) this.targElem.show();
    if(!this.buttonElem.hasClassName('active')) {
      this.buttonElem.toggleClassName('active');
    }
  },
  _deactivate: function(eventObject){
    if(this.targElem) this.targElem.hide();
    if(this.buttonElem.hasClassName('active')) {
      this.buttonElem.toggleClassName('active');
    }
  }
});

if(!/msie|MSIE 6/.test(navigator.userAgent)){
  document.observe('dom:loaded',Dropout.initialize);
}

/*******************************************************************************************

  Einde DROPOUT
    
*******************************************************************************************/

/*******************************************************************************************

    MCB
    
    The MCB has a couple of option that can be turned on via attributen in the MCB container
    div. The avaiable options are:
      - navigationMethod = "extended"     
      - noAutoRotate="true"
      - noDelay = "true"

    All the attributes should have no value, their presence defines a certain behaviour
    
*******************************************************************************************/

var MCB = Class.create({
   
  targElem: null,
  nextButton: null,
  previousButton: null,
  slideContainer:null,
  slideWidth:null,
  slideLinks:null,
  amountSlides:null,
  timeout:null,
  delay:4000,
  durSlideMovement: 1.0,
  initialize: function(targElem){
    this.targElem = targElem;
    if(this.targElem.readAttribute('noDelay') == 'true')this.durSlideMovement= 0.0;
    
     // buttons
    this.nextButton = targElem.down('.nextSlide');
    this.previousButton = targElem.down('.previousSlide');
  
    
    //retrieving general data of the MCB:
    this.amountSlides = targElem.select(".slide").length;
    this._generateNumbers();    
    
    // slides
     this.slideContainer = targElem.select('.slideContainer')[0];
    if(!this.slideContainer) {
      console.log('could not initiate MCB due to missing slideContainer element');
      return false;
    }
    this.slideWidth = this.targElem.readAttribute('fixedSlideWidth') ? parseInt(this.targElem.readAttribute('fixedSlideWidth')) : parseInt(this.targElem.select('.slide')[0].getDimensions().width);
    this.slides = this.slideContainer.select('.slide');
    
     // setting slidecontainerwidth
     var neededWidth = (this.slides.length * this.slideWidth);
    this.slideContainer.setStyle({
      width: neededWidth+'px'
    });
     this.slideContainer.absolutize();
     // observing all elements
    if(this.slideLinks )this.slideLinks.invoke("observe","click",this._goToSlideNumber.bind(this));
     if(this.nextButton) this.nextButton.observe('click',this._nextSlide.bind(this));
    if(this.previousButton) this.previousButton.observe('click',this._previousSlide.bind(this));
    if(!this.targElem.readAttribute('noAutoRotate') == 'true')this.targElem.observe('mouseout',this._startAutorotateDelayed.bind(this));
    this.targElem.observe('mouseover',this._stopAutorotate.bind(this));
     // don't automatically start rotating, only when attribute noAutoRotate set to 'false'
    // or when it not added as an attribute at all
   
    if(this.targElem.readAttribute('noAutoRotate') == 'true'){
      this._stopAutorotate();
    }
    else{
      this._startAutorotateDelayed();
    }
    this._markCurrentlySelectedSlideNo(1);
    
    return true;// default return value
  },
  
  _generateNumbers: function(){
      if(! this.nextButton){
        console.log('MCB has attribute navigationMethod set to "extended" but has no "nextButton". Aborting');
        return false;
      };
    // use amount slides to generate the numbers, taking away the factor of human error:
    // but only do this if the attribute 'navigationMethod' equals to 'extended'
    if(this.targElem.readAttribute('navigationMethod') == 'extended'){
      for(var i = 1; i <= this.amountSlides;i++){
        var numberLink = new Element("a",{
          href:"#",
          id:"MCB_linkTo["+i+"]",
          'class': "MCB_linkToSlide"
          });
        numberLink.update(i);
        this.nextButton.insert({before:numberLink});
      }
    }
    this.slideLinks =  this.targElem.select('.MCB_linkToSlide');
  },
  
  _startAutorotate: function(){
    this._nextSlide(); 
    this.timeout = setTimeout(this._startAutorotate.bind(this), this.delay);
  },
  _startAutorotateDelayed: function(){
    this.timeout = setTimeout(this._startAutorotate.bind(this), this.delay);
  },
  _stopAutorotate: function(){
    clearTimeout(this.timeout);
  },
  
  _nextSlide: function(eventObject){
     if(eventObject) eventObject.stop();
     var currentPosition = this.slideContainer.getStyle('left').replace(/[a-zA-Z]/g,'');
    var targPos = (((currentPosition-this.slideWidth)* -1)>=this.slideContainer.getDimensions().width) ? 0 : (currentPosition-this.slideWidth);
    var blockToScrollto = Math.round(targPos / this.slideWidth);
     targPos = ((blockToScrollto * -1) < this.slides.length ? blockToScrollto : 0) * this.slideWidth;
    new Effect.Morph(this.slideContainer,{style:"left: " + targPos + "px;", duration:this.durSlideMovement} );
    this._markCurrentlySelectedSlideNo(((targPos / this.slideWidth) * -1)+1);
  },
  
  _previousSlide: function(eventObject){
    if(eventObject) eventObject.stop();
    var currentPosition = parseInt(this.slideContainer.getStyle('left').replace(/[a-zA-Z]/g,''));
    var targPos = ((currentPosition+this.slideWidth) > 0) ? (this.slideWidth-this.slideContainer.getDimensions().width) : (currentPosition+this.slideWidth);
    targPos = Math.round(targPos / this.slideWidth)*this.slideWidth;
    new Effect.Morph(this.slideContainer,{style:"left: " + targPos + "px;", duration:this.durSlideMovement} );
    this._markCurrentlySelectedSlideNo(((targPos / this.slideWidth) * -1)+1);
  },
  
  _goToSlideNumber: function(eventObject){
    if(eventObject) eventObject.stop();
    var element = eventObject.findElement("a");
    var idValue = parseInt(element.readAttribute("id").replace(/\]$/,'').replace(/MCB\_linkTo\[/,''));
    var targPos = this.slideWidth-(this.slideWidth*idValue);
    new Effect.Morph(this.slideContainer,{style:"left: " + targPos + "px;", duration:this.durSlideMovement} );
    this._markCurrentlySelectedSlideNo(idValue);
  },
  
  //adds styling to currently selected and removed the same styling from others
  _markCurrentlySelectedSlideNo:function(slideNumber){
    this.targElem.select('.MCB_linkToSlide').each(function(elem){
        elem.removeClassName('MCB_currentlySelectedSlideNo');
        if(elem.id == 'MCB_linkTo[' + slideNumber + ']') {
          elem.addClassName('MCB_currentlySelectedSlideNo');
        }
      });
  } 
});

document.observe('dom:loaded',function(eventObject){ 
  $$('.mcbInstance').each(function(elem){new MCB(elem);});
});


/*******************************************************************************************

  Einde MCB
    
*******************************************************************************************/


/********************************************************************************************

 MAW-specifieke overrules voor EpagesShop.miniBasket
 
********************************************************************************************/
EpagesShop.miniBasket.maw = new Object();

EpagesShop.miniBasket.maw.warnTooMuch = function(elem){
    if(elem['toomuchwarningfunction']){
        elem.toomuchwarningfunction.call();
    } else if(elem.readAttribute('toomuchwarning')) {
        alert(elem.readAttribute('toomuchwarning'));
    } else {
        
    }
}

ECube.registerOnLoadFunction(function(e){
    var basketElement = $('minibasket_wrapper');
    if(basketElement){
        // see if not this, but an element under this element is the minibasket
        var downQuery = basketElement.readAttribute('miniBasketQueryDown');
        if (downQuery){
            basketElement = basketElement.down(downQuery);
        }
        EpagesShop.miniBasket.basketElement = basketElement;
    };
});
EpagesShop.miniBasket.callBacks.onSuccess = function(transport) {
    EpagesShop.miniBasket.semaphore = false;
    if(EpagesShop.miniBasket.basketElement){
        EpagesShop.ajax.removeLoaderFrom(EpagesShop.miniBasket.basketElement);
        try {
            EpagesShop.miniBasket.basketElement.update(transport.responseText);
        } catch(err) {
            alert("Error updating inner html: " + err.toString());
        }
        EpagesShop.updateBasketQuantityFields.basketFormNames.each(function(formName){
            EpagesShop.updateBasketQuantityFields.assignListeners(formName);
        });
        $$('a.addtobasket').each(function(item){
            item.observe('click', EpagesShop.miniBasket.addToBasket);
        });
        $$('form.addtobasket').each(function(item){
            item.observe('submit', EpagesShop.miniBasket.addToBasket);
        });
        $$('input.addtobasket').each(function(item){
            item.observe('change', EpagesShop.miniBasket.addToBasket);
        });
        $$('a.addtobasket').each(function(item){
            item.observe('click', EpagesShop.miniBasket.addToBasket);
        });
        $$('img.hashover').each(function(imgObject){
            ECube.setMouseOvers(imgObject);
        });
        if($('OpenMiniBasket')){
            $('OpenMiniBasket').observe('click', EpagesShop.miniBasket.openBasket);
        };
        if($('CloseMiniBasket')){
            $('CloseMiniBasket').observe('click', EpagesShop.miniBasket.closeBasket);
        };
        EpagesShop.updateBasketQuantityFields.basketFormNames.each(function(formName){
            EpagesShop.updateBasketQuantityFields.assignListeners(formName);
        });

        var toomuchelem = $(EpagesShop.miniBasket.basketElement).select('input.warntoomuchonload')[0]
        if(toomuchelem){
            EpagesShop.miniBasket.maw.warnTooMuch(toomuchelem);
            // we need to force a basket/update call to make sure the change in the
            // number of a given product that has been added to the basket is actually
            // enforced. It is, however, a call of which we don't really care about
            // the results
            var formObj = $(EpagesShop.miniBasket.basketElement).select('form')[0];
            if(formObj){
                new Ajax.Request(formObj['action'], {'parameters' : formObj.serialize(true)})
            } else {
                console.log('Theres a product in the basket that needs to be updated but we cant find a form in the minibasket, which is ', EpagesShop.minibasket.basketElement);
            }
            // meanwhile, let's be nice and alert
            
        };

    } else {
        console.log('geen mini basket');
    };
    return true;
};
// open, close
EpagesShop.miniBasket.openBasket = function(eventObject){
    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
    if($('MiniBasket')){
        Effect.BlindDown($('MiniBasket'), {duration: 1, afterFinish: function(e){
            if($('OpenMiniBasket_Wrapper')){
                $('OpenMiniBasket_Wrapper').className = $('OpenMiniBasket_Wrapper').className + ' open';
            };
        }})
    };    
};
EpagesShop.miniBasket.closeBasket = function(eventObject){
    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
    if($('MiniBasket')){
        Effect.BlindUp($('MiniBasket'), {duration: 1, afterFinish: function(e) {
            if($('OpenMiniBasket_Wrapper')){
                $('OpenMiniBasket_Wrapper').className =$('OpenMiniBasket_Wrapper').className.replace(/\s+open$/, '');
            };
        }});
    };
};

ECube.registerOnLoadFunction(function(e){
    if($('OpenMiniBasket')){
        $('OpenMiniBasket').observe('click', EpagesShop.miniBasket.openBasket);
    };
    if($('CloseMiniBasket')){
        $('CloseMiniBasket').observe('click', EpagesShop.miniBasket.closeBasket);
    };
})

// make sure the mini basket has updating quantity fields as well
EpagesShop.updateBasketQuantityFields.basketFormNames[EpagesShop.updateBasketQuantityFields.basketFormNames.length] = 'basketmini';

// make sure the update links in the mini basket call EpagesShop.updateBasketQuantityFields.submitForm(formObj, eventObject) instead of form submit
ECube.registerOnLoadFunction(function(e){
    $$('a.submitform').each(function(elem){
        elem.formsubmitfunction = EpagesShop.updateBasketQuantityFields.submitForm;
        // elem.formsubmitfunction = EpagesShop.updateBasketQuantityFields.submitFormIfOK;
    });
});


// showonclick has an Effect.BlindDown, unless it's a tabheader, in which case it doesn't
ECube.registerOnLoadFunction(function(e){
    $$('a.showonclick').each(function(linkObj){
        if(linkObj.hasClassName('defaultShow')){
            linkObj.hideonclick_function = function(clickedLinkObj, divToShow){
                // clickedLinkObj.className = clickedLinkObj.className.replace(/active/, '');
                divToShow.show();
            };
             } else if(linkObj.className.match(/tabheader/)){
                     linkObj.showonclick_function = function(clickedLinkObj, divToShow){
                             // yup - this means no more than one set of tabs per page. for now
                Effect.BlindDown(divToShow, {duration: 0.5});
                
                $$('a.showonclick').invoke('removeClassName','active');
                clickedLinkObj.addClassName('active');
                     };
             } else {
                     linkObj.showonclick_function = function(clickedLinkObj, divToShow){
                              Effect.BlindDown(divToShow, {duration: 0.5, afterFinish: function(e){
                                             clickedLinkObj.parentNode.className = clickedLinkObj.parentNode.className + ' open';
                              }});
                     };
             }
     });
});
// closeonclick has an Effect.BlindUp, unless it's a tabheader, in which case it doesn't
ECube.registerOnLoadFunction(function(e){
    $$('a.closeonclick').each(function(linkObj){
        if(linkObj.hasClassName('defaultHide')){
            linkObj.hideonclick_function = function(clickedLinkObj, divToShow){
                // clickedLinkObj.className = clickedLinkObj.className.replace(/active/, '');
                divToShow.hide();
            };
             } else if(linkObj.className.match(/tabheader/)){
            linkObj.hideonclick_function = function(clickedLinkObj, divToShow){
                console.log(clickedLinkObj);

                // clickedLinkObj.className = clickedLinkObj.className.replace(/active/, '');
                Effect.BlindUp(divToShow, {duration: 0.5});
            };
        } else {
            linkObj.hideonclick_function = function(clickedLinkObj, divToHide){
                 Effect.BlindUp(divToHide, {duration: 0.5, afterFinish: function(e){
                     // HACK! but it's the only way
                     $A(clickedLinkObj.parentNode.parentNode.childNodes).each(function(item){
                         if(item.className){
                             item.className = item.className.replace(/\s+open$/, '');                    
                         };
                     })
                 }});
            };
        };

    });
});



/********************************************************************************************

 Einde MAW-specifieke overrules voor EpagesShop.miniBasket
 
********************************************************************************************/

ECube.registerOnLoadFunction(function(e){
 if($('registerNewsLetter')){
     $('registerNewsLetter').observe('submit',function(eventObject){
      eventObject.stop();
      var thankyoumessage = 'Thank you!';
      if(this['thankyoumessage']){
          thankyoumessage = this['thankyoumessage'].value;
      };
      new Ajax.Request((("https:" == document.location.protocol) ? "https://" : "http://")+document.domain+'/shop/UserTemplate/register_newsletter', {
             method: 'get',
             parameters: {
                 'MAIL': $F('MAIL')
             }, 
             onComplete: function(){
          $('registerNewsLetter').update(thankyoumessage);
          if(window['pageTracker']){
            pageTracker._trackPageview('/newsletter/subscribe');
            // console.log('tracked: /newsletter/subscribe');
          }
             }
         });
     });
 }
});

/**********************************************************************************

    Guided Search

**********************************************************************************/
var GuidedSearchItems = {};
document.observe("dom:loaded", function(e){
    var zoekform = $(document.forms['zoekform']);
    $$('form.searchform').each(function(zoekform) {
        zoekform.observe('submit', function(eventObject) {
          if(!zoekform.select('.field')[0].getValue()) {
            eventObject.stop();
            alert('U heeft geen zoekterm opgegeven');
            return;
          }
          if(this.hasClassName('submitted')){
            alert('Een ogenblik geduld ... uw vorige zoekopdracht wordt nog verwerkt');
            eventObject.stop();
          } else {
            var searchField = this.SearchProductName;
            if(! searchField) {
                searchField = this.SearchQuery;
            };
            var searchTerm = searchField.value.toLowerCase().replace(/[^a-z0-9]/g, '');
            if(GuidedSearchItems[searchTerm]) {
                window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                location.href = GuidedSearchItems[searchTerm] + (GuidedSearchItems[searchTerm].match(/\?/g) ? '&' : '?') + 'source=guidedSearch';
            };
            this.addClassName('submitted');
          }
        })
    })

})


/**********************************************************************************

    Externe  link tracking met google analytics

**********************************************************************************/

document.observe('dom:loaded', function(eventObject){
  if(window['pageTracker']){
    var verification_sameDomain = new RegExp(document.domain);
    $$('a').each(function(elem){
      var url = elem.readAttribute('href');
      if(url && !url.match(verification_sameDomain) && url.match(/http/i)){
        if(url.match(/ogone/i)) elem.observe('click',function(eventObject){pageTracker._getLinkerUrl(this.readAttribute('href'));});
        elem.observe('click',function(eventObject){pageTracker._trackPageview('/external/' + this.readAttribute('href'));});
      }
    });
    $$('a.trackEvent').invoke('observe','click',function(eventObject) {
      if(this.readAttribute('evt_cat')&&this.readAttribute('evt_action')){
        pageTracker._trackEvent(
          this.readAttribute('evt_cat'),
          this.readAttribute('evt_action'),
          this.readAttribute('evt_label')/*,
          this.readAttribute('evt_value')*/); // gedisabled ivm typecasting als integer
        // console.log('tracked event: ', 
        //   this.readAttribute('evt_cat'),
        //   this.readAttribute('evt_action'),
        //   this.readAttribute('evt_label')/*,
          // this.readAttribute('evt_value')*/); // gedisabled ivm typecasting als integer
      };
    });
  }
});

/**********************************************************************************

    cached-basket

**********************************************************************************/

// this object can go. it's in ECube.js now, where it belongs
var CookieManager = ECube.cookies;

document.observe('dom:loaded',function(eventObject){
  if(!$('cachedPage')) return;
  // console.log(' HTML says: ',$('cachedPage').readAttribute('value'),' COOKIE says: ',CookieManager.read('cachedPage'));
  if(CookieManager.read('cachedPage')==null){
    CookieManager.create('cachedPage',1);
    $('cachedPage').writeAttribute('value',1);
  } else {
    // kennelijk is de pagina gecached
    
    if(!$('cachedPage').readAttribute('value') || (parseInt($('cachedPage').readAttribute('value'),10)<parseInt(CookieManager.read('cachedPage'),10))){
      // we willen de basket opnieuw ophalen
      console.log('detected old basket, refreshing');
      EpagesShop.miniBasket.reload();
    } else CookieManager.create('cachedPage',(parseInt($('cachedPage').readAttribute('value'),10)+1));
  }
});

/**********************************************************************************

      zoek geintjes

**********************************************************************************/

document.observe('dom:loaded',function(eventObject){
  var searchFields = $$('.searchform .field');
  searchFields.each(function(elem){
    // gebeurt automatisch (valuedefault)
    // elem.setAttribute('value','zoeken');
    elem.addClassName('defaultInput');
  });
  searchFields.invoke('observe','focus',function(eventObject){
    if(this.hasClassName('defaultInput')){
    // gebeurt automatisch (valuedefault)
    //  this.setAttribute('value','');
      this.removeClassName('defaultInput');
    }
  })
});

/********************************************************************************************

    Store locator
 
********************************************************************************************/

ECube.registerOnLoadFunction(function(e){
    $$('.visibleLink').each(function(elem){
        $(elem).up().observe('mouseover', function(eventObject){
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            var divObj = $(this).childElements().find(function(cElem) { if(cElem.tagName == 'DIV'){ return true }; return false });
            if(divObj) { 
                // divObj.show() doesnt work because display: none is defined in the css somehere.
                divObj.style.display = 'block';
            };
        });
        $(elem).up().observe('mouseout', function(eventObject){
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            var divObj = $(this).childElements().find(function(cElem) { if(cElem.tagName == 'DIV'){ return true }; return false });
            if(divObj) { 
                // divObj.hide() doesnt work because display: none is defined in the css somehere.
                divObj.style.display = 'none';
            };
        });
    })
});
/********************************************************************************************

    Store locator ends
 
********************************************************************************************/



/********************************************************************************************

    Denham front / back

********************************************************************************************/

ECube.registerOnLoadFunction(function(e){
    var switchListener = function(eventObject){
        var value = this.value;
        if(value.match(/front/i)){
            $$('.productimageinlist').each(function(img){
                var frontsrc = img.readAttribute('frontsrc');
                if(frontsrc){
                    img['src'] = frontsrc;
                };
            });
        } else {
            $$('.productimageinlist').each(function(img){
                if(! img.readAttribute('frontsrc')){
                    var frontsrc = img['src'];
                    img.writeAttribute('frontsrc', frontsrc);
                };
                img['src'] = img.readAttribute('backsrc');
            })
        }
        var switches = $$('.switchlistimagesfrontback');
        switches.each(function(switchSelect){
            $A(switchSelect.options).each(function(switchOption){
                if(switchOption.value.match(value)){
                    switchOption.selected = 'selected'
                }
                else {
                    switchOption.selected = false;
                }
            })
        });
    };
    $$('.switchlistimagesfrontback').each(function(fbSwitch){
        fbSwitch.observe('change', switchListener);
        fbSwitch.observe('click', switchListener);
    });
});
/********************************************************************************************

    Denham front / back ends

********************************************************************************************/ 



/**********************************************************************************

    popup

  Gebruik: in click element openPopup als class meegeven en attribuut targElem toevoegen.
  Geef bij targElem de hidden div aan die als popup moet dienen.

**********************************************************************************/


var popup_overlay = new Object();

popup_overlay.showPopup = function(e) {
  elem = e.target;
  $$('#popup_contentHolder , #popup_achtergrond, #popup_content').invoke('removeClassName','popup_toggle');
  console.log(this,this.readAttribute('targElem'));
  if(this.readAttribute('targElem')){
    $('popup_contentHolder').innerHTML = $(this.readAttribute('targElem')).innerHTML;
  };
};

popup_overlay.hidePopup = function(eventObject) {
  console.log("test hidepopup");
  if(eventObject) { if(!eventObject.element().hasClassName('closePopup')) return false; }
  if($('popup_achtergrond')){ $('popup_achtergrond').addClassName('popup_toggle')};
  if($('popup_content')) { $('popup_content').addClassName('popup_toggle')};
  if($('popup_contentHolder')) { $('popup_contentHolder').innerHTML = ''; };
};

popup_overlay.initialize = function() {
  $$('.openPopup').each(function(elem){ elem.observe('click',popup_overlay.showPopup); });
  $$('.closePopup').each(function(elem){ elem.observe('click',function(eventObject){popup_overlay.hidePopup(eventObject)}); });
  $$('.popup_targElem').each(function(elem){ elem.observe('click',function(eventObject){popup_overlay.hidePopup(eventObject)}); });
  popup_overlay.hidePopup(); // dit mag aanvankelijk niet gehide zijn, want dan vertikt je browser de swf te downloaden
}

document.observe('dom:loaded', function(event){
  popup_overlay.initialize();
});


/**********************************************************************************

    popup ends

**********************************************************************************/



/**********************************************************************************

    modelessPopup

  Gebruik: in click element openPopup als class meegeven en attribuut targElem toevoegen.
  Geef bij targElem de hidden div aan die als popup moet dienen.

**********************************************************************************/


var modelessPopup = new Object();

modelessPopup.showPopup = function(eventObject) {
  if(eventObject.element().readAttribute('targElem')){
    var targElem = eventObject.element().readAttribute('targElem');
    $(targElem).show();
    $(eventObject.element()).up('.modelessPopupParent').addClassName('selectedItem');
    }
};

modelessPopup.hidePopup = function(eventObject) {
  console.log(eventObject, "hidepopup");
  $(eventObject.element()).up('.modelessPopup').hide();
  if(eventObject) { if(!eventObject.element().hasClassName('closeModelessPopup')) return false; }
  eventObject.element().up('.modelessPopupParent').removeClassName('selectedItem');
  return true;
};

modelessPopup.tagItemPositions = function(){
  var position = 0;
  $$('.modelessPopupParent').each(function(item){
    (position == 4)? position = 1 : position = position + 1;
    $(item).addClassName("pos"+ position);
  });
};


modelessPopup.initialize = function() {
  $$('.openModelessPopup').each(function(elem){ elem.observe('click',modelessPopup.showPopup); });
  $$('.closeModelessPopup').each(function(elem){ elem.observe('click',function(eventObject){modelessPopup.hidePopup(eventObject)}); });
  modelessPopup.tagItemPositions();
  $$('.modelessPopup').invoke('hide');
  //modelessPopup.hidePopup(); // dit mag aanvankelijk niet gehide zijn, want dan vertikt je browser de swf te downloaden
}

document.observe('dom:loaded', function(event){
  modelessPopup.initialize();
});


/**********************************************************************************

    popup ends

**********************************************************************************/
/**********************************************************************************

    dropDownSelector

**********************************************************************************/

var dropDownSelector = {
    initialize: function() {
        console.log('dropdownselector: initializing');
        $$('.dropDownSelector .selectorButton').invoke('observe', 'click', dropDownSelector._showOptions);
        $$('.dropDownSelector .selectorOption').invoke('observe', 'click', dropDownSelector._triggerOption);      
    },
    rebuild: function(inputName, options){
        console.log('dropdownselector: rebuilding ', inputName, ' with options ', options);
        // ik ga er vanuit dat de pulldown bestaat
        var targetInput = $$('input[name=' + inputName + ']')[0];
        var dropDown = $$('.dropDownSelector[inputName=' + inputName + ']')[0];
        
        if(!(targetInput && dropDown && options)){
            console.log('dropdownselector: One of these are wrong', targetInput, dropDown, options);
            return;
        }
        
        targetInput.value = options[0].value;
        dropDown.down('.selectorOptionArea').update();
        options.each(function(option){
                dropDown.down('.selectorOptionArea').appendChild(
                    new Element('a', {
                        className   : 'selectorOption',
                        inputValue  : option.optionValue
                    }).update(option.optionCaption)
                );
            });

        dropDown.select('.selectorOption').invoke('observe', 'click', dropDownSelector._triggerOption);        
    },
    _showOptions: function(eventObject){
        console.log('dropdownselector: detected request for showing');
        var dropDown = eventObject.element().up('.dropDownSelector');
        dropDown.toggleClassName('clicked');
    },
    _triggerOption: function(eventObject){
        console.log('dropdownselector: detected click on option');
        var dropDown = eventObject.element().up('.dropDownSelector');
        var form = dropDown.up('form');
        
        // als er geen klasse usedropDownSelectorJS is voor de optie doe niets
        if(dropDown.hasClassName('usedropDownSelectorJS')){
            // voeg geselecteerde waarde in hidden inputs
            hiddenInput = dropDown.readAttribute('inputName');
            form[hiddenInput].setValue(eventObject.element().readAttribute('inputValue'));
        
            dropDown.down('.selectorButton').innerHTML = eventObject.element().innerHTML;
            // sluit dropdown
            dropDown.removeClassName('clicked');
        }
    }
};

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

//dropDownSelector.rebuild('color',[{optionValue:'optie',optionCaption: 'goede optie'}]);//

/**********************************************************************************

    end dropDownSelector

**********************************************************************************/

/*******************************************************************************************

  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){
                    console.log('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
    
*******************************************************************************************/

// page tracker
ECube.registerOnLoadFunction(function(e){
  if(window['pageTracker']){
    $$('.frontpageBanner img').invoke('observe','click',function(e){
      console.log('tracked: ','flexblokken','click',this.readAttribute('title'));
      pageTracker._trackEvent('flexblokken','click',this.readAttribute('title'));
    });
  }
});
