(function() {

/*
 * Will load an external JavaScript script.
 */
function loadScript(src, callback) {
  var head = document.getElementsByTagName('head')[0];
  var script = document.createElement('script');
  var loaded = false;
  script.setAttribute('src', src);
  script.onload = script.onreadystatechange = function() {
    if (!loaded && (!this.readyState || this.readyState == 'complete'
                                     || this.readyState == 'loaded') ) {
      loaded = true;
      callback();
      script.onload = script.onreadystatechange = null;
      head.removeChild(script);
    }
  }
  head.appendChild(script);
}

// Start loading SWFObject

var swfObjectQueue = [];
var swfObjectLoaded = false;

loadScript("http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
   function() {
      swfObjectLoaded = true;
      while (swfObjectQueue.length) {
         var cb = swfObjectQueue.shift();
         setTimeout(cb, 0);
      }
   });

function withSWFObject(fun) {
   if (swfObjectLoaded) {
      setTimeout(fun, 0);
   } else {
      swfObjectQueue.push(fun);
   }
}

function insertCam(divId, camName, args) {
   _insertCam(divId, "http://streaming.brownrice.com/skinless.swf", 480, 360, camName, args);
}

function insertControllableCam(divId, camName, args) {
   _insertCam(divId, "http://streaming.brownrice.com/controllable.swf", 520, 430, camName, args);
}

function _insertCam(divId, player, width, height, camName, args) {

   var params = {
      wmode: 'transparent',
      allowFullScreen: true,
      allowScriptAccess: 'always'
   };

   var flashvars = { cam: camName };
   for (var name in args) {
      flashvars[name] = args[name];
   }

   /*
   if ('autostart' in args) {
   } else {
      flashvars.autostart = true;
   }
   */

   withSWFObject(function() {
      swfobject.embedSWF(player, divId, width, height,
         "9.0.115.0", // Flash support of H.264 starts here
         "", // Express Install (TO DO)
         flashvars,
         params);
   });
}

// Export to window namespace
self.insertCam = insertCam;
self.insertControllableCam = insertControllableCam;

})();
