﻿
    function CSGoogleAnalyticsManager()
    {
    }
    
    CSGoogleAnalyticsManager.prototype.hasGA = function()
    {
        return _gaq != undefined && _gaq != null;
    }
    
    CSGoogleAnalyticsManager.prototype.getVideoPlayer = function(evt)
    {
        return document.getElementById(evt.id);
    }
    
    CSGoogleAnalyticsManager.prototype.currentPlaylistIndex = 0;
    
    CSGoogleAnalyticsManager.prototype.playlistEventHandler = function(evt)
    {
        this.currentPlaylistIndex = evt.index;
    }
    
    CSGoogleAnalyticsManager.prototype.trackVideoEvent = function(evt, action)
    {   
        if(!this.hasGA()) return;
        
        var player = this.getVideoPlayer(evt);
        if (player == null) return;
        
        var playlist=player.getPlaylist();
        
        var label = playlist[this.currentPlaylistIndex].title;
        
        _gaq.push(['_trackEvent', 'Videos', action, label]);
    }
    
    CSGoogleAnalyticsManager.prototype.playerEventHandler = function(evt)
    {   
        var player = this.getVideoPlayer(evt);
        var currentConfig = player.getConfig();
        
        if (evt.newstate != undefined)
        {
            switch(evt.newstate)
            {
                case "PLAYING":
                {
                    this.trackVideoEvent(evt, 'Play');
                    break;
                }
                case "COMPLETED":
                {
                    this.trackVideoEvent(evt, 'Completed');
                    break;
                }
                default:
                {
                    var newstate = evt.newstate;
                    break;
                }
            }
        }
        
    }
    
    CSGoogleAnalyticsManager.prototype.trackShareEvent = function(evt, action)
    {
        var shareLabel = evt.currentTarget.attributes["GATitle"].value;
        
        _gaq.push(['_trackEvent', 'Share', action, shareLabel]);
    }
    
    CSGoogleAnalyticsManager.prototype.shareEventHandler = function(evt)
    {
        var sender = evt.currentTarget;
        
        var shareType = sender.attributes["GAShareTracker"].value;
        
        switch(shareType)
        {
            case "EMAIL":
                this.trackShareEvent(evt, 'Email');
                break;
            case "TWEETER":
                this.trackShareEvent(evt, 'Tweeter');
                break;
            case "FACEBOOK":
                this.trackShareEvent(evt, 'Facebook');
                break;
            case "DIGG":
                this.trackShareEvent(evt, 'Digg');
                break;
            case "DELICIOUS":
                this.trackShareEvent(evt, 'Delicious');
                break;
            default:
                break;
        }
    }
    
    CSGoogleAnalyticsManager.prototype.trackDownloadEvent = function(evt, action)
    {
        var label = evt.currentTarget.attributes["GATitle"].value;
        
        _gaq.push(['_trackEvent', 'Download', action, label]);
    }
    
    CSGoogleAnalyticsManager.prototype.downloadEventHandler = function(evt)
    {
        var sender = evt.currentTarget;
        
        var shareType = sender.attributes["GADownloadTracker"].value;
        switch(shareType)
        {
            case "IPAPER":
                this.trackDownloadEvent(evt, "iPaper");
                break;
            default:
                break;
        }
    }
    
    var CSGAManager = new CSGoogleAnalyticsManager();
    
    function addPlaylistEventListeners(player)
    {
        if(!CSGAManager.hasGA()) return;
        
        player.addControllerListener("ITEM", "CSGAManager.playlistEventHandler");
        player.addControllerListener("PLAY", "CSGAManager.playlistEventHandler");
    }
    
    function addPlayerEventListeners(player)
    {
        if(!CSGAManager.hasGA()) return;
        
        player.addModelListener("STATE", "CSGAManager.playerEventHandler");
    }
    
    function addShareTracking()
    {
        if(!CSGAManager.hasGA()) return;
        
        var shareLinkLookup = $("[GAShareTracker]");
        
        if(shareLinkLookup.length > 0)
        {
            // in order to avoid sharing clicks from firing multiple times
            // we need to unbind existing share tracking events
            shareLinkLookup.unbind("click.GAShareTracker");
            // Then bind them
            shareLinkLookup.bind("click.GAShareTracker", function(event) { CSGAManager.shareEventHandler(event);});
        }
    }
    
    function addDownloadTracking()
    {
         if(!CSGAManager.hasGA()) return;
        
        var downloadLinkLookup = $("[GADownloadTracker]");
        
        if(downloadLinkLookup.length > 0)
        {
            // in order to avoid sharing clicks from firing multiple times
            // we need to unbind existing share tracking events
            downloadLinkLookup.unbind("click.GADownloadTracker");
            // Then bind them
            downloadLinkLookup.bind("click.GADownloadTracker", function(event) { CSGAManager.downloadEventHandler(event);});
        }
    }
    
    $(document).ready(addShareTracking);
    $(document).ready(addDownloadTracking);
    
    var _gaq = _gaq || [];   
    _gaq.push(['_setAccount', 'UA-2024372-1']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.type = 'text/javascript';
        ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; 
        s.parentNode.insertBefore(ga, s);
    })();
