(function($) {
    $.params = {};
    function urlUnescape(text) {
        try      { return decodeURIComponent(text); }
        catch(e) { return unescape(text); }
    };
    (location.search || '?').replace(/([^\?&=]+)=?([^&]*)?/g, function(full, key, data) {
        if (key) { $.params[urlUnescape(key.replace(/\+/g, ' '))] = urlUnescape((data || '').replace(/\+/g, ' ')); }
    });
})(jQuery);
window.Params = { 'get': function(key) { return $.params[key]; } };
AdvConfig = new function() {
    this.adServer = '//adclient.uimserv.net/js.ng/';
    this.positions = {};
    this.init = function(site, section, params) {
        this.site = site;
        this.section = section;
        this.tileid = (Math.random()+'01234567890abc').substr(2, 30);
        this.params = params || {};
    }
    this.addPosition = function(pos, type, sizes, styles, params) {
        this.positions[pos] = { 'type': type, 'sizes': sizes, 'styles': styles, 'params': (params || {}) };
    }
    this.options = function(pos) {
        var result = '';
        var params = this.params;
        var position = this.positions[pos];
        $.extend(params, position.params, { special: position.type, adsize: position.sizes, styles: position.styles });
        $.each(params, function(key, val) {
            $.each($.makeArray(val), function() {
                result += '&' + (key == 'styles' ? 'params.' : '') + key + '=' + encodeURIComponent(this);
            });
        });
        return 'site='+encodeURIComponent(this.site) + '&section='+encodeURIComponent(this.section) + result + '&tile='+this.tileid + '&transactionID='+this.tileid;
    }
    this.output = function(pos) {
        var advURL = this.adServer + this.options(pos);
        document.writeln('<!-- ' + advURL + ' -->');
        document.writeln('<script type="text/javascript" src="' + advURL + '"><\/script>');
        return advURL;
    }
}

Topper = new function() {
    this.hide = function() {
        $('div#topper').slideUp('slow');
        $.cookie.inc('topperLater', 1, 0, '1h');
    }
    this.close = function() {
        $('div#topper').slideUp('slow');
        $.cookie.set('topperLater', '99', '1y');
    }
    this.init = function() {
        $('div#topper').slideDown('slow');
    }
}

NaviLayer = new function() {
    this.init = function(trigger) {
        trigger.removeAttribute('onmouseover');
        trigger.blur();
        var layer = $('.layer:first', $(trigger).parents()).mouseover(function() {
            $(this).addClass('opened'); }).mouseout(function() {
            $(this).removeClass('opened'); });
        return false;
    }
}

SearchPlugin = new function() {
    if ($('head > link[@rel=search]').length == 0) { return; }
    var brand = ((($('head > link[@rel=search]').attr('href') || '').match(/(gmxat|gmxch|gmx|1und1|webde)/) || [false])[0]);
    var pluginVersion = ($.ua.browser.msie ? 'ie' : 'ff')+'_opensearch.xml';
    var plurls = {
        'webde': 'suche.web.de',
        '1und1': 'search.1und1.de',
        'gmx':   'suche.gmx.net',
        'gmxat': 'suche.gmx.at',
        'gmxch': 'suche.gmx.ch'
    };
    this.dlurl = 'http://img.ui-portal.de/search/plugin/'+brand+'/'+pluginVersion;
    try {
        this.supported = (window.external && ('AddSearchProvider' in window.external));
        this.alreadyInstalled = (window.external && ('IsSearchProviderInstalled' in window.external) &&
            (0 != (window.external.IsSearchProviderInstalled('http://'+plurls[brand]) || 0)));
    } catch(e) {};
    this.install = function() {
        if (!this.supported || this.alreadyInstalled) { return; }
        window.external.AddSearchProvider(this.dlurl);
    }
    $(function() { if (SearchPlugin.supported && !SearchPlugin.alreadyInstalled) {
        $('body').addClass('pluginCanBeInstalled');
    } });
}

