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://de.sterilog.com/cps/rde/xchg/ae-sterilog-de-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://de.sterilog.com/cps/rde/xchg/ae-sterilog-de-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://de.sterilog.com/cps/rde/xchg/ae-sterilog-de-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">Produkte</span>'
        });
        var viewAllLi = new Element('li', {
            'class': 'search_autocomplete_footer',
            'html': '<a href="#search" class="more">Alle Ergebnisse ansehen</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://de.sterilog.com/cps/rde/xchg/ae-sterilog-de-int/hs.xsl/';    

    if(image != ""){imgStr = '<img src="'+image+'&max=50" alt="'+name+'" />';}
    if(docCheckVisible){teaser = teaser.entityDecode();}else{teaser='Diese Seite ist DocCheck-geschützt. DocCheck ist ein Identifikationsservice für medizinische Fachkreise im Internet. Bitte melden Sie sich bei DocCheck an, um ein Passwort zu erhalten. Wenn Sie ein Passwort erhalten haben, können Sie sich einloggen.';}
    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 = 'Bild';
var bbr_lb_of = 'von';
/*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);
      }
    });
  }
};
