function addLoadEvent(func) {
 var oldonload = window.onload;
 if (typeof window.onload != 'function') {
  window.onload = func;
 }
 else {
  window.onload = function() {
   oldonload();
   func();
  }
 }
};

var Cookie = {
 destroy: function(name) {
  Cookie.set(name,"",-1);
 },
 get: function(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
   var c = ca[i];
   while (c.charAt(0) == ' ') c = c.substring(1, c.length);
   if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  }
  return null;
 },
 set: function(name, value, days) {
  if (days) {
   var date = new Date();
   date.setTime(date.getTime()+(days*24*60*60*1000));
   var expires = "; expires=" + date.toGMTString();
  }
  else {
   var expires = "";
  }
  document.cookie = name+"="+value+expires+"; path=/";
 }
};

var Speed = {
 throughput: 0,
 Data: {
  image: new Image(),
  size:  31468, // in Bytes
  src: 'http://music.luther.edu/ensembles/cathedral/documents/CRW_0141_JFR.jpg',
  getSize: function() {
   return Speed.Data.size;
  }
 },
 Time: {
  end:   0,
  start: 0,
  getDelta: function() {
   return (Speed.Time.getStart() && Speed.Time.getEnd()) ? (Speed.Time.getEnd() - Speed.Time.getStart()) : false;
  },
  getEnd: function() {
   return (Speed.Time.end != 0) ? Speed.Time.end : false;
  },
  getStart: function() {
   return (Speed.Time.start != 0) ? Speed.Time.start : false;
  },
  getTime: function() {
   var date = new Date();
   return date.getTime();
  },
  setEnd: function() {
   Speed.Time.end = Speed.Time.getTime();
  },
  setStart: function() {
   Speed.Time.start = Speed.Time.getTime();
  }
 },
 getThroughput: function() {
  if (Speed.throughput === 0) {
   Speed.test();
   return false;
  }
  else {
   return Speed.throughput;
  }
 },
 setThroughput: function() {
  Speed.Time.setEnd();
  var deltaSeconds = Speed.Time.getDelta()/1000;
  var kBits = (Speed.Data.getSize() * 8)/1024;
  Speed.throughput = kBits/deltaSeconds * .93; // IP packet header overhead - averages about 7%
 },
 test: function() {
  var src = Speed.Data.src + '?' + Speed.Time.getTime();
  Speed.Time.setStart();
  Speed.Data.image.onload = Speed.setThroughput;
  Speed.Data.image.src = src;
 }
};

var INTERVAL_ID;
function getTP() {
 if (Speed.Time.getDelta()) {
  clearInterval(INTERVAL_ID);
  var Broadband = 134;
  var oldThroughput = Cookie.get('MediaThroughput');
  var newThroughput = Speed.getThroughput();
  Cookie.set('MediaThroughput', newThroughput);
  if (((oldThroughput >= Broadband) != (newThroughput >= Broadband)) || ((newThroughput >= Broadband) && !oldThroughput)) {
    window.location.reload(true);
  }
 }
};
function init() {
 Speed.test();
 INTERVAL_ID = setInterval(getTP, 50);
};

addLoadEvent(init);