project.player.Advertising = new Class({

    Implements: project.player.Logging,

    log_prefix: 'Advertising',

    proxy: null,
    dom_element: null,
    pause_overlay: null,
    overlay_content: null,
    overlay_click_event: null,
    overlay_open: false,

    default_max_flash_width: 635,
    default_max_flash_height: 295,

    ad_type: null,

    skinbranding: {
        reset: 30000,
        visible: true
    },

    flashVars: {
        clickTag: 'clickTag' // für goldbach beide varianten
    },

    params: {
        allowfullscreen: true,
        allowscriptaccess: 'always',
        wmode: 'transparent'
    },

    initialize: function(options)
    {
        this.logger('initialize');
        this.proxy = options.proxy;

        this.render();

        //this.show();
        //this.hideWithDelay(10000);
    },

    render: function()
    {
        // advertising overlay
        this.dom_element = new Element('div', {
           'id': 'player_advertising'
        });

        this.overlay_content = new Element('div', {
            'id': 'player_advertising_content'
        });
        this.dom_element.grab(this.overlay_content);

        $('player_area').grab(this.dom_element);

        // pause ad overlay
        this.pause_overlay = new Element('div', {
           'id': 'player_pause_overlay'
        });
        $('player_area').grab(this.pause_overlay);
    },


    showPauseAd: function() {
        var that = this;

        that.pause_overlay.empty();

        var play_btn = new Element('div', {
            'class': 'play_btn'
        }).adopt(
            new Element('span', {
                'html': '<strong>Pause</strong>Jetzt weiter ansehen'
            }),
            new Element('a', {
                'class': 'play_logo'
            })
        ).addEvent('click', function() {
            that.proxy.player.obj.playClip();
        });

        var wrapper = new Element('div', {
           'class': 'pause_ad_wrapper'
        }).adopt(
            new Element('span', {
                'text': 'Werbung'
            }),
            new Element('div', {
                'id': 'adlink_pausead'
            }),
            play_btn
        );

        that.pause_overlay.adopt(
            wrapper
        );

        Exo_AdReload.registerPart('AdLinkPauseAd', 'adlink_pausead');
        Exo_AdReload.update('AdLinkPauseAd', {'zone': that.proxy.player.active_clip.category.toUpperCase() + '-' + that.proxy.player.active_clip.zoneCategoryName, 'mroute':'contentset', 'roadblock':null});

        // close overlay ad temporary if open
        if(this.overlay_open)
        {
            this.hide();
            this.overlay_open = true;
        }

        // show psuse overlay
        this.pause_overlay.show();
    },

    hidePauseAd: function() {
        if(this.overlay_open)
        {
            this.show();
        }
        this.pause_overlay.hide();
    },

    show: function() {
        this.overlay_open = true;
        this.dom_element.show();
    },

    hide: function() {
        this.overlay_open = false;
        this.dom_element.hide();
    },

    hideWithDelay: function(delay)
    {
        var that = this;
        (function(){
            that.dom_element.hide();
        }).delay(delay);
    },

    reset: function() {
        this.logger('reset');
        
        this.overlay_content.empty();
        this.hide();
        this.resetSkinbranding();
    },

    resetSkinbranding: function(delay)
    {
        var that = this;
        (function(){
            that.proxy.resetSkinbranding();
            that.hide();
        }).delay(delay);
    },

    
    setSkinbrandingVisible: function(state)
    {
        this.skinbranding.visible = state;
    },

    adReload: function(action)
    {
        if(this.proxy.player.obj.adreload_allowed && 'false' == this.proxy.player.fullscreen)
        {
            this.logger('adReload ('+ action +')');
            this.testing_logger('adReload ('+ action +')', 'advertising');
            adreload();
        }
    },

    checkAdType: function(info)
    {
        this.logger('checkAdType: ' + info.adRequestType)
        if(undefined != info.adRequestType)
        {
            this.ad_type = info.adRequestType;
            this.logger('ad_type: ' + this.ad_type);

            // reset ?
        }

        if(info.adRequestType == "doubleclickdefines:skinningAd")
        {
            this.skinningAd(info);
        }

        if(info.adRequestType == "doubleclickdefines:tandemAd")
        {
            this.tandemAd(info);
        }

        if(info.adRequestType == "doubleclickdefines:insertAd")
        {
            this.insertAd(info);
        }

        if(info.adRequestType == "doubleclickdefines:delayedAd")
        {
            this.delayedAd(info);
        }
    },

    updateOverlayContent: function(embed_url, click_url, height, width)
    {
        var embed_width = width || this.default_max_flash_width;
        var embed_height = height || this.default_max_flash_height;

        this.flashVars.clickTag = click_url;
        this.testing_logger('clickTag: ' + click_url, 'advertising');
        
        swfobject.embedSWF(embed_url, 'player_advertising_content', embed_width, embed_height, "9.0.115", "js/swfobject/expressInstall.swf", this.flashVars, this.params, "");

        this.show();
    },

    instreamAdStarted: function(type)
    {
        if('doubleclickdefines:skinningAd' == this.ad_type)
        {
            this.hide();
        }
    },

    instreamAdFinished: function(type)
    {
        if('doubleclickdefines:tandemAd' == this.ad_type)
        {
            this.hide();
            this.proxy.resetSkinbranding();
        }

        if('doubleclickdefines:skinningAd' == this.ad_type)
        {
            if(this.skinbranding.visible)
            {
                this.show();
            }
        }
    },


    /*
     * AdType
     */
    skinningAd: function(info)
    {
        this.logger('skinningAd');

        /*
         * Branding
         */
        var skinningad_bg = info.ads['skinning-bg'].adUrl;
        var skinningad_bg_link = info.ads['skinning-bg'].adClickUrl;
        this.proxy.setSkinbranding(skinningad_bg, skinningad_bg_link);

        /*
         * Overlay
         */
        var skinningad = info.ads.skinning.adUrl;
        var skinningad_link = info.ads.skinning.adClickUrl;

        this.updateOverlayContent(skinningad, skinningad_link);
    },


    tandemAd: function(info)
    {
        this.logger('tandemAd');

        if(info.ads['1'])
        {
            this.logger('tandemAd:1');

            var embed_url = info.ads['1'].adUrl;
            var click_url = info.ads['1'].adClickUrl;
            var height = info.ads['1'].height;
            var width = info.ads['1'].width;

            this.updateOverlayContent(embed_url, click_url, height, width);
        }

        if(info.ads['tandem'])
        {
            this.logger('tandemAd:tandem');

            var embed_url = info.ads['tandem'].adUrl;
            var click_url = info.ads['tandem'].adClickUrl;
            var height = info.ads['tandem'].height;
            var width = info.ads['tandem'].width;

            this.updateOverlayContent(embed_url, click_url, height, width);
        }

        if (info.ads['skinning'])
        {
            this.logger('insertAd:skinning');

            /*
             * Branding
             */
            var skinningad_bg = info.ads['skinning-bg'].adUrl;
            var skinningad_bg_link = info.ads['skinning-bg'].adClickUrl;
            this.proxy.setSkinbranding(skinningad_bg, skinningad_bg_link);

            /*
             * Overlay
             */
            var skinningad = info.ads.skinning.adUrl;
            var skinningad_link = info.ads.skinning.adClickUrl;

            this.updateOverlayContent(skinningad, skinningad_link);
        }

        if (info.ads['delayed'])
        {
            this.logger('delayedAd:delayed');

            var embed_url = info.ads['delayed'].adUrl;
            var click_url = info.ads['delayed'].adClickUrl;
            var height = info.ads['delayed'].height;
            var width = info.ads['delayed'].width;

            this.updateOverlayContent(embed_url, click_url, height, width);
        }
    },


    insertAd: function(info)
    {
        this.logger('insertAd');

        if (info.ads['insert'])
        {
            this.logger('insertAd:insert');

            var embed_url = info.ads['insert'].adUrl;
            var click_url = info.ads['insert'].adClickUrl;
            var height = info.ads['insert'].height;
            var width = info.ads['insert'].width;

            this.updateOverlayContent(embed_url, click_url, height, width);
        }

        if (info.ads['skinning'])
        {
            this.logger('insertAd:skinning');

            /*
             * Branding
             */
            var skinningad_bg = info.ads['skinning-bg'].adUrl;
            var skinningad_bg_link = info.ads['skinning-bg'].adClickUrl;
            this.proxy.setSkinbranding(skinningad_bg, skinningad_bg_link);
            this.resetSkinbranding(this.skinbranding.reset);

            /*
             * Overlay
             */
            var skinningad = info.ads.skinning.adUrl;
            var skinningad_link = info.ads.skinning.adClickUrl;

            this.updateOverlayContent(skinningad, skinningad_link);
        }
    },


    delayedAd: function(info)
    {
        this.logger('delayedAd');

        if (info.ads['e-commerce-button'])
        {
            this.logger('delayedAd:e-commerce-button');

            var embed_url = info.ads['e-commerce-button'].adUrl;
            var click_url = info.ads['e-commerce-button'].adClickUrl;
            var height = info.ads['e-commerce-button'].height;
            var width = info.ads['e-commerce-button'].width;

            this.updateOverlayContent(embed_url, click_url, height, width);
        }

        if (info.ads['delayed'])
        {
            this.logger('delayedAd:delayed');

            var embed_url = info.ads['delayed'].adUrl;
            var click_url = info.ads['delayed'].adClickUrl;
            var height = info.ads['delayed'].height;
            var width = info.ads['delayed'].width;

            this.updateOverlayContent(embed_url, click_url, height, width);
        }

        if (info.ads['skinning'])
        {
            this.logger('insertAd:skinning');

            /*
             * Branding
             */
            var skinningad_bg = info.ads['skinning-bg'].adUrl;
            var skinningad_bg_link = info.ads['skinning-bg'].adClickUrl;
            this.proxy.setSkinbranding(skinningad_bg, skinningad_bg_link);
            this.resetSkinbranding(this.skinbranding.reset);

            /*
             * Overlay
             */
            var skinningad = info.ads.skinning.adUrl;
            var skinningad_link = info.ads.skinning.adClickUrl;

            this.updateOverlayContent(skinningad, skinningad_link);

            /// close overlay
        }
    }
});

