﻿if ("undefined" == typeof ac) {
    ac = {};
}

ac.adManager = {
    _insertions: {},
    _registered: false,
    _cloneSource: {},
    _iframeHackUrl: "/_http/adiframe.html",
    _autoUseIframeHack: false,

    getMaxDimensions: function(target) {
        var width = 0;
        var height = 0;
        jQuery("iframe,img,object,embed,div", jQuery(target)).each(function() {
            width = Math.max(width, jQuery(this).width());
            height = Math.max(height, jQuery(this).height());
        });
        return { width: width, height: height };
    },

    registerCallback: function() {
        if ("object" == typeof sas_manager) {
            ac.adManager._registered = true;
            ac.adManager._sas_manager = sas_manager;
        }
    },

    register: function(siteId, pageId, targeting, formats) {
        targeting = ac.adManager._addTargeting(targeting, "geolevel1", ac.cookie("geolevel1"));
        targeting = ac.adManager._addTargeting(targeting, "geolevel2", ac.cookie("geolevel2"));
        targeting = ac.adManager._addTargeting(targeting, "geolevel3", ac.cookie("geolevel3"));

        document.write('<scr' + 'ipt type=\"text/javascript\" src=\"http://smart2.allocine.fr/call2/pubjall/' + siteId + '/' + pageId + '/' + formats + '/' + Math.round(Math.random() * 10000000000) + '/' + encodeURIComponent(targeting) + '?\"></scr' + 'ipt>');
    },

    _addTargeting: function(targeting, name, value) {
        if (name && value) {
            return (targeting ? (targeting + ";") : "") + name + "=" + value;
        }
        else {
            return targeting;
        }
    },

    registerInsertion: function(formatId, targetId, options) {
        options = jQuery.extend({}, {
            clonable: false,
            useIframeHack: false,
            preserveBox: false,
            fBefore: null,
            fAfter: null,
            fReplacement: null
        }, options);

        ac.adManager._insertions[targetId] = {
            targetId: targetId,
            formatId: formatId,
            options: options
        };
    },

    render: function(targetId) {
        var insertion = ac.adManager._insertions[targetId];

        var options = insertion.options;

        if (options.clonable && ac.adManager._cloneSource[insertion.formatId]) {
            insertion.postAction = "clone";
            return;
        }

        if (ac.adManager.formatExists(insertion.formatId)) {
            if (options.clonable) {
                insertion.postAction = "registerClone";
            }

            if ("function" == typeof options.fBefore) {
                options.fBefore(insertion.formatId, targetId);
            }

            if (!ac.adManager.formatExists(insertion.formatId)) {
                // in case beforeScript killed insertion...
                return;
            }

            //ad = ad.replace(/ishow/ig, "show");
            //ad = ad.replace(/iframe/ig, "script");

            var ad = ac.adManager.getFormatCode(insertion.formatId);
            ad = ad.replace("ipt ", "ipt charset='iso-8859-1' ");

            var useIframeHack = options.useIframeHack || (ac.adManager._autoUseIframeHack && (ad.indexOf("iframe") > -1));
            //            var useIframeHack = options.useIframeHack && (ad.indexOf("iframe") == -1);

            ac.adRenderer.__currentTargetId = targetId;

            if (!useIframeHack) {
                document.write(ad);
            }
            else {

                ad = ad.replace(/ishow/ig, "show");
                ad = ad.replace(/iframe/ig, "script");

                ad = ad.replace("ipt ", "ipt charset='iso-8859-1' ");

                var target = jQuery("#" + targetId);
                var iframe = document.createElement('iframe');
                iframe.style.display = "none";
                iframe.src = ac.adManager._iframeHackUrl;

                target.append(iframe);
                iframe.ad = ad;

                jQuery(iframe).load(function() {
                    var ibody = jQuery(iframe).contents().find("body");
                    jQuery("script[nostrip!=1]", ibody).remove();
                    target.html(ibody.html());
                });
            }
        }
        else {
            if ("function" == typeof options.fReplacement) {
                options.fReplacement(insertion.formatId, targetId);
                if (options.clonable) {
                    insertion.postAction = "registerClone";
                }
            }
            else if (!options.preserveBox) {
                insertion.postAction = "remove";
            }
        }
    },

    postRender: function(targetId) {
        var insertion = ac.adManager._insertions[targetId];
        var options = insertion.options;
        var target = jQuery("#" + targetId);

        if ("remove" == insertion.postAction) {
            target.remove();
        }
        else if ("clone" == insertion.postAction) {
            target.html(ac.adManager._cloneSource[insertion.formatId]);
        }
        else {
            if ("function" == typeof options.fAfter) {
                options.fAfter(insertion.formatId, targetId)
            }

            if ("registerClone" == insertion.postAction) {
                var clone = target.clone();
                jQuery("script[nostrip!=1]", clone).remove();
                ac.adManager._cloneSource[insertion.formatId] = clone.html();
            }
        }
        delete ac.adManager._insertions[targetId];
    },

    deleteFormat: function(formatId) {
        // if formatId not yet called
        delete ac.adManager._sas_manager.formats["f" + formatId];
        // if formatId already called
        jQuery(".adf_" + formatId).hide();
    },

    getFormatCode: function(formatId) {
        return ac.adManager._sas_manager.formats["f" + formatId].scriptURL();
    },

    formatExists: function(formatId) {
        return (ac.adManager._registered && ac.adManager._sas_manager.exists(formatId));
    },

    dependsOn: function(formatId, requiredFormatId) {
        if (!ac.adManager.formatExists(requiredFormatId)) {
            ac.adManager.deleteFormat(formatId);
        }
    }
};

ac.adRenderer = {
    __currentTargetId: "",
    __hockeyStick: false,
    __interstitial: false,
    __interstitialHasAgencyData: true,
    __preRoll: false,

    getStartTag: function(tagName, attributes, additionalAttributes) {
        var tagAttributes = jQuery.extend({},
            additionalAttributes,
            attributes);

        var html = [];
        html.push("<" + tagName);
        for (name in tagAttributes) {
            if (tagAttributes[name]) {
                html.push(" " + name + "='" + tagAttributes[name] + "'");
            }
        }
        html.push(">");
        return html.join("");
    },

    textLink: function(imgSrc, link, customizedScript) {
        var html = [];
        link = link || {};
        var title = link.title || "";

        html.push("<div class='sponsorzone'>");
        html.push("<div class='picturezone'>");
        html.push(ac.adRenderer.getStartTag("a", link));
        html.push("<img alt='" + title + "' src='" + imgSrc + "'/></a>");
        html.push("</div>");
        html.push("<div class='contenzone'>");
        html.push("<p>");
        html.push(ac.adRenderer.getStartTag("a", link, { "class": "underline" }));
        html.push(title + "</a></p>");
        html.push("<div class='spacer'></div>");
        html.push("</div>");
        html.push("<div class='spacer'></div>");
        html.push("</div>");

        if (customizedScript) {
            html.push(customizedScript);
        }

        document.write(html.join(""));
    },

    test: function(imgSrc, scr) {
        var html = [];

        html.push("<img src='" + imgSrc + "'/>");
        if (scr) {
            html.push(scr);
        }

        document.write(html.join(""));
    },

    backgroundImage: function(imgSrc, color, top, attachment, overflow) {
        var html = [];
        html.push("<style type='text/css'>");
        html.push("body{");
        html.push("background-image: url(" + imgSrc + ");");
        html.push("background-repeat: no-repeat;");
		html.push("background-position:center top;");
        html.push("background-position:center " + top + "px;");
        html.push("background-color: " + color + ";");
        html.push("padding: 0;");
        html.push("background-attachment: " + attachment + ";");
        html.push("}");
        if (overflow) {
            html.push(".wrapper-top-pub{");
            html.push("margin-bottom: -" + overflow + "px;");
            html.push("z-index:100;");
            html.push("}");
        }
        html.push("</style>");

        document.write(html.join(""));
    },

    emptyBlock: function(linkUrl, width, height, linkTarget) {
        var html = [];
        var link = { href: linkUrl, target: linkTarget || "" };

        html.push(ac.adRenderer.getStartTag("a", link, { "style": "display:block" }));
        html.push("<img src='http://images.allocine.fr/commons/empty.gif' width='" + width + "' height='" + height + "'/></a>");

        document.write(html.join(""));
    },

    tabExpand: function(flashUrl, imgUrl) {
        // console.log("flash :" + flashUrl);
        //console.log("img :" + imgUrl);
    },

    interstitial2: function(bgColor, imgUrl, imgWidth, imgHeight, options) {
        ac.adRenderer.__interstitial = true;
        ac.cookie("ad.inter", "1", { days: 1, midnight: true });

        options = options || {};

        var html = [];

        html.push("<style type='text/css'>");
        html.push("div#inter{");
        html.push("position:absolute;");
        html.push("top:0;");
        html.push("left:50%;");
        html.push("margin-left:-" + imgWidth / 2 + "px;");
        html.push("width:" + imgWidth + "px;");
        html.push("height:" + imgHeight + "px;");
        html.push("cursor:pointer;");
        html.push("background-repeat:no-repeat;");
        html.push("background-position:center top;");
        html.push("z-index:1000002;");
        html.push("}");
        html.push("div#inter .inter_zone{");
        html.push("cursor:pointer;");
        html.push("position:absolute;");
        html.push("padding:0;");
        html.push("width:100%;");
        html.push("}");
        html.push("div#inter .btn{");
        html.push("height:70px;");
        html.push("}");
        html.push("div#inter .sub{");
        html.push("display:block;");
        html.push("height:100%;");
        html.push("top:70px;");
        html.push("}");
        html.push("div#inter #inter_flash{");
        html.push("display:block;");
        html.push("position:relative;");

        if (options.hasOwnProperty("flashUrl")) {
            html.push("top:0px;");
            html.push("width:" + options.flashWidth + "px;");
            html.push("height:" + options.flashHeight + "px;");
        }
        else if (options.hasOwnProperty("offset")) {
            html.push("top:" + options.offset + "px;");
        }

        html.push("margin:0 auto;");
        html.push("}");
        html.push(".js_inter_html .js_inter_hide{");
		/*
		Mise a jour le 22 mars 2011 par Yohann Tilotti
		
		Remplacement :
		html.push("position:absolute;");
        html.push("top:3000px;");
		
		Par :
		html.push("visibility:hidden;");
		*/
        html.push("visibility:hidden;");
        html.push("}");
        html.push(".js_inter_html{background-color:#" + bgColor + ";overflow:hidden;}");
        html.push("</style>");

        html.push("<div id='inter' style='background-image:url(" + imgUrl + ");'>");

        html.push("<div class='inter_zone btn' onclick='ac.adRenderer.interstitialStop();'></div>");
        if (options.hasOwnProperty("url")) {
            var link = {
                "class": "inter_zone sub",
                "href": options.url,
                "target": options.target
            }
            html.push(ac.adRenderer.getStartTag("a", link));
            html.push("</a>");
        }

        html.push("<div id='inter_flash'>");
        if (options.hasOwnProperty("agencyScript")) {
            html.push("<center id='agencyScript'>" + options.agencyScript + "</center>");
            ac.adRenderer.__interstitialHasAgencyData = true;
            if (options.hasOwnProperty("countdown")) {
                window.setTimeout(ac.adRenderer.interstitialStop, (options.countdown || 10) * 1000);
            }
        }
        html.push("</div>");
        html.push("</div>");


        window.Projection_Fin = ac.adRenderer.interstitialStop;
        window.pub_ist_hd = ac.adRenderer.interstitialStop;

        jQuery("html").addClass("js_inter_html");
        document.write(html.join(""));

        try {

            if (options.hasOwnProperty("flashUrl")) {
                swfobject.embedSWF(
                    options.flashUrl,
                    'inter_flash',
                    options.flashWidth,
                    options.flashHeight,
                    '9.0.0',
                    null,
                    { clicktag: options.url, target: options.target },
                    { allowScriptAccess: 'always', quality: 'high', wmode: 'transparent' }
                );
            }
        }
        catch (e) {
            ac.adRenderer.interstitialStop();
        }
    },

    interstitial: function(url, target, bgColor, flashUrl, flashWidth, flashHeight, imgUrl, imgWidth, imgHeight) {
        ac.adRenderer.interstitial2(bgColor, imgUrl, imgWidth, imgHeight, { url: url, target: target, flashUrl: flashUrl, flashHeight: flashHeight, flashWidth: flashWidth });
    },

    interstitialStop: function() {
        ac.adRenderer.__interstitial = false;
        jQuery("#inter").remove();
        jQuery(".adf_62").remove();
        jQuery("html").removeClass("js_inter_html");
        jQuery(window).trigger("interstitialStop");
    },

    _marketingBlock: function() {
        var html = [];

        html.push("<div class='boxbasic'>");
        html.push("<div class='boxhdr'>");
        html.push("<div class='boxhr'></div>");
        html.push("<div class='boxhl'></div>");
        html.push("<div class='boxhm'></div>");
        html.push("<div class='spacer'></div>");
        html.push("</div>");
        html.push("<div class='boxbasicctt'>");
        html.push("<div id='dbg_ftod_04' class='rubric'>marketing info<br /></div>");
        html.push("<div class='spacer'></div>");
        html.push("</div>");
        html.push("<div class='boxftr'>");
        html.push("<div class='boxfr'></div>");
        html.push("<div class='boxfl'></div>");
        html.push("<div class='boxfm'></div>");
        html.push("<div class='spacer'></div>");
        html.push("</div>");
        html.push("</div>");

        document.write(html.join(""));
    },

    marketingBlockStyle: function() {
        var html = [];

        html.push("<style type='text/css'>");
		/*
		Modifier par Yohann Tilotti le 28 janvier 2011
		
		html.push(".coltop .adf_5137{");
        html.push("float:right;");
        html.push("margin:0 10px 10px 0;");
        html.push("overflow:hidden;");
        html.push("}");*/
		
        html.push(".adf_5137 .boxbasicctt .rubric{");
        html.push("margin:4px 8px;");
        html.push("font-size:11px;");
        html.push("background-color:transparent;");
        html.push("}");

        html.push(".ad_mktblock_small .ad_image .rubric{");
        html.push("width:118px;");
        html.push("}");

        html.push(".ad_mktblock_large .ad_image .rubric{");
        html.push("width:150px;");
        html.push("}");

        html.push(".adf_5137 .ad_right .rubric{");
        html.push("float:left;");
        html.push("}");

        html.push(".adf_5137 .ad_left .rubric{");
        html.push("float:right;");
        html.push("}");

        html.push(".ad_mktblock_small .boxbasicctt{");
        html.push("width:222px;");
        html.push("height:90px;");
        html.push("background-image:url(http://images.allocine.fr/commons/ad/marketinginfo_int.png);");
        html.push("}");

        html.push(".ad_mktblock_large .boxbasicctt{");
        html.push("width:300px;");
        html.push("height:100px;");
        html.push("background-image:url(http://images.allocine.fr/commons/ad/marketinginfo_home.png);");
        html.push("}");

        html.push(".adf_5137 .boxbasicctt{");
        html.push("background-repeat:no-repeat;");
        html.push("background-position:left top;'");
        html.push("}");
        html.push("</style>");

        document.write(html.join(""));
    },

    marketingBlock: function(headerText, text, bottomText, linkUrl, linkTarget, isEvent, imgUrl, imgPosition) {
        ac.adRenderer.marketingBlockStyle();

        var link = { href: linkUrl, target: linkTarget };

        var html = [];

        html.push("<div class='-boxbasic");
        if (imgUrl) {
            html.push(" ad_image");
        }
        if (imgPosition) {
            html.push(" ad_" + imgPosition);
        }
        html.push("'>");

        html.push("<div class='boxbasicctt'");
        if (imgUrl) {
            html.push(" style='background-image:url(" + imgUrl + ");'");
        }
        html.push(">");

        html.push("<div class='rubric'>");

        if (isEvent) {
            html.push(ac.adRenderer.getStartTag("a", link, { "class": "insist" }));
        }
        else {
            html.push(ac.adRenderer.getStartTag("a", link, { "class": "bold" }));
        }
        html.push(headerText);
        html.push("</a>");

        html.push("<br/>");

        html.push(text);

        html.push("<br/>");

        if (isEvent) {
            html.push(ac.adRenderer.getStartTag("a", link, { style: "text-decoration:underline" }));
        }
        else {
            html.push(ac.adRenderer.getStartTag("a", link, { style: "text-decoration:underline" }));
        }
        html.push(bottomText);
        html.push("</a>");

        html.push("</div>");
        html.push("</div>");
        html.push("</div>");

        document.write(html.join(""));
    },

    marketingBlockList: function(items) {
        ac.adRenderer.marketingBlockStyle();
        var ulclass = "size1of1";
        var html = [];
        html.push("<div class='-boxbasic'>");
        html.push("<div class='boxbasicctt'>");
        html.push("<div class='rubric'>");
        html.push("<ul class='ulclass fleft'>");

        var n = 0;
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (item.href && item.text) {
                n++;
                if (n == 5) {
                    ulclass = "size1of2";
                    html.push("</ul><ul class='ulclass fleft'>");
                }
                html.push("<li>");
                var link = { href: items[i].href };
                switch (items[i].style) {
                    case "red":
                        link["class"] = "insist bold";
                        break;
                    case "bold":
                        link["class"] = "bold";
                        break;
                    default:
                        break;
                }
                html.push(ac.adRenderer.getStartTag("a", link));
                html.push(items[i].text);
                html.push("</a>");
                html.push("</li>");
            }
        }

        html.push("</ul>");
        html.push("</div>");
        html.push("</div>");
        html.push("</div>");

        document.write(html.join("").replace(/ulclass/g, ulclass));
    },

    preRollStart: function(time, f) {
        var timeToLeaveText = function(ttl) {
            return "Chargement : votre vidéo commence dans " + ttl + ((ttl > 1) ? " secondes" : " seconde");
        };

        var ttl = time;

        ac.adRenderer.preRollInterval = window.setInterval(function() {
            if (--ttl <= 0) {
                f();
            }
            else {
                jQuery("#ad_prerollttl").text(timeToLeaveText(ttl));
            }
        }, 1000);
    },

    preRoll: function(time) {

        if (ac.adManager.formatExists(54)) {
            if (!ac.adRenderer.__preRoll) {
                ac.adRenderer.__preRoll = true;
                var stop = function() {
                    // kill preroll
                    jQuery("#ad_prerollttl").remove();
                    // kill preroll countdown
                    jQuery(".adf_54").remove();

                    if ("undefined" != ac.adRenderer.preRollInterval) {
                        window.clearInterval(ac.adRenderer.preRollInterval);
                    }
                    // start player                   
                    ac.trace.warn("video start");
                    jQuery("#content_player").css("display", "block");
                    jQuery("#preRoll").css("display", "none");
                    jQuery("#V6_player").css("display", "block");

                    setTimeout(function() { jQuery("#V6_player").each(function() { this.sendToActionScript("play"); }); }, 2000);

                };

                if (time) {
                    var start = function() {
                        ac.adRenderer.preRollStart(time, stop);
                    }
                    // document.write("<span id='ad_prerollttl'></span>");

                    if (ac.adRenderer.__interstitial) {
                        jQuery(window).bind("interstitialStop", start);
                    }
                    else {
                        start();
                    }
                }
                else {
                    stop();
                }
            }
        }
    },

    hockeyStick: function() {
        ac.adRenderer.__hockeyStick = true;
    },

    megaBannerAdjust: function() {
        var megabanner = jQuery(".adf_46");
        if (megabanner.length) {
            var dimensions = ac.adManager.getMaxDimensions(megabanner);
            if (dimensions.width > 728) {
                ac.adManager.deleteFormat(5137);
            }
            if (ac.adRenderer.__hockeyStick) {
                document.write("<style type='text/css'>#right{margin-top:" + (dimensions.height - 80) + "px}</style>");
                ac.adManager.deleteFormat(54);
                ac.adManager.deleteFormat(47);
            }
            else {
                megabanner
                    .addClass("fleft")
                    .removeClass("fright");
            }
        }
    },

    moveCurrentAd: function(referenceSelector, relation, css) {
        var currentTargetId = ac.adRenderer.__currentTargetId;
        var currentHidden = false;

        html = [];

        function doMove() {
            var reference = jQuery(referenceSelector);
            var current = jQuery('#' + currentTargetId);

            if (current.length) {
                current.css('visibility', 'hidden');
                currentHidden = true;
            }

            if (current.length && reference.length) {
                if ('object' == typeof css) {
                    for (var v in css) {
                        current.css(v, css[v]);
                    }
                }
                switch (relation.toLowerCase()) {
                    case 'before':
                        reference.before(current);
                        break;
                    case 'after':
                        reference.after(current);
                        break;
                    case 'append':
                        reference.append(current);
                        break;
                    case 'prepend':
                        reference.prepend(current);
                        break;
                }
                current.css('visibility', 'visible');
            }
            else {
                window.setTimeout(doMove, 500);
            }
        }
        window.setTimeout(doMove, 500);

        document.write(html.join("\n"));
    }
};


