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

    var doomready = new Object();
    
    doomready = {
        add: function(fn) {
            if (doomready.loaded) return fn();
            var observers = doomready.observers;
            if (!observers) observers = doomready.observers = [];
            observers[observers.length] = fn; // Arraypush is not supported by Mac IE 5
            if (doomready.callback) return;
            doomready.callback = function() {
                if (doomready.loaded) return;
                doomready.loaded = true;
                if (doomready.timer) {
                    clearInterval(doomready.timer);
                    doomready.timer = null;
                }
                var observers = doomready.observers;
                for (var i = 0, length = observers.length; i < length; i++) {
                    var fn = observers[i];
                    observers[i] = null;
                    fn(); // make 'this' as window
                }
                doomready.callback = doomready.observers = null;
            };
    
            var ie = !!(window.attachEvent && !window.opera);
            var webkit = navigator.userAgent.indexOf('AppleWebKit/') > -1;
            if (document.readyState && webkit) { // Apple WebKit (Safari, OmniWeb, ...)
                doomready.timer = setInterval(function() {
                    var state = document.readyState;
                    if (state == 'loaded' || state == 'complete') {
                        doomready.callback();
                    }
                }, 50);
            }
            else if (document.readyState && ie) { // Windows IE
                var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';
                document.write(
                    '<script type="text/javascript" defer="defer" src="' + src + '" ' +
                    'onreadystatechange="if (this.readyState == \'complete\') doomready.callback();"' +
                    '><\/script>');
            }
            else {
                if (window.addEventListener) { // for Mozilla browsers, Opera 9
                    document.addEventListener("DOMContentLoaded", doomready.callback, false);
                    window.addEventListener("load", doomready.callback, false); // Fail safe
                }
                else if (window.attachEvent) {
                window.attachEvent('onload', doomready.callback);
                }
                else { // Legacy browsers (e.g. Mac IE 5)
                    var fn = window.onload;
                    window.onload = function() {
                        doomready.callback();
                        if (fn) fn();
                    }
                }
            }
        }
    }

/*-- 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 () {
                swapImage(this, oldsrc);
            }
        }
    }

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

    function addClass(obj, newclass) {
        if(obj.className.indexOf(newclass) == -1)
            obj.className += " " + newclass;
    }
    
    function removeClass(obj, oldclass) {
        var classes = obj.className.split(' ');
        for(i=0; i<classes.length; i++) {
            if(classes[i] == oldclass)
                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 --*/

    var custom_required_text = new Object();
    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;
        var inputs = document.getElementsByTagName('*');
        for(i=0; i < inputs.length; i++) {
            if(inputs[i].name) {
                if(inputs[i].name == 'email_empfaenger') {
                    email_empfaenger = inputs[i];
                }
            }
        }
        if(email_empfaenger) {
            if(email_empfaenger.tagName.toLowerCase() == 'select') {
                var options = email_empfaenger.getElementsByTagName('option');
                for(o=0; o<options.length; o++) {
                    options[o].value = options[o].value.replace('+at+', '@');
                }
            }
            else {
                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].oldformonblur = required[i].onblur;
            required[i].onblur = function() {
                validate(this);
                if(this.oldformonblur)
                    this.oldformonblur();
            }
        }
        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') {
                        checkboxeles[i].name = checkboxes[c].name; // we need the name to check for custom_required_texts
                        if(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') {
                        radioeles[i].name = radios[c].name; // we need the name to check for custom_required_texts
                        if(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) {
                        if(el.value == Math.round(el.value)) {
                            valid = true;
                        }
                        else {
                            valid = false;
                            set_msg(el, label_valid_postal_code);
                        }
                    }
                }
                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;
        }

        if(custom_required_text[el.name])
            msg = custom_required_text[el.name];

        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;
        document.location.href = '#validationMessage';
    }

    doomready.add(function() {
        init_forms();
    });

