/*-- spam protection --*/

    function getAdr(prefix, postfix, text) {
        document.write('<a href="mailto:' + prefix + '@' + postfix + '">' + (text ? text.replace(/&quot;/g, '"').replace(/%EMAIL%/, prefix + '@' + postfix) : prefix + '@' + postfix) + '</a>');
    }

/*-- swap image --*/

    function swapImage(element, newimage) {
        var oldsrc = element.src;
        element.src = newimage;
        if (!element.onmouseout) {
            element.onmouseout = function (event) { swapImage(this, oldsrc); };
        }
    }

/*-- hover --*/

    function init_hover() {
        var tags = new Array('tr');
        for(t=0; t<tags.length; t++) {
            var eles = document.getElementsByTagName(tags[t]);
            for(var i = 0; i < eles.length; i++) {
                eles[i].onmouseover = function() { addClass(this, 'hover'); }
                eles[i].onmouseout = function() { removeClass(this, 'hover'); }            
            }
        }
    }

/*-- focus --*/

    function init_focus() {
            var tags = new Array('input','button','textarea');
            for(t=0; t<tags.length; t++) {
                var eles = document.getElementsByTagName(tags[t]);
                for(i=0; i<eles.length; i++) {
                    eles[i].onfocus = function() { addClass(this, 'focus'); }
                    eles[i].onblur = function() { removeClass(this, 'focus'); }
                }
            }
    }

/*-- add/remove class --*/

    function addClass(obj, newclass) {
        if(obj.className.indexOf(newclass) == -1)
            obj.className += " " + newclass;
    }
    
    function removeClass(obj, newclass) {
        var classes = obj.className.split(' ');
        for(i=0; i<classes.length; i++) {
            if(classes[i].indexOf(newclass) > -1)
                classes[i] = "";
        }
        obj.className = classes.join(' ');
    }

/*-- getElementsByClassName --*/

    function getElementsByClassName(strClass, strTag, objContElm) {
        strTag = strTag || "*";
        objContElm = objContElm || document;
        var objColl = objContElm.getElementsByTagName(strTag);
        if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
        var arr = new Array();
        var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
        var arrClass = strClass.split(delim);
        for (var i = 0, j = objColl.length; i < j; i++) {
            var arrObjClass = objColl[i].className.split(' ');
            if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
            var c = 0;
            comparisonLoop:
            for (var k = 0, l = arrObjClass.length; k < l; k++) {
                for (var m = 0, n = arrClass.length; m < n; m++) {
                    if (arrClass[m] == arrObjClass[k]) c++;
                    if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
                        arr.push(objColl[i]);
                        break comparisonLoop;
                    }
                }
            }
        }
        return arr;
    }

