/**
 * @Author Brice Burgess <brice@digome.com>
 * Copyright � 2009 Digome, LLC. All rights reserved.
 * 
 * Digome Media Plugin v0.1 +rD
 */

(function($) {
	
if(!$.fn.digome)
	$.fn.digome = {};

$.fn.digome.media = {
	defaults: {
		width: '100%',
		height: '100%',
		params: {},
		id: '_auto',
		beforeInject:null
	},
	players: [{
		name:	'Adobe Flash Player',
    	url:	'http://www.adobe.com/products/flashplayer/',
		ext:	['flash','flv','mp3','mp4','f4v'],
		_obj:	{ classid:'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'},
		_embed:	{ type:'application/x-shockwave-flash' },
		_trace:	['Shockwave Flash','ShockwaveFlash.ShockwaveFlash.7'],
		_params:{ 
			allowScriptAccess: 'always',
			allowFullScreen: true,
			bgcolor: '#000000',
			wmode: 'Opaque'
		}
	}]
};


// detect presence of player plugin
var x = false, 
	p = $.fn.digome.media.players[0];
	
if(navigator.plugins && navigator.plugins.length){
	for (var i=0, il=navigator.plugins.length; i<il; ++i){
        if(navigator.plugins[i].name.indexOf(p._trace[0]) > -1){
            x = true;
            break;
        }
    }
}
else {
	try { x = new ActiveXObject(p._trace[1]) || false; } catch (e) {}
}
p.enabled = Boolean(x);


$.fn.digomeMedia = function(z) {
	return this.each(function() {

		var c = $.extend({url: $(this).attr('src') || $(this).attr('href') || '#'},$.fn.digome.media.defaults,z),
			p = $.fn.digome.media.players[0];

		$(this).html('');
		if($.isFunction(c.beforeInject)){
			c.beforeInject.call(this, c);
		}

		if(p.enabled)
			return play(this, p, c);

		// ELSE (no compatible player installed)
		out = 'Your browser does not support viewing .' + ext + ' files. <br /> Please install one of the following to play these files &raquo; <br />';
		out += ' - <a href="' + p[i].url + '">' + p[i].name + '</a> <br />';

		$(this).prepend(out);

    });
};

function play(e,p,c){
	
	S++;
	
	// prepare for player injection
	var attribs = {
		width: c.width,
		height: c.height
	},
	params = $.extend({src: c.url},p._params,c.params),
	objParams = '';
	
	// special kludge for flashvars shortcut -- could have added to param as querstying...
	if(c.flashvars)
	{
		if(typeof(c.flashvars) != 'string')
			c.flashvars = $.param(c.flashvars) // convert object to querystring
		params.flashvars = c.flashvars;
	}
	
	if(c.id == '_auto')
	{
		c.id = (e.id && $.trim(e.id) != '') ? e.id : 'dm_'+S;
		e.id = null;
	}
	

	for (var key in params)
		objParams += makeEl({name: 'param',attr:{name: key, value: params[key]}});

	// generate embedded player markup
	var dom = makeEl({
		name: 'object',
		attr: $.extend({id: c.id},p._obj,attribs),
		child: [
		        objParams,
		        ($.browser.msie || !p._embed) ? {} : {name: 'embed',attr: $.extend({name: c.id},p._embed,attribs,params)}
		       ]
	});
	
	// inject player markup 
	if($.browser.msie)
	{
		e.innerHTML = dom; 
		e.href = 'javascript: return false;';
	}
	else
	{
		//$(e).replaceWith(dom);
		$(e).html(dom);
	}
};

/**
 * HELPER FUNCTIONS
 */
function makeEl(e){
	if(typeof(e.name) == 'undefined') return '';
	var html = '<' + e.name,child='';
	if (e.attr)
		for (k in e.attr)
				html = html + ' ' + k + '="' + e.attr[k] + '"';

	if (e.child) {
		if (typeof(e.child) == 'string')
			e.child = [e.child];
		for(var i = 0; i<e.child.length; i++)
			child += (typeof(e.child[i]) == 'object') ? makeEl(e.child[i]) : e.child[i];
	}
	return (e.selfClose) ? html + '/>' : html + '>'+child+'</' + e.name + '>';
};

/**
 * SHORTCUT DEFINITIONS
 */

var S=0;

})(jQuery);