function homepageBegin() {
    var baseWidth = $('#buster').length ? 1160 : ($('#megabuster').length ? 1180 : 1240);
    if ($('body.hasSitebar').length) { baseWidth = 9999; }
    window.bodyElement = $('body');
    $(window).resize(function() {
        var sizeClass = $(window).width()>=1+baseWidth+(window.bodyElement.hasClass('centered')?1:0) ? 'size-big' : 'size-small';
        if (window.sizeClass == sizeClass) { return; }
        window.sizeClass = sizeClass;
        window.bodyElement.removeClass('size-big size-small')
                          .addClass(sizeClass);
        $('#headerNav li, #searchFav li').removeClass('last');
        $('#headerNav li').filter(function() { return $(this).css('display')!='none'; }).filter(':last').addClass('last');
        $('#searchFav li').filter(function() { return $(this).css('display')!='none'; }).filter(':last').addClass('last');
        window.setTimeout(organiseFooternav, 1);
    }).resize();
    $.elementReady('content', function() { window.sizeClass=''; $(window).resize(); });
    if ($.ua.browser.msie<=6 && $('body.hasSitebar').length) {
        $(window).scroll(function() {
            $('#advSpecialMain').css('top', $(window).scrollTop());
        });
        $.elementReady('footer', function() { window.setTimeout(function() {
            var temp = $(window).data('events')['scroll'];
            for (var i in temp) {
                try {
                    if ($.isFunction(temp[i])) { temp[i](); }
                } catch(e) {
                }
            }
        }, 200)});
    }
    window.bodyElement.addClass('jsEnabled');
    var openLoginbox = 'freemail';
    if (window.bodyElement.hasClass('login-promail')) { openLoginbox = 'promail'; }
    if (window.bodyElement.hasClass('login-topmail')) { openLoginbox = 'topmail'; }
    switch ($.url.params['login']) {
        case 'freemail':
        case 'promail':
        case 'topmail':
            openLoginbox = $.url.params['login'];
            window.bodyElement.removeClass('login-freemail login-promail login-topmail').addClass('login-'+openLoginbox);
            break;
    }
    switch ($.url.params['status']) {
        case '404':
        case 'hinweis':
            window.bodyElement.addClass('status-'+$.url.params['status']);
            break;
        case 'login-failed':
            window.bodyElement.addClass('status-'+$.url.params['status']+' login-failed-'+openLoginbox);
            break;
    }
    if (openLoginbox) {
        $(function() {
            window.bodyElement.removeClass('login-freemail login-promail login-topmail');
            $('#loginbox-'+openLoginbox+' h3 a').click();
            $('#loginbox form').each(function() { $('input.field', this).defaultValue('defaultValue'); });
        });
    }
    $.elementReady('inpSearchText', function() { $('#inpSearchText').defaultValue('defaultValue'); });
    if ($.ua.browser.msie==6) {
        try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {}
    }
    Weather.loadData();
    $.elementReady('loginbox-bottom', function() {
        $('#loginbox form').submit(setLoginCookie);
    });
}

function homepageEnd() {
    $('#sitebar').height(Math.max($('#content').height(), $('#sitebar').height()));
    $('#headerContent .description').appendTo('#footerInformation');
    window.setTimeout(function() { horoscopeTicker(); }, 500);
    window.setTimeout(function() { searchFavBlinker(); }, 1500);
    $('#searches a').click(function() { directSearch(this); });
    $('#loginbox form fieldset').append('<input type="hidden" name="jsenabled" value="true"/>');
    $('#loginbox .drawer form li.last a').click(switchSSL);
    Drawer.init();
    organiseFooternav();
    AdvConfig.outputPos('popup', '', 'popup', '', '', '');
    fixIframe('iframe');
    tifCount();
    sitestatInit();
    Econda.run();
}

function go(link, url) {
    if ((link.href.indexOf('#')+1) && !(url.indexOf('#')+1)) {
        url += link.href.substr(link.href.indexOf('#'));
    }
    if (link.target) {
        window.open(url, link.target);
    } else {
        if ($.ua.browser.firefox && $.isFunction(document.documentElement.onclick)) {
            document.documentElement.onclick = function(o) { return function(event) {
                if (o) { o(event); }
                location.href = url;
            }}(document.documentElement.onclick);
        } else {
            location.href = url;
        }
    }
    return false;
}

function organiseFooternav() {
    var start = $('#navigation').offset().left;
    if (!window.footerNavHeight) { calcFooterNavHeight(); }
    $('#navigation .module, #navigation #navSpecial').show().removeClass('start').each(function() {
        var el = $(this);
        if (el.offset().left-start <= 20) {
            el.addClass('start');
        }
        if (el.height() > window.footerNavHeight) {
            window.footerNavHeight = el.height();
        }
    });
    if ($('#navigation #navSpecial').prev('div:last').offset().top < $('#navigation #navSpecial').offset().top) {
        $('#navigation #navSpecial').addClass('start');
    }
    $('#navigation #navSpecial.start').hide();
}

function calcFooterNavHeight() {
    window.footerNavHeight = 0;
    $('#navigation .module, #navigation #navSpecial').each(function() {
        var el = $(this);
        if (el.height() > window.footerNavHeight) {
            window.footerNavHeight = el.height();
        }
    });
    $('#navigation .module, #navigation #navSpecial').height(window.footerNavHeight);
}

function getCompactCookie(cname) {
    var cookie = $.cookie.get(cname, '');
    var result = [];
    result.get = {};
    if (cookie) {
        cookie = cookie.split(/&/g);
        for (var i=0; i<cookie.length; i++) {
            var parts = cookie[i].split('=', 2);
            result.push(unescape(parts[0]));
            result.get[unescape(parts[0])] = unescape(parts[1]||'');
        }
    }
    return result;
}

