// 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(['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
 
********************************************************************************************/


// This is the generic "show wait function" It is used in the order process
var showAjaxWait = function(container) {
    var html = '<div class="pleasewait"><img src="/isroot/expert/Images/ajax-loader.gif" /></div>';
    container.innerHTML = html;
};

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

    Namespace voor expert-specifieke functies. Gebruik deze zoveel mogelijk

**********************************************************************************/
var Expert = new Object();
// gets called before a specific faq answer is opened
Expert.hideFaqAnswers = function(){
    $$('div.faqAnswer').each(function(item){
        item.hide();
    });
}
// make sure Expert.hideFaqAnswers is attached to every faq answer
document.observe("dom:loaded", function(e){
    $$('div.faqAnswer').each(function(item){
        item.writeAttribute('onbeforeshow', "Expert.hideFaqAnswers();");
    });
});

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

    Teaser texts

**********************************************************************************/
Expert.begrippen = new Object();
Expert.begrippen.items = $A();
Expert.begrippen.init = function(e){
    $$('a.begrippen_toggle').each(function(toggle){
        var contentID = toggle.id.replace(/^showfulltext_/, 'fulltext_');
        var contentItem = $(contentID);
        if(contentItem){
            toggle.contentItem = contentItem;
        };
        Expert.begrippen.items[Expert.begrippen.items.length] = toggle;
        toggle.observe('click', function(eventObject){
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            Expert.begrippen.items.each(function(item){
                item.contentItem.hide();
            });
            this.contentItem.show();
        })
    })
}

ECube.registerOnLoadFunction(Expert.begrippen.init);

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

    Teaser texts ends

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



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

    Contact form

**********************************************************************************/
ECube.customFormValidators['contactform'] = function(eventObject){
    // make sure either one of voorWebwinkel has been marked
    // and if voorWebwinkel has value 0, make sure FiliaalID is set as well
    var formAsHash = $(this).serialize(getHash = true);
    if((! formAsHash.voorWebwinkel) || ! (formAsHash.voorWebwinkel.match(/^0|1$/))){
        alert("Geef aan of de vraag voor de webwinkel of voor een filiaal bestemd is");
        window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
        this['voorWebwinkel'][0].focus();
        return false;
    };
    if(formAsHash.voorWebwinkel == 0){
        if(! formAsHash.FiliaalID){
            alert("Selecteer het gewenste filiaal uit de lijst");
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            this['FiliaalID'].focus();
            return false;
        }
    } else {
        for(var i = this['FiliaalID'].options.length - 1 ; i >= 0 ; i--){
            if(! this['FiliaalID'].options[i].value){
                this['FiliaalID'].options[i].selected = 'selected';
            } else {
                this['FiliaalID'].options[i].selected = false;
            }
        }
    }
    var validator = new ECube.formValidator(this);
    if(validator.hasErrors()) {
        window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
        validator.markErrors();
        return false;
    };
    validator = null;
    return true;
};

// make sure voorWinkel is selected if a shop is selected
document.observe("dom:loaded", function(e){
    var selectObj = $('filiaalselect');
    var berichtisvoorwebwinkel = $('berichtisvoorwebwinkel');
    var berichtisvoorfiliaal = $('berichtisvoorfiliaal');
    if(selectObj && berichtisvoorwebwinkel && berichtisvoorfiliaal){
        selectObj.observe('change', function(eventObject){
            var filiaalID = this.value;
            if(filiaalID){
                berichtisvoorwebwinkel.checked = null;
                berichtisvoorfiliaal.checked = 'checked';
            } else {
                berichtisvoorfiliaal.checked = null;
                berichtisvoorwebwinkel.checked = 'checked';
            };
        })
        berichtisvoorwebwinkel.observe("click", function(eventObject){
            if(this.checked){
                for(var i = selectObj.options.length - 1 ; i >= 0 ; i--){
                    if(selectObj.options[i].value){
                        selectObj.options[i].selected = false;
                    } else {
                        selectObj.options[i].selected = true;
                    }
                }
            }
        })
    }
});
/**********************************************************************************

    Contact form ends

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

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

    Sellvation form

**********************************************************************************/
ECube.customFormValidators['sellvationform'] = function(eventObject){
    var isSexSet = false;
    var sexErrorMessage = false;
    var sexErrorDisplay = false;
    for(var i = this.elements.length - 1; i >= 0; i--){
        var elem = $(this.elements[i]);
        var name = elem.name;
        if(name == 'voorvoegsel'){
            if (elem.checked) {
                isSexSet = elem.value;
            } else {
                sexErrorMessage = elem.readAttribute('errormessage');
                sexErrorDisplay = $(elem.readAttribute('errordisplay'));
            };
        };
    };
    if(sexErrorDisplay){
        sexErrorDisplay.hide();
    };
    if(! isSexSet){
        if(sexErrorMessage){
            if(sexErrorDisplay){
                sexErrorDisplay.innerHTML = sexErrorMessage;
                sexErrorDisplay.show();
            };
        };
        window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
        return false;
    };
    var validator = new ECube.formValidator(this);
    if(validator.hasErrors()) {
        window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
        validator.markErrors();
        return false;
    };
    validator = null;
    return true;
}

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

    Sellvation form ends

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


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

    Guided Search