/*-- validform --*/

    function init_forms() {
        var content = document.getElementById('content');
        if(content) {
            var forms = content.getElementsByTagName('form');
            for(f=0; f<forms.length; f++) {
                init_form(forms[f]);
            }
        }
        var email_empfaenger = document.getElementById('email_empfaenger');
        if(email_empfaenger)
            email_empfaenger.value = email_empfaenger.value.replace('+at+', '@');
    }

    function init_form(form) {
        var required = getElementsByClassName('required', '*', form);
        for(i=0; i<required.length; i++) {
            required[i].onblur = function() {
                validate(this);
            }
        }
        form.onsubmit = function() {
            var doSubmit = true;
            var list = new Array();
            var required = getElementsByClassName('required', '*', this);
            for(v=0; v<required.length; v++) {
                if(! validate(required[v])) {
                    doSubmit = false;
                    list.push(required[v]);
                }
            }
            var checkboxeles = getElementsByClassName('required_checkbox', '*', this);
            for(i=0; i<checkboxeles.length; i++) {
                valid = false;
                checkboxes = checkboxeles[i].getElementsByTagName('input');
                for(c=0; c<checkboxes.length; c++) {
                    if(checkboxes[c].type == 'checkbox' && checkboxes[c].checked) {
                        valid = true;
                    }
                }
    
                if(valid == false) {
                    doSubmit = false;
                    set_msg(checkboxeles[i], label_valid_checkbox);
                    list.push(checkboxeles[i]);
                } 
                else {
                    clear_msg(checkboxeles[i]);
                }
            }
            var radioeles = getElementsByClassName('required_radio', '*', this);
            for(i=0; i<radioeles.length; i++) {
                valid = false;
                radios = radioeles[i].getElementsByTagName('input');
                for(c=0; c<radios.length; c++) {
                    if(radios[c].type == 'radio' && radios[c].checked) {
                        valid = true;
                    }
                }
    
                if(valid == false) {
                    doSubmit = false;
                    set_msg(radioeles[i], label_valid_radio);
                    list.push(radioeles[i]);
                } 
                else {
                    clear_msg(radioeles[i]);
                }
            }
        if(doSubmit == false)
            show_error(list);
        return doSubmit;
        }
    }

    function validate(el) {
        var valid = true;
        clear_msg(el);
        switch(el.type) {
            case 'text':
            case 'textarea':
            case 'select-one':
                if(el.value != '') {
                    if(el.className.indexOf('email') > -1) {
                        var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
                        if(el.value.toUpperCase().match(regEmail)){
                            valid = true;
                        }
                        else {
                            valid = false;
                            set_msg(el, label_valid_email);
                        }
                    }
                    if(el.className.indexOf('number') > -1) {
                        var regNum = /[-+]?[0-9]*\.?[0-9]+/;
                        if(el.value.match(regNum)){
                            valid = true;
                        }
                        else {
                            valid = false;
                            set_msg(el, label_valid_postalcode);
                        }
                    }
                }
                else {
                    valid = false;
                    set_msg(el);
                }
                break;
        }
    
        return valid;
    }

    function set_msg(el, msg) {
        if(msg == undefined) {
            msg = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' ' + label_valid_required;
        }
    
        el.errorMessage = msg;
        if(el.parentNode.className.indexOf('error') == -1)
            el.parentNode.className += ' error';
    }

    function clear_msg(el) {
        var classes = el.parentNode.className.split(' ');
        for(i=0; i<classes.length; i++) {
            if(classes[i].indexOf('error') > -1)
                classes[i] = "";
        }
        el.parentNode.className = classes.join(' ');
        el.errorMessage = "";
    }

    function show_error(list) {
        errorlist = '<ul>';
        for(i=0; i<list.length; i++) {
            el = list[i];
            if(el.errorMessage != undefined)
                errorMessage = el.errorMessage;
            else
                var errorMessage = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' ' + label_valid_required;
    
            errorlist += '<li>' + errorMessage + '</li>';
        };
        errorlist += '</ul>';
    
        var validationMessage = document.getElementById('validationMessage');
        //validationMessage.innerHTML = '<h2 title="' + label_valid_error + '">' + label_valid_error + '</h2>' + errorlist;
        validationMessage.innerHTML = '<span id="validationMessage">Bitte füllen Sie vor dem Versenden mindestens die rot markierten Felder aus.</span>';
        document.location.href = '#validationMessage';
    }


/*-- alternativ x-menu --*/

    var navImagesNormal = new Array();
    var navImagesHover = new Array();
    function init_nav() {
        var nav = document.getElementById('nav');
        var lis = nav.getElementsByTagName('li');
        for(var i = 0; i < lis.length; i++) {
            lis[i].number = i;
            lis[i].onmouseover = function() {
                addClass(this, 'hover');
                var img = this.getElementsByTagName('img');
                if(img[0] && navImagesHover[this.number])
                    img[0].src = navImagesHover[this.number];
            }
            lis[i].onmouseout = function() {
                removeClass(this, 'hover');
                var img = this.getElementsByTagName('img');
                if(img[0] && navImagesNormal[this.number])
                    img[0].src = navImagesNormal[this.number];
            }
            var img = lis[i].getElementsByTagName('img');
            if(img[0] && img[0].onmouseover) {
                navImagesNormal[i] = img[0].src;
                img[0].onmouseover();
                navImagesHover[i] = img[0].src;
                img[0].onmouseout();
                img[0].onmouseover = function() {};
                img[0].onmouseout = function() {};
            }
        }
    }

