String.implement({//simple regex doesn't work in ie.
    entityDecode: function(){
        var replacements = new Hash({'lt':'<','gt':'>','amp':'&','quot':'"','#039':"'"});
        return ( this.replace(
            new RegExp('&('+replacements.getKeys().join('|')+');', "gi"),
            function(replaceStr){return replacements[replaceStr.replace('&', '').replace(';', '')];}
        ));
    }
});

window.addEvent('domready', function(){
/*FFx2 fix for navigation*/
if((function x(){})[-6]=='x'){
    var p = $('box_navTop');
    var e = p.getElement('.navTop').setStyle('float','left');
    var ed = e.getDimensions();
    var pd = p.getDimensions();
    var pp = parseInt(p.getStyle('padding-left'), 10) + parseInt(p.getStyle('padding-right'), 10);
    var m = ((pd.width - pp) - (ed.width))/2;
    e.setStyles({'margin-left': m});
}
/*last contxt margin*/
var lastCtxt = $$('.box_contxt div.space_b20');
if(lastCtxt && lastCtxt.length > 0)
    lastCtxt[lastCtxt.length-1].setStyle('margin-bottom', 0);
/*
ACCORDIONs
*/
        
    
    
    $$('.box_cnt_accordion').each(function(element){
        if(element.id != undefined) {
        var id = element.id;
        var myAccordion = '';
        //check for id in a[name] in toggler...
        var show = 0;
        if(window.location.hash.replace('#','').toInt()){
            var el = $$('#'+id+' .cnt_accordion_toggle a').filter(function(link){
                    return link.get('name')==window.location.hash.replace('#','');
                })[0];
            if(el){
                var ev = el.getParent();
                var show = ev.getAllPrevious('.cnt_accordion_toggle').length;
                //console.log(ev, show);
            }
        }
        var myAccordion = new Accordion($$('#'+id+' .cnt_accordion_toggle'), $$('#'+id+' .cnt_accordion_content'), {'show':show, 'opacity':false});
        
        var numAccordionToggle = 0;
        $$('#'+id+' .cnt_accordion_toggle').each(function(element){
            if(numAccordionToggle == 0) {
                element.addClass('on');
            }
            else {
                element.addClass('off');
            }
            numAccordionToggle++;
        });
        myAccordion.addEvent('active', function(toggler, element){
            toggler.removeClass('off');
            toggler.addClass('on');    
                toggler.setStyles({
                    'margin-bottom': '1px',
                    'border-bottom': '1px solid #ccc'
                });
        });
        myAccordion.addEvent('background', function(toggler, element){
            toggler.addClass('off');
            toggler.removeClass('on');
                toggler.setStyles({
                    'margin-bottom': 0,
                    'border-bottom': 0
                });
        });
        }
        
        if(element.getChildren().length != 0){
                element.getLast('.cnt_accordion_toggle').setStyles({
                    'margin-bottom': 0,
                    'border-bottom': 0
                });
        }
    });
        //.cnt_tabcontainer_panel (not exclusively)
        $$('ul.cnt_more_info_list li:last-child').setStyles({
            'margin-bottom': 0,
            'border-bottom': 0
            });
    
    
    
    
/*
TABSWAPPER
*/
    if($$('.cnt_tabcontainer_tabset') != undefined) {
      $$('.cnt_tabcontainer_tabset').setStyle('visibility', 'visible');
    }
    if($$('.cnt_tabcontainer_panelheading') != undefined) {
      $$('.cnt_tabcontainer_panelheading').setStyle('display', 'none');
    }
    if($$('.box_cnt_tabcontainer') != undefined) {
      $$('.box_cnt_tabcontainer').each(function(element){
        if(element.id != undefined) {
            var id= element.id;
            
            new TabSwapper({
                selectedClass: 'on',
                deselectedClass: 'off',
                tabs: $$('#'+id+' li.tab'),
                clickers: $$('#'+id+' li.tab a'),
                sections: $$('#'+id+' div.cnt_tabcontainer_panelset div.cnt_tabcontainer_panel'),
                /*use transitions to fade across*/
                smooth: false,
                smoothSize: false//,
                //cookieName: 'tabPosition'+id
            });
        
        }
      });
    }    
    
    
    
    /*more_info_list*/
    $$('ul.cnt_more_info_list li').each(function(element){
        var parent = element.getParent();
        if (!parent.hasClass('cnt_article_list') && !parent.hasClass('no_hover')) {
        if(!element.hasClass('heading') && !element.hasClass('padding') && element.getElement('div.descr') != null && element.getElement('div.strong') != null){
            element.addEvent('mouseenter', function(event){
                element.addClass('hover');
            });
            element.addEvent('mouseleave', function(event){
                element.removeClass('hover');
            });
        }
        }
    });
    $$('ul.cnt_more_info_list li.padding').each(function(element){
        element.addEvent('mouseenter', function(event){
            element.addClass('hover');
        });
        element.addEvent('mouseleave', function(event){
            element.removeClass('hover');
        });
        element.addEvent('click', function(event){
            var link = element.getElement('a');
            var url = link.href;
            try{}catch(err){if(typeof link.onclick == 'function'){link.onclick();}}
            event.stop();
            event.stopPropagation();
            if(link.hasClass('popup')){
                link.fireEvent('click', event);
            }
            else {
                
                if(link.get('target') == '_blank'){
                    popNewWin(url);
                    return;
                } else {
                    window.location = url;
                }
          }
        });
    });
    /*little helper*/
    $$('.box_cnt_glossar .box_cnt_accordion div.on').each(function(element){
        element.addEvent('mouseenter', function(event){element.addClass('hover');});
        element.addEvent('mouseleave', function(event){element.removeClass('hover');});
    });
 $$('#frame_cnt a.popup, #frame_left a.popup').addEvent('click', function(ev){
        if(this.retrieve('requires-confirmation')){return;}//optionally written to link by "Element.confirmLinkClick()". Handles below code as well.
        ev.stop();
        var dimensions = [800, 600];
        if(this.rel && this.rel.test(/^popup/i)){
            dimensions = this.rel.replace(/[[]|]/gi," ").split(' ')[1].split('x');
        }
        if(this.hasClass('scroll')){
            popGenericScroll(this.href, dimensions);
            return;
        }
        popGeneric(this.href, dimensions);
        
    });
    /*END DOMREADY*/
});
/*quicksearch*/
var cachedQuickFinder = null;
function loadQuickFinder(ulelement){

    var jsonUrl = 'http://www.sterilog.com/cps/rde/xchg/ae-sterilog-en-int/hs.xsl/productqf.json.txt';    


    if(cachedQuickFinder == null)
var jsonRequest = new Request.JSON({url: jsonUrl, onComplete: function(result){
            cachedQuickFinder = result;
            fillQuickFinder(ulelement, result);
        }}).get();
    else{
        //fillQuickFinder(ulelement, cachedQuickFinder);
    }
}
function fillQuickFinder(ulelement, result){
    if(!result){return;}
    var resSize = result.length;
    ulelement = $(ulelement);
    
    var mainEls = ulelement.getChildren();
    for(var i=0; i < resSize; i++){
        var numSubRes = result[i].sub;
        if(numSubRes.length){
            mainEls[i].adopt(createQuickFinderlist(result[i].sub));
        }
    }
    
    quickFinderEvents(ulelement);
    
}
function createQuickFinderlist(productList){
    var numItems = productList.length;
    var ulEl = new Element('ul');
    var liEls = [];

    var linkBase = 'http://www.sterilog.com/cps/rde/xchg/ae-sterilog-en-int/hs.xsl/';    

    for (var i = 0;i < numItems;i++){
        liEls[i] = new Element('li').adopt(new Element('a', {'href':linkBase+productList[i].url, 'html': productList[i].name+'&nbsp;'}));
        if(productList[i].sub.length > 0){
            liEls[i].adopt(createQuickFinderlist(productList[i].sub))
        }
        ulEl.adopt(liEls[i]);
    }
    
    
    return ulEl;
}
function quickFinderEvents(ulelement){
    ulelement.getElements('li').each(function(el) {
        if(el.getElements('ul').length > 0) {
            el.addEvent('mouseenter', function(ev){
                el.store('mouseentered', true);
                (function(){
                    if(!el.retrieve('mouseentered')){return;}
                //el.getElement('a').setStyle('font-weight', 'bold');#C2284E
                el.getElement('a').setStyle('color', '#C2284E');
                var ul = el.getElement('ul');
                ul.setStyle('display', 'block');
                ul.setStyle('z-index', '1000');
                ul.setStyle('height', 'auto');
                        //console.log(ul.getSize().y, (element.getSize().y)-1);
                        //console.log(element);
                if((ul.getSize().y -2) > (ulelement.getSize().y)-1) {
                    //element.setStyle('height', ul.getSize().y+1);
                    ulelement.getParent().getElements('ul').setStyle('height', ul.getSize().y-2);
                }else {
                    ul.setStyle('height', (ulelement.getSize().y)-1);
                }
                
                ie6QuickFinderFrame(ulelement, ul);
                if(el.getParent().getParent().tagName == 'DIV'&& !Browser.Engine.trident)//only first sublevel
                    el.getElement('ul').setStyle('opacity', 0.9);
                }).delay(500);
            });
            el.addEvent('mouseleave', function(ev){
                el.store('mouseentered', false);
                var mouseLeaveFunc = function(el) {
                    if(this.retrieve('mouseentered')) {
                        return;
                    }
                    this.getElement('ul').setStyle('display', 'none');
                    ie6QuickFinderFrame(ulelement, this.getElement('ul'));
                    
                    if(this.getParent().getParent().tagName == 'DIV' && !Browser.Engine.trident) //only first sublevel
                        this.getElement('ul').setStyle('opacity', 1);
                    var topList = this.getParent('ul.quicksearch_list');
                    var shownElement = false;
                    //restore initial height if necessary
                    topList.getElements('ul').each(function(el){
                        if(el.getStyle('display') == 'block'){shownElement = true;}
                    });
                    if(!shownElement){
                        topList.setStyle('height', 'auto');
                    }
                    ie6QuickFinderFrame(ulelement, this.getElement('ul'));
                }
                mouseLeaveFunc.delay(500, el);
            
                el.getElement('a').setStyle('color', '#666');
                el.getElement('ul').setStyle('z-index', '1');
            });
        }
    });
    
}
function ie6QuickFinderFrame(ul, ulelement){
    if(!Browser.Engine.trident) {
        return;
    }
    var ieFrame = $$('#ie6PrQuIframe');
    if(ieFrame.length == 0) {
        var ieFrame = new Element('iframe',{'src':'about:blank', 'id':'ie6PrQuIframe'}).inject(ul, 'before');
    }
    if(ul.style.display !== 'block'){
        ieFrame.setStyles({'width':0, 'height':0, 'display': 'none'});
        return;
    }
    var maxX = 0;
    $$('.box_QuickFinder ul').each(function(el){
        if(el.getPosition().x > maxX) {
            maxX = el.getPosition().x;
        }
    });
    var iHeight = ul.getSize().y;
    ieFrame.setStyles({
        'display':'block',
        'width': maxX + 117,
        'height': iHeight
    });
}
window.addEvent('domready', function(){
    /*QUICKFINDER*/
   
    /* hide last border, first level */
    $$('ul.quicksearch_list > li:last-child').each(function(element){
        element.setStyle('border-bottom-width', '0px');
    });
    
    /*init quickfinder*/
    $$('#frame_left > .box_QuickFinder').each(function(element) {
        var trigger = element.getElement('img.quicksearch_trigger');
        var triggered = element.getElement('img.quicksearch_triggered');
        var quicksearch_list = element.getElement('.quicksearch_list');
        if(trigger != null && triggered != null && quicksearch_list != null) {
          var clickfunc = function(ev){
            $$([trigger, triggered, quicksearch_list]).toggle();
            if(quicksearch_list.style.display === 'block' && !quicksearch_list.retrieve('modified')){
                quicksearch_list.store('modified', true);
                loadQuickFinder(quicksearch_list);
                var menuHeight = quicksearch_list.getSize().y;
                quicksearch_list.getElements('ul').setStyle('height', menuHeight-1);
            }
            ie6QuickFinderFrame(element, element.getElement('ul'));
          }
          element.getElement('.quickfinder_head').addEvent('click', clickfunc);  
          if(element.hasClass('on')){
            clickfunc('automatic');
          }
        }
        /*
        if(trigger != null) {
            trigger.addEvent('click', function(event){
                var finderElement = event.target.getParent().getParent();
                //debug(finderElement);
                if(finderElement == null || finderElement.getElement('ul') == null){return;}
                finderElement.getElement('img.quicksearch_trigger').setStyle('display', 'none');
                finderElement.getElement('img.quicksearch_triggered').setStyle('display', 'block');
                finderElement.getElement('ul').setStyle('display', 'block');
                var quickFinderMenu = finderElement.getElement('ul');
                loadQuickFinder(quickFinderMenu);
                quickFinderMenu.setStyle('display', 'block');
                var menuHeight = quickFinderMenu.getSize().y;
                //console.log(menuHeight);
                quickFinderMenu.getElements('ul').setStyle('height', menuHeight-1);
                //finderElement.getElements('ul li').setStyle('opacity', 1);
            });
            triggered.addEvent('click', function(event){
                var finderElement = event.target.getParent().getParent();
                finderElement.getElement('img.quicksearch_trigger').setStyle('display', 'block');
                finderElement.getElement('img.quicksearch_triggered').setStyle('display', 'none');
                //finderElement.getElements('ul li').setStyle('opacity', 0);
                finderElement.getElement('ul').setStyle('display', 'none');
            });
            if(element.hasClass('on')) {
                trigger.fireEvent('click', {'target':trigger});
                //element.getElement('img.quicksearch_trigger').setStyle('display', 'none');
                //element.getElement('img.quicksearch_triggered').setStyle('display', 'block');
                //element.getElement('ul').setStyle('display', 'block');
                //element.getElements('ul li').setStyle('opacity', 1);
            }
        }*/
      });    
    /*END DOMREADY*/
});
/* AUTOCOMPLETER*/
var startedAutoCompleteString = ''; //prevent new requests before the first one completes
var cachedAutoCompleteString = '';
var cachedAutoCompleteResult = {};
window.addEvent('domready', function(){
    $$('input.search_input').each(function(element){
        element.store('orgvalue', element.value);
        element.addEvent('focus', function(event){
            if(event.target.value==event.target.retrieve('orgvalue'))
                event.target.value="";
        });
        element.addEvent('blur', function(event){
            if(event.target.value=="") {
                event.target.value=event.target.retrieve('orgvalue');
            }
        });
    });
    $$('#main_search').each(function(element){
        element.addEvent('keydown', function(event){
            
            
            (function(){
            var search = event.target.value;
            if(search.length < 2) {
                bbraunAutocomplete({}, '');
                return;
            }
                bbraunAutocompleteSearch(search);
            }).delay(30)
            //bbraunAutocompleteSearch(search).delay(15);
            
        });
    });
    $(document.body).addEvent('click', function(ev){
        var bsa = $('box_search_autocomplete');
        if(!bsa){return;}
        if(bsa.style.display == 'block' && !$(ev.target).getParent('#box_search_autocomplete')){
            bsa.style.display = 'none';
        }
    });
});
function bbraunAutocompleteSearch(searchString) {
    if(cachedAutoCompleteString.length == 0 || searchString.match(cachedAutoCompleteString) == null) {
        if(startedAutoCompleteString != '' && searchString.match(startedAutoCompleteString) !== null){
            return; //prevent unnecessary requests
        }
        
    var jsonUrl = 'http://www.sterilog.com/cps/rde/xchg/ae-sterilog-en-int/hs.xsl/';    

        searchString = $('main_search').value;
        startedAutoCompleteString = searchString;
        var jsonRequest = new Request({url: jsonUrl+"getSuggestions.txt", onComplete: function(resultText){
            if(!resultText.contains('{')){
                var result = {};
            } else {
                var result = JSON.decode(resultText);
            }
            cachedAutoCompleteString = searchString;
            cachedAutoCompleteResult = result;
            bbraunAutocomplete(result, '');
        }}).get({'q': searchString});
    } else {
        bbraunAutocomplete(cachedAutoCompleteResult, searchString);
    }
            
            
            
            
}
function bbraunAutocomplete(obj, filterStr) {
    filterStr = $('main_search').value;
    $('box_search_autocomplete').empty();
    var newResult = new Element('ul');
    if(obj.length > 0) {
        var i = 0;
        obj.each(function(result){
            var docCheckVisible = ((result.doccheck && result.sessDocCheck) || !result.doccheck)
            if(filterStr != '') {
                if(result.name.toLowerCase().indexOf(filterStr.toLowerCase()) == 0) {
                    var newli = bbraunAutocompleteNewSection(result.name, result.teaser, result.img, result.prid, docCheckVisible );
                    newli.inject(newResult);
                    i++;
                }
            }
            else {
                    var newli = bbraunAutocompleteNewSection(result.name, result.teaser, result.img, result.prid, docCheckVisible );
                    newli.inject(newResult);
                    i++;
            }
            
        });
    }
    
    
    
        var headlineLi = new Element('li', {
            'class': 'search_autocomplete_header',
            'html': '<span class="strong">Products</span>'
        });
        var viewAllLi = new Element('li', {
            'class': 'search_autocomplete_footer',
            'html': '<a href="#search" class="more">View all search results</a>'
        }).addEvent('click', function(ev){$(document.body).getElement('form').submit();});
    if(newResult.getChildren().length > 0) {
        
        headlineLi.inject(newResult, 'top');
        viewAllLi.inject(newResult, 'top');
        
        $('box_search_autocomplete').setStyle('display', 'block');
        $('box_search_autocomplete').setStyle('opacity', 0.9);
        
    }
    else {
        $('box_search_autocomplete').setStyle('display', 'none');
        /*
        //no-products-found-box. not needed yet.
        var noresLi= new Element('li', {
            'class': 'search_autocomplete_header',
            'html': 'No Products found'
        });
        headlineLi.inject(newResult, 'top');
        noresLi.inject(newResult);
        viewAllLi.inject(newResult);
        
        $('box_search_autocomplete').setStyle('display', 'block');
        $('box_search_autocomplete').setStyle('opacity', 0.9);
        */
    }
        if(filterStr.length < 2){
            $('box_search_autocomplete').setStyle('display', 'none');
        }
    newResult.inject($('box_search_autocomplete'));
}
function bbraunAutocompleteNewSection(name, teaser, image, url, docCheckVisible ){
    var imgStr = "";
        
    var jsonUrl = 'http://www.sterilog.com/cps/rde/xchg/ae-sterilog-en-int/hs.xsl/';    

    if(image != ""){imgStr = '<img src="'+image+'&max=50" alt="'+name+'" />';}
    if(docCheckVisible){teaser = teaser.entityDecode();}else{teaser='DocCheck Page';}
    return new Element('li', {
        'html': '<a href="'+jsonUrl+'products.html?acs=1&prid='+url+'">'+imgStr+'<span class="strong">'+name.entityDecode()+'</span><span>'+teaser+'</span></a>'
    });
}
/*TOOLTIPS*/
//remove the flipping behaviour
Tips.implement(
    {
        position: function(event){
            var size = window.getSize(), scroll = window.getScroll();
            var tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight};
            var props = {x: 'left', y: 'top'};
            for (var z in props){
                var pos = event.page[z] + this.options.offsets[z];
                //if ((pos + tip[z] - scroll[z]) > size[z]) pos = event.page[z] - this.options.offsets[z] - tip[z];
                this.tip.setStyle(props[z], pos);
            }
        }
    }
);
//init
window.addEvent('domready', function(){
    var myTips = new Tips('a.tooltipArea', {className:'toolTipContainer'});
    $$('a.tooltipArea').each(function(el){
        el.store('tip:text', el.getAttribute('rel')+'&nbsp;'); //add nonbreaking space -> opacity on firefox sometimes renders last char incorrectly
    });
    myTips.addEvent('show', function(tip){
        tip.setStyles({'visibility':'visible', 'opacity': 0.9});
    });
    
    //small ones ('websites'-page)
    var myTipsSmall = new Tips('a.tooltipAreaSmall', {className:'toolTipContainerSmall'});
    $$('a.tooltipAreaSmall').each(function(el){
        el.store('tip:text', el.getAttribute('rel')+'&nbsp;');
    });
    myTipsSmall.addEvent('show', function(tip){
        tip.setStyles({'visibility':'visible', 'opacity': 0.9});
    });
    
    
    
    var myTipsImage = new Tips('a.tooltipImage', {className:'toolTipContainerImage'});
    $$('a.tooltipImage').each(function(el){
        el.store('tip:text', '<img src="'+el.getAttribute('rel')+'" alt="">');
});
    myTipsImage.addEvent('show', function(tip){
       tip.setStyle('visibility', 'hidden');
        tip.store('ismouseover', true);
       (function(){
            if(tip.retrieve('ismouseover')){
                tip.setStyle('visibility', 'visible');
            }   
        }.delay(500));
    }).addEvent('hide', function(tip){
        tip.store('ismouseover', false);
    });
});
/*
CHOOSE LOCATION
*/
window.addEvent('domready', function(){
    $$('.box_imgMap .continent_chooser a, .box_imgMap map area').each(function(el){
        el.addEvent('click', function(ev){
            $$('.box_imgMap .continent_chooser a').setStyle('font-weight', 'normal');
            ev.target.setStyle('font-weight', 'bold');
            var searchFor = ev.target.getAttribute('rel');
            if(!$$('.box_imgMap .choose_location').length){return;}
            $$('.box_imgMap .choose_location')[0].getChildren().setStyle('display', 'none');
            $$('.box_imgMap .choose_location .continent')[0].setStyle('display', 'inline');
                
                var contRequest = new Request({method: 'get', url: searchFor, onSuccess: function(responseText, responseXML){
                        responseText = this.response.text;
                        responseXML = this.response.xml;
                        $$('.box_imgMap .choose_location .continent')[0].innerHTML = responseText;
                        //get links in continent
                        $$('.box_imgMap .choose_location .continent')[0].getElements('a').addEvent('click', function(event){
                            
                            $$('.box_imgMap .choose_location .continent a').setStyle('font-weight', 'normal');
                            event.target.setStyle('font-weight', 'bold');
                            //console.log(event.target);
                            var searchFor = event.target.getAttribute('rel');
                            $$('.choose_location .country, .choose_location .location').setStyle('display', 'none');
                            $$('.choose_location .country')[0].setStyle('display', 'inline');
                                
                            var countrRequest = new Request({method: 'get', url: searchFor, onSuccess: function(responseText, responseXML){
                                responseText = this.response.text;
                                responseXML = this.response.xml;
                                $$('.box_imgMap .choose_location .country')[0].innerHTML = responseText;
                                //get links in continent
                                $$('.box_imgMap .choose_location .country')[0].getElements('a').addEvent('click', function(event){
                                
                                    $$('.box_imgMap .choose_location .country a').setStyle('font-weight', 'normal');
                                    event.target.setStyle('font-weight', 'bold');
                                    //console.log(event.target);
                                    var searchFor = event.target.getAttribute('rel');
                                    
                                    $$('.choose_location .location')[0].setStyle('display', 'inline');
                                        //.load('location.php?q='+searchFor+'&what=location');
                                        
                                        var locRequest = new Request({method: 'get', url: searchFor, onSuccess: function(responseText, responseXML){
                                            responseText = this.response.text;
                                            responseXML = this.response.xml;
                                            $$('.box_imgMap .choose_location .location')[0].innerHTML = responseText;
                                        }}).send();
                                        
                                    event.stop();
                                });
                            }}).send();
                            
                            
                            event.stop();
                        });
                    }}).send();
            ev.stop();
        });
    });
    
    
    
    
    
    $$('#box_imgMap_map').each(function(el){
        el.store('oldsrc', el.getProperty('src'));
    });
    
    $$('.continent_chooser a, .box_imgMap map area').each(function(el){
        el.addEvent('mouseout', function(){
            //console.log($$('img#box_imgMap_map'));
            $('box_imgMap_map').setProperty('src', $('box_imgMap_map').retrieve('oldsrc'));
        });
        
        
        el.addEvent('mouseover', function(ev){
            //console.log('img/img_map'+el.getAllPrevious().length+'.jpg')
                
           $$('#box_imgMap_map').setProperty('src', alternateImages[el.getAllPrevious().filter(function(el){return (el.get('tag')=='a'  || el.get('tag')=='area') }).length]);
        });
        el.addEvent('click', function(ev){
            $$('#box_imgMap_map').store('oldsrc', $('box_imgMap_map').getProperty('src'));
        });
    });
    $$('.box_imgMap map area').each(function(el){
        el.addEvent('click', function(ev){
            var elNum = el.getAllPrevious().length;
            $$('.box_imgMap .continent_chooser a')[elNum].setStyle('font-weight', 'bold');
        });
    });
   
    
});
/*
    PRINT
*/
window.addEvent('domready', function(e){
    $$('a.print').each(function(el){
        el.addEvent('click', function(ev){
            ev.stop(); //do not follow href...
            ev.stopPropagation();
            //var printWindow = window.open(el.href, "bbraun_print", 'status=0,toolbar=0,location=0,menubar=0,directories=0,scrollbars=1,height=689,width=488');
            if(el.hasClass('print2')){  //press release: more width
                var printWindow = window.open(el.href, "bbraun_print2", 'status=0,toolbar=0,location=0,menubar=0,directories=0,scrollbars=1,height=689,width=666');
            }
            else {
                var printWindow = window.open(el.href, "bbraun_print", 'status=0,toolbar=0,location=0,menubar=0,directories=0,scrollbars=1,height=689,width=488');
            }
                printWindow.onload = function(){
                if (window.focus) {printWindow.focus();}
                //printWindow.print();
                
            };
        });
    });
    if(!$(document.body).hasClass('pdf') && typeof $('box_navTop') == 'object')if($$('#box_navTop')[0] && $$('#box_navTop')[0].getStyle('display')=='none'){
        $$('.box_contxt').each(function(el){
            if($$('.box_cnt')[1]){
                el.inject($$('.box_cnt')[1], 'top').setStyle('display', 'block');
            }
        });
        $$('.cnt_accordion_content').each(function(element){element.setStyle('height', 'auto');});
    }
});
window.addEvent('domready', function(e){
    if(Browser.Engine.trident) {
        $$('.box_cnt_glossar .box_cnt_accordion div.cnt_accordion_toggle').each(function(element){
            element.addEvent('mouseenter', function(event){element.addClass('hover');});
            element.addEvent('mouseleave', function(event){element.removeClass('hover');});
        });
    }
});
/*    Pop-Up GoogleMaps
*/
function popGoogleMaps(url) {
    newwindow=window.open(url,'GoogleMapsWin',"width=500,height=300,location=no,menubar=no,resizable=yes,status=yes,toolbar=no,top="+((screen.height-300)/2)+",left="+((screen.width-500)/2));
    if (window.focus) {newwindow.focus()}
    return false;
}
function popNewWin(url) {
    newwindow=window.open(url,'','');
    if (window.focus) {newwindow.focus()}
    return false;
}
function popGeneric(url, dimensions, scroll) {
    if(!dimensions || !dimensions[0] || !parseInt(dimensions[0],10) || !parseInt(dimensions[1],10)){dimensions = [800,600];}
    newwindow=window.open(url,'BBraunWin',"width="+dimensions[0]+",height="+dimensions[1]+",location=no,menubar=no,resizable=yes,status=yes,"+(scroll?"scrollbars=1,":'')+"toolbar=no,top="+((screen.height-dimensions[1])/2)+",left="+((screen.width-dimensions[0])/2));
    if (window.focus && newwindow.focus) {newwindow.focus()}
    return false;
}
function popGenericScroll(url, dimensions) {
    return popGeneric(url, dimensions, true);
}
/*
NEWS+PHOTO AUTOSUBMIT
*/
window.addEvent('domready', function(e){
    $$('.cnt_pressphoto_select select').addEvent('change', function(ev){
        var el = ev.target;
        if(!el.hasClass('noauto')){
            el.getParent('form').submit();
        }
    });
}); 
/*lightbox loc*/
var bbr_lb_img = '';
var bbr_lb_of = '';
/*sitemap*/
window.addEvent('domready', function(){
    
    
    
    
    
    
    $$('.box_sitemap').each(function(el){
                var siteAccordion = new Accordion(el.getElements('h4'), el.getElements('.box_sitemap_cnt'), {'show':0, 'opacity':false, 'alwaysHide':true, 'show': -1});
        
        el.getElements('h4').addEvent('click', function(ev){
            ev.stop(); //do not follow href...
            ev.stopPropagation();
        });
        siteAccordion.addEvent('active', function(toggler, element){
            element.getParent().addClass('box_sitemap_active').setStyle('margin-bottom', '25px');
        });
        siteAccordion.addEvent('background', function(toggler, element){
            element.getParent().removeClass('box_sitemap_active').setStyle('margin-bottom', '0');;
        });
        
    });
    
    
});
/*
lists, floated images and IE
*/
window.addEvent('domready', function(){
    
if(Browser.Engine.trident) {
    $$('.cnt_img_text').each(function(el){
        if( el.getElement('div.img_lt') != null && el.getElement('ul') != null ){
            var imgwidth = el.getElement('img').getSize.x + 10;
            el.getElements('ul').setStyle('margin-left', imgwidth);
        }
    });
    $$('div.prodNav_4levels').each(function(el){
    if(el.getChildren().length == 1) {
        el.getElement('.lvl1').setStyle('clear', 'left');
    }
    else {
        $$('div.lvl4').each(function(el){
            el.getParent().setStyle('width', '732px').setStyle('margin-right', '-20px');
        });    
    }
    });
  /*  $$('div.lvl2').each(function(el){
        el.getParent().setStyle('width', '357px');
    });
    $$('div.lvl3').each(function(el){
        el.getParent().setStyle('width', '543px');
    });*/
    
 }
});
/* email replace*/
window.addEvent('domready', function(){
    $$('span.mailreplace').each(function(el){
        var linkClass = 'more';
        if(el.hasClass('noMore')){
            linkClass = '';
        }
        var mail = el.get('text').replace(/ \[dot\] /g, '.').replace(' [at] ', '@');
        var mailt = mail;
        if (mail.length > 23 && el.getParent('.box_contxt')){
            mailt = mail.replace('@', '@ ');
        }
        new Element('a',{
            'href': 'mailto:'+mail,
            'text': mailt,
            'class': linkClass
        }).replaces(el);
    });
    });
 
