if(!GOOM.Components.autopromo) {
    GOOM.Components.autopromo = {
        imgInt : null,
        leaveFn : function() {
            var me = GOOM.Components.autopromo;
            clearInterval(me.imgInt);
            GOOM.Navigation.Events.onPageLeave.unsubscribe(me.leaveFn);
        },
        request : function() {
            GOOM.util.Request('GET', '/default/list/adverts', {
                success : function(data) {
                    var changeImg = function() {
                            var prevImgIndex = currImgIndex;
                            if(currImgIndex >= imgNum - 1) {
                                currImgIndex = -1;
                            }
                            imgs[prevImgIndex].style.zIndex = 0;
                            imgs[++currImgIndex].style.zIndex = 1;
                            $('#' + imgs[currImgIndex].id).fadeIn('slow', function() {
                                if (imgs[prevImgIndex]) {
                                    imgs[prevImgIndex].style.display = 'none';
                                }
                            });
                        },
                        imgTpl = '<a href="%{href}" %{onclick}><img onerror="defaultImg(this, \'/img/autoPromoDefault.jpg\');" src="%{src}" class="promoAdImg" id="%{id}"></a>',
                        promoDiv = byId('promoGoomAds'),
                        r = data.results,
                        tpl = '',
                        cntImg = 0,
                        today = new Date(),
                        now = Math.round(today.getTime() / 1000),
                        tzOffset = today.getTimezoneOffset() * 60;

                    for(var i = 0, len = r.length; i < len; ++i) {
                        if(r[i].active) {
                        	// If startDate or endDate is not defined, then the corresponding timestamp is not relevant
                            var start = ('startDate' in r[i]) ? r[i].startTimestamp + tzOffset : 0,
                                end   = ('endDate' in r[i]) ? r[i].endTimestamp + tzOffset : 0;

                            if ((start < now) && (now < end || !end)) {
                                tpl += replace(imgTpl, {
                                    href : r[i].url,
                                    onclick : (r[i].urlType == 'internal') ? 'onclick="GOOM.Navigation.load(this.href); return false;"' : 'target="_blank"',
                                    src : getASSET() + '/' + r[i].image,
                                    id : 'promoAdImg' + i});
                                ++cntImg;
                            }
                        }
                    }
                    promoDiv.innerHTML = tpl;

                    var imgs = promoDiv.getElementsByTagName('img'),
                        imgNum = imgs.length,
                        currImgIndex = imgNum - 1;

                    switch(cntImg) {
                        case 0:
                            break;
                        case 1:
                            $('#' + imgs[currImgIndex].id).fadeIn('slow');
                            break;
                        default:
                            changeImg();
                            GOOM.Components.autopromo.imgInt = setInterval(changeImg, 5000);
                    }
                }
            });
        }
    };
}

