﻿// Log any kind of Web Intent event to Google Analytics
// Category: "twitter_web_intents"
// Action: Intent Event Type
// Label: Identifier for action taken: tweet_id, screen_name/user_id, click region
// First, load the widgets.js file asynchronously 

window.twttr = (function (d, s, id) {

    var t, js, fjs = d.getElementsByTagName(s)[0];

    if (d.getElementById(id)) return; js = d.createElement(s); js.id = id;

    js.src = "//platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs);

    return window.twttr || (t = { _e: [], ready: function (f) { t._e.push(f) } });

} (document, "script", "twitter-wjs"));


// Define our custom event hanlders
function clickEventToAnalytics(intent_event) {

    if (intent_event) {

        var label = intent_event.region;

        pageTracker._trackEvent('twitter_web_intents', intent_event.type, label);
        _gaq.push(['_trackEvent', 'twitter_web_intents', intent_event.type, label]);
    };

}

function tweetIntentToAnalytics(intent_event) {

    if (intent_event) {

        var label = "tweet";

        pageTracker._trackEvent('twitter_web_intents', intent_event.type, label);
        _gaq.push(['_trackEvent', 'twitter_web_intents', intent_event.type, label]);
    };

}

function favIntentToAnalytics(intent_event) {

    tweetIntentToAnalytics(intent_event);

}

function retweetIntentToAnalytics(intent_event) {

    if (intent_event) {

        var label = intent_event.data.source_tweet_id;

        pageTracker._trackEvent('twitter_web_intents', intent_event.type, label);
        _gaq.push(['_trackEvent', 'twitter_web_intents', intent_event.type, label]);
    };

}

function followIntentToAnalytics(intent_event) {

    if (intent_event) {

        var label = intent_event.data.user_id + " (" + intent_event.data.screen_name + ")";

        pageTracker._trackEvent('twitter_web_intents', intent_event.type, label);
        _gaq.push(['_trackEvent', 'twitter_web_intents', intent_event.type, label]);
    };

}

// Wait for the asynchronous resources to load
twttr.ready(function (twttr) {

    // Now bind our custom intent events

    twttr.events.bind('click', clickEventToAnalytics);

    twttr.events.bind('tweet', tweetIntentToAnalytics);

    twttr.events.bind('retweet', retweetIntentToAnalytics);

    twttr.events.bind('favorite', favIntentToAnalytics);

    twttr.events.bind('follow', followIntentToAnalytics);
});

//Below is a more optomized approach that I'll use after the above
//has been proven to work.
//(function () {
//    var event_names = {
//        "click": "",
//        "tweet": "",
//        "retweet": "source_tweet_id",
//        "follow": "screen_name",
//        "favorite": "tweet_id"
//    };

//    for (var event_name in event_names) {
//        if (event_names.hasOwnProperty(event_name)) {
//            twttr.events.bind(event_name, function (intent_event) {
//                if (intent_event) {
//                    var label = intent_event.type === "click" ? intent_event.region : (intent_event.data) ? intent_event.data[event_names[intent_event.type]] : "";
//                    _gaq.push(["_trackEvent", "twitter_web_intents", intent_event.type, label]);
//                }
//            });
//        }
//    }
//} ()); 