**********************************************************************************/
var GuidedSearchItems = false;
new Ajax.Request('/GuidedSearch.json', {
    'method' : 'get',
    'onSuccess' : function(transport){
        try {
            GuidedSearchItems = transport.responseText.evalJSON(sanitize = true);
        } catch(err) {
            console.log("Error evaluating GuidedSearch json. The error was ", err);
            GuidedSearchItems = false;
        };
    }
})
document.observe("dom:loaded", function(e){
    $$('form.searchform').each(function(formObj) {
        formObj.observe('submit', function(eventObject) {
            var searchTerm = '';
            for(var i = formObj.elements.length - 1; i >= 0 ; i--){
                var elem = formObj.elements[i];
                if(elem.type){
                    if(elem.type == 'text'){
                        searchTerm = elem.value;
                    };
                };
            };
            searchTerm = searchTerm.replace(/^\s*/, '');
            searchTerm = searchTerm.replace(/\s*$/, '');
            searchTerm = searchTerm.toLowerCase();
            var url = GuidedSearchItems[searchTerm];
            if(url){
                window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                location.href = url;
            };
            return true;
        })
    })

})
/**********************************************************************************
    
    Left menu (catalog page)
    
**********************************************************************************/
document.observe("dom:loaded", function(e) {
    // first hide all submenus
    $$('.sublevel').each(function(item){
        item.hide();
    });
    if(! $('leftmenu')) {
        return true;
    };
    $('leftmenu').childElements().each(function(listElement){
        listElement.childElements().find(function(listSubItem){
                if(listSubItem.tagName == 'A') {
                    return true;
                };
                return false;
            }).observe("click", function(eventObject) {
                $$('.sublevel').each(function(item){
                    item.hide();
                });
                var elemToShow = $(this.id.replace(/^leftmenu_level1_/, 'leftmenu_level2_'));
                if(elemToShow) {
                    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                    elemToShow.show();
                }
            })
        })
});

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

    Minibasket. Only does opening and closing

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

var MiniBasket = new Object();
MiniBasket.a = new Hash();
MiniBasket.m = new Object();

MiniBasket.initialize = function() {
    var but_open    = $('minibasket_button_open');
    var but_close   = $('minibasket_button_close');
    if(!(but_open && but_close)) {
        return true;
    };

    // set up the basic functions for opening and closing the minibasket
    MiniBasket.m.open = function() {
        MiniBasket.a.get('buttonOpen').hide();
        MiniBasket.a.get('buttonClose').show();
        MiniBasket.a.get('content').show();
        
    };
    MiniBasket.m.close = function() {
        MiniBasket.a.get('buttonOpen').show();
        MiniBasket.a.get('buttonClose').hide();
        MiniBasket.a.get('content').hide();
        
    };
        

    MiniBasket.a.set('buttonOpen', but_open);
    MiniBasket.a.set('buttonClose', but_close);
    MiniBasket.a.set('content', $('minibasket_content'));
    
    MiniBasket.a.get('buttonClose').observe('click', function(eventObject) {
        window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
        MiniBasket.m.close()
    });
    MiniBasket.a.get('buttonOpen').observe('click', function(eventObject){
        window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
        MiniBasket.m.open()
    });
    if(MiniBasketMustOpen) {
        MiniBasket.m.open();
    } else {
        MiniBasket.m.close();
    }
}

