/**
 * 
 * DynamicObjectversion 1.0a (copyleft) 2006 Evident Interactive 
 * By Dennis Ippel and Merlijn van der Mee
 * Generic solution to embed ActiveX objects in a HTML-page.
 *
 * Most of it was copied from FlashObject. http://blog.deconcept.com/DynamicObject/
 * (c) 2006 Geoff Stearns released under the MIT License:
 *
 */
 
if(typeof com == "undefined") var com = new Object();
if(typeof com.deconcept == "undefined") com.deconcept = new Object();
if(typeof com.deconcept.util == "undefined") com.deconcept.util = new Object();
if(typeof com.deconcept.DynamicObjectUtil == "undefined") com.deconcept.DynamicObjectUtil = new Object();
com.deconcept.DynamicObject = function(type, swf, id, w, h, ver, c, useExpressInstall, quality, xiRedirectUrl, redirectUrl, detectKey, noFlashImage) {
	if (!document.createElement || !document.getElementById) return;
	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
	this.skipDetect = com.deconcept.util.getRequestParameter(this.DETECT_KEY);
	this.params = new Object();
	this.variables = new Object();
	this.attributes = new Array();
	this.useExpressInstall = useExpressInstall;
	this.noFlashImage = (noFlashImage.length == 0 || noFlashImage == false || noFlashImage == undefined) ? null : noFlashImage;

	if(type) this.setAttribute('type', type);
	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', new com.deconcept.PlayerVersion(ver.toString().split(".")));

	this.installedVer = com.deconcept.DynamicObjectUtil.getPlayerVersion(this.getAttribute('version'), useExpressInstall);
	
	if(c) this.addParam('bgcolor', c);
	var q = quality ? quality : 'high';
	this.addParam('quality', q);
	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
	this.setAttribute('xiRedirectUrl', xir);
	this.setAttribute('redirectUrl', '');
	if(redirectUrl) this.setAttribute('redirectUrl', redirectUrl); }

	com.deconcept.DynamicObject.prototype = {
		setAttribute: function(name, value){
			this.attributes[name] = value;
		},
		getAttribute: function(name){
			return this.attributes[name];
		},
		getAttributes: function(){
			return this.attributes;
		},
		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(this.attributes["type"] != 'application/x-shockwave-flash') {
				this.browserId = new BrowserIdentification();
		
				if(this.attributes["type"] == 'application/x-java-applet') {
					if(this.browserId.isMSIE) {
						this.obj = "applet";
					} else {
						this.obj = document.createElement("applet");
					}
				}
				else {
					if(this.browserId.isMSIE) {
						this.obj = "object";
					} else {
						this.obj = document.createElement("object");
					}
				}
	
				if(this.browserId.isMSIE) {
					var flashNode = '<'+this.obj;			
					var attr = this.getAttributes();
			    
			    	for(var key in attr) {
						flashNode += ' ' + key + '="' + attr[key] + '"';
					}
					
					flashNode += '>';		
	
					var params = this.getParams();
	
				    for(var key in this.params) {
						flashNode += '<param name="' + key + '" value="' + params[key] + '" />';
					}
					
					fo.addParam("movie", "TFI.TfiWeb/Images/Flash/taskforce_main5.swf");
					
					
					flashNode += '</'+this.obj+'>';
					return flashNode;
				} else {
					var params = this.getParams();
					for(var key in this.params) {
						var param = document.createElement("param");
						param.name = key;
						param.value = params[key];
						this.obj.appendChild(param);
					}

					var attr = this.getAttributes();
					for(var key in this.params) {
						this.obj.setAttribute(key, attr[key]);
					}
					return this.obj.innerHTML;
				}
			} else {
				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.attributes["type"] != 'application/x-shockwave-flash') {
		   		var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
		   		n.innerHTML = this.getFlashHTML();
			} else {
			if(this.useExpressInstall && this.noFlashImage == null) {
			// check to see if we need to do an express install

				var expressInstallReqVer = new com.deconcept.PlayerVersion([6,0,65]);

				if(this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
					this.setAttribute('doExpressInstall', true);
					this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
					document.title = document.title.slice(0, 47) + " - Flash Player Installation";
					this.addVariable("MMdoctitle", document.title);
				}
			} else {
				this.setAttribute('doExpressInstall', false);
				var expressInstallReqVer = new com.deconcept.PlayerVersion([6,0,65]);

				if((!this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version')) && this.noFlashImage != null)
					|| (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version')) && this.noFlashImage != null)) {
					var img = document.createElement("img");
					img.src=this.noFlashImage;
					document.getElementById(elementId).appendChild(img);
				}
			}

			if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){
				var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
				n.innerHTML = this.getFlashHTML();
			} else if(this.noFlashImage == null) {
				if(this.getAttribute('redirectUrl') != "" && this.noFlashImage == null) {
					document.location.replace(this.getAttribute('redirectUrl'));
				}
			}
		}
	}
}