/*
BMI Calculator
*/
var BmiCalc = new Class({
    Implements: [Events, Options],
    options: {
        container: $(document.body),
        strings: {

            weight: '',
            height: '',
            send:    '',
            cancel:  '',
            yourBmi: '',
            comment: '',
            results: [
                '',
                '',
                '',
                '',
                '',
                ''
            ]

        }
    },
    initialize: function(options){
        this.setOptions(options);
        this.buildForm();
    },
    calc: function(options) {
        if(!options.height || !options.weight){
            return;
        }
        var m = options.height / 100;
        return (options.weight/(m*m)).round(2);
    },
    calcOutput: function(options) {
        var bmi = this.calc(options);
        if(!bmi){
            $('bmi_output').setStyle('display', 'none'); return;
        }
        
        var comment = '';
        
        if (bmi >= 40.00) {                      comment = this.options.strings.results[0];}
        else if (bmi >=35.00 && bmi < 40) {comment = this.options.strings.results[1];}
        else if (bmi >=30.00 && bmi < 35) {comment = this.options.strings.results[2];}
        else if (bmi >=25.00 && bmi < 30) {comment = this.options.strings.results[3];}
        else if (bmi >=18.50 && bmi < 25) {comment = this.options.strings.results[4];}
        else if (bmi < 18.50) {               comment = this.options.strings.results[5];}
        
        
        $('bmi_output').setStyle('display', 'block');
        $('bmi_result').set('text', bmi);
        $('bmi_comment').set('html', comment);
        
        
    },
    buildForm: function(options){
        this.form = new Element('form', {html:'<h4>BMI</h4><label>'+this.options.strings.weight+'</label><input id="bmi_weight" value="" maxlength="64" type="text">'
            +'<label>'+this.options.strings.height+'</label><input id="bmi_height" value="" maxlength="64" type="text">'
            +'<div class="clr"></div><label>&nbsp;</label><input id="bmi_cancel" value="'+this.options.strings.cancel+'" title="'+this.options.strings.cancel+'" class="submit" type="reset">'
            +'<input value="'+this.options.strings.send+'" id="bmi_send" title="'+this.options.strings.send+'" class="submit" type="submit"><div class="clr"></div>'
            +'<div id="bmi_output" style="display:none"><label>'+this.options.strings.yourBmi+'&nbsp;</label><span id="bmi_result"></span><br /><label class="clr">'+this.options.strings.comment+'&nbsp;</label> <span id="bmi_comment"></span><br /></div>'
        }).inject(new Element('div', {id:'frame_formbuilder'}));
        this.form.getParent().inject(this.options.container);
            
        this.form.addEvent('submit', function(ev){
            ev.stop();
            this.calcOutput({height:$('bmi_height').get('value'), weight:$('bmi_weight').get('value')});
        }.bind(this));
        $('bmi_cancel').addEvent('click', function(){$('bmi_output').setStyle('display', 'none');});
    }
});
var bmi = null;
window.addEvent('domready', function(ev){
if($('bmi_calc')){
    bmi = new BmiCalc({container:$('bmi_calc')});
    }
});
/* Changes to how AddThis works:
    - nothing should happen on hover
    - the Menu normally shown on hover should be shown on click.
*/
window.addEvent('domready', function(ev){
    var addthisCheck,
        changeAddThis,
        atBtn = document.getElement('.addthis_button');
    if(!atBtn){return;}
    
    changeAddThis = function(){
        atBtn.onclick = atBtn.onmouseover;
        atBtn.onmouseover= function(){};
    };
    addthisCheck = function(){//calls changeAddThis when addThis is set
        if(addthis_conf){
            clearInterval(addthisCheck );
            changeAddThis();
        }
    }.periodical(400);
});
 