document.observe("dom:loaded", function(e){
    MiniBasket.initialize();
});

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

    Minibasket ends

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

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

    Dropout

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

var Dropout = new Object();
Dropout.a = new Hash();
Dropout.m = new Object();

Dropout.a.set('currentlyOpened',false);
Dropout.a.set('timeoutHandle',false);
Dropout.a.set('currentObject',false);
Dropout.a.set('timeoutLength',300);

Dropout.m.show = function(){ Dropout.a.get('currentObject').show(); }
Dropout.m.hide = function(){ Dropout.a.get('currentObject').hide(); }
Dropout.m.setTimeout = function(){ Dropout.a.set('timeoutHandle', setTimeout("Dropout.m.hide()",Dropout.a.get('timeoutLength'))); }
Dropout.m.clearTimeout = function(){ clearTimeout(Dropout.a.get('timeoutHandle')); Dropout.a.set('timeoutHandle',false); }
Dropout.m.handleChange = function(targElem){
  Dropout.m.clearTimeout();
  if(Dropout.a.get('currentObject')){
    Dropout.m.hide();
  }
  Dropout.a.set('currentObject',targElem);
  Dropout.m.show();
}

document.observe("dom:loaded", function(event){
  var menuItemAnchors = $$('#main_navigation div.menuItem a');
  for(var iButt = 0; iButt < menuItemAnchors.length; iButt++){
    menuItemAnchors[iButt].observe("mouseover", function(event){ processButton(true,this);})
    menuItemAnchors[iButt].observe("mouseout", function(event){ processButton(false,this);})
  }
  var menuItemDropouts = $$('#main_navigation div.menuItem div');
  for(var iButt = 0; iButt < menuItemDropouts.length; iButt++){
    menuItemDropouts[iButt].observe('mouseover', function(event){
      Dropout.m.clearTimeout();
      var appropriateButton = Dropout.a.get('currentObject').ancestors()[0].childElements()[0].childElements()[0];
      appropriateButton.src = appropriateButton.getAttribute('src_active');
    });
    menuItemDropouts[iButt].observe('mouseout', function(event){
      Dropout.m.setTimeout();
      var appropriateButton = Dropout.a.get('currentObject').ancestors()[0].childElements()[0].childElements()[0];
      appropriateButton.src = appropriateButton.getAttribute('src_idle');
    });
  }
  var menuItemDropoutHeaders = $$('.classSwitcher');
  for(var iButt = 0; iButt < menuItemDropoutHeaders.length; iButt++){
    //menuItemDropoutHeaders[iButt].className = menuItemDropoutHeaders[iButt].getAttribute('classIdle');
    menuItemDropoutHeaders[iButt].observe('mouseover', function(event){this.className = this.getAttribute('classActive');});
    menuItemDropoutHeaders[iButt].observe('mouseout', function(event){this.className = this.getAttribute('classIdle');});
  }
});

function processButton(state,elem){
  var imgObject = elem.childElements().find(function(cElem){return (cElem.tagName == 'IMG')});
  if(!imgObject.getAttribute('src_active')||!imgObject.getAttribute('src_active')) return false;
  imgObject.src = state ? imgObject.getAttribute('src_active') : imgObject.getAttribute('src_idle');

  var dropoutBox = elem.ancestors()[0].childElements().find(function(cElem){return (cElem.tagName == 'DIV')});
  if(dropoutBox) {
    if(state) Dropout.m.handleChange(dropoutBox);
    else {Dropout.m.setTimeout();};
  }
}

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

    Dropout ends

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

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

    Tab sheets

**********************************************************************************/
var TabSheets = new Object();
// list page tabs
// the "m" stands for "methods"
TabSheets.m = new Object();
// the "a" stands for "attributes"
TabSheets.a = new Hash();

TabSheets.initialize = function() {
    if(! $$('a.opentab').length) {
        return true;
    };
    TabSheets.a.set('groups', new Hash());
    TabSheets.m.getGroupNameForHeader = function(tabHeader) {
        if(! tabHeader.id) {
            return null;
        };
        if(! tabHeader.id.match(/^opentab_/)) {
            return null;
        };
        var tabgroup = tabHeader.id.replace(/^opentab_([^\.]+).*$/, '$1');
        return tabgroup;
    };
    TabSheets.m.getSheetNameForHeader = function(tabHeader) {
        if(! tabHeader.id) {
            return null;
        };
        if(! tabHeader.id.match(/^opentab_/)) {
            return null;
        };
        var sheetname = tabHeader.id.replace(/^opentab_/, '');
        return sheetname;
    };
    // build a hash groups->groupname->{sheetid -> sheetobject}
    TabSheets.m.setupForTabHeader = function(tabHeader) {
        if(! tabHeader.id) {
            return true;
        };
        if(! tabHeader.id.match(/^opentab_/)) {
            return true;
        };
        var tabgroup = TabSheets.m.getGroupNameForHeader(tabHeader);
        var sheetname = TabSheets.m.getSheetNameForHeader(tabHeader);
        if(! tabgroup) {
            return true;
        };
        if(! sheetname) {
            return true;
        };
        if(! TabSheets.a.get('groups').get(tabgroup)) {
            TabSheets.a.get('groups').set(tabgroup, new Hash());
        };
        var sheetObject = $(sheetname);
        if(sheetObject) {
            TabSheets.a.get('groups').get(tabgroup).set(sheetname, new Hash());
            TabSheets.a.get('groups').get(tabgroup).get(sheetname).set('sheet', sheetObject);
            TabSheets.a.get('groups').get(tabgroup).get(sheetname).set('tab', tabHeader);
            
        };
    }
    TabSheets.m.deactivateHeadersForGroup = function(groupName) {
        if(! TabSheets.a.get('groups').get(groupName)) {
            return false;
        };
        TabSheets.a.get('groups').get(groupName).values().each(function(elem) {
            elem.get('tab').removeClassName('active');
            elem.get('tab').addClassName('inactive');
        });
    };
    TabSheets.m.activateHeaderForSheet = function(groupName, sheetName){
        if(! TabSheets.a.get('groups').get(groupName)) {
            return false;
        };
        if(! TabSheets.a.get('groups').get(groupName).get(sheetName)) {
            return false;
        };
        var tabHeader = TabSheets.a.get('groups').get(groupName).get(sheetName).get('tab');
        tabHeader.removeClassName('inactive');
        tabHeader.addClassName('active');
        
    };
    TabSheets.m.closeSheetsForGroup = function(groupName) {
        if(! TabSheets.a.get('groups').get(groupName)) {
            return false;
        };
        TabSheets.a.get('groups').get(groupName).values().each(function(elem) {
            elem.get('sheet').hide();
        });
    };
    TabSheets.m.openSheet = function(groupName, sheetName) {
        if(! TabSheets.a.get('groups').get(groupName)) {
            return false;
        };
        if(! TabSheets.a.get('groups').get(groupName).get(sheetName)) {
            return false;
        };
        TabSheets.a.get('groups').get(groupName).get(sheetName).get('sheet').show();
    };
    TabSheets.m.activateSheetForHeader = function(tabHeader) {
        var tabgroup = TabSheets.m.getGroupNameForHeader(tabHeader);
        if(! tabgroup){ 
            return true;
        };
        var sheetname = TabSheets.m.getSheetNameForHeader(tabHeader);
        if(! sheetname) {
            return true;
        };
        TabSheets.m.closeSheetsForGroup(tabgroup);
        TabSheets.m.deactivateHeadersForGroup(tabgroup);
        TabSheets.m.openSheet(tabgroup, sheetname);
        TabSheets.m.activateHeaderForSheet(tabgroup, sheetname);
    };
    
    
    $$('a.opentab').each(function(elem) {
        TabSheets.m.setupForTabHeader(elem);
        elem.observe('click', function(eventObject){
            window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
            TabSheets.m.activateSheetForHeader(this);
        })
    })
}

ECube.registerOnLoadFunction(TabSheets.initialize);

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

    Tab sheets end

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




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

    Erez zoom

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

