/*
 * Ajuntament de Barcelona - Javascript Object
 * www.bcn.cat / www.bcn.es
 *
 * Revision: jquery-object.js | nº7, 2008-12-19 14:00h
*/

	
$(document).ready( function() {
	if ($.fn.alt) {
		$.fn.alt();
	}
});

(function($) {
	
	$.extend($.fn, {
		
		alt : function() {
			var config = {
				selector	: 'object',
				version		: '6,0,65'
			};
			
			/*
			 * @name flash.hasFlash
			 * @desc Check if a specific version of the Flash plugin is installed
			 * @type Boolean
			*/
			$.fn.hasFlash = function() {
				// look for a flag in the query string to bypass flash detection
				if(/hasFlash\=true/.test(location)) return true;
				if(/hasFlash\=false/.test(location)) return false;
				var pv = $.fn.hasFlash.playerVersion().match(/\d+/g);
				var rv = String([arguments[0], arguments[1], arguments[2]]).match(/\d+/g) || String(config.version).match(/\d+/g);
				for(var i = 0; i < 3; i++) {
					try {
						pv[i] = parseInt(pv[i] || 0);
						rv[i] = parseInt(rv[i] || 0);
						// player is less than required
						if(pv[i] < rv[i]) return false;
						// player is greater than required
						if(pv[i] > rv[i]) return true;
					} catch(e) {}
				}
				return(true);
			};
			
			/*
			 * @name flash.hasFlash.playerVersion
			 * @desc Get the version of the installed Flash plugin.
			 * @type String
			*/
			$.fn.hasFlash.playerVersion = function() {
				var vPluginInstalat;
				// ie
				try {
					try {
						// avoid fp6 minor version lookup issues
						// see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
						var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
						try { axo.AllowScriptAccess = 'always';	} 
						catch(e) { return '6,0,0'; }
					} catch(e) {}
					vPluginInstalat = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
					return(vPluginInstalat);
				// other user agents
				} catch(e) {
					try {
						if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){
							vPluginInstalat = (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
							return(vPluginInstalat);
						}
						return('0,0,0');
					} catch(e) {}
				}	
			};
			
			/*
			 * @name flash.fileVersion
			 * @desc Get OBJECT version.
			*/
			$.fn.hasFlash.fileVersion = function(o) {
				if (o.find("param[name=Movie]")) var v = o.find("param[name=Movie]").val();
				if (o.attr("data")) var v = o.attr("data");
				if (v) {
					v = v.substring(v.indexOf('versio=', v.lenght)).toLowerCase().replace('versio=','');
					if (v.indexOf('&')!=-1) v = v.substring(0, v.indexOf('&'));
					config.version = v;
				}
			};
			
			/*
			 * @name flash.type
			 * @desc Get OBJECT type.
			 * @type Boolean
			*/
			$.fn.hasFlash.fileType = function(o) {
				if (!o.attr("type")) var t = o.html();
				else var t = o.attr("type");		
				if (t.indexOf('application/x-shockwave-flash')!=-1) return(true);
				else return(false);
			};
			
			/*
			 * @name flash.replaceObjectIE
			 * @desc Replace OBJECT with alternate content for IE.
			*/
			$.fn.hasFlash.replaceObjectIE = function(o) {
				var alt = $.fn.hasFlash.getAlternate(o);
				for (var i=0; i<alt.length; i++) {
					if (String(alt[i]).indexOf('Object')==-1 && String(alt[i]).indexOf('Param')==-1)
						o.before(alt[i]);
				}
				o.remove();
			};
			
			/*
			 * @name flash.replaceObjectST
			 * @desc Replace OBJECT with alternate content for standards.
			*/
			$.fn.hasFlash.replaceObjectST = function(o) {
				o.before(o.children().not($("param")));
				o.remove();
			};
			
			/*
			 * @name flash.getAlternate
			 * @desc Get alternate content.
			*/			
			$.fn.hasFlash.getAlternate = function(o) {
				var div = document.createElement('div');
				div.innerHTML = o.html();
				var children = div.childNodes;
				var r = [];
				var c = 0, it;
				while(it = children[c++])
					if (it.nodeType == 1)
						r[r.length] = it;
				return(r);
			};
			
			return $(config.selector).each( function() {
				// EOLAS ActiveX init IE & Opera user agent.
				if ($.browser.msie && $.fn.hasFlash.fileType($(this))) {
					$(this).removeAttr('data');
					this.outerHTML = this.outerHTML;
				}
				// OBJECT alternative text
				if ($.fn.hasFlash.fileType($(this))) {
					$.fn.hasFlash.fileVersion($(this));
					if (!$.fn.hasFlash()) {
						if ($.browser.msie) $.fn.hasFlash.replaceObjectIE($(this));
						else $.fn.hasFlash.replaceObjectST($(this));
					}
				}
			});
		}
		
	});
	
})(jQuery);
