// This javascript tracks FLV video playback in Google Analytics.
// You need to be using the Google Analytics New Tracking Code (ga.js) for this script to work.
//
// Author: Brandon Bell <brandonbell@gmail.com>
// Copyright 2008, Brandon Bell

// Only define the video array once
if (typeof(gavideos_vids) != 'object' || !(gavideos_vids instanceof Array)) {
   var gavideos_vids = new Array();
}

// Get just the video name, ignoring any path information
function gavideos_getVideoName(player) {
   var num = player.getConfig().item
   var path = player.getPlaylist()[num].file;
   var parts = path.split("/");
   var name = parts[parts.length - 1];
   return name;
}

// Track the video playback start and end events
// Ignore any pause and continue state changes
function gavideos_stateTracker(obj) {
   var id = obj.id;
   var vid_file = gavideos_getVideoName(document.getElementById(id));
   var state = obj.newstate;
   if (state === 'BUFFERING' || state === 'IDLE' || state === 'COMPLETED') {
      // initialize the array of information for this video
      gavideos_vids[id] = new Array();
      gavideos_vids[id]['pos'] = 0;
      gavideos_vids[id]['started'] = false;
   }
   if (state === 'PLAYING' && gavideos_vids[id]['started'] == false) {
      // only track the initial start, not starts from pauses
      gavideos_vids[id]['started'] = true;
      gavideos_track(vid_file, 'started');
   } else if (state === 'COMPLETED' || state === 'IDLE') {
      gavideos_track(vid_file, 'completed');
   }
   // console.log('/flvvideo/' + state + '/' + name);
};

// Track the video playback at 25%, 50% and 75% completed milestones
function gavideos_timeTracker(obj) {
   var id = obj.id;
   var vid_file = gavideos_getVideoName(document.getElementById(id));
   var completed = obj.position / obj.duration;
   if (completed > .250 && completed <= .500 && gavideos_vids[id]['pos'] < 25) {
      gavideos_vids[id]['pos'] = 25;
      gavideos_track(vid_file, 25);
   } else if (completed > .500 && completed <= .750 && gavideos_vids[id]['pos'] < 50) {
      gavideos_vids[id]['pos'] = 50;
      gavideos_track(vid_file, 50);
   } else if (completed > .750 && completed <= 1.000 && gavideos_vids[id]['pos'] < 75) {
      gavideos_vids[id]['pos'] = 75;
      gavideos_track(vid_file, 75);
   }
}

// Actually perform the tracking calls to Google Analytics
function gavideos_track(name, state) {
   if (typeof(pageTracker) === 'object' && typeof(pageTracker._trackPageview) === 'function') {
      pageTracker._trackPageview('/flvvideo/' + state + '/' + name);
      pageTracker._trackPageview('/flvvideo/ind/' + name + '/' + state);
   } else {
      console.log('/flvvideo/' + state + '/' + name);
      console.log('/flvvideo/ind/' + name + '/' + state);
   }
}

// This is a callback used by the JW_FLV_Media_Player when it is ready.  Safe to attach event listeners now.
// Remember that swfobject needs both id and name passed in the attributes array for this to work in Firefox.
// Otherwise, obj.id will be null.
function playerReady(obj) {
   var player = document.getElementById(obj.id);
   if (player != null) {
      player.addModelListener("STATE","gavideos_stateTracker");
      player.addModelListener("TIME","gavideos_timeTracker");
   }
}