function setCompactCookie(cname, name, value) {
    var cookie = getCompactCookie(cname);
    if (name) {
        cookie.get[name] = value;
        if ($.inArray(name, cookie)<0) {
            cookie.push(name);
        }
    }
    var result = [];
    for (var i=0; i<cookie.length; i++) {
        result.push(escape(cookie[i])+'='+escape(cookie.get[cookie[i]]))
    }
    result = result.join('&');
    $.cookie.set(cname, result, '1m', '/');
}

function homepageInitAllContents() {
    new AllContents('#allContents');
}

function AllContents(rootSel) {
    var STATE_NEW     = undefined;
    var STATE_LOADING = 0;
    var STATE_OPENED  = 1;
    var STATE_CLOSED  = 2;
    var self = this;
    this.rootContainer = $(rootSel+' .content');
    this.efctContainer = $('#allContentsListContainer', $(this.rootContainer).append($('<div id="allContentsListContainer"></div>')));
    this.listContainer = $('#allContentsList .list', $(this.efctContainer).append($('\
        <div id="allContentsList">\
            <div class="content">\
                <div class="close"><span>Schlie&szlig;en</span></div>\
                <div class="email"><span>Zum E-Mail Login</span></div>\
                <div class="list"></div>\
                <div class="close"><span>Schlie&szlig;en</span></div>\
            </div>\
        </div>\
    ')));
    this.ajaxObject    = null;
    $(rootSel+' h2').click(function(e) {
        e.preventDefault();
        $('a', this).blur();
        switch (self.state) {
            case STATE_OPENED:  self.close(); break;
            case STATE_CLOSED:  self.open();  break;
            case STATE_LOADING: self.close(); break;
            case STATE_NEW:     self.load();  break;
        }
    });
    $(rootSel+' .content .email').click(function(e) { self.close(); self.openLoginbox(); });
    $(rootSel+' .content .close span')
        .click(function(e) { self.close(); })
        .hover(function() { $(this).css('text-decoration', 'underline'); }, function() { $(this).css('text-decoration', 'none'); })
    this.open = function() {
        var self = this;
        $(this.rootContainer).removeClass('loading close').addClass('opening');
        this.fx.options.after = function() { $(self.rootContainer).removeClass('opening').addClass('open'); };
        this.fx.run();
        this.hideFlash = $('#features object:visible, #features embed:visible').css('visibility', 'hidden');
        this.state = STATE_OPENED;
    }
    this.close = function() {
        var self = this;
        if ($(self.rootContainer).hasClass('loading')) { return; }
        $(self.rootContainer).removeClass('open loading').addClass('closing');
        this.fx.options.after = function() { $(self.rootContainer).removeClass('closing').addClass('close'); self.hideFlash.css('visibility', ''); };
        this.fx.run();
        this.state = STATE_CLOSED;
    }
    this.load = function() {
        $(this.rootContainer).addClass('loading');
        this.state = STATE_LOADING;
        var self = this;
        this.ajaxObject = $.get('/all-contents.html', {}, function(result) {
            if (!result.length) { return; }
            self.contents = result;
            self.listContainer.append(result).css({display:'', visibility:''});
            $('a', self.listContainer).each(function() { appendHashToLink(this, '#.00000001'); });
            $(self.rootContainer).removeClass('loading');
            window.setTimeout(function() {
                self.fx = self.fx || $.classyFX({
                    selector: '#allContents[step] .opening #allContentsListContainer, #allContents[-step] .closing #allContentsListContainer',
                    animate: { height: { start: '0px', end: '300px', easing: 'halfcos' } },
                    steps: 5, ms: 30
                });
                if ($.ua.browser.msie < 8) {
                    self.fx.options.each = function() {
                        $('#allContentsList').css('margin-right', '1px');
                        window.setTimeout(function() { $('#allContentsList').css('margin-right', '0px'); }, 0);
                    };
                }
                self.open();
            }, 15);
        });
    }
    this.openLoginbox = function() {
        if ($('#loginbox .modulePart.active').length) { return; }
        $('#loginbox .part1 h3 a').click();
    }
}

function createToppromo(tabId, bgImage, url, text, textCss) {
    $('#toppromo').append($(
        '<div class="content"><p>'+text+'</p><a class="more" href="'+url+'"><span>mehr</span></a></div>'
    ));
    $('#toppromo, #toppromo .content').css('background-image', 'url('+bgImage+')');
    $('#toppromo p').css(textCss);
    var tab = $('#'+tabId);
    tab.addClass('has-toppromo');
    tab.prev().addClass('next-has-toppromo');
    tab.append('<div class="toppromo"><a class="more" href="'+url+'"><span>mehr</span></a></div>');
    $('#'+tabId+' .toppromo, #'+tabId+' .toppromo a.more').width(tab.width());
    $('#toppromo').removeClass('empty');
    window.bodyElement.addClass('has-toppromo');
}

function checkToppromo() {
    if ($('#buster, #megabuster').length) { return; }
    var isKnown = getCompactCookie('base').get['visits'] || 0;
    setCompactCookie('base', 'visits', +isKnown+1);
    if (isKnown) { return; }
    createToppromo(
        'headerNavEMail',
        '//img.ui-portal.de/gmx/hp09/ads/freemail_promo_bg.jpg',
        '//service.gmx.net/de/cgi/g.fcgi/products/mail/overview?mc=fm@hp_ch@nocookie.fm',
        'Ihr E-Mail-Postfach mit viel Speicherplatz, 5 E-Mail-Adressen und h&ouml;chsten Sicherheitsstandards. Ebenso kostenlos: 10 SMS/Monat!',
        {'left':'210px', 'top':'31px', 'width':'420px', 'color':'#114DA1'}
    );
}

function searchFavMark(mark, unmark) {
    searchFavMark.mark = mark;
    searchFavMark.unmark = unmark;
    searchFavMark.fx.run();
}