/* ---- detection functions ---- */
com.deconcept.DynamicObjectUtil.getPlayerVersion = function(reqVer, xiInstall){
	var PlayerVersion = new com.deconcept.PlayerVersion(0,0,0);
	if(navigator.plugins && navigator.mimeTypes.length){
		var x = navigator.plugins["Shockwave Flash"];
		if(x && x.description) {
			PlayerVersion = new com.deconcept.PlayerVersion(x.description.replace(/([a-z]|[A-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
		}
	} else {
		try{
			var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			for (var i=3; axo!=null; i++) {
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);
				PlayerVersion = new com.deconcept.PlayerVersion([i,0,0]);
			}
		} catch(e) {}
		if (reqVer && PlayerVersion.major > reqVer.major) return PlayerVersion; // version is ok, skip minor detection
    	// this only does the minor rev lookup if the user's major version 
    	// is not 6 or we are checking for a specific minor or revision number
    	// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
		if (!reqVer || ((reqVer.minor != 0 || reqVer.rev != 0) && PlayerVersion.major == reqVer.major) || PlayerVersion.major != 6 || xiInstall) {
			try{
				PlayerVersion = new com.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
      		}catch(e){}
		}
	}
 	return PlayerVersion;
}

com.deconcept.PlayerVersion = function(arrVersion){
	this.major = parseInt(arrVersion[0]) || 0;
	this.minor = parseInt(arrVersion[1]) || 0;
	this.rev = parseInt(arrVersion[2]) || 0; 
}
	
com.deconcept.PlayerVersion.prototype.versionIsValid = function(fv){
	if(this.major < fv.major) return false;
	if(this.major > fv.major) return true;
	if(this.minor < fv.minor) return false;
	if(this.minor > fv.minor) return true;
	if(this.rev < fv.rev) return false;
	return true;
}

/* ---- get value of query string param ---- */ 
com.deconcept.util = {
	getRequestParameter: function(param){
    	var q = document.location.search || document.location.hash;
    	if(q){
			var startIndex = q.indexOf(param +"=");
			var endIndex = (q.indexOf("&", startIndex) > -1) ? q.indexOf("&", startIndex) : q.length;
			if (q.length > 1 && startIndex > -1) {
				return q.substring(q.indexOf("=", startIndex)+1, endIndex);
			}
		}
		return "";
	}
}

/* add Array.push if needed (ie5) */
if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }}

/* add some aliases for ease of use/backwards compatibility */ var getQueryParamValue = com.deconcept.util.getRequestParameter;
var DynamicObject = com.deconcept.DynamicObject;

/**
 * Browser checking
 */
function BrowserIdentification() {
	this.detectionString = navigator.userAgent.toLowerCase();
	this.isLinux;
	this.isUnix;
	this.isMac;
	this.isWindows;
	this.osUnknown;
 
	this.isSafari = false;
	this.isOmniWeb = false;
	this.isOpera = false;
	this.isWebTV = false;
	this.isIcab = false;
	this.isMSIE = false;
	this.isMSIE7 = false
	this.isFirefox = false;
	this.isNetscape = false;
	this.browserUnknown = false;
 
	this.browserVersion;
 
	if (this.detectionString.indexOf("safari") > -1 && this.detectionString.indexOf("omniweb") == -1){
		this.isSafari = true;
		this.browserVersion = this.detectionString.substr(this.detectionString.lastIndexOf("/")+1, this.detectionString.length);
	} else if (this.detectionString.indexOf("omniweb") + 1) {
		this.isOmniWeb = true;
		this.browserVersion =
		this.detectionString.substr(this.detectionString.lastIndexOf("/")+1, this.detectionString.length);
	} else if (this.detectionString.indexOf("opera") + 1) {
		this.isOpera = true;
		this.browserVersion = this.detectionString.substr(this.detectionString.indexOf("/")+1, this.detectionString.indexOf(" ") - this.detectionString.indexOf("/")-1);
	} else if (this.detectionString.indexOf("msie") + 1) {
		this.isMSIE = true;
		this.browserVersion =
		this.detectionString.split("(")[1].split(";")[1].split(" ")[2];
	} else if (this.detectionString.indexOf("firefox") + 1) {
		this.isFirefox = true;
		this.browserVersion =
		this.detectionString.substr(this.detectionString.lastIndexOf("/")+1,
		this.detectionString.length);
	} else if (this.detectionString.indexOf("netscape") + 1) {
		this.isNetscape = true;
		this.browserVersion = this.detectionString.substr(this.detectionString.lastIndexOf("/")+1, this.detectionString.length);
	} else {
		this.browserUnknown = true;
		this.browserVersion = 0;
	}

	if(this.isMSIE && this.browserVersion.charAt(0) == "7") this.isMSIE7 = true;
	
	if (this.detectionString.indexOf("linux") + 1) this.isLinux = true;
	else if (this.detectionString.indexOf("x11") + 1) this.isUnix = true;
	else if (this.detectionString.indexOf("mac") + 1) this.isMac = true;
	else if (this.detectionString.indexOf("win") + 1) this.isWindows = true;
	else this.osUnknown = true;
}