/*-- offer maps --*/

var activeMap = "";
function init_offer_maps() {
    var maps = $$('.offerings .maps .map');
    if(maps.length) {
        maps.each(function(map, i) {
            map.setStyle('display', 'none');
        });
    }

    var areas = $$('.offerings .maps area');
    if(areas.length) {
        areas.each(function(area, i) {
            area.mapID = area.id.replace('area_', 'maps_');
            area.addEvent('click', function() {
                if($(this.mapID)) {
                    if($(activeMap)) {
                        $(activeMap).setStyle('backgroundPosition', '0 0');
                        $(activeMap).setStyle('display', 'none');
                    }
                    $(this.mapID).setStyle('display', 'block');
                    $(this.mapID).setStyle('backgroundPosition', '0px ' + (0-$(this.mapID).getHeight()) + 'px');

                    var link = $(this.mapID).getElement('a');

                    var content = $$('.right .content')[0];
                    content.innerHTML = "<br><br>";
                    content.addClass('loading');

                    var xml = new Request.HTML({
                        onComplete: function(tree, eles, html, js) {
                            var content = $$('.right .content')[0];
                            content.innerHTML = html;
                            content.getElements('.entry').each(function(entry, en) {
                                var longtext = entry.getElement('.longtext');
                                if(longtext) {
                                    entry.longtextheight = longtext.getHeight();
                                    entry.expanded = false;
                                    longtext.setStyles({
                                        height: 0,
                                        overflow: 'hidden'
                                    });
                                    entry.fx = new Fx.Morph(longtext, {
                                        duration: 500,
                                        wait: false,
                                        onComplete: function() {
                                        }
                                    });
                                    entry.addEvent('click', function(e) {
                                        var event = new Event(e).stop();
                                        if(this.expanded == false) {
                                            this.fx.start({
                                                height: this.longtextheight
                                            });
                                            this.expanded = true;
                                        }
                                        else {
                                            this.fx.start({
                                                height: 0
                                            });
                                            this.expanded = false;
                                        }
                                    });
                                    entry.setStyle('cursor', 'pointer');
                                }
                            });
                            content.removeClass('loading');
                        }
                    }).get(link.href + '?' + Math.random());
                    activeMap = this.mapID;
                }
            });
            area.addEvent('mouseover', function() {
                if($(this.mapID)) {
                    if(this.mapID != activeMap)
                        $(this.mapID).setStyle('display', 'block');
                }
            });
            area.addEvent('mouseout', function() {
                if($(this.mapID)) {
                    if(this.mapID != activeMap)
                        $(this.mapID).setStyle('display', 'none');
                }
            });
        });
    }
}

/*-- report messages --*/