searchFavMark.fx = $.classyFX({
    selector: '#searchFav[step] .marking',
    steps: 5,
    ms: 45,
    before: function() {
        $('#searchFav .mark, #searchFav .marking').removeClass('mark marking');
        $(searchFavMark.mark).addClass('marking');
        $(searchFavMark.unmark).removeClass('mark').addClass('unmarking');
    },
    after: function() {
        $('#searchFav .marking').removeClass('marking').addClass(searchFavMark.mark == null ? '' : 'mark');
        $('#searchFav .unmarking').removeClass('unmarking');
        if (searchFavMark.mark == null) { $('#searchFav .mark').removeClass('mark'); }
    }
});
function searchFavBlinker() {
    if (!(searchFavMark.fx.options.parent || '').length) {
        searchFavMark.fx.options.parent = $('#searchFav');
    }
    var searchFav = $('#searchFav li:visible a');
    var searchFavPos = -1;
    var searchFavInt = window.setInterval(function() {
        if (++searchFavPos >= searchFav.length) {
            searchFavMark(null, $('#searchFav .mark'));
            window.setTimeout(function() { searchFavBlinker(); }, 8000);
            window.clearInterval(searchFavInt);
            return;
        }
        searchFavMark(searchFav[searchFavPos], searchFav[searchFavPos-1]);
    }, 1500);
}

function horoscopeBlend(next, last) {
    horoscopeBlend.next = next;
    horoscopeBlend.last = (last || $(next).prev().get(0));
    horoscopeBlend.fx.run();
}

horoscopeBlend.fx = $.classyFX({
    selector: '.horoscope .moduleContent[step] .modulePart',
    steps: 5,
    ms: 90,
    before: function() {
        $(horoscopeBlend.next).addClass('activate');
        $(horoscopeBlend.last).removeClass('active').addClass('deactivate');
        $('.horoscope .active').removeClass('active');
    },
    after: function() {
        $('.horoscope .activate').removeClass('activate').addClass('active');
        $('.horoscope .deactivate').removeClass('deactivate');
    }
});
function horoscopeTicker() {
    var horoscope = $('.horoscope .modulePart');
    if (!horoscope.length) { return; }
    $('.horoscope .active:gt(0)').removeClass('active');
    var horoscopePos = horoscope.index($('.horoscope .active')[0]);
    var horoscopeLastPos = horoscopePos;
    var horoscopeInt = window.setInterval(function() {
        horoscopePos = (horoscopePos + 1) % horoscope.length;
        horoscopeBlend(horoscope[horoscopePos], horoscope[horoscopeLastPos]);
        horoscopeLastPos = horoscopePos;
    }, 5000);
}

Drawer = new function() {
    this.fx = $.classyFX({
        selector: 'body[-step]',
        steps: 10,
        ms: 30,
        before: function() {
            Drawer.sliding = true;
            this.box.drawer.active.addClass('activate').find('.drawer').css('display', '');
            this.box.drawer.lastactive.removeClass('active activate').addClass('deactivate');
            this.box.drawer.step = 1;
        }.bind(this),
        after: function() {
            Drawer.sliding = false;
            this.box.drawer.active.removeClass('activate deactivate').addClass('active');
            this.box.drawer.lastactive.removeClass('active activate deactivate')
            if (this.box.drawer.lastactive.get(0) !== document) {
                this.box.drawer.lastactive.find('.drawer').css('display', 'none');
            }
        }.bind(this)
    });
    this.init = function(box) {
        var box = box;
        if (!box) { box = $.unique($('.drawer').parent().parent()); }
        if (box.each) {
            box.each(function() {
                new Drawer.init(this);
            });
            return;
        }
        box.drawer = this;
        this.box = box;
        this.active = $('.active', box);
        $('h3 a', this.box).each(function() {
            this.box = box;
            this.drawer = $(this).parent().parent();
            this.toggle = this.box.drawer.toggle;
        }).click(function(evt) { $(this).blur(); this.toggle(evt, {data: box}); });
        $('#loginbox-bottom').click(function() { $('#loginbox-bestprice:not(.active) a').click(); });
    };
    this.toggle = function(evt) {
        evt.preventDefault();
        if (Drawer.sliding) { return; }
        this.box.drawer.lastactive = this.box.drawer.active;
        this.box.drawer.active = (this.drawer == this.box.drawer.active ? $() : this.drawer);
        Drawer.fx.options.parent = $(this.box);
        Drawer.fx.run();
    };
}

function setLoginCookie() {
    $.cookie.set('loginTime', new Date().getTime(), null, '/', '.gmx.ch');
}

function fixIframe(els) {
    if (!$.ua.browser.firefox && !$.ua.browser.safari) { return; }
    $(els).each(function() {
        if (this.iframeIsFixed || this.iframeDontFix) { return; }
        this.src = this.src;
        this.iframeIsFixed = true;
    });
}

function initBuster() {
    if (!window.advPageBackground) { return; }
    $('#container').css(advPageBackground);
    arrangeBusterBgPos($('#container'));
    $(window).resize(function() { arrangeBusterBgPos($('#container')); });
}

function arrangeBusterBgPos(bgContainer) {
    if (!$('#buster').length || !window.advPageBackground) { return; }
    var bgPos = {
        x: $('#wrapper').outerWidth() + advPageBackground.backgroundXPosition,
        y: advPageBackground.backgroundSkyAttach ? ($('#advSpecialMain .sky').offset().top-$('#wrapper').offset().top)+advPageBackground.backgroundYPosition : advPageBackground.backgroundYPosition
    }
    bgContainer.css('backgroundPosition', bgPos.x+'px '+bgPos.y+'px');
}