/*Fontsize Changer*/
function getComputedElementStyle(elem, name) {
    // J/S Pro Techniques p136
    if (elem.style[name]) {
        return elem.style[name];
    } else if (elem.currentStyle) {
        return elem.currentStyle[name];
    }
    else if (document.defaultView && document.defaultView.getComputedStyle) {
        name = name.replace(/([A-Z])/g, "-$1");
        name = name.toLowerCase();
        s = document.defaultView.getComputedStyle(elem, "");
        return s && s.getPropertyValue(name);
    } else {
        return null;
    }
}
    var fontsizeModifier = 0;
changeFontSizeEverywhere = function(mod){//mod = 1 || -1    
            var maxFontSize = 2;
            var minFontSize = -2;
            
            var newsize = window.fontsizeModifier + mod;
            var elements = [
                document.getElement('.fontsize-down'),
                document.getElement('.fontsize-reset'),
                document.getElement('.fontsize-up')
            ];
            if(newsize < 0){
                elements[0].setStyle('border-bottom', '1px solid #737373');
                elements[2].setStyle('border-bottom', '0');
                
            }else if(newsize > 0){
                elements[0].setStyle('border-bottom', '0');
                elements[2].setStyle('border-bottom', '1px solid #737373');
            }
            else {
                elements[0].setStyle('border-bottom', '0');
                elements[2].setStyle('border-bottom', '0');    
            }
            if(window.fontsizeModifier + mod > maxFontSize || window.fontsizeModifier + mod < minFontSize){ return; }
            window.fontsizeModifier += mod;
            var els = document.getElements('*').filter(function(el){if($(el).get)return ($(el).get('text') !== '');});
            els.each(function(el){ //erst zwischenspeichern...
                var modifier = mod;
                if(el.hasClass('no-fontresize') || el.getParent('.no-fontresize')){
                    modifier = 0;
                }
                el.store('_font-size', getComputedElementStyle(el, 'fontSize').toInt()+modifier);
                el.store('_line-height', getComputedElementStyle(el, 'lineHeight').toInt()+modifier);
            });
            els.each(function(el){ //... dann ändern (vererbungen!)
                el = $(el);//IE
                if(!el.style || isNaN(el.retrieve('_font-size')) || isNaN(el.retrieve('_line-height')) || el.retrieve('_line-height') == 0){return;}//IE
                el.setStyles({
                    'font-size':el.retrieve('_font-size')+'px',
                    'line-height':el.retrieve('_line-height')+'px'
                });
                return;
            });
        }
        
        
        
        