function init_report_messages() {
    if($$('.report_quartal').length) {
        var reports = $$('.report_quartal')[0].getChildren('li');
        reports.each(function(el, i) {
            var li = el;
            var ul = li.getChildren('ul')[0];
            var a = li.getChildren('a')[0];
            a.addEvent('click', function(event) {
                var e = new Event(event);
                e.stop();
                expand(this.parentNode);
            });
            if(i != 0) {
                ul.setStyle('display', 'none');
            }
        });

        var messages = $$('.report_message_browser')[0].getChildren('li');
        messages.each(function(el, i) {
            var li = el;
            var ul = li.getChildren('ul')[0];
            var a = li.getChildren('a')[0];
            a.addEvent('click', function(event) {
                var e = new Event(event);
                e.stop();
                expand(this.parentNode);
            });
            if(i != 0) {
                ul.setStyle('display', 'none');
            }

            var msgs = ul.getChildren('li');
            msgs.each(function(msg, i) {
                var link = msg.getChildren('a')[0];
                link.addEvent('click', function(event) {
                    var e = new Event(event);
                    e.stop();
                    var xml = new Request.HTML({
                        onComplete: function(tree, eles, html, js) {
                            var title = "";
                            var date = "";
                            var text = "";
                            var dummy_div = new Element('div');
                            dummy_div.inject(document.body, 'bottom');
                            dummy_div.innerHTML = html;
                            eles = dummy_div.getElements('*');

                            eles.each(function(el, i) {
                                if(el.className  == "title") {
                                    title = el.innerHTML;
                                }
                                if(el.className == "date") {
                                    date = el.innerHTML;
                                }
                                if(el.className == "text") {
                                    text = el.innerHTML;
                                }
                            });

                            var html = '<p class="date">Meldung vom ' + date + '</p><h2>' + title + '</h2>';
                            html += '<div class="text">' + text + '</div>';
    
                            if(text != "" && title != "" && date != "")
                                showHTMLPopup(html);

                            msg.removeClass('loading');
                            dummy_div.destroy();
                        }
                    }).get(this.href + '?' + Math.random());

                    msg.addClass('loading');
                });
            });
        });
    }
}

function expand(li) {
    var ul = li.getChildren('ul')[0];
    if(ul) {
        if(ul.getStyle('display') == 'block') {
            ul.setStyle('display', 'none');
        }
        else {
            ul.setStyle('display', 'block');
        }
    }
}

function showHTMLPopup(html) {
    var popupcontainer = $('popupcontainer');
    if(!popupcontainer) {
        popupcontainer = new Element('div').inject(document.body, 'bottom');
        popupcontainer.id = 'popupcontainer';
    }

    popupcontainer.setStyles({
        position: 'fixed',
        top: '0',
        left: '0',
        right: '0',
        bottom: '0',
        background: 'black',
        opacity: '0',
        zIndex: '100000'
    });

    if(navigator.userAgent.indexOf('MSIE 6') > -1) {
        popupcontainer.setStyles({
            position: 'absolute',
            width: document.getWidth(),
            height: document.getHeight(),
            top: $(document.body).getScroll().y
        });
    }

    popupcontainer.html = html;
    popupcontainer.html += '<a class="close" href="javascript:closeHTMLPopup()"><span>X</span></a>';
    popupcontainer.innerHTML = "";
    var fx = new Fx.Morph(popupcontainer, {
        duration: 500,
        wait: false,
        onComplete: function() {
            var popupcontent = $('popupcontent');
            if(!popupcontent) {
                popupcontent = new Element('div').inject(document.body, 'bottom');
                popupcontent.id = 'popupcontent';
            }
            popupcontent.setStyles({
                border: '2px solid gray',
                background: 'white',
                position: 'fixed',
                top: '50%',
                left: '50%',
                width: 600,
                marginLeft: -300,
                padding: 20,
                zIndex: popupcontainer.getStyle('zIndex')+1,
                opacity: 0,
                visibility: 'hidden'
            });

            popupcontent.innerHTML = popupcontainer.html;
            var close = popupcontent.getElement('.close');
            if(close) {
                close.addEvent('mouseover', function() {
                    this.setStyle('opacity', 0.5);
                });
                close.addEvent('mouseout', function() {
                    this.setStyle('opacity', 1);
                });
            }
            popupcontent.origHeight = popupcontent.getHeight(); //save for later
            if(popupcontent.getHeight() > document.body.offsetHeight) {
                popupcontent.setStyles({
                    overflow: 'hidden',
                    height: (document.body.offsetHeight - popupcontent.getStyle('padding').toInt() - 40)
                });
            }
            popupcontent.setStyles({
                marginTop: 0-Math.round(popupcontent.getHeight()/2),
                visibility: 'visible',
                overflow: 'auto'
            });
            var aphex = new Fx.Morph(popupcontent, {
                duration: 500,
                wait: false,
                onComplete: function() {
                    popupcontainer.addEvent('click', function() {
                        closeHTMLPopup();
                    });
                }
            }).start({
                opacity: 1
            });

            if(navigator.userAgent.indexOf('MSIE 6') > -1) {
                popupcontent.setStyles({
                    position: 'absolute',
                    marginTop: 0,
                    top: $(document.body).getScroll().y + (document.body.offsetHeight / 2)  - (popupcontent.getHeight() / 2)
                });
            }
        }
    }).start({
        opacity: '0.4'
    });
}