var EREZZoom = new Object();
// EREZZoom.a = new Hash();
EREZZoom.m = new Object();
EREZZoom.m.getFSIObj = function(productNo) {
    
    // create the viewer url
    var fsipath = 'http://www.imagingserver.eu/IS1/isv4/fsi.swf?FPXBase=';
    fsipath = fsipath + 'http://www.imagingserver.eu/IS1%2Ferez%3Fsrc%3D&FPXSrc=expert/';
    fsipath = fsipath + productNo +  '%252DZ.jpg';
    // for the skin:
    fsipath = fsipath + '&Effects=%26quality%3d95%26sharpen%3d15&skin=v1retailnl';
    fsipath = fsipath + '&MouseModes_Mode51=0&MouseModes_Sequence=0,1&UISwitchable=0&language=nederlands'
    
    console.log('loading V1Retail player from: ', fsipath);
    var fsiwidth = '400';
    var fsiheight = '400'

    return new SWFObject(fsipath, 'fsiviewer', fsiwidth, fsiheight, 7, "#ffffff");
};
/*
EREZZoom.m.makeViewer = function(divObj) {
    var esrc = divObj.readAttribute('ESRC');
    esrc = esrc.replace(/^\s*(.*?)\s*$/, '$1');
    // console.log('esrc is ', esrc);
    if(esrc) {
        var listener = function(eventObject){
            if(! $(this).readAttribute('IsZoomViewer')) {
                var fsiObj = EREZZoom.m.getFSIObj(esrc);
                console.log(fsiObj);
                fsiObj.write(this.id);
                $(this.writeAttribute('IsZoomViewer', 1));
            };
        }
        divObj.observe('click', listener);
    };
};
// TODO : call this after we've loaded a new "product page"
EREZZoom.m.initialize = function() {
    $$('div.hasesrc').each(function(divObj) {
        if(divObj.readAttribute('ESRC')) {
            if(! divObj.readAttribute('ListenerAssigned')) {
                EREZZoom.m.makeViewer(divObj);
                divObj.writeAttribute('ListenerAssigned', 1);
            };
        };
    })
}
document.observe("dom:loaded", EREZZoom.m.initialize);
*/

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

    Erez zoom ends

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


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

    Reserveren (filiaal selecteren)
    
**********************************************************************************/
var Reserveren = new Object();
Reserveren.a = new Hash();
Reserveren.m = new Object();
Reserveren.m.submitRadioOnClick = function(eventObject) {
    var formObj = document.forms['kiesfiliaal'];
    if(formObj) {
        formObj.submit();
    };
};
Reserveren.m.initialize = function() {
    $$('.autosubmit_onclick_filiaal').each(function(inputObj) {
        inputObj.observe("click", Reserveren.m.submitRadioOnClick);
    });
}
document.observe("dom:loaded", Reserveren.m.initialize);

Reserveren.m.updateList = function(eventObject) {
    document.forms['reserveform'].submit();
}
document.observe("dom:loaded", function(e) {
    $$('select.submitmainbasketonchange').each(function(selectObj){
        selectObj.observe('change', Reserveren.m.updateList);
    })
})

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

    Reserveren (filiaal selecteren) ends
    
**********************************************************************************/



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

    Cookie management

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

var CookieManager = new Object();

CookieManager.create = function(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  } else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

CookieManager.read = function(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') 
      c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) 
      return c.substring(nameEQ.length,c.length);
  }
  return null;
}

CookieManager.remove = function(name) {
  CookieManager.create(name,"",-1);
}

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

    Cookie management ends

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


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

    Block status manager

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