function adjustMegabuster() {
    $('#megabuster #advSpecialMain .topbanner').attr('id', 'megabusterTopbanner').insertBefore('#wrapper');
    advPageBackground.backgroundPosition =
        advPageBackground.backgroundXPosition + (typeof(advPageBackground.backgroundXPosition)==='number' ? 'px' : '')
      + ' '
      + advPageBackground.backgroundYPosition + (typeof(advPageBackground.backgroundYPosition)==='number' ? 'px' : '')
    $('#container').css(advPageBackground);
}

function initSitebar() {
    document.getElementById('wrapper').parentNode.insertBefore(document.getElementById('advSpecialMain'), document.getElementById('wrapper'));
    if (!window.advPageBackground) { return; }
    $(advPageBackground.backgroundSkyAttach ? '#advSpecialMain' : '#container').css(advPageBackground);
    arrangeBusterBgPos($(advPageBackground.backgroundSkyAttach ? '#advSpecialMain' : '#container'));
}

function directSearch(link) {
    if ($('#inpSearchText').hasClass('defaultValue')) { return true; }
    var search = $.url(link.href);
    $.extend(search.params, { su: $('#inpSearchText').val() });
    link.href = search.toString(false);
    return true;
}

function switchSSL(e) {
    e.preventDefault();
    var form = $(this).parents('form');
    var formurl = $.url(form.attr('action'));
    var SSL = (/Mit/.test($(this).text()))
    $(this).text((SSL ? 'Ohne SSL' : 'Mit SSL'));
    formurl.protocol = (SSL ? 'https:' : 'http:');
    form.attr('action', formurl.toString());
}

function createNavModule(title, link, id, className, redirect) {
    $('#navigation').append($('\
        <div class="module">\
            <div class="navigation">\
                <div class="moduleHeader">\
                    <h3>'+(link?'<a href="'+link+'"'+(redirect?' onclick="return go(this, \''+redirect+'\');"':'')+'><span>'+title+'</span></a>':'<span>'+title+'</span>')+'</h3>\
                </div>\
                <div class="moduleContent">\
                </div>\
            </div>\
        </div>\
    '));
}

function createNavSubModule(list) {
    var part = $('.modulePart:last ul', $('#navigation .module:last .moduleContent').append($('\
        <div class="modulePart"><ul></ul></div>\
    ')));
    part.addClass('part'+($('.modulePart', part.parent().parent()).length));
    for (var i=0; i<list.length; i++) {
        var item = list[i];
        part.append($('\
            <li'+(item[2]?' class="'+item[2]+'"':'')+'><a href="'+item[1]+'"'+(item[3]?' onclick="return go(this, \''+item[3]+'\');"':'')+'><span>'+item[0]+'</span></a></li>\
        '));
    }
}

function homepageSpeciallinks() {
    if (!($.ua.browser.msie >= 6)) { return; }
    $('#footerSpecialfuncs').append($('<ul></ul>'));
    $('#footerSpecialfuncs ul').append($(
        '<li><a href="javascript:document.body.style.behavior=\'url(#default#homepage)\'; document.body.setHomePage(\'http://www.gmx.net/?kid=A1000002\');"><span>GMX als Startseite</span></a></li>'
    ));
    $('#footerSpecialfuncs ul li:first').addClass('first');
    $('#footerSpecialfuncs ul li:last' ).addClass('last');
}

var Region = new function() {
    this.callbacks = [];
    this.region = null;
    this.register = function(obj, method) {
        if (!method) {
            method = obj;
            obj = null;
        }
        if (this.region) { return this.call([obj, method]); }
        this.callbacks.push([obj, method]);
    }
    this.setRegion = function(region) {
        this.region = region;
        for (var i=0; i<this.callbacks.length; i++) {
            this.call(this.callbacks[i]);
        }
    }
    this.call = function(entry) {
        try {
            (entry[0] ? entry[1].bind(entry[0]) : entry[1])(this.region);
        } catch(e) {
        }
    }
}