/* fontsize */
    var fontsizeModifier = 0;
window.addEvent('domready', function(ev){
    $$('.fontsize').each(function(con){
        var lt = con.getElement('.fontsize-down').addEvent('click', function(ev){ev.stop();this.focus(); changeFontSizeEverywhere(-1);});
        var gt = con.getElement('.fontsize-up').addEvent('click', function(ev){ev.stop(); this.focus(); changeFontSizeEverywhere(1);});
        var rst = con.getElement('.fontsize-reset').addEvent('click', function(ev){ev.stop(); this.focus(); changeFontSizeEverywhere(window.fontsizeModifier * -1);});
    });
    $$('.box_headline > .rt').each(function(el){
        var w = 0,
            e = el.getPrevious('.lt');
        el.getChildren().each(function(ch){
            w += ch.getDimensions().x;
        });
        if(e){
            e.setStyle('width', 521 - w); // -4px print margin, -3px for spaces in icons.
        }
    });
});
 
/* navigation fix 19239 */
window.addEvent("domready", function(){$$('ul.navTop > li > ul ').each(function(el){ if( el.getElements('li').length == 0){ el.hide(); } });});
/* Locationfinder */
var LocationFinder = new Class({
    Implements:[Options, Events],
    options:{
        network:{
            searchInstance:'generic'
        }
    },
    els:{},
    initialize:function(options){
        this.setOptions(options);
        this.initElements();
        this.initFormToggle().initFormToggle(1);//first w/ event
        this.initNetwork();
        this.initMap();
    },
    initElements:function(){
        var els = this.els,
            h = new Hash({
                'context':'.box_contxt .locationfinder',
                'formtoggle':'.box_contxt .locationfinder .location-form-toggle',
                'form':'.box_contxt .locationfinder form',
                'productselect':'.box_contxt .locationfinder select.category',
                'searchresults':'.box_contxt .locationfinder .results'
            }).each(function(v,k){
                els[k] = document.getElement(v);
            });
        
        this.els.form.getElements('input[type=text]').each(function(el){
            el.store('orgval', el.get('value'));
            el.addEvents({
                focus:function(ev){
                    if(this.get('value') == this.retrieve('orgval')){this.set('value', '');}
                },
                blur:function(ev){
                    if(this.get('value') == ''){this.set('value', this.retrieve('orgval'));}
                }
            });
        });
        this.els.form.addEvent('submit', this.onFormSubmit.bind(this));
        this.els.searchresults.store('scroll', new Fx.Scroll(this.els.searchresults));
    },
    initFormToggle:function(force){ //force: 1 ~ open; 0 ~ close; undefined: only set click event if not set
        var els = this.els,
            activeClass='locationfinder-active';
            togglefunc = function(ev){
                if(ev && ev.stop){new Event(ev).stop();}
                var isActive = els.context.hasClass(activeClass);
                if(isActive || force === 0){
                    els.context.removeClass(activeClass);
                    els.form.fade('out');
                }
                else if(!isActive || force === 1){
                    els.context.addClass(activeClass);
                    els.form.fade('in');
                }
            };
        if(!els.formtoggle.retrieve('toggle')){
            els.formtoggle.addEvent('click', togglefunc).store('toggle', true);
        }
        if(typeof force !== 'undefined'){
            els.formtoggle.fireEvent('click');
        }
        return this;
    },
    onFormSubmit:function(ev){
        ev.stop().preventDefault();
        //copy values to LocationFinderNetwork:
        this.els.form.getElements('input[type=text]').fireEvent('focus');
        var searchValues = [];
        this.els.form.getElements('input, select').each(function(input){
            var type = input.get('type');
            if(type === 'submit' || type === 'reset' || !input.get('value')){return;}
            searchValues[input.get('name')] = input.get('value');
        });
        this.network.submitSearch(searchValues);
        this.els.form.getElements('input[type=text]').fireEvent('blur');
    },
    initMap:function(){
        this.map = new LocationFinderMap();
    },
    initNetwork: function(){
        this.network = new LocationFinderNetwork(this.options.network);
        this.network.addEvents({
            'products': function(res){
                var sel = this.els.productselect;
                sel.getElements('option[value]').destroy();
                if(!res.products.length){return;}
                res.products.product.each(function(v,k){
                    sel.grab(new Element('option',{'value':v.id, 'text':v.name}));
                });
            }.bind(this),
            'search': function(res){
                var container = new Element('div').setStyles({'visibility':'hidden', 'opacity':0}),
                    count = res.LocationList.count,
                    addresses = [];
                this.els.formtoggle.getParent().getElement('span').setStyles({visibility:'hidden', opacity:0}).set('text', '('+count+' Treffer)').fade('in');
                
                res.LocationList['Location'].each(function(v,k){
                    var url = (v.Contact.website).split(' '),
                        url = url[url.length - 1];
                    var resdiv = new Element('div',{
                        'html':'<strong>'+v.name+'</strong><br />'
                            +v.street+' <br />'
                            +v.postalCode+' '+v.city+'<br />'
                        +'<a class="more locationlinkhomepage" href="'+url+'">Homepage</a>'
                        +'<a class="more locationlinkaddress" href="#">Standort</a>'
                        +'<a class="more locationlinkroute" target="_blank" href="http://maps.google.de/maps?daddr='+v.name+', '+v.street+', '
                            +v.postalCode+' '+v.city+', '+v.country+'">Route planen</a>',
                        'class':'result'
                    }).store('address', v);
                    resdiv.getElement('.locationlinkaddress').addEvent('click', function(ev){
                        ev.stop();
                        this.map.centerMarker(resdiv.retrieve('marker'));
                    }.bind(this));
                    container.grab(resdiv);
                }.bind(this));
                //does not work in single loop :/
                container.getElements('.result').each(function(el){
                    addresses.push(el);
                });
                
                this.map.setAddresses(addresses);
                this.els.searchresults.empty().grab(container.fade('in'));
                this.els.searchresults.retrieve('scroll').toTop();
                this.els.formtoggle.fireEvent('click')
            }.bind(this)
        });
    }
});





