
us.popdt.packages.register("flash");

/**
 * FLASH
 * This section contains all functionality relating to FLASH DETECTION AND EMBEDDING
 * Most of this is taken from the Deconcept SWFObject
 * A lot more needs to be done to fully port this over to our library.
 */
us.popdt.flash = {
	checked: false, // whether or not we have already checked for flash
	
	/**
	 * HOLDS the version of the flash player
	 */
	PlayerVersion: {
		major: 0, 
		minor: 0,
		rev: 0
	},

	/**
	 * STORES the detected version of the flash player.
	 */
	setPlayerVersion: function(arrVersion){
		this.PlayerVersion.major = parseInt(arrVersion[0]) || 0;
		this.PlayerVersion.minor = parseInt(arrVersion[1]) || 0;
		this.PlayerVersion.rev = parseInt(arrVersion[2]) || 0;
	},

	/**
	 * DETECTS the version of the flash player
	 */
	detectVersion: function(){
		// set detected flash
		this.checked = true;
		// set version number
		var PlayerVersion = this.getPlayerVersion();
		if (navigator.plugins && navigator.mimeTypes.length) {
			var plugin = navigator.plugins["Shockwave Flash"];
			if (typeof plugin != "undefined" && typeof plugin.description != "undefined") {
				this.setPlayerVersion(plugin.description.replace(/([a-z]|[A-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
			}
		} else {
			try{
				var plugin = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				this.setPlayerVersion(plugin.GetVariable("$version").split(" ")[1].split(","));
			}catch(e){}
		}
	},
	
	/**
	 * RETURNS the detected version of the flash player
	 * @param which The part of the version ["major" | "minor" | "rev"] that you want.
	 * @return An the PlayerVersion Object.
	 */
	getPlayerVersion: function(which) {
		var version;
		if (!this.checked) {
			this.detectVersion();
		}
		if (typeof which == "undefined") {
			version = [this.PlayerVersion.major, this.PlayerVersion.minor, this.PlayerVersion.rev];
		}
		return this.PlayerVersion;
	},
	
	/**
	 * Determines if the passed version meets your required flash player version
	 * @param {array} req_version An Array consisting of the flash player version that you need.
	 * @return {bool} True or False
	 * @usage if (!us.popdt.flash.require([8,5,1])) { alert("Install Flash"); }
	 */
	require: function(req_version) {
		var major = req_version[0];
		var minor = req_version[1];
		var rev = req_version[2];
		
		var playerVersion = this.getPlayerVersion();
		var pass = false;
		
		switch(true) {
			case ( (playerVersion.major >= major) && (typeof minor == "undefined") && (typeof rev == "undefined")):
				pass = true;
				break;
			
			case ( (playerVersion.major >= major) && (playerVersion.minor >= minor) && (typeof rev == "undefined") ):
				pass = true;
				break;
				
			case ( (playerVersion.major >= major) && (playerVersion.minor >= minor) && (playerVersion.rev >= rev) ):
				pass = true;
				break;
			
			default:
				pass = false;
		}
		
		return pass;
	},

	/**
	 * EMBEDS SWF on the page
	 */
	FlashObject: function(swf, id, w, h, ver, c, quality){
		// OBJECTS
		this.params = new Object();
		this.variables = new Object();
		this.attributes = new Array();
		
		// ATTRIBUTE ASSIGNMENT
		if(swf) this.setAttribute('swf', swf);
		if(id) this.setAttribute('id', id);
		if(w) this.setAttribute('width', w);
		if(h) this.setAttribute('height', h);
		if (ver) this.setAttribute('version', ver);

		if(c) this.addParam('bgcolor', c);

		var q = quality ? quality : 'high';
		this.addParam('quality', q);
	}
}
us.popdt.flash.FlashObject.prototype = {
	setAttribute: function(name, value){
		this.attributes[name] = value;
	},
	getAttribute: function(name){
		return this.attributes[name];
	},
	addParam: function(name, value){
		this.params[name] = value;
	},
	getParams: function(){
		return this.params;
	},
	addVariable: function(name, value){
		this.variables[name] = value;
	},
	getVariable: function(name){
		return this.variables[name];
	},
	getVariables: function(){
		return this.variables;
	},
	createParamTag: function(n, v){
		var p = document.createElement('param');
		p.setAttribute('name', n);
		p.setAttribute('value', v);
		return p;
	},
	getVariablePairs: function(){
		var variablePairs = new Array();
		var key;
		var variables = this.getVariables();
		for(key in variables){
			variablePairs.push(key +"="+ variables[key]);
		}
		return variablePairs;
	},
	getFlashHTML: function() {
		var flashNode = "";
		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
			if (this.getAttribute("doExpressInstall")) this.addVariable("MMplayerType", "PlugIn");
			flashNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'"';
			flashNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
			var params = this.getParams();
			for(var key in params){ flashNode += [key] +'="'+ params[key] +'" '; }
			var pairs = this.getVariablePairs().join("&");
			if (pairs.length > 0){ flashNode += 'flashvars="'+ pairs +'"'; }
			flashNode += '/>';
		} else { // PC IE
			if (this.getAttribute("doExpressInstall")) this.addVariable("MMplayerType", "ActiveX");
			flashNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'">';
			flashNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
			var params = this.getParams();
			for(var key in params) {
			 flashNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
			}
			var pairs = this.getVariablePairs().join("&");
			if(pairs.length > 0) {flashNode += '<param name="flashvars" value="'+ pairs +'" />';}
			flashNode += "</object>";
		}
		return flashNode;
	},
	write: function(elementId){
		if(this.skipDetect || us.popdt.flash.require(this.getAttribute('version'))){
			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
			n.innerHTML = this.getFlashHTML();
		} else{
			// NO FLASH
			// if(this.getAttribute('redirectUrl') != "") {
			// 	document.location.replace(this.getAttribute('redirectUrl'));
			// }
		}
	}
}
