/**
 * 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;
    
    $.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)) || (navigator.userAgent.match(/iPad/i)) ) ) {
        	// use embed code for iphone
//        	youtubinMode = 'iOS';
//        }
        
        // if first time
        if ( !youtubinMode ) {
            if ( typeof( swfobject ) == 'undefined' ) youtubinMode = 'noScript';
            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);
            var videoId = false;
    
            // build swf url from youtube link
            switch (true) {
	            case (src.substr(0,31) == 'http://www.youtube.com/watch?v='):
	        		var videoId = src.substr(31,11);
	        		break;
	            case (src.substr(0,25) == 'http://www.youtube.com/v/'):
	            	var videoId = src.substr(25,11);
	        		break;
	        	default:
	        		// we haven't detected a recognised Youtube URL, but we'll run with it anyway
	        		// (i.e. don't change videoId & src)
	        		break;
            }
            
            if (videoId) {
            	src = 'http://www.youtube.com/embed/' + videoId + 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);
            }
            
            // use same iframe embed code for all platforms/devices
            $('<iframe />', {
        	    type: 'text/html',
        	    width: options.swfWidth,
        	    height: options.swfHeight,
        	    src: src,
        	    frameborder: 0
        	}).appendTo($tgt);
            
            // (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 );