Suggest = new function() {
    this.fill = function(field, url, show) {
        $.get(url+encodeURIComponent(field.value), null, function(data) {
            if (!data || data == '[]') { return; }
            var suggestlist = '', found = new RegExp('('+field.value+')', 'g');
            data.replace(/\"([^\"]+)\",(\d+)/g, function(match, item, hits) {
                suggestlist += ('<li title="'+item+'"><span class="itemName">'+item.replace(found, '<b>$1</b>')+
                    '</span></li>');
            });
            $('div.layer > ul', field.form).html(suggestlist);
            $('div.layer > ul > li', field.form).bind('mouseenter', function() {
                $(this).addClass('selected'); }).bind('mouseleave', function() {
                $(this).removeClass('selected'); }).bind('mousedown', function() {
                $(field).val(this.title).get(0).blur();
                $('input[name=mc]', field.form).val('suche@web@suggest.suche@web');
                $(field.form).removeClass('showResultList').get(0).submit();
            });
            if (show !== false) { $(field.form).addClass('showResultList'); }
        }, 'text');
    }
    this.init = function(field, layer, url) {
        field.currentTerm = field.value;
        $(field.form).append('<div id="mainSearchResultList" class="resultList overlay"><iframe></iframe><div class="layer"><ul></ul><p>Suchvorschl&auml;ge bereitgestellt durch '+(/(GMX|1&1)/.test(document.title) && RegExp.$1.replace('&', '&amp;') || 'WEB.DE')+'</p></div></div>');
        if ($.ua.browser.msie > 6) { $(field.form).css({marginRight:'1px'}); }
        $(field).bind('keyup focus', function(e) {
            if (!field.value || field.value == '') {
                $(field.form).removeClass('showResultList');
            } else if (e.which && e.which == 8 || field.value.length && field.value.length > 0 &&
                field.value != field.currentTerm) {
                if (field.suggestTimeout) { window.clearTimeout(field.suggestTimeout); }
                field.suggestTimeout = window.setTimeout(function() { this.fill(field, url); }.bind(this), 120);
                field.currentTerm = field.value;
            } else if ($('.resultList ul li').length > 0) {
                $(field.form).addClass('showResultList');
            }
        }.bind(this)).bind('blur', function() {
            window.setTimeout(function() {
                $(field.form).removeClass('showResultList');
            }, 60);
        }.bind(this)).bind('keydown', function(e) {
            var item = $('div.layer > ul > li.selected', field.form);
            if (e.which == 8) {
                item.removeClass('selected');
            } else if (e.which == 13 && item.length == 1) {
                e.preventDefault();
                $(field).val(item.attr('title')).blur();
                $('input[name=mc]', field.form).val('suche@web@suggest.suche@web');
                $(field.form).removeClass('showResultList').submit();
            } else if (e.which == 27) {
                field.blur(); item.removeClass('selected');
            } else if (e.which == 38) {
                if (item.length == 0) { $('div.layer > ul > li:last', field.form).addClass('selected'); }
                else {                  item.removeClass('selected').prev().addClass('selected'); }
            } else if (e.which == 40) {
                if (item.length == 0) { $('div.layer > ul > li:first', field.form).addClass('selected'); }
                else {                  item.removeClass('selected').next().addClass('selected'); }
            }
        });
        if (field.value && field.value.length && field.value.length > 0) { this.fill(field, url, false); }
    }
}

SearchBox = new function() {
    this.load = function(box, url) {
        $(box).load(url, function(content, status) {
            if (status != 'success' || content.length == 0 ||
                !/[^\s]+/.test(content)) { $(box).hide(); }
        });
    }
    this.toggle = function(head) {
        head.title = $(head).parent().toggleClass('infoboxClosed').hasClass('infoboxClosed') ? 'Maximieren' : 'Minimieren';
    }
}

SearchTipList = new function() {
    this.init = function(list) {
        $('#'+list+' ul li.toggle').show();
        $('#'+list+' ul li.toggle ~ li').hide();
    }
    this.show = function(trigger) {
        $('li.toggle', $(trigger).parents()).hide().nextAll().show();
        window.setTimeout(function() { $('#contentData').css({zoom: 1}); }, 1);
        return false;
    }
    this.hide = function(trigger) {
        $(trigger.parentNode).hide().prevAll().each(function() {
            if ($(this).hasClass('toggle')) { $(this).show(); return false; }; $(this).hide(); });
        return false;
    }
}

ResultImageBrowser = function(obj, images) {
    this.player = false;
    this.obj = obj;
    this.position = 0;
    this.images = images;
    $('.fwd', this.obj).click(function() { return this.next(); }.bind(this));
    $('.rwd', this.obj).click(function() { return this.last(); }.bind(this));
    $('.play', this.obj).click(function() { return this.play(); }.bind(this));
}

ResultImageBrowser.prototype.show = function() {
    $('a', this.obj).get(0).href = this.images[this.position].link;
    $('img', this.obj).get(0).src = this.images[this.position].img;
    $('.fwd', this.obj)[(this.position+1 >= this.images.length ? 'addClass' : 'removeClass')]('end');
    $('.rwd', this.obj)[(this.position <= 0 ? 'addClass' : 'removeClass')]('end');
}

ResultImageBrowser.prototype.last = function() {
    if ($('.rwd').hasClass('end')) { return false; }
    this.position = (this.position == 0 ? this.images.length : this.position) - 1;
    this.show();
    return false;
}

