// credits to:
// http://www.modernizr.com/
// http://diveintohtml5.org/detect.html#video-formats
//
H264Player = (function($) {
	var player_id = 0;
  return function(output_list, flash_player, player_params) {
    var outputs = output_list.split(/\s+/),
    player_count = 0,
    support_tests = {
      quicktime: function() {
        var qtInstalled = false;
        qtObj = false;
        if (navigator.plugins && navigator.plugins.length) {
          for (var i=0; i < navigator.plugins.length; i++ ) {
            var plugin = navigator.plugins[i];
            if (plugin.name.indexOf("QuickTime") > -1) {
              qtInstalled = true;
            }
          }
        } else {
          execScript('on error resume next: qtObj = IsObject(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1"))','VBScript');
          qtInstalled = qtObj;
        }
        return qtInstalled;
      },

      video: function() {
        if (!document.createElement('video').canPlayType) { return false; }
        var v = document.createElement("video");
        return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');
      },
      flash: function() {
        // should actually test but since this is generally my last resort I might as well just go for it
        return true;
      }
    }
    return {
      ie: function() {
        return !(navigator.plugins && navigator.plugins.length)
      },

      insert: function(video_url, poster_image, width, height, controls) {
        for (var i = 0, ii = outputs.length; i < ii; i++) {
          var output = outputs[i];
          if (support_tests[output].call()){
            document.write(this[output].call(this, video_url, poster_image, width, height, controls))
            break;
          }
        }
      },

      video: function(video_url, poster_image, width, height, controls) {
        var out = '<video poster="'+poster_image+'" width="'+width+'" height="'+height+'"'+(controls ? ' controls="controls"' : '')+'>';
        out += '<source src="'+video_url+'" type="video/mp4" />';
        out += "</video>";
        return out;
      },

      param: function(name, value) {
        return '<param name="'+name+'" value="'+value+'" />';
      },

      quicktime: function(video_url, poster_image, width, height, controls) {
        if (controls) { height += 15; }
				var id = (++player_id);
        var out = "";
        var poster_id = 'poster-overlay-'+id,
				embed_id = 'player_object_'+id;

        if (this.ie()) {
          out += '<div id="'+poster_id+'" class="player-overlay" style="width: '+width+'px; height: '+height+'px;background-image: url('+poster_image+')"><object name="'+embed_id+'" id="'+embed_id+'" style="visibility: hidden" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="'+width+'" height="'+height+'">';
          out += this.param('src', video_url);
          out += this.param('autoplay', 'false');
          out += this.param('showlogo', 'false');
          out += this.param('scale', 'aspect');
          out += this.param('enablejavascript', 'true');
          out += this.param('bgcolor', '#000000');
          out += '</object><div class="player-button" style="left: '+((width - 92)/2)+'px;top:'+((height - 85)/2)+'px"></div></div>'
          $(function() {
            $('#'+poster_id).click(function() {
              $(this).unbind('click').children('object').css('visibility', 'visible');
              window.setTimeout(function() {document[embed_id].Play()}, 20);
            })
          });
        } else {
          out += '<div id="'+poster_id+'" class="player-overlay" style="width: '+width+'px; height: '+height+'px;background-image: url('+poster_image+')"><embed name="'+embed_id+'" style="visibility: hidden" type="video/quicktime" autostart="false" scale="aspect" src="'+video_url+'" enablejavascript="true" width="'+width+'" height="'+height+'" bgcolor="#000000"></embed><div class="player-button" style="left: '+((width - 92)/2)+'px;top:'+((height - 85)/2)+'px"></div></div>';
          $(function() {
            $('#'+poster_id).click(function() {
              $(this).css('background-image', 'none').unbind('click').find('.player-button').hide();
              var embed =$(this).children('embed').css('visibility', 'visible')//[0].Play();;
              window.setTimeout(function() {document[embed_id].Play()}, 50);
            })
          });
        }
        return out;
      },

      flash: function(video_url, poster_image, width, height, controls) {
        var out = '';
        out += '<object type="application/x-shockwave-flash" data="/player.swf" width="'+width+'" height="'+height+'" id="">'
        out += this.param('movie', flash_player);
        out += this.param('allowfullscreen', 'true');
        out += this.param('allowscriptaccess', 'always');
        out += this.param('flashvars', 'image='+poster_image+'&file=' + video_url + '&'+player_params);
        out += '</object>'
        return out;
      }
    };
  };
})(jQuery);