document.observe("dom:loaded", function(e){
  $$('.collapsable .collapseIcon').each(function(elem){
    // attaching eventhandlers
    elem.observe('click',function(evt){
      var containerElem = this.up('.collapsable');
      var contentElem = containerElem.down('.contentContainer');
      var containerName = containerElem.readAttribute('containerName');
      if(!containerName) {
        console.log('unassigned containerName in collapsable element');
        return false;
      }
      var ContainerIsHidden = CookieManager.read('containerHidden_'+containerName);
      // it could be that a block is hidden by default on a page.
      // in that case set an attribute that prevents setting a cookie when we close
      if(! ContainerIsHidden){
          if(this.readAttribute('src') == this.readAttribute('src_idle')){
              ContainerIsHidden = 1;
              this.writeAttribute('isClosedByDefaultOnThisPage', '1');
              isClosedByDefault = true;
          };
      };
      
      if(ContainerIsHidden){
        CookieManager.remove('containerHidden_'+containerName);
        this.title = this.readAttribute('title_active');
        this.src = this.readAttribute('src_active');
        contentElem.show();
      } else {
          if(! this.readAttribute('isClosedByDefaultOnThisPage')){
              CookieManager.create('containerHidden_'+containerName,'1');
          };
          this.title = this.readAttribute('title_idle');
          this.src = this.readAttribute('src_idle');
          contentElem.hide();
      }
    });
    
    // process initialisation
    var containerElem = elem.up('.collapsable');
    var contentElem = containerElem.down('.contentContainer');
    var containerName = containerElem.readAttribute('containerName');
    if(containerName) {
      if(CookieManager.read('containerHidden_'+containerName)){
        contentElem.hide();
        elem.title = elem.readAttribute('title_idle');
        elem.src = elem.readAttribute('src_idle');
      // } else {
      //     console.log('dit is hem');
      //     contentElem.show();
      //     elem.title = elem.readAttribute('title_active');
      //     elem.src = elem.readAttribute('title_active');
      //     elem.show();
      };
    };
  });
});

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

    Block status manager ends

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


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

    Multiple-content-banners

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

function MCBInstance(targetMCBElem){
  this.a = new Hash();
  this.a.set('interval',false);
  var dateObject = new Date();
  if(!targetMCBElem.id){ targetMCBElem.id = dateObject.getTime()+"_MCEUnique";} 
  this.a.set('currentObject',targetMCBElem.id);
  this.initialize();
}

MCBInstance.prototype.initialize = function(){
  var bannerItems = $$("#" + this.a.get('currentObject') + " li a");
  this.setMultiBannerContent(bannerItems[0]);
  bannerItems.each(function(elem){
    var currentMCBInstance = this; // trick to bybass scope issues with internetexplorer
    elem.observe("mouseover",function(evt){
      currentMCBInstance.setMultiBannerContent(evt.target);
    });
  },this);
  
  var currentMCBInstance = this; // trick to bybass scope issues with internetexplorer
  $(this.a.get('currentObject')).observe("mouseout",function(evt){
    currentMCBInstance.a.set('interval',setInterval(function(){currentMCBInstance.showNextItem();},5000));
  });
  $(this.a.get('currentObject')).observe("mouseover",function(evt){
    clearTimeout(currentMCBInstance.a.get('interval')); currentMCBInstance.a.set('interval',false);
  });
  
  this.a.set('interval',setInterval(function(){currentMCBInstance.showNextItem();},5000));
}

MCBInstance.prototype.showNextItem = function(){
  var bannerItems = $$("#" + this.a.get('currentObject') + " li a");
  bannerItems.each(function(elem,index){
    if(elem.hasClassName('active')){
      this.setMultiBannerContent(bannerItems[index+1]||bannerItems[0]);
      throw $break;
    }
  },this);
}

MCBInstance.prototype.setMultiBannerContent = function(elem){
  $$("#" + this.a.get('currentObject') + " li a").each(function(elemInactive){
    if(elemInactive.hasClassName('active')) {
      elemInactive.toggleClassName('active');
    }
  });
  elem.toggleClassName('active');
  var imgObject = $(elem.readAttribute('imgid'));
  if(! imgObject) {
      imgObject = $('multicontentbanner_image');
  };
  if( imgObject) {
      var linkObject = imgObject.parentNode; 
      if(linkObject.tagName != 'A') {
          linkObject = null;
      };
      imgObject.src = elem.readAttribute('imgsrc');
      if(elem.getAttribute('linkname')) {
          imgObject.writeAttribute('alt', elem.readAttribute('linkname'));
      };
      if(linkObject) {
          linkObject.href = (elem.getAttribute('linkhref') ? elem.getAttribute('linkhref') : elem.getAttribute('href'));
          linkObject.target = (elem.getAttribute('target') ? elem.getAttribute('target') : '_self');
          // linkObject.innerHTML = elem.getAttribute('linkName');
      };
  };

  if(elem.getAttribute('textlinkid')) {
      var textLinkObj = $(elem.readAttribute('textlinkid'));
      if(textLinkObj) {
          textLinkObj.href = (elem.getAttribute('linkhref') ? elem.getAttribute('linkhref') : elem.getAttribute('href'));
          textLinkObj.target = (elem.getAttribute('target') ? elem.getAttribute('target') : '_self');
          textLinkObj.innerHTML = elem.getAttribute('linkName');
      }
  }
}

document.observe("dom:loaded",function(event){
  $$(".multicontentbanner").each(function(elem){ var MCB = new MCBInstance(elem); });
});

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

    Multiple-content-banners ends
    
**********************************************************************************/


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

    MCB (NIEUW)
    
*******************************************************************************************/

var MCB = Class.create({  
  targElem: null,
  nextButton: null,
  previousButton: null,
  slideContainer:null,
  slideWidth:null,
  amountSlides:null,
  timeout:null,
  delay:4000,
  initialize: function(targElem){
    this.targElem = targElem;
		// buttons
    this.nextButton = targElem.descendants().find(function(elem){return elem.hasClassName('nextSlide');});
    this.previousButton = targElem.descendants().find(function(elem){return elem.hasClassName('previousSlide');});
    // slides
		this.slideContainer = targElem.descendants().find(function(elem){return elem.hasClassName('slideContainer');});
    this.slideWidth = parseInt(this.targElem.readAttribute('slideWidth'));
    this.slides = this.slideContainer.descendants().findAll(function(descendant){return descendant.hasClassName('slide')});
    
		// setting slidecontainerwidth
		var neededWidth = (this.slides.length * this.slideWidth);
    this.slideContainer.setStyle({
      width: neededWidth+'px'
    });
		this.slideContainer.absolutize();
		
		// observing all elements
		if(this.nextButton) this.nextButton.observe('click',this._nextSlide.bind(this));
    if(this.previousButton) this.previousButton.observe('click',this._previousSlide.bind(this));
    this.targElem.observe('mouseout',this._startAutorotateDelayed.bind(this));
    this.targElem.observe('mouseover',this._stopAutorotate.bind(this));
		// automatically start rotating
		this._startAutorotateDelayed();
  },
  _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;
    this.slideContainer.morph("left: " + targPos + "px;");
  },
  _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;
    this.slideContainer.morph("left: " + targPos + "px;");
  }
});

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


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

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




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

    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');
  
  if(elem.parentNode.hasClassName('showesrc')){
    var fsiObj = EREZZoom.m.getFSIObj(elem.parentNode.getAttribute('productNo'));  
    fsiObj.write('popup_zoomHolder');
  }

  if(this.readAttribute('targContent')){
    $('popup_contentHolder').innerHTML = $(this.readAttribute('targContent')).innerHTML;
  };

  if(this.readAttribute('evalcode')) {
      eval(this.readAttribute('evalcode'));
  };

  if(this.tagName == 'INPUT') {
      window.event? event.returnValue = false : e.preventDefault(); /* IE : standards */
  };
  
  // $('popup_content').inner = elem.getAttribute("srcValue");
};