ResultImageBrowser.prototype.next = function() {
    if ($('.fwd').hasClass('end')) { return false; }
    this.position = (this.position + 1) % this.images.length;
    this.show();
    return false;
}

ResultImageBrowser.prototype.play = function() {
    if (this.player) {
        window.clearInterval(this.player);
        $('.pause', this.obj).get(0).className = 'play';
        this.player = false;
    } else {
        this.player = window.setInterval(function() {
            this.position = (this.position + 1) % this.images.length;
            this.show();
        }.bind(this), 1800);
        $('.play', this.obj).get(0).className = 'pause';
    }
    return false;
}

function searchIfTrue(formId, inputId) {
    if ($('#'+formId+' #'+inputId).val() != "" && $('#'+formId).submit) { $('#'+formId).submit(); }
}

function checkForNumber(id_or_name, formname) {
    var obj = $('input#'+id_or_name+', input[@name='+id_or_name+']', $('form[@name='+formname+']')).get(0);
    $(obj).bind('keyup', function(e) {
        if ((e.which > 31 && e.which < 48) || e.which > 57) {
            obj.value = (obj.value || '').replace(/\D/,'');
        }
    });
}

function setActiveListItem(item) {
    $('li', item.parentNode).each(function() {
        $('label', this).add(this).removeClass('active').children('input:radio:checked').attr('checked', '');
    });
    $('label', item).add(item).addClass('active').children('input:radio').attr('checked', 'checked');
}

function clearValue(inp, className) {
    if (inp.value == inp.defaultValue) {
        inp.value = '';
        if (className) { $(inp).removeClass(className); }
    }
}

function restoreValue(inp, className) {
    if (inp.value == '') {
        inp.value = inp.defaultValue;
        if (className) { $(inp).addClass(className); }
    }
}

function focusTopSearchform() {
    $(function() { window.setTimeout(function() {
        $('#inpSearchTopSearchterm:first').focus();
    }, 1) });
}

window.openLayer = null;
function toggleRestrictedDiv(div) {
    var elem = $('#'+div);
    if (elem.not(':hidden').length) {
        $(elem).hide();
    } else {
        if (window.openLayer) { $(window.openLayer).hide(); }
        $(elem).show();
        window.openLayer = elem;
    }
}

function dynLanguageSettings() {
    $(':checkbox[name=webLanguages]').click(function() {
        if ($(':checkbox[name=webLanguages]:checked', this.form).length > 8) {
            alert('Die Anzahl der gleichzeitig w\xE4hlbaren Sprachen ist auf 8 beschr\xE4nkt. Es k\xF6nnen deshalb nur maximal 8 Sprachen gespeichert werden.');
        }
        var temp = $(this).attr('checked');
        $('#language_'+($(':checkbox[name=webLanguages]:checked').length ? 'select' : 'any')).attr('checked', true);
        $(this).attr('checked', temp);
        $(this).blur();
    });
    $('#language_any').click(function() {
        $(':checkbox[name=webLanguages]:checked').attr('checked', false);
    });
}

function setStatus(url) {
    window.status = url;
    return url;
}

function removeStatus() {
    window.status = '';
}

