/**
 * Kontagent tracking for facebook landing page
 *  
 * Usage:
 *  <script type="text/javascript">
 *      var KT_API_KEY = "API KEY";
 *      var KT_API_USE_TEST_SERVER = true|false; // (Optional);
 *      var KT_API_VALID_PARAMS = true|false; // (Optional);
 *  </script>
 *  <script type="text/javascript" src="//static.kontagent.com/kaps/js/landing.js"></script>
 * 
 * @copyright 2011 Kontagent
 * @link http://www.kontagent.com
 */
(function() {
  var KT_JS_API_URL = "/static/js/kt/kontagent_api.js";
  var doKtTrack = function() {   
    var makeGetRequest = function(url) {
      new Image().src = url;
    }
    
    var $_GET = window["$_GET"] ? window.$_GET : (function() {
      var result = {};
      if(location.search) {
        var search = location.search.substr(1).split("&");
        for(var i = 0; i < search.length; i++) {
          var pair = search[i].split("=");
          result[pair[0]] = pair[1];
        }
      }
      return result;
    }());
    
    var ktApi = new KontagentApi(KT_API_KEY, {
      useTestServer : typeof KT_API_USE_TEST_SERVER != "undefined" ? KT_API_USE_TEST_SERVER : false,
      validateParams : typeof KT_API_VALID_PARAMS != "undefined" ? KT_API_VALID_PARAMS : false
    });
    
    var uid = typeof FB != "undefined" ? FB.getSession() : false;
    
    var genTag = function() {
      return ((Math.random() * 100000000000000000).toString(16) + (Math.random() * 100000000000000000).toString(16) + (Math.random() * 100000000000000000).toString(16)).substring(0, 32);
    }
    
    if(uid) {
      var Cookie = {
          get: function(name) {
            var cookies = document.cookie.split(";");
            for (var i = 0; i < cookies.length; i++) {
              var cookie = cookies[i];
              var pos = cookie.indexOf("=");
              var key = cookie.substr(0, pos).replace(/^\s+|\s+$/g,"");
              if(key == name) {
                return unescape(cookie.substr(pos + 1));
              }
            }
          },
          set: function(name, value, days) {
            var date = new Date();
            date.setDate(date.getDate() + days);
            document.cookie = name + "=" + escape(value) + (days ? "; expires=" + date.toUTCString() : "");
          }
      }
      
      // Facebook made installed=1 available again. We are going to take advantage of that.
      if("installed" in $_GET && "request_ids" in $_GET == false) {
        var params = {};
        "kt_ut" in $_GET && (params.uniqueTrackingTag = $_GET["kt_ut"]);
        "kt_sut" in $_GET && (params.shortUniqueTrackingTag = $_GET["kt_sut"]);
        ktApi.trackApplicationAdded(uid, params);
        // Spruce Media Ad Tracking  
        "spruce_adid" in $_GET && makeGetRequest(location.protocol + "//bp-pixel.sprucemedia.com/100480/pixel.ssps?spruce_adid=" + $_GET["spruce_adid"] + "&spruce_sid=" + getTag());        
      }
      //Acquire User Info
      var userInfoKey = "kt_capture_user_info_" + FB._apiKey + "_" + uid;
      var self = this;
      Cookie.get(userInfoKey) || FB.api("/me", function(me) {
        FB.api("/me/friends", function(friends) {
          var params = {
              gender: encodeURI("male".toUpperCase()),
              friendCount: friends.data.length
          };
          "birthday" in me && (params.birthYear = me.birthday.split("/").pop());
          ktApi.trackUserInformation(uid, params);
          Cookie.set(userInfoKey, "done", 14); // 2 weeks
        });
      });
    }
    
    if("kt_type" in $_GET == false) {
      return;
    }    
    
    switch($_GET["kt_type"]) {
      default:
        // track_ucc_click for ads
        if($_GET["kt_type"].match(/ad$|partner$|ad_buy(\..+)?$/)) {
          var tag = genTag();
          var params = {};
          uid && (params.userId = uid);
          "kt_st1" in $_GET && (params.subtype1 = $_GET["kt_st1"]);
          "kt_st2" in $_GET && (params.subtype2 = $_GET["kt_st2"]);
          "kt_st3" in $_GET && (params.subtype3 = $_GET["kt_st3"]);
          typeof console != "undefined" && console.info("track_ucc_click - " + params.userId + "," + tag, params);
          ktApi.trackThirdPartyCommClick($_GET["kt_type"], tag, params);
        }
    }
  } 
  var hasScript = function() {
    var scripts = document.getElementsByTagName("head")[0].getElementsByTagName("script");
    
    for(var i = 0; i < scripts.length; i++) {
      if(scripts[i].src && scripts[i].src == KT_JS_API_URL) {
        return true;
      }
    }
  }
  
  hasScript() ? doKtTrack() : document.getElementsByTagName("head")[0].appendChild((function() {    
    var loadCallback = function(script) {
      if(script && script.onload) {
        script.onload = doKtTrack;
        return;
      }
      "KontagentApi" in window ? doKtTrack() : setTimeout(loadCallback, 100);
    }
    
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = KT_JS_API_URL;
    loadCallback(script);
    return script;
  })());
})();