function closeHTMLPopup() {
    [$('popupcontainer'), $('popupcontent')].each(function(el, i) {
        if(el) {
            el.removeEvents('click');
            var fx = new Fx.Morph(el, {
                duration: 500,
                wait: false,
                onComplete: function() {
                    if($('popupcontent'))
                        $('popupcontent').destroy();
                }
            }).start({
                opacity: 0
            });
        }
    });
}

function resizeHTMLPopup() {
    var popupcontent = $('popupcontent');
    var popupcontainer = $('popupcontainer');
    if(popupcontent) {
        if(popupcontent.getHeight() > document.body.offsetHeight) {
            popupcontent.setStyles({
                overflow: 'auto',
                height: (document.body.offsetHeight - popupcontent.getStyle('padding').toInt() - 40)
            });
        }
        else {
            popupcontent.setStyles({
                height: popupcontent.origHeight - 40
            });
        }
        popupcontent.setStyles({
            marginTop: 0-Math.round(popupcontent.getHeight()/2)
        });

        if(navigator.userAgent.indexOf('MSIE 6') > -1) {
            popupcontainer.setStyles({
                top: $(document.body).getScroll().y,
                width: document.body.getWidth(),
                height: document.body.getHeight()
            });
            popupcontent.setStyles({
                top: $(document.body).getScroll().y + (document.body.offsetHeight / 2)  - (popupcontent.getHeight() / 2),
                marginTop: 0
            });
        }
    }
}

function init_show_hide_boxing() {
    var boxinggloves = getElementsByClassName('showhide_box', '*');
    if(boxinggloves.length > 0) {
        for(i=0; i<boxinggloves.length; i++) {
            var h3 = boxinggloves[i].getElementsByTagName('h3')[0];
            var checkbox = getElementsByClassName('checkbox', '*', boxinggloves[i])[0];
            h3.onclick = function() {
                var checkbox = getElementsByClassName('checkbox', '*', this.parentNode)[0];
                var toggler = getElementsByClassName('toggler', '*', this.parentNode)[0];
                if(toggler.style.display == 'block') {
                    toggler.style.display = 'none';
                    checkbox.checked = false;
                }
                else {
                    toggler.style.display = 'block';
                    checkbox.checked = true;
                }
            }
            checkbox.onclick = function() {
                this.parentNode.getElementsByTagName('h3')[0].onclick();
            }
        }
    }
}

/*
             \|/
            .-*-
           / /|\
          _L_
        ,"   ".
    (\ /  O O  \ /)
     \|    _    |/
       \  (_)  /
       _/.___,\_
     (_/ doom  \_)
         ready, the end is near
*/

    var doomreadywaiter = window.setInterval(function() {
        if (document.body && document.getElementById('content')) {
            window.clearInterval(doomreadywaiter);
            doomready();            
        }
    }, 100);
    function doomready() {
        init_hover();
        init_focus();
        init_forms();
        init_nav();
        init_show_hide_boxing();

        if(window.addEvent) {
            init_report_messages();
            window.addEvent('resize', function() {
                resizeHTMLPopup();
            });
            window.addEvent('scroll', function() {
                resizeHTMLPopup();
            });
            init_offer_maps();            
        }

    }
