/*
 *
 * Comment by Jón H. I modified this not to embed duplicate videos.
 *
*/

/**
 * jquery.youtubin.js
 * Copyright (c) 2009 Jon Raasch (http://jonraasch.com/)
 * Licensed under the Free BSD License (see http://dev.jonraasch.com/youtubin/docs#licensing)
 * 
 * @author Jon Raasch
 *
 * @projectDescription    jQuery plugin to allow simple and unobtrusive embedding of youtube videos with a variety of options
 * 
 * @documentation http://dev.jonraasch.com/youtubin/docs
 *
 * @version 1.2
 * 
 * @requires jquery.js (tested with v 1.3.2)
 * 
 * @optional SwfObject 2
 * 
 * NOT AFFILIATED WITH YOUTUBE
 */


( function( $ ) {    
  var youtubinCount = 0;
  var youtubinMode  = 0;
  var checkDupe = [];

  $.youtubin = function(options, box) {
    var options = options || {};
        
    // if iphone and iphoneBoot not set or true, just die so youtube link can stay
    if ( (typeof options.iphoneBoot == 'undefined' || options.iphoneBoot )  && ( (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) ) ) return false;
        
    // if first time
    if ( !youtubinMode ) {
      if ( typeof( swfobject ) == 'undefined' ) youtubinMode = 'noScript';
      else youtubinMode = '2';
    }
        
    if ( typeof( box ) == 'undefined' || !box ) {
      options.scope = options.scope || $('body');
      $('a[href^=http://www.youtube.com/watch?v=]', options.scope).youtubin(options);
            
      return false;
    }
        
    // define options
    options.swfWidth  = options.swfWidth || "425";
    options.swfHeight = options.swfHeight || "344";
    options.flashVersion = options.flashVersion || "8";
    options.expressInstall = options.expressInstall || "";
        
    options.flashvars = options.flashvars || {};
    options.params    = options.params || {
      menu : "false",
      loop : "false",
      wmode : "opaque"
    };
        
    options.replaceTime = options.replaceTime || 'auto';
    options.keepLink = options.keepLink || (options.replaceTime == 'click');
    options.wrapper = options.wrapper || '<div class="youtubin-video"></div>';
        
    options.autoplay = typeof options.autoplay != 'undefined' ? options.autoplay : ( options.replaceTime == 'click' );
        
    options.srcOptions = options.srcOptions || '?hl=en&fs=1' + ( options.autoplay ? '&autoplay=1' : '' );
    options.method = options.method || 'href';
        
    options.target = options.target || false;
        
        
    var $box = $(box);
        
    // depending on replaceTime trigger replacement or attach click event
    if (options.replaceTime == 'auto') replaceIt();
    else if (options.replaceTime == 'click') $box.click( function(ev) {
      ev.preventDefault();
      replaceIt();
    });
        
    function replaceIt() {
      function checkId($tgt) {
        var boxId = $tgt.attr('id');
        if ( !boxId.length ) {
          boxId = getNewId();
          $tgt.attr('id', boxId);
        }
                
        return boxId;
      }
            
      function getNewId() {
        var boxId = 'youtubin-' + youtubinCount;
        youtubinCount++;
                
        return boxId;
      }
            
      var src = $box.attr(options.method);
   
      // build swf url from youtube link
      if ( src.substr(0,31) == 'http://www.youtube.com/watch?v=' ) src = 'http://www.youtube.com/v/' + src.substr(31) + options.srcOptions;
        
      // set the target
      if ( options.target ) {
        var $tgt = options.target;
        var boxId = checkId($tgt);
      }
      else if ( options.keepLink ) {
        var boxId = getNewId();
        $box.after($('<div id="'+boxId+'"></div>'));
                
        var $tgt = $('#'+boxId);
        $tgt.css('clear', 'both');
      }
      else {
        var $tgt = $box;
        var boxId = checkId($tgt);
      }
            
      // embed the swf according to youtubinMode
      /*
            switch(youtubinMode) {
                case '2' :
                    swfobject.embedSWF(src, boxId, options.swfWidth, options.swfHeight, options.flashVersion, options.expressInstall, options.flashvars, options.params);
                break;
                
                default : 
                    $tgt.html('<object width="' + options.swfWidth + '" height="' + options.swfHeight + '"><param name="movie" value="' + src + '"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="' + src + '" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + options.swfWidth + '" height="' + options.swfHeight + '"></embed></object>');
                break;
            }
            */

      // I added this to prevent dupe embedding -Jón Helgi
      if(checkDupe.indexOf(src) == -1) {
        
        switch(youtubinMode) {
          case '2' :
            swfobject.embedSWF(src, boxId, options.swfWidth, options.swfHeight, options.flashVersion, options.expressInstall, options.flashvars, options.params);
            break;

          default :
            $tgt.html('<object width="' + options.swfWidth + '" height="' + options.swfHeight + '"><param name="movie" value="' + src + '"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="' + src + '" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + options.swfWidth + '" height="' + options.swfHeight + '"></embed></object>');
            break;
        }

        checkDupe.push(src);

      }
            
    // (hack) must redefine boxId here or it will cause error in IE
    //if (options.wrapper) $('#'+boxId).wrap(options.wrapper);
    }
        
  };
    
  $.fn.youtubin = function(options) {
    this.each( function() {
      new $.youtubin( options, this );
    });
    return this;
  };
})( jQuery );