function initLinks() {
    $('a[@onmouseover]').each(function() {
        var seoURL = this.onmouseover();
        if (!seoURL) { return; }
        if (seoURL === true) { return; }
        if (!(/^(#|http:\/\/|https:\/\/)/).test(seoURL)) { seoURL = 'http://'+seoURL; }
        var redirectURL = this.href;
        this.href = seoURL;
        this.onclick = function(url) { return function() { return go(url, this.target); }}(redirectURL);
        this.onmouseover = function() { return true; }
    });
    removeStatus();
}

function go(url, win) {
    if (win) {
        window.open(url, win);
    } else {
        location.href = url;
    }
    return false;
}

function qs(link, field) {
    link.href = (link.href.replace(/su=[^&]*\&?/, '') + (/\?/.test(link.href) ? '&' : '?') +
		'su='+encodeURIComponent($('#'+field).val() || ''));
    return true;
}

function selectFontSize(link, domain) {
    var fontsize=$(link).parent().attr('class');
    $('body, #wrMinwidth1, #wrMinwidth2, .fontsize-normal, .fontsize-big, .fontsize-biggest').removeClass('fontsize-normal fontsize-big fontsize-biggest').addClass('fontsize-'+fontsize);
    $.cookie.set('webdesearchcustomization', ($.cookie.get('webdesearchcustomization', 'fontsize=fontsize-normal')
        .replace(/fontsize(%3D|=)fontsize\-[a-z]+/, '')+'fontsize=fontsize-'+fontsize), null, '/', domain);
    $(window).resize();
    return false;
}

$.elementReady('container', window.onresize=function(o) { return function() {
    if (o) { o(); }
    var offset = 0;
    switch (true) {
        case $.ua.browser.msie>=6: offset=6; break;
    }
    $('body')[(document.documentElement.offsetWidth < $('body').width()+offset) ? 'addClass' : 'removeClass']('smallWindow');
}}(window.onresize));
$(function() {
    $('body').addClass('jsActive');
    if (!$('body').hasClass('page-navmash')) { $(initLinks); } /* nicht sicher ob diese Funktion überhaupt noch benoetigt wird!!! */
});
function isUiBrowser(){
    var agent = navigator.userAgent;
    if ( agent.search('WEB.DE')>0 || agent.search('GMX')>0 ) {
        return true;
    }
    return false;
}

function isOldBrowser(){
    if ( ($.ua.browser.msie && $.ua.browser.msie<=6) || ($.ua.browser.firefox && $.ua.browser.firefox<=2.5) ) {
        return true;
    }
    return false;
}

function setOldBrowserHintCookieAndClose(days){
    $.cookie.set('oldBrowserHint', 'showed', days+'d');
    $('#oldBrowserHint').hide();
    $('#addons').css('overflow','visible');
    $('#browserPromoAddon').show();
}

function showOldBrowserHint(browserUrl){
    var imgclass = 'all';
    if ($.ua.browser.msie) { imgclass = 'ie'; }
    if ($.ua.browser.firefox) { imgclass = 'ff'; }
    var oldbrowserdiv = new jQuery('<div id="oldBrowserHint" class="'+imgclass+'"></div>');
    oldbrowserdiv.css('left',($('#container').width()/2 - 253)+'px');
    oldbrowserdiv.append('<div class="close"></div>');
    oldbrowserdiv.append('<div class="download"></div>');
    oldbrowserdiv.append('<div class="later"></div>');
    $('#mainContent').append(oldbrowserdiv);
    $('#oldBrowserHint div.later'   ).click(function(){ setOldBrowserHintCookieAndClose(1); });
    $('#oldBrowserHint div.close'   ).click(function(){ setOldBrowserHintCookieAndClose(7); });
    $('#oldBrowserHint div.download').click(function(){ location.href = browserUrl;         });
}

function showBrowserPromoWithSystemmessage(url) {
    if ( isUiBrowser() && ($.ua.browser.msie>=8 || $.ua.browser.firefox>=3.5) ) { return; }
    if (($(window).height() < 655) || ($.ua.browser.opera)) {
        $('#browserPromoAddon').css('position', 'relative');
    }
    if ( isOldBrowser() && !$.cookie.get('oldBrowserHint') ) {
        showOldBrowserHint(url);
    } else {
        $('#addons, #addonsData').css('overflow','visible');
        $('#browserPromoAddon').show();
    }
}

function showUiBrowserPromoAddon(url) {
    if ( isUiBrowser() ) { return; }
    /*if (($(window).height() < 655) || ($.ua.browser.opera)) {
        $('#browserPromoAddon').css('position', 'relative');
    }*/
    $('#addonsData > .premium:first').hide();
    $('#addons, #addonsData').css('overflow','visible');
    $('#browserPromoAddon').show();
}

function hideUiBrowserPromo(promoTarget, promoID) {
    if (isUiBrowser()) {
        $('#'+promoTarget).hide();
    } else {
        $(function() {
            $('#'+promoID).appendTo($('#'+promoTarget));
        });
    }
}

function scrollAddon() {
  var scroller, a, b, c, gmheight, overlay, check, size_01, size_02;
  size_01 = $('#browserPromoAddon').height();
  size_02 = $('#content').height();
  check   = size_02 - size_01;
  if (check > 0) {
    $(window).scroll(function() {
      size_01 = $('#browserPromoAddon').height();
      size_02 = $('#content').height();
      check   = size_02 - size_01;
      scroller = $(window).scrollTop();
      gmheight = $('#browserPromoAddon').height();
      overlay  = $('#browserPromoAddon').height() + 10;
      c = $('#content').height();
      h = $('#container').height() - gmheight - 153;
      if ( scroller > h ) {
        scroller = h;
      }
      $('#browserPromoAddon').css('position', 'absolute');
      $('#browserPromoAddon').animate({top: scroller+'px'},{queue: false, duration: 250});
      $('#sidebar_overlay').css('height', (overlay+scroller) + 'px');
      if ( c < gmheight ) {
      }
      else {
      }
    });
  }
}