popup_overlay.hidePopup = function(eventObject) {
  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

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

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

    mouseovers use _active instead of _hover, hence the overrule of
    ECube.setMouseOvers

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

ECube.setMouseOvers = function(item){
    if(item.src){
        item.observe('mouseover', function(eventObject){
            this.src = this.src.replace(/\.([a-z0-9A-Z]+)$/, '_active.$1');
        });
        item.observe('mouseout', function(eventObject){
            this.src = this.src.replace(/_active\.([a-z0-9A-Z]+)$/, '.$1');
        });
    }
}

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

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

Expert.refinementMenu = new Object();
Expert.refinementMenu.numItemsToShow = 4;
Expert.refinementMenu.init = function(e){
    $$('ul.refinementoptionlist').each(function(refinementoptionlist){
        refinementoptionlist.select('a.viewmorelink').each(function(viewmorelink){
            viewmorelink.observe('click', function(eventObject){
                window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                var children = refinementoptionlist.childElements();
                for(var i = children.length - 1; i >= Expert.refinementMenu.numItemsToShow - 1 ; i--){
                    var child = children[i];
                    if(child.className.match(/\bmore\b/)){
                        child.hide();
                    } else {
                        child.show();
                    };
                }
            })
        });
        refinementoptionlist.select('a.viewlesslink').each(function(viewmorelink){
            viewmorelink.observe('click', function(eventObject){
                window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
                var children = refinementoptionlist.childElements();
                for(var i = children.length - 1; i >= Expert.refinementMenu.numItemsToShow  ; i--){
                    var child = children[i];
                    if(child.className.match(/\bmore\b/)){
                        child.show();
                    } else {
                        child.hide();
                    };
                }
            })
        })
        
    })
}
ECube.registerOnLoadFunction(Expert.refinementMenu.init)
/**********************************************************************************

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


/**********************************************************************************
    
    auto submit the ogone form (if it exists)
    
**********************************************************************************/
    
document.observe("dom:loaded", function(e){
    if(document.forms['gotoogoneform']) {
        document.forms['gotoogoneform'].submit();
    };
})

// make sure the auto submit of quantity dropdowns also happens in the main basket
EpagesShop.updateBasketQuantityFields.basketFormNames = $w('basketform mainbasketform');


var halveImg = function(img){
    new Effect.Scale(img, 75);
    var randomnumber=Math.floor(Math.random()*50) * 50;
    var larger = Math.floor(Math.random() * 2);
    var safetyCounter = img.readAttribute('numCurrentChange');
    safetyCounter++;
    img.writeAttribute('numCurrentChange', safetyCounter);
    if(safetyCounter < img.readAttribute('numToStopAt')){
        if(larger){
            window.setTimeout(doubleImg, 1000 + randomnumber, img);
        } else {
            window.setTimeout(halveImg, 1000 + randomnumber, img);
        }
    } else {
        img.absolutize();
        new Effect.Move(img, { x: 0, y: 0, mode: 'absolute' });
        new Effect.Fade(img, { duration: Math.floor(Math.random()* 3) + 3});
        
    };
}

var doubleImg = function(img){
    new Effect.Scale(img, 150);
    var randomnumber=Math.floor(Math.random()*50) * 50;
    var larger = Math.floor(Math.random() * 2);
    var safetyCounter = img.readAttribute('numCurrentChange');
    safetyCounter++;
    img.writeAttribute('numCurrentChange', safetyCounter);
    if(safetyCounter < img.readAttribute('numToStopAt')){
        if(larger){
            window.setTimeout(doubleImg, 1500 + randomnumber, img);
        } else {
            window.setTimeout(halveImg, 1500 + randomnumber, img);
        }
    } else {
        img.absolutize();
        new Effect.Move(img, { x: 0, y: 0, mode: 'absolute' });
        new Effect.Fade(img, { duration: Math.floor(Math.random()* 3) + 3});
    };
}
function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
}
document.observe("dom:loaded", function(e){
    if(getQueryVariable('wobble')){
        var imgs = $(document.images);
        var num = imgs.length - 1;
        for(var i = 0; i <= num ; i++){
            var img = $(imgs[i]);
            var numToStop = (Math.floor(Math.random() * 10)) + ((Math.floor(Math.random() * 10)) *(Math.floor(Math.random() * 10))) ;
            img.writeAttribute('numToStopAt', numToStop);
            img.writeAttribute('numCurrentChange', 0);
            var randomnumber=Math.floor(Math.random()*20) * 20;
            var larger = Math.floor(Math.random() * 2);
            if(larger){
                window.setTimeout(doubleImg, 1500 + randomnumber, img);
            } else {
                window.setTimeout(halveImg, 1500 + randomnumber, img);
            }
        }
    }
    


})


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

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

/* analytics metingen */
document.observe('dom:loaded',function(eventObject){
    $$('.opentab').invoke('observe','click',function(eventObject){
      if(window['pageTracker']){
        var header = $$('H1')[0];
        header = header ? header : document.title;
        console.log('Tracked event: ' , 'Tabs',this.innerHTML,header.innerHTML);
        pageTracker._trackEvent('Tabs',this.innerHTML,header.innerHTML);
      }
    });
    $$('.trackPageview').invoke('observe','click',function(eventObject){
      if(window['pageTracker']){
        console.log('Tracked page',this.readAttribute('trackPageview'));
        pageTracker._trackPageview(this.readAttribute('trackPageview'));
      }});
  });

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

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

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