(function() {

  site.analytics = {
    
    adapters : ["googleAnalytics", "omniture"],
    
    callAdapters : function() {
    
      var fnName = arguments[0],
          args = Array.prototype.slice.call(arguments, 1),
          analytics = this,
          currentAdapter = null;
      
      for (var adapter in analytics) {
        if (analytics.hasOwnProperty(adapter)) {
          currentAdapter = analytics[adapter];

          if (typeof currentAdapter[fnName] === 'function') {
            currentAdapter[fnName].apply(currentAdapter, args);
          } else if (typeof currentAdapter['defaultCall'] === 'function') {
            currentAdapter['defaultCall'].apply(currentAdapter, arguments);
          }
        }
      }
    }
  };

  site.analytics.googleAnalytics = {

    // This is called if googleAnalytics[methodName] isn't a function
    defaultCall: function() {
      var defaultArgs = ['_trackEvent'],
          fnName = arguments[0],
          params = Array.prototype.slice.call(arguments, 1),
          gaCall = defaultArgs.concat(fnName).concat(params);

      _gaq.push(gaCall);
    }
  };

  site.analytics.omniture = {
    
    defaultCall: function() {
      var fnName = arguments[0],
          params = Array.prototype.slice.call(arguments, 1);
     
      if (site.isDev) {
        console.error(fnName + ' could not be called on site.analytics.omniture because it does not exist', params);
      }
    },
    
    trackTool: function(toolName){
      var s_linkTrackVarsTemp = s.linkTrackVars; 
      var s_linkTrackEventsTemp = s.linkTrackEvents; 
      s.linkTrackVars='events,prop16,eVar16'; 
      s.linkTrackEvents='event8'; 
      s.events='event8'; 
      s.prop16=s.eVar16= s.channel + ":" + toolName;
      s.tl(this,'o',s.pageName+'|toolName'); 
      s.linkTrackVars = s_linkTrackVarsTemp; 
      s.linkTrackEvents = s_linkTrackEventsTemp; 
      clearOmniVar();
    },
    
    trackDownload: function(fileName){
      s.linkTrackVars='events,prop11,eVar11,prop15,eVar15';
      s.linkTrackEvents='event7';
      s.prop15=s.eVar15=s.channel;
      s.events='event7';
      s.tl(this,'d',s.pageName+'|'+fileName);
      clearOmniVar();
      s.linkTrackVars='prop35,prop36,prop37,prop38,eVar35,eVar36,eVar37,eVar38';
      s.linkTrackEvents='None';
    },
    
    changeFontSize: function(value) {
      s.linkTrackVars='events,eVar21';
      s.linkTrackEvents='event13';
      s.prop21=s.eVar21=value;
      s.events='event13';
      s.tl(this,'o',s.pageName+'|changefontsize');
      s.linkTrackVars='prop35,prop36,prop37,prop38,eVar35,eVar36,eVar37,eVar38';
      s.linkTrackEvents='None';
    },
   
    printPage: function() {
      s.linkTrackVars='events';
      s.linkTrackEvents='event10';
      s.events='event10';
      s.tl(this,'o',s.pageName+'|printpage');
      s.linkTrackVars='prop35,prop36,prop37,prop38,eVar35,eVar36,eVar37,eVar38';
      s.linkTrackEvents='None';
    }, 
 
    emailPage: function(status, msg) {
      if (status == "error") {
        s.linkTrackVars='events';
        s.linkTrackEvents='event14';
        s.prop19=s.eVar19=msg;
        s.events='event14';
        s.tl(this,'o',s.pageName+'|emailpage');
        s.events='';
        s.linkTrackVars='prop35,prop36,prop37,prop38,eVar35,eVar36,eVar37,eVar38';
        s.linkTrackEvents='None';
      } else if (status == "success") {
        s.linkTrackVars='events';
        s.linkTrackEvents='event11';
        s.events='event11';
        s.tl(this,'o',s.pageName+'|emailpage');
        s.events='';
        s.linkTrackVars='prop35,prop36,prop37,prop38,eVar35,eVar36,eVar37,eVar38';
        s.linkTrackEvents='None';
      }
    },
  
    videoWatch: function(percentPlayed, videoName){

      var caption = percentPlayed + "%_viewed",
          _event = null;

      switch(percentPlayed) {
        case 25:
          _event = "event20";
          break;
        case 50:
          _event = "event21";
          break;
        case 75:
          _event = "event22";
          break;
      };
    
      if (_event) this._omnitureVideoHelper(_event, videoName, caption);
    },
  
    videoStart: function(videoName){
      this._omnitureVideoHelper('event18', videoName, 'video_start');
    },
  
    videoReplay: function(videoName){
      this._omnitureVideoHelper('event23', videoName, 'video_replay');
    },
  
    videoComplete: function(videoName){
      this._omnitureVideoHelper('event19', videoName, 'video_complete');
    },
  
    _omnitureVideoHelper: function(_event, videoName, msg) {
      s.linkTrackVars='events,eVar17,prop17';
      s.linkTrackEvents=_event;
      s.prop17=s.eVar17=videoName;
      s.events=_event;
      s.tl(this,'o',s.pageName+'|'+ videoName + '| '+msg);
      s.events='';
      s.linkTrackVars = 'prop35,prop36,prop37,prop38,eVar35,eVar36,eVar37,eVar38';
      s.linkTrackEvents = 'None';
    },
   
    setIndication: function() {
        var currentUrl = window.location.href.toLowerCase(),
            allIndications = "",
            indicationTests = [
              {
                url : "/crc",
                indication : "GBM"
              },
              {
                url : "/lung",
                indication : "NSCLC"
              },
              {
                url: "/gbm",
                indication: "GBM"
              },
              {
                url: "/kidney",
                indication: "RCC"
              },
              {
                url: "/ovarian-cancer",
                indication: "ova"
              },
              {
                url: "/overview",
                indication: "overview"
              }
            ];

        for (var i = 0, m = indicationTests.length; i < m; i++) {
          var indicationTest = indicationTests[i],
              url = indicationTest.url.toLowerCase(),
              indication = indicationTest.indication.toLowerCase();

          if (currentUrl.indexOf(url) > -1) return indication;
        }

        // Fallback
        return "all";

      }
   
  };
})();

