var webGamesCookie = {};
var popCapAdSpots =
{
    openXURL: "http://ad1.popcap.com/www/delivery/afr.php?",
    cookieDomain: ".popcap.com",
    cookieName: "webgames",
    
    getRandomNumber: function()
    {
        return Math.floor(Math.random()*100000000);
    },
    
    getAdURL: function(game, zone_id)
    {
       return this.openXURL + 'cb=' + this.getRandomNumber() + '&zoneid=' + zone_id + this.getAdTarget(this.cookieDomain, this.cookieName, game);
    },
    
    loadIFrameAd: function(frame_id, zone_id, game)
    {
       $("#" + frame_id).attr('src', this.getAdURL(game, zone_id)); 
    },
    
    rotateIFrameAd: function(frame_id, zone_id, frequency, max, count, game) 
    {
	    // DEBUG console.log("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX frame_id: " + frame_id + " zone_id: " + zone_id + " frequency: " + frequency + " max: " + max + " count: " + count + " game: " + game)
        if (frequency < 1 || typeof(frequency) == 'undefined') 
        {
            frequency = 5;
        }
        if (typeof(max) == 'undefined') 
        {
            max = 10000;
        }
        if (typeof(count) == 'undefined') 
        {
            count = 0;
        }
        if (count === 0) 
        {
            frequency = frequency * 1000; //convert seconds to milliseconds
        }
        else if (count <= max) 
        {
            $("#" + frame_id).attr('src', this.getAdURL(game, zone_id)); 
        }
        if (count < max) 
        {
            count++;
            if (game != 'typershark')
            {
              setTimeout("popCapAdSpots.rotateIFrameAd('" + frame_id + "', '" + zone_id + "', " + frequency+", " + max + ", " + count + ", '" + game + "')", frequency);
            }
        }
    },
    
    resetWebGamesCookie: function(cookieDomain, cookieName)
    {
       webGamesCookie = { games : {}, total : { aI: {}}};
       this.setWebGamesCookie(cookieDomain, cookieName);
    },

    setWebGamesCookie: function(cookieDomain, cookieName)
    {
        $.cookie(cookieName, $.toJSON(webGamesCookie) , { expires: (365*5), path: '/', domain: cookieDomain});
    },
    
	getQueryVariable: function (variable) 
	{
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		for (var i=0;i < vars.length; i++) 
		{
			var pair = vars[i].split("=");
			if (pair[0] == variable) {
				return pair[1];
			}
		} 
	},
	
    getWebGamesCookie: function(cookieDomain, cookieName) 
    {
        webGamesCookie = $.evalJSON($.cookie(cookieName));
        if (!webGamesCookie)
        {
           this.resetWebGamesCookie(cookieDomain, cookieName);
        }
    },
    
    getAdTarget: function(cookieDomain, cookieName, gameCode)
    {
        var adTarget = "";

      this.getWebGamesCookie(cookieDomain, cookieName);
        
        adTarget += "&total_plays=" + ((webGamesCookie.total.p !== undefined) ? webGamesCookie.total.p : 0);
        adTarget += "&total_pagetime=" + ((webGamesCookie.total.sTl !== undefined) ?  webGamesCookie.total.sTl : 0);
        adTarget += "&total_idletime=" + ((webGamesCookie.total.sId !== undefined) ? webGamesCookie.total.sId : 0);
        adTarget += "&total_playtime=" + ((webGamesCookie.total.sPl !== undefined) ? webGamesCookie.total.sPl : 0);
        adTarget += "&total_preroll=" + ((webGamesCookie.total.aI.preRoll !== undefined) ? webGamesCookie.total.aI.preRoll : 0);
        adTarget += "&total_midroll=" + ((webGamesCookie.total.aI.midRoll !== undefined) ? webGamesCookie.total.aI.midRoll : 0);
        adTarget += "&total_postroll=" + ((webGamesCookie.total.aI.postRoll !== undefined) ? webGamesCookie.total.aI.postRoll : 0);
        adTarget += "&game=" + gameCode;

        var lcidQuery = this.getQueryVariable("lcid"); 
		adTarget += "&lc_code=" + (lcidQuery ? lcidQuery : $.cookie("lcid"));
		adTarget += "&uid=" +  $.cookie("user_id");
		adTarget += "&ouid=" +  $.cookie("s_vi");

        if (webGamesCookie.games[gameCode] !== undefined)
        {
            adTarget += "&game_plays=" + ((webGamesCookie.games[gameCode].total.p !== undefined) ? webGamesCookie.games[gameCode].total.p : 0);
            adTarget += "&game_score=" + ((webGamesCookie.games[gameCode].total.sc !== undefined) ? webGamesCookie.games[gameCode].total.sc : 0);
            adTarget += "&game_level=" + ((webGamesCookie.games[gameCode].total.l !== undefined) ? webGamesCookie.games[gameCode].total.l : 0);
            adTarget += "&platform=" + ((webGamesCookie.games[gameCode].pl !== undefined) ? webGamesCookie.games[gameCode].pl : 0);
        }
        
        return adTarget;
    },
    
    updateWebGamesCookie: function(cookieDomain, cookieName, gameCode, trackingObject) 
    {
        if ((!webGamesCookie.games) || (!webGamesCookie.total))
        {  
            this.resetWebGamesCookie(cookieDomain, cookieName);
        }
        
        if (webGamesCookie.games[gameCode] !== undefined)
        {
            priorCookie = webGamesCookie.games[gameCode];
        }
        else 
        {
            priorCookie = null;
        }
        
        webGamesCookie.total = 
        {
            p: ((webGamesCookie.total.p !== undefined) ? webGamesCookie.total.p + trackingObject.sessionPlays : trackingObject.sessionPlays), 
            sTl: ((webGamesCookie.total.sTl !== undefined) ? (parseInt(webGamesCookie.total.sTl, 10) + trackingObject.getSecondsLoaded()) : trackingObject.getSecondsLoaded()),
            sId: ((webGamesCookie.total.sId !== undefined) ? (parseInt(webGamesCookie.total.sId, 10) + trackingObject.getSecondsIdle()) : trackingObject.getSecondsIdle()),
            sPl: ((webGamesCookie.total.sPl !== undefined) ? (parseInt(webGamesCookie.total.sPl, 10) + trackingObject.getSecondsPlayed()) : trackingObject.getSecondsPlayed()),
            sAd: ((webGamesCookie.total.sAd !== undefined) ? (parseInt(webGamesCookie.total.sAd, 10) + trackingObject.getSecondsAds()) : trackingObject.getSecondsAds()),
            aI: {
                   preRoll: ((webGamesCookie.total.aI.preRoll !== undefined) ? webGamesCookie.total.aI.preRoll + trackingObject.adImpressions.preRoll : trackingObject.adImpressions.preRoll), 
                   midRoll: ((webGamesCookie.total.aI.midRoll !== undefined) ? webGamesCookie.total.aI.midRoll + trackingObject.adImpressions.midRoll : trackingObject.adImpressions.midRoll), 
                   postRoll: ((webGamesCookie.total.aI.postRoll !== undefined) ? webGamesCookie.total.aI.postRoll + trackingObject.adImpressions.postRoll : trackingObject.adImpressions.postRoll) 
                }
        };
        
        webGamesCookie.games[packageSettings.gameCode] =
        {
            lcC: packageSettings.gameLCCode,
            lcT: packageSettings.gameLCText,
            lcL: packageSettings.gameLCLang,
            pl: packageSettings.gamePlatform,
            lS: 
            {
                p: trackingObject.sessionPlays,
                u: trackingObject.userId,
                sT: this.sessionStart,
                aI: trackingObject.adImpressions,
                sTl: trackingObject.getSecondsLoaded(),
                sId: trackingObject.getSecondsIdle(),
                sPl: trackingObject.getSecondsPlayed(),
                sAd: trackingObject.getSecondsAds(),
                sc: trackingObject.highestScore,
                l: trackingObject.highestLevel
            },
            total:
            {
                p: 0,
                aI: { preRoll: 0, midRoll: 0, postRoll: 0 },
                sTl: 0,
                sId: 0,
                sPl: 0,
                sAd: 0,
                sc: 0,
                l: 0
            }
        };
    
        if (priorCookie !== null)
        {
            newCookie = webGamesCookie.games[packageSettings.gameCode];
            
            webGamesCookie.games[packageSettings.gameCode].total.p = priorCookie.total.p + newCookie.lS.p;
            webGamesCookie.games[packageSettings.gameCode].total.sTl = priorCookie.total.sTl + newCookie.lS.sTl;
            webGamesCookie.games[packageSettings.gameCode].total.aI.preRoll = priorCookie.total.aI.preRoll + newCookie.lS.aI.preRoll;
            webGamesCookie.games[packageSettings.gameCode].total.aI.midRoll = priorCookie.total.aI.midRoll + newCookie.lS.aI.midRoll;
            webGamesCookie.games[packageSettings.gameCode].total.aI.postRoll = priorCookie.total.aI.postRoll + newCookie.lS.aI.postRoll;
            webGamesCookie.games[packageSettings.gameCode].total.sId = priorCookie.total.sId + newCookie.lS.sId;
            webGamesCookie.games[packageSettings.gameCode].total.sPl = priorCookie.total.sPl + newCookie.lS.sPl;
            webGamesCookie.games[packageSettings.gameCode].total.sAd = priorCookie.total.sAd + newCookie.lS.sAd;
            if (priorCookie.total.sc < newCookie.lS.sc)
            {
                webGamesCookie.games[packageSettings.gameCode].total.sc = newCookie.lS.sc;
            }
            if (priorCookie.total.l < newCookie.lS.l)
            {
                webGamesCookie.games[packageSettings.gameCode].total.l = newCookie.lS.l;
            }
        }
        
        this.setWebGamesCookie(cookieDomain, cookieName);
    }
};