var Weather = new function() {
    this.defaultId = 49;
    this.data      = null;
    this.titles    = [
        '',
        'sonnig',
        'heiter',
        'wolkig',
        'bedeckt',
        'stark bewölkt',
        'Regenschauer',
        'Regen',
        'Gewitter',
        'Schneeschauer',
        'Schneefall',
        'Schneeregen',
        'Nebel',
        'in Wolken',
        'Sprühregen'
    ];
    this.init = function(targetRegion) {
        this.initialized = true;
        this.targetRegion = targetRegion;
        var parts = (''+targetRegion).split('-');
        this.country = parts[0];
        this.weatherId = parts[1] || this.defaultId;
        if (!this.data && window.weatherData) { this.data = window.weatherData; }
        this.initObjects();
    }
    this.initObjects = function() {
        this.root = $('#weather');
        this.module = $('.module>div:first', this.root);
        this.currentItem = $('ul li.city', this.root);
        this.currentCity = $('.city', this.currentItem);
        this.currentTemp = $('.temp', this.currentItem);
        this.tomorrowTemp = $('ul li.tomorrow .temp', this.root);
        this.dayAfterTemp = $('ul li.dayAfter .temp', this.root);
        this.currentLinks = $('ul li:lt(3) a', this.root).add($('a.more', this.root));
        this.currentPicked = this.picker = $('#doesNotExist');
        this.run();
    }
    this.setRegion = function(region) {
        this.init(region);
    }
    this.loadData = function() {
        var self = this;
        $.getScript(
            '/jsonwetter.js',
            function() {
                self.loadCounter = 0;
                self.loadInt = window.setInterval(function() {
                    if (self.loadCounter++ > 5) {
                        window.clearInterval(self.loadInt);
                        return;
                    }
                    if (!window.weatherData) { return; }
                    self.data = window.weatherData;
                    self.run();
                    window.clearInterval(self.loadInt);
                }, 60);
            }
        );
    }
    this.run = function() {
        if (!this.data || !this.weatherId) { return; }
        var data = this.data[this.weatherId];
        if (!data) { return; }
        var self = this;
        this.module.each(function() {
            this.className = 'weather-' + data[1];
        });
        $('a.more', this.module).each(function() {
            this.title = self.titles[data[1]];
        });
        this.currentItem.attr('title', data[0]+': '+data[2]+' °C, '+this.titles[data[1]]);
        this.currentCity.html(this.normalizeCity(data[0]));
        this.currentPicked.html(data[0]);
        this.currentTemp.text(data[2]+' °C');
        this.tomorrowTemp.text(data[3]+'°');
        this.dayAfterTemp.text(data[4]+'°');
        this.currentLinks.attr('href', '//gmx.wetternet.de/cgi-bin/gmx/wetter_stadt.pl?ID='+this.weatherId);
        $('a', this.root).each(function() { appendHashToLink(this, '#.00000001'); });
    }
    this.normalizeCity = function(city) {
        if (city.length > 12) {
            city = city.substring(0, 10)
                 + ((city.substring(10, 1)==' ' || city.substring(10, 1)=='-') ? city.substring(10, 1) : '')
                 + '&hellip;';
        }
        return city;
    }
    this.initWeather = function() {
        if (this.weatherInitialized) { return; }
        var self = this;
        if (!this.data) { this.data = window.weatherData; }
        if (!this.data) { return; }
        if (!this.root) { this.initObjects(); }
        if (!this.root) { return window.setTimeout(function() { self.initWeather(); }, 50); }
        var pickerObj = $('\
            <div id="weatherPicker" title="'+($.ua.browser.msie?'':' ')+'">\
                <div class="selected"><span></span></div>\
                <div class="listContainer"><div class="selector"><ul></ul></div></div>\
            </div>\
        ');
        var listRoot = $('ul', pickerObj);
        $('.selected', pickerObj).click(function() { self.closePicker(); });
        $.each(this.data, function(id) {
            if (!this[0]) { return; }
            var item = $('<li><span>'+this[0]+'</span></li>').data('weatherid', id).appendTo(listRoot);
        });
        listRoot.click(function(e) {
            self.weatherId = $(e.target).closest('li').data('weatherid');
            self.closePicker();
            self.run();
        });
        this.picker = $('#weatherPicker', $('ul li.city', this.root).append(pickerObj));
        this.currentPicked = $('ul li.city .selected span', this.root).html(this.data[this.defaultId][0]);
        this.weatherInitialized = true;
    }
    this.openPicker = function() {
        this.picker.parent().addClass('pickerOpen');
    }
    this.closePicker = function() {
        this.picker.parent().removeClass('pickerOpen');
    }
    Region.register(this, this.setRegion);
};
(function($) {
window.cc = function(link, options) {
    if (!$.cookie.get('ns_sample')) {
        $.cookie.set('ns_sample', (Math.random()*100|0), '2y', '/', '.'+$.url.hostname);
    }
    if ($.inArray($.cookie.getInt('ns_sample', -1), cc.slices) == -1) { return true; }
    var opts = {
        'hp_cll': cc.cllfilter($(link).parents(cc.cllNoHeader).length ? $(link).text() : $(link).parents(':has(h3):first').find('h3').text()),
        'hp_ctype': ($(link).is('form') ? 'form' : ($(link).filter(':contains(img)').length == 0 ? 'text' : 'bild')),
        'ns__t': (new Date()*1)
    };
    var cla = ($(link).parents(cc.claIDs).attr('id') || 'sonstige').toLowerCase(), pos, cid;
    if ($(link).parent('h1').parent('#headerContent').length) { cla = opts['hp_cll'] = 'logo'; }
    if ($(link).parents('.channel').length) {
        var ch = $(link).parents('.channel');
        cla = 'channel-'+(ch.find('h2').text() || '').toLowerCase();
        pos = (ch.parent().attr('class') || '').replace(/\D/g, '');
    }
    ($(link).attr('href') || '').replace(/\/(\d+)\-/g, function(_, c) { cid = c; });
    var su = $('[name=su]', link).val();
    if (/(channel\-|featurednews|sitebar)/.test(cla)) { opts['hp_content'] = 1; }
    if (cla) { opts['hp_cla'] = cla.replace(/\s+/g, ''); }
    if (pos) { opts['hp_pos'] = pos; }
    if (cid) { opts['hp_cid'] = cid; }
    if (su) { opts['hp_su'] = encodeURIComponent(su); }
    var clt = ($(link).is('form') ? $(link).attr('action') : $(link).attr('href'));
    opts['hp_clt'] = clt.substr(Math.max(clt.length - 20, 0), 20);
    window.setTimeout(function() { (new Image()).src = (cc.base+$.param($.extend({}, cc.defaults, opts, options)).replace(/%0A/g, '')); }, 0);
    return true;
}

cc.slices = [50,51,52,53,54,55,56,57,58,59];
cc.base = '//wa.ui-portal.de/gmx/gmx-s/s?homepage.startseite.pi.'+($('#buster').length ? 'buster' : ($('#megabuster').length ? 'megabuster' : 'home'))+'&';
cc.claIDs = '#topper, #headerNav, #weather, #search, #allContents, #headerHelplinks, #statusline, #msgBox, #loginbox, #subLogin, #featuredNews, #sitebar, #navigation, #footer';
cc.cllNoHeader = '#headerNav, #headerHelplinks';
cc.defaults = {
    'hp_lang': $('html').attr('lang'),
    'hp_country': $.url($('#headerContent h1 a').attr('href')).hostname.split('.').pop().replace(/^net$/, 'de'),
    'ns_type': 'hidden'
};
cc.cllfilter = function(n) {
    var s = false;
    return $.trim(n).toLowerCase().replace(/./g, function(x) {
        if (/\s/.test(x)) { s = true; return ''; }
        var c = x.charCodeAt(0);
        if (c < 48 || (c > 57 && c < 97) || c > 122) { return ''; }
        if (s) { s = false; return x.toUpperCase(); }
        return x;
    }).substr(0,29);
}

$(function() {
    window.setTimeout(function() {
        $('a').live('click', function() { return cc(this); });
        $('form').live('submit', function() { return cc(this); });
    }, 100);
});
})(jQuery);
function appendHashToLink(link, hash) {
    if (link.href.indexOf('#') >= 0) { return; }
    link.href += hash;
}