/*
Handle requests for Product prefill & search:
*/
var LocationFinderNetwork = new Class({
    Implements:[Options, Events],
    options:{
        searchInstance:'generic',
        searchType:'generic',
        productsInstance:'generic',
        productsType:'generic',
        urls:{
            products:'/locationfinder/products',
            search:'/locationfinder/search'
        }
    },
    initialize:function(options){
        this.setOptions(options);
        this.products = new Request.JSON({
            url:this.options.urls.products, 
            method:'get',
            headers:{'Accept': 'application/json'}, 
            onSuccess:function(res){ this.fireEvent('products', res);}.bind(this)
        });
        this.search = new Request.JSON({
            url:this.options.urls.search,
            headers:{'Accept': 'application/json'},
            method:'get',
            onSuccess:function(res){;
                (function(){
                    this.fireEvent('search', res);
                }).bind(this).delay(40);
            }.bind(this)
        });
        this.submitProducts();
    },
    searchValues:{},//filled by LocationFinder
    submitProducts:function(){
        this.products.send({data:{instance:this.options.productsInstance, type:this.options.productsType}});
    },
    submitSearch:function(values){
        if(values){
            this.searchValues = values;
        }
        this.search.send({data:new Hash({instance:this.options.searchInstance, type:this.options.searchType}).combine(this.searchValues)});
    }
});




var LocationFinderMap = new Class({
    Implements:[Options, Events],
    options:{
        mapelement:'#locationmap'
    },
    initialize:function(options){
        //return
        this.setOptions(options);
        this.initjs();
        this.addEvent('addressupdated', this.reCenter);
    },
    initjs:function(){
        window.LocationFinderMapsCallback = function(){
            this.initmap();
        }.bind(this);
        this.mapjs = Asset.javascript('http://maps.google.com/maps/api/js?sensor=false&callback=LocationFinderMapsCallback');
    },
    addresses:[],
    initmap:function(){
        var latlng,
            myOptions;
        latlng = new google.maps.LatLng(51.133333, 9.55);//start in melsungen
        myOptions = {
            zoom: 13,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.TERRAIN
        }
        this.map = new google.maps.Map(document.getElement(this.options.mapelement), myOptions);
        this.ready = 1;
        this.fireEvent('ready');
    },
    addAddresses:function(ads){
        if(!this.ready){
            this.addEvent('ready', function(){this.addAddresses(ads)}.bind(this));
            return;
        }
        this.geocoder = new google.maps.Geocoder();
        Array.each(ads, function(e,i){
            var v = e.retrieve('address');
            var address = ''+v.name+', '+v.street+', '+v.postalCode+', '+v.city+' '+v.country;
            this.geocoder.geocode( { 'address': address}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    v.infowindow = new google.maps.InfoWindow({
                        content: address.replace(/, /g, '<br />')
                    });
                    v.marker = new google.maps.Marker({
                        map: this.map, 
                        position: results[0].geometry.location
                    });
                    e.store('marker', v.marker);
                      this.addresses.push(v)
                      this.fireEvent('addressupdated', this.addresses);
                } else {
                    alert("Geocode was not successful for the following reason: " + status);
                }
            }.bind(this));
            
        }.bind(this));
        
    },
    setAddresses:function(ads){//Todo: clear marker
        for(var i=0; i<this.addresses.length; i++){
          //if(this.addresses[i].marker.set_map){
              this.addresses[i].marker.setMap(null);
          //}
          this.addresses[i].infowindow.close();
        }
        this.addresses = [];
        this.addAddresses(ads);
    },
    submitSearch:function(values){
        if(values){
            this.searchValues = values;
        }
        this.search.send({data:new Hash({instance:this.options.searchInstance, type:this.options.searchType}).combine(this.searchValues)});
    },
    reCenter:function(values){
        if(!this.ready){
            this.addEvent('ready', function(){this.reCenter(values)}.bind(this));
            return;
        }
        var addresslen = this.addresses.length,
            bounds = new google.maps.LatLngBounds()
        ;
        while(addresslen--){
            bounds.extend(this.addresses[addresslen].marker.getPosition());
        }
        this.map.fitBounds( bounds);
    },
    centerMarker:function(marker){
        this.map.panTo(marker.position);
        this.map.setZoom(14);
    }
});
window.addEvent('domready', function(){
    var lf;
    $$('.box_contxt .locationfinder').each(function(el){
        lf = new LocationFinder({
            network:{
                searchInstance: el.get('data-searchinstance')||'genericinstance',
                searchType: el.get('data-searchtype')||'generictype',
                productsInstance: el.get('data-productsinstance')||'genericinstance',
                productsType: el.get('data-productstype')||'generictype'
            }
        });
    });
    
});




 


/* short product level texts */
window.addEvent('domready',function() {
    cutContent();
});
function cutContent() {
  // setup options
  var content = $$('.prodNav_overviewEntry div');
  if (content !== undefined) {
    content.each(function(element) {
      // necessary information
      if(element.getStyle('height') != '0px') {
        var content_height = parseFloat(element.getStyle('height')),
            content_line_height = parseFloat(element.getStyle('line-height')),
            content_rows = content_height / content_line_height,
            content_new_height = ( content_height / content_rows ) * 3,
            transparent_div = new Element('div', {
              'class' : 'transparent_div'
            });
        // cut element
        element.setStyles({
          height: content_new_height,
          overflow: 'hidden',
          position: 'relative' 
        });
        // insert image div
        element.adopt(transparent_div);
      }
    });
  }
};