/*-- search --*/

    function init_search() {
        if (document.getElementById('search')) {
            var search_string = label_search_value;
            var searchinput = document.getElementById('fld_search');
            searchinput.search_string = search_string;
            var searchform = document.getElementById('search');
            searchinput.onfocus = function(e) {
                if (this.value == this.search_string) {
                    this.value = '';
                }
            }
            searchinput.onblur = function(e) {
                if (this.value == '') {
                    this.value = this.search_string;
                }
            }
        }
    }

    doomready.add(function() {
        init_search();
    });

/*-- filter/sort tables --*/

    function init_table_sort() {
        var tables = document.getElementsByTagName('table');
        for(t=0; t<tables.length; t++) {
            if(tables[t].className.indexOf('sortable') > -1) {
                tables[t].data = new Array();
                // check column descriptions
                tables[t].columndesc = new Array();
                tables[t].filterstrings = new Array();
                var ths = tables[t].getElementsByTagName('thead')[0].getElementsByTagName('th');
                for(th=0; th<ths.length; th++) {
                    var col = new Object();
                    col['name'] = ths[th].innerHTML;
                    col['settings'] = new Object();
                    var settings = ths[th].className.split(' ');
                    for(set=0; set<settings.length; set++) {
                        col['settings'][settings[set]] = 1;
                    }
                    tables[t].columndesc.push(col);

                    if(ths[th].title) {
                        tables[t].filterstrings[th] = ths[th].title.replace('%', col['name']);
                    }
                }
                // check values
                tables[t].columntagnames = new Array(); // so we can support td and th
                var trs = tables[t].getElementsByTagName('tbody')[0].getElementsByTagName('tr');
                for(tr=0; tr<trs.length; tr++) {
                    var trdata = new Array();
                    var tds = trs[tr].getElementsByTagName('*');
                    if(tds.length > 0) {
                        for(td=0; td<tds.length; td++) {
                            if(tds[td].tagName.toLowerCase() == 'td' || 
                                tds[td].tagName.toLowerCase() == 'th') {

                                // get rid of script tags
                                if(tds[td].getElementsByTagName('script').length > 0) {
                                    var scripts = tds[td].getElementsByTagName('script');
                                    for(script=0; script<scripts.length; script++) {
                                        scripts[script].parentNode.removeChild(scripts[script]);
                                    }
                                }

                                trdata.push(tds[td].innerHTML);

                                if(tables[t].columntagnames.length < tables[t].columndesc.length) {
                                    tables[t].columntagnames.push(tds[td].tagName.toLowerCase()); // save tagname so we can reproduce it later
                                }
                            }
                        }
                        tables[t].data.push(trdata);
                    }
                }
                // now create control panel depending on settings of colum descriptions
                tables[t].panel = document.createElement('div');
                tables[t].panel.className = 'panel';
                tables[t].parentNode.insertBefore(tables[t].panel, tables[t]);
                // * sortable
                var sorter = document.createElement('select');
                sorter.className = 'sort';
                for(col=0; col<tables[t].columndesc.length; col++) {
                    var coldesc = tables[t].columndesc[col];
                    if(coldesc['settings']['sort']) {
                        var opt = new Option(label_sort + ' ' + coldesc['name'], col);
                        sorter.options[sorter.options.length] = opt;
                    }
                }
                if(sorter.options.length > 0)
                    tables[t].panel.appendChild(sorter);
                // * ascending / descending
                var ascdesc = document.createElement('select');
                ascdesc.className = 'ascdesc';
                var ascdesc_values = new Array(label_asc, label_desc);
                for(c=0; c<ascdesc_values.length; c++) {
                    var opt = new Option(ascdesc_values[c], c);
                    ascdesc.options[ascdesc.options.length] = opt;
                }
                if(sorter.options.length > 0)
                    tables[t].panel.appendChild(ascdesc);
                    tables[t].panel.appendChild(document.createElement('br'));  
                // * filter
                for(col=0; col<tables[t].columndesc.length; col++) {
                    var coldesc = tables[t].columndesc[col];
                    var coldfilterstring = tables[t].filterstrings[col];
                    if(coldesc['settings']['filter']) {
                        var filter = document.createElement('select');
                        filter.col = col; // save to which column this filter belongs to
                        filter.className = 'filter';
                        var opt = new Option(coldfilterstring ? coldfilterstring : label_showall.replace('STRING', coldesc['name']), '');
                        filter.options[filter.options.length] = opt;
                        var words = new Object();
                        for(d=0; d<tables[t].data.length; d++) {
                            if(coldesc['settings']['list']) {
                                var tempdiv = document.createElement('div');
                                tempdiv.innerHTML = tables[t].data[d][col];
                                var lis = tempdiv.getElementsByTagName('li');
                                for(li=0; li<lis.length; li++) {
                                    words[lis[li].innerHTML] = 1;
                                }
                            }
                            else {
                                words[tables[t].data[d][col]] = 1;
                            }
                        }
                        for(w in words) {
                            var opt = new Option(label_showonly.replace('STRING', w), w);
                            filter.options[filter.options.length] = opt;
                        }
                        tables[t].panel.appendChild(filter);
                    }
                }
                // * onchange function
                var selects = tables[t].panel.getElementsByTagName('select');
                tables[t].panel.table = tables[t]; // save table in panel
                for(s=0; s<selects.length; s++) {
                    selects[s].onchange = function() {
                        table_sort(this.parentNode.table, (this.className.indexOf('filter') > -1 ? 'filter_only' : ''));
                    }
                    selects[s].onclick = selects[s].onchange;
                }

                if(tables[t].className.indexOf('no_initial_sort') == -1) {
                    table_sort(tables[t]);
                }
            }
        }
    }

    function table_sort(table, options) {
        if(options == undefined)
            options = "";

        var stable = document.createElement('table'); // sortable table
        stable.data = table.data;
        stable.columndesc = table.columndesc;
        stable.columntagnames = table.columntagnames;
        stable.panel = table.panel;
        stable.panel.table = stable; // save table in panel
        stable.className = table.className;

        // get info of which column should be sorted, and which filter should be applied
        stable.sortbycol = 0;
        stable.ascdesc = 0; // ascending
        stable.ascdesc_select;
        stable.sort_select;
        stable.filtercol = new Array();
        var selects = stable.panel.getElementsByTagName('select');
        for(s=0; s<selects.length; s++) {
            if(selects[s].className.indexOf('sort') > -1) {
                stable.sortbycol = selects[s].value;
                stable.sort_select = selects[s];
            }

            if(selects[s].className.indexOf('filter') > -1) {
                stable.filtercol[selects[s].col] = selects[s].value;
            }

            if(selects[s].className.indexOf('ascdesc') > -1) {
                stable.ascdesc = selects[s].value;
                stable.ascdesc_select = selects[s];
            }
        }

        if(options.indexOf('filter_only') == -1) {
            // sort
            // we'll do a little trick here; we simply copy the col values in front, sort it, and then drop the first col again
            for(d=0; d<stable.data.length; d++) {
                stable.data[d].unshift(stable.data[d][stable.sortbycol]);
            }
            stable.data.sort();
            if(stable.ascdesc == 1) { // ascending (0) or descending (1)?
                stable.data.reverse();
            }
            for(d=0; d<stable.data.length; d++) {
                stable.data[d].shift();
            }
        }

        // clone colgroups
        var colgroups = table.getElementsByTagName('colgroup');
        if(colgroups.length > 0) {
            var colgroup = colgroups[0].cloneNode(true);
            stable.appendChild(colgroup);
        }

        // draw header
        var thead = document.createElement('thead');
        stable.appendChild(thead);
        var tr = document.createElement('tr');
        thead.appendChild(tr);
        for(c=0; c<stable.columndesc.length; c++) {
            if(!stable.columndesc[c]['settings']['hide']) {
                var th = document.createElement('th');
                th.innerHTML = stable.columndesc[c]['name'];
                th.col = c; // save which column this th belongs to
                th.table = stable; // save my parent table
                tr.appendChild(th);
                if(stable.sortbycol == c) {
                    if(stable.ascdesc == 0) {
                        th.className = 'sort_asc';
                    }
                    else {
                        th.className = 'sort_desc';
                    }
                }
                if(stable.columndesc[c]['settings']['sort']) {
                    th.className += ' sortable';
                    th.onclick = function() {
                        var tbl = this.table;
                        if(tbl.sortbycol == this.col) {
                            tbl.ascdesc_select.value = (tbl.ascdesc_select.value == 0 ? 1 : 0);
                        }
                        stable.sort_select.value = this.col;
                        table_sort(tbl);
                    }
                }
            }
        }

        // draw body, but only rows that are allowed by filter, and not hidden
        var tbody = document.createElement('tbody');
        stable.appendChild(tbody);
        for(d=0; d<stable.data.length; d++) {
            var tr = document.createElement('tr');
            var show = 1;
            for(c=0; c<stable.columndesc.length; c++) {
                var td = document.createElement(stable.columntagnames[c]);

                if(!stable.columndesc[c]['settings']['hide'])
                    tr.appendChild(td);

                td.innerHTML = stable.data[d][c];

                if(stable.columndesc[c]['settings']['filter'] &&  stable.filtercol[c] != "") {
                    if(stable.columndesc[c]['settings']['list']) {
                        var lis = td.getElementsByTagName('li');
                        var correct = 0;
                        for(li=0; li<lis.length; li++) {
                            if(lis[li].innerHTML == stable.filtercol[c]) {
                                correct++;
                            }
                        }
                        if(correct == 0)
                            show = 0;
                    }
                    else {
                        if(td.innerHTML != stable.filtercol[c]) {
                            show = 0;
                        }
                    }
                }
            }

            if(show)
                tbody.appendChild(tr);
        }

        // insert new table, delete old table
        table.parentNode.insertBefore(stable, table);
        table.parentNode.removeChild(table);
    }

    doomready.add(function() {
        init_table_sort();
    });

/* VRT Aktuell
------------------------------------------------------------------------------------------------ */

$(document).ready(function() {

    if (!$('#news_overview').length)
        return;

    $.loadVRTAktuell();

    $('#news_overview .footer').prepend(
        $('<a>').attr('href', '#').text('weitere Themen anzeigen').addClass('more').click(function() {
            $('#news_overview li:visible').addClass('old');
            $('#news_overview li').not(':visible').each(function(id) {
                if (id <= 6)
                    $(this).show();
                else
                    return;
            });
            return false;
        }).addClass('load').hide()
    );

});

$.loadVRTAktuell = function(limit) {

    $.ajax( {
        type        : 'GET',
        url         : $('.startpage #news_overview').length ? top_themen_xml : $('#news_overview.news').length ? news_top_themen_xml : events_top_themen_xml,
        dataType    : 'xml',
        error       : function(jqXHR, textStatus, errorThrown) {

                    },
        success     : function(xml, textStatus) {

                        $('entry', xml).each(function(id) {

                            var title = $(this).text();

                            $('#news_overview ul').append(
                                $('<li>').hide().append(
                                    $('<a>').attr('href', $(this).attr('link')).text(title)
                                )
                            );

                        });

                    },
        complete    : function() {
                        $('#news_overview .load').show();
                    }
    });

};


/* Ansprechpartner popup
------------------------------------------------------------------------------------------------ */

$(document).ready(function() {

    if(!$('.service_contact').length)
        return;

    $('.popup_content').removeClass('hideme').hide();

    $('.team_item .popup').click(function() {
        $('.popup_content').hide();
        $('.popup_content', $(this).parents('.team_item')).fadeIn('slow');
        return false;
    });
    
    $('.team_item .close').click(function() {
        $('.popup_content').fadeOut('slow');
        return false;
    });

});