$(function() {
    $('#header a, #allContentsList .list a'                ).not('#search a, #header h1 a').each(function() { appendHashToLink(this, '#.00000001'); });
    $('#featuredNews a, #content .channels .area>.module a')                               .each(function() { appendHashToLink(this, '#.00000002'); });
    $('#navigation a'                                      ).not('#navSpecial a')          .each(function() { appendHashToLink(this, '#.00000003'); });
    $('#sitebar a'                                         )                               .each(function() { appendHashToLink(this, '#.00000004'); });
});
function tifCount() {
    Region.register(tifCount.run);
}

tifCount.run = function(region) {
    var cc = region.split('-')[0];
    NSfTIF.tifInit({
        pageidentifier: 'homepage',
        cc:             cc,
        region:         'ch'
    });
}

var Econda = new function() {
    this.run = function() {
        window.emosPageId = 'gmx_hp_'
                          + (parent.$('#buster').length
                            ? (parent.$('#advSpecialMain .advSitebar').length ? 'sb' : 'b')
                            : (parent.$('#megabuster').length ? 'mb' : 's')
                          );
        if (parent!==self) { window.emosPageId += '_i'; }
        window.emosGlobalProperties = {countryid: 'ch'};
        if ($.url.params['econda'] == 'test') {
            window.emosSamplingRate = 1;
        }
        $.getScript('/\/js.ui-portal.de/c/econda/emos2.js');
    }
}

AdvConfig = new function() {
    this.adServer = '/\/adclient.uimserv.net/js.ng/';
    this.adProxy  = '/\/hp.gmx.uimserv.net/';
    this.positions = {};
    this.cc = '';
    this.init = function(site, section, category, region, params) {
        this.site = site;
        this.section = section;
        this.category = category;
        this.region = region ? region.split('-')[0] : '';
        this.tileid = (parent.AdvConfig && parent.AdvConfig.tileid) ? parent.AdvConfig.tileid : (''+Math.random()+(''+Math.random()).substr(2)).substr(2, 30);
        this.params = params || {};
        this.params['viewwidth'] = 0;
        this.params['viewheight'] = 0;
    }
    this.setRegion = function(cc) {
        this.cc = (''+cc).split('-')[0];
    }
    this.outputPos = function(pos, owner, special, specialtype, sizes, styles, params) {
        this.addPosition(pos, owner, special, specialtype, sizes, styles, params);
        this.output(pos);
    }
    this.addPosition = function(pos, owner, special, specialtype, sizes, styles, params) {
        this.positions[pos] = { 'tagID':'site/'+pos+'/', 'owner':owner+'/', 'special': special, 'specialtype': specialtype, 'sizes': sizes, 'params.styles': styles, 'params': (params || {}) };
    }
    this.options = function(pos) {
        if (parent.$('#advSpecialMain .advSitebar').length) { this.params['sitebar'] = 'true'; }
        var result = '';
        var params = $.extend({}, this.params || {});
        var position = this.positions[pos];
        if (pos != '_') {
            $.extend(params, position.params, { tagID: position.tagID, owner: position.owner, special: position.special, specialtype: position.specialtype, adsize: position.sizes, 'params.styles': position['params.styles'] });
        }
        var self = this;
        $.each(params, function(key, val) {
            $.each($.makeArray(val), function() {
                if (key == 'special') { return; }
                result += '&' + key + '=' + self.escapeValue(this);
            });
        });
        return 'special='+this.escapeValue(params['special'])
             + '&site='+this.escapeValue(this.site)
             + '&section='+this.escapeValue(this.section)
             + '&category='+this.escapeValue(this.category)
             + '&region='+this.escapeValue(this.region)
             + '&cc='+this.escapeValue(this.cc)
             + result
             + '&tile='+this.tileid
             + '&transactionID='+this.tileid;
    }
    this.drop = function(pos, cond) {
        if (cond) { return; }
        try { delete this.positions[pos] } catch(e) { this.positions[pos] = false; }
    }
    this.mi = function(arr, val) {
        var r = arr.length;
        while (arr[--r] > val) { }
        return r;
    }
    this.output = function(pos, options) {
        if (!this.positions[pos]) { return false; }
        var advURL = this.adServer + this.options(pos);
        if (!options || !options.async) {
            document.writeln('<!--[if !IE]> ' + advURL + ' <![endif]-->');
            document.writeln('<script type="text/javascript" src="' + advURL + '"><\/script>');
        } else {
            var advFrame = $('<iframe style="display: none;"></iframe>');
            $('body').append(advFrame);
            var advWin = (advFrame.attr('contentWindow') || advFrame.attr('contentDocument') || advFrame.attr('window'));
            var advDom = advWin.document;
            advDom.write('<!DOCTYPE><html><head><title>AdvFrame</title></head><body><script type="text/javascript" src="'+advURL+'"></script></body></html>');
            var advObj = { c: 0, l: -1, frame: advFrame, win: advWin, dom: advDom,
                async: $(options.async), timeout: ((options.timeout || 3)*5),
                vars: options.vars, after: options.after };
            advObj.interval = window.setInterval(function(advObj) { return function() {
                if (advObj.c++ > advObj.timeout) { window.clearInterval(advObj.interval); return; }
                var advNodes = $(advObj.dom.body.childNodes).not('script');
                if (advNodes.length == 0 && advNodes.length != advObj.l) { advObj.l = advNodes.length; return; }
                $('script', advObj.dom).remove();
                if (advObj.dom.close) { advObj.dom.close(); }
                $.each((advObj.vars || []), function(_, v) { if (advObj.win[v]) { window[v] = advObj.win[v]; } });
                try { advNodes.each(function() { advObj.async.append((this.outerHTML ? this.outerHTML : this)); }); }
                catch(e) { advObj.async.append(advObj.dom.body.innerHTML); }
                $('img', advObj.async).each(function() { this.src = this.src; });
                advObj.frame.remove();
                if ($.isFunction(advObj.after)) { advObj.after(); }
                window.clearInterval(advObj.interval);
                return;
            }}(advObj), 200);
        }
        return advURL;
    }
    this.outputProxy = function(service, params) {
        var result = ''
        var advURL = this.adProxy
                   + '?LogoutAdProxy.service=' + this.escapeValue(service)
                   + '&site='+this.escapeValue(this.site)
                   + '&section='+this.escapeValue(this.section)
                   + '&category='+this.escapeValue(this.category)
                   + '&region='+this.escapeValue(this.region)
                   + (params ? (params.substr(0, 1)=='&' ? params : '&'+params) : '')
                   + result
                   + '&tile='+this.tileid
                   + '&transactionID='+this.tileid;
        document.writeln('<!--[if !IE]> ' + advURL + ' <![endif]-->');
        document.writeln('<script type="text/javascript" src="' + advURL + '"><\/script>');
    }
    this.escapeValue = function(val) {
        return encodeURIComponent(val).replace(/%2F/gi, '/');
    }
    this.positions['_'] = {};
    this.advSpecialPart = 0;
    this.outputAdvPart = function() {
        document.writeln('<div class="modulePart part'+(++this.advSpecialPart)+' '+arguments[0]+'">');
        FlashHelp.createFlash.apply(FlashHelp, $.makeArray(arguments).slice(1, arguments.length));
        document.writeln('</div>');
    }
}

var Topper = new function() {
    this.timeout = 500;
    this.versions = {
        'ie': {
            'text1': 'Sie surfen mit einer &auml;lteren Browser-Version.',
            'text2': 'Besser und schneller im Web mit dem neuen Internet Explorer - ',
            'text3': 'Jetzt downloaden!',
            'seoUrl': '//service.gmx.net/de/cgi/g.fcgi/products/browser',
            'redirectUrl': 'http://r.ui-portal.de/f/gmx_hp/home%40topper%40IE_direkt/t/gmx_produkte/browser/u/c2VydmljZS5nbXgubmV0L2RlL2NnaS9nLmZjZ2kvcHJvZHVjdHMvYnJvd3Nlcj9tYz1nbXhfaHBAaG9tZUB0b3BwZXJASUVfZGlyZWt0LmdteF9wcm9kdWt0ZUBicm93c2Vy/c/nb$FQHIcDuee',
            'popupUrl': 'http://r.ui-portal.de/f/gmx_hp/home%40topper%40IE_hint/t/gmx_produkte/browser/u/c2VydmljZS5nbXgubmV0L2RlL2NnaS9nLmZjZ2kvcHJvZHVjdHMvYnJvd3Nlcj9tYz1nbXhfaHBAaG9tZUB0b3BwZXJASUVfaGludC5nbXhfcHJvZHVrdGVAYnJvd3Nlcg__/c/puGZ994TtK7W'
        },
        'ff': {
            'text1': 'Sie surfen mit einer &auml;lteren Browser-Version. ',
            'text2': 'Besser und schneller im Web mit dem neuen Mozilla Firefox - ',
            'text3': 'Jetzt downloaden!',
            'seoUrl': '//service.gmx.net/de/cgi/g.fcgi/products/browser',
            'redirectUrl': 'http://r.ui-portal.de/f/gmx_hp/home%40topper%40FF_direkt/t/gmx_produkte/browser/u/c2VydmljZS5nbXgubmV0L2RlL2NnaS9nLmZjZ2kvcHJvZHVjdHMvYnJvd3Nlcj9tYz1nbXhfaHBAaG9tZUB0b3BwZXJARkZfZGlyZWt0LmdteF9wcm9kdWt0ZUBicm93c2Vy/c/JcleNAQ0Sf6C',
            'popupUrl': 'http://r.ui-portal.de/f/gmx_hp/home%40topper%40FF_hint/t/gmx_produkte/browser/u/c2VydmljZS5nbXgubmV0L2RlL2NnaS9nLmZjZ2kvcHJvZHVjdHMvYnJvd3Nlcj9tYz1nbXhfaHBAaG9tZUB0b3BwZXJARkZfaGludC5nbXhfcHJvZHVrdGVAYnJvd3Nlcg__/c/$+4X1EFy3TJP'
        }
    };
    this.choice = function() {
        return (/^win/.test(parent.$.ua.os.name || '') ?
            (parent.$.ua.browser.msie < 8 ? 'ie' :
            ((parent.$.ua.browser.opera < 10 ||
                parent.$.ua.browser.safari < 4 ||
                parent.$.ua.browser.chrome < 3 ||
                parent.$.ua.browser.firefox < 3.5) ? 'ff' :
            false)) : false);
    };
    this.content = ('<div class="topper-content">'+
        '    <div class="message">'+
        '        <p id="topper-close">' +
        '            <a href="${seoUrl}" onclick="if (this.retain) { return false; }; return go(this, \'${redirectUrl}\');">'+
        '                ${text1}<strong>${text2}<span>${text3}</span></strong>'+
        '                <span id="topperClose" title="Benachrichtigung schlie&szlig;en" onclick="this.parentNode.retain = true;"></span>'+
        '                <span id="topperLater" title="Benachrichtigung schlie&szlig;en - Browser-Informationen im Hintergrund &ouml;ffnen" onclick="this.parentNode.retain = true; var infowin = window.open(\'${popupUrl}\',\'info\',\'width='+parent.$(parent.window).width()+',height='+parent.$(parent.window).height()+',dependent=no,location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes,toolbar=yes\'); infowin.blur(); window.focus();"></span>'+
        '            </a>'+
        '        </p>'+
        '    </div>'+
        '</div>');
    this.init = function() {
        if (window.advNoTopper || parent.advNoTopper || parent.$('#topper').length) { return; }
        if (parent.$('body.hasSitebar').length) { return; }
        var choice = this.choice();
        if (!choice || !this.versions[choice]) { return; }
        var data = this.versions[choice];
        parent.$('body').prepend('<div id="topper">'+this.content.replace(/\$\{([^\}]+)\}/g, function(f,x) { return data[x]; })+'</div>');
        this.topper = parent.$('#topper').find('#topper-close').click(function() { Topper.hide(); });
        this.show();
    };
    this.fx = parent.$.classyFX({
        selector: '#topper[step] .topper-show, #topper[-step] .topper-hide',
        steps: 3, ms: 45
    });
    this.show = function() {
        parent.$('.topper-content').removeClass('topper-hide').addClass('topper-show');
        this.fx.options.after = function() {
            parent.$('.topper-content').removeClass('topper-show').addClass('topper-hide');
        }
        this.fx.options.parent = parent.$('#topper');
        this.fx.run();
    };
    this.hide = function() {
        this.fx.options.after = function() {
            parent.$('#topper > div').css({'overflow': 'hidden', 'height': '0px'});
            window.setTimeout(function() { parent.$('#topper').remove(); }, 15);
        }
        this.fx.run();
    };
}

var FlashHelp = new function() {
    this.iframeOverFlash = function() {
        return $.ua.browser.firefox;
    }
    this.flashShows = function() {
        $('#advSpecialMain .rectangle').css({'width':802, 'height':1000});
        this._flashShows();
    }
    this._flashShows = function() { }
    this.flashHides = function() {
        $('#advSpecialMain .rectangle').css({'width':'', 'height':''});
        this._flashHides();
    }
    this._flashHides = function() { }
    this._getValue = function(list, name, fallback) {
        for (var i=0; i<list.length; i++) {
            if (list[i][name]!==undefined) { return list[i][name]; }
        }
        return fallback;
    }
    this.createFlash = function() {
        var list = $.makeArray(arguments);
        list.push({allowScriptAccess:'always'});
        var clickUrl  = this._getValue(list, 'clickUrl');
        var width     = this._getValue(list, 'width');
        var height    = this._getValue(list, 'height');
        var target    = this._getValue(list, 'target', '_blank');
        var iframeUrl = this._getValue(list, 'iframeUrl');
        if (iframeUrl) {
            document.writeln('<iframe src="'+iframeUrl.replace('{clickUrl}', escape(clickUrl))+'" width="'+width+'" height="'+height+'" border="0" frameborder="0" scrolling="no"><\/iframe>');
            $('iframe:last')[0].iframeDontFix = true;
            return;
        }
        var minFlash  = this._getValue(list, 'minFlashVersion');
        var flashUrl  = this._getValue(list, 'flash');
        if (flashUrl && minFlash && FlashDetection.version >= minFlash) {
            var flashId = this._getValue(list, 'flashId');
            var flash   = new FlashObjectElement(flashUrl.replace('{clickUrl}', escape(clickUrl)), width, height, flashId);
            var params  = ['wmode', 'allowScriptAccess', 'allowFullScreen', 'quality', 'flashVars'];
            for (var i=0; i<params.length; i++) {
                var value = this._getValue(list, params[i]);
                if (value!==undefined) { flash.addParam(params[i], value); }
            }
            flash.render();
        } else {
            var fallback = this._getValue(list, 'fallback');
            var alt      = this._getValue(list, 'alt', '');
            if (fallback) {
                document.writeln('<a href="'+clickUrl+'" target="'+target+'"><img src="'+fallback+'" alt="'+alt+'" width="'+width+'" height="'+height+'"/></a>');
            }
        }
    }
}

popit_checkUrl = function(url) {
    if (url == null) { return true; }
    var path = url.path.split('/');
    if (url.host   == 'service.gmx.net'
        && path[1] == 'de'
        && path[2] == 'cgi'
        && path[3] == 'login'
    ) {
        return false;
    }
    return true;
}

AdvConfig.init('gmx', 'gmx/homepage/start/ch/', 'homepage', 'ch', {pageview:'homepage'});
function sitestat(u) {
    var d=document;
    ns_pixelUrl=u+"&ns__t="+(new Date().getTime());
    u=ns_pixelUrl+"&ns_c="+((d.characterSet)?d.characterSet:d.defaultCharset)+"&ns_ti="+escape(d.title)+"&ns_jspageurl="+escape(d.URL)+"&ns_referrer="+escape(d.referrer);
    (d.images)?new Image().src=u:d.write('<img src="'+u+'" height="1" width="1" alt="*">');
};
new function() {
    if (document.cookie.indexOf("ns_sample")==-1) {
        var cdParts = $.url.hostname.split('.');
        sitestat.cookieDomain = '.'+cdParts.splice(cdParts.length-2, cdParts.length).join('.');
        document.cookie="ns_sample="+Math.floor(Math.random()*100)+"; expires="+new Date(new Date().getTime()+63072000000).toGMTString()+"; path=/; domain="+sitestat.cookieDomain;
    }
}

function sitestatInit() {
    if (document.cookie.indexOf("ns_sample=51")!=-1) {
        sitestat(
            cc.base
            + 'hp_lang='+cc.defaults.hp_lang
            + '&hp_country='+cc.defaults.hp_country
            + ($.url.params.kid?'&kid='+encodeURIComponent($.url.params.kid):'')
        );
    };
    document.write('<script type="text/javascript" src="/\/js.ui-portal.de/c/nedstat/sitestat.js"><\/script>');
}
