/*	Unobtrusive Flash Objects (UFO) v1.01 <http://www.bobbyvandersluis.com/ufo/>
	Copyright 2005 Bobby van der Sluis
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
	------------------------------
	v1.01 Fixed bug: Added missing quotes around attribute values
*/

var UFO = {
	requiredAttrParams: ["movie", "width", "height", "majorversion", "build"],
	optionalAttrEmb: ["name", "swliveconnect", "align"],
	optionalAttrObj: ["id", "align"],
	optionalAttrParams: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess"],

	create: function(FO, id) {
		UFO.setElementDisplay(id, "none");
		var loadfn = function() {
			if (UFO.hasRequiredAttrParams(FO) && UFO.hasFlashVersion(FO.majorversion, FO.build)) {
				UFO.writeFlashObject(FO, id);
			}
			UFO.setElementDisplay(id, "block");
		};
		UFO.addLoadEvent(loadfn);
	},

	setElementDisplay: function(id, display) {
		if (!document.createElement || !document.getElementsByTagName) return;
		var selector = "#" + id;
		var property = "display: " + display;
		var style = document.createElement("style");
		style.setAttribute("type", "text/css");
		style.setAttribute("media", "screen");
		document.getElementsByTagName("head")[0].appendChild(style);
		var agt = navigator.userAgent.toLowerCase(); 
		var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
		var is_win = (agt.indexOf("win") != -1);
		if (!(is_ie && is_win)) {
			var styles = document.getElementsByTagName("style");
			if (styles && styles.length > 0 && document.createTextNode) {
				var lastStyle = styles[styles.length - 1];
				var rule = document.createTextNode(selector + " {" + property + ";}");
				lastStyle.appendChild(rule); // Hopelessly bugs in IE/Win
			}
		}
		else if (document.styleSheets && document.styleSheets.length > 0) {
			var stylesheet = document.styleSheets[document.styleSheets.length - 1];
			if (typeof stylesheet.addRule == "object"){ // This test bugs in IE/Mac and Safari
				stylesheet.addRule(selector, property);
			}
		}
	},

	hasRequiredAttrParams: function(FO) {
		for (var i = 0; i < UFO.requiredAttrParams.length; i++) {
			if (typeof FO[UFO.requiredAttrParams[i]] == "undefined") return false;
		}
		return true;
	},

	hasFlashVersion: function(majorVersion, build) {
		var reqVersion = parseFloat(majorVersion + "." + build);
		if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") {
			var desc = navigator.plugins["Shockwave Flash"].description;
			if (desc) {
				var descArr = desc.split(" ");
				var majorArr = descArr[2].split(".");
				var major = majorArr[0];
				if (descArr[3] != "") {
					var minorArr = descArr[3].split("r");
				}
				else {
					var minorArr = descArr[4].split("r");
				}
				var minor = minorArr[1] > 0 ? minorArr[1] : 0;
				var flashVersion = parseFloat(major + "." + minor);
			}
		}
		else if (window.ActiveXObject) {
			try {
				var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				var desc = flash.GetVariable("$version");
				if (desc) {
					var descArr = desc.split(" ");
					var versionArr = descArr[1].split(",");        
					var major = versionArr[0];
					var minor = versionArr[2];
					var flashVersion = parseFloat(major + "." + minor);
				}
			}
			catch(e) {}
		}
		if (typeof flashVersion != "undefined"){
			return (flashVersion >= reqVersion ? true : false); 
		}
		return false;
	},
	
	//GM an xhtml compliant version of the flash object.
	writeFlashXHTML: function(FO, id){
		if (!document.getElementById) return;		
		var el = document.getElementById(id);
		var flashItem;
		if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") {
			flashItem = document.createElement('embed');
			flashItem.setAttribute('type', "application/x-shockwave-flash");
			flashItem.setAttribute('pluginspage', "http://www.macromedia.com/go/getflashplayer");
			flashItem.setAttribute('src', FO.movie);
			
			//then the optional attributes for the embed tag
			for (var i = 0; i < UFO.optionalAttrEmb.length; i++) {
				if (typeof FO[UFO.optionalAttrEmb[i]] != "undefined" && FO[UFO.optionalAttrEmb[i]] != "") {
					flashItem.setAttribute(UFO.optionalAttrEmb[i], FO[UFO.optionalAttrEmb[i]]);
				}
			}
			//then we build any nested parameters
			for (var i = 0; i < UFO.optionalAttrParams.length; i++) {
				if (typeof FO[UFO.optionalAttrParams[i]] != "undefined" && FO[UFO.optionalAttrParams[i]] != "") {
					flashItem.setAttribute(UFO.optionalAttrParams[i], FO[UFO.optionalAttrParams[i]]);
				}
			}
		}
		else //set up the object.
		{
			//assemble object specific elements.
			flashItem = document.createElement('object');
			flashItem.setAttribute('classid', "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000");
			flashItem.setAttribute('pluginspage', "http://www.macromedia.com/go/getflashplayer");
			flashItem.setAttribute('codebase', "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + FO.majorversion + ',0,' + FO.build + ',0");				
			//setting optional attributes for obj
			for (var i = 0; i < UFO.optionalAttrObj.length; i++) {
				if (typeof FO[UFO.optionalAttrObj[i]] != "undefined" && FO[UFO.optionalAttrObj[i]] != "") {
					flashItem.setAttribute(UFO.optionalAttrObj[i], FO[UFO.optionalAttrObj[i]]);
				}
			}
			//then the movie clip parameter
			var param = document.createElement("param");
			param.setAttribute('name', 'movie');
			param.setAttribute('value', FO.movie);
			flashItem.appendChild(param);	
			//then we build any nested parameters
			for (var i = 0; i < UFO.optionalAttrParams.length; i++) {
				if (typeof FO[UFO.optionalAttrParams[i]] != "undefined" && FO[UFO.optionalAttrParams[i]] != "") {
					var p = document.createElement("param");
					p.setAttribute('name', UFO.optionalAttrParams[i]);
					p.setAttribute('value', FO[UFO.optionalAttrParams[i]]);
					flashItem.appendChild(p);		
				}
			}
		}
		
		flashItem.setAttribute('width', FO.width);
		flashItem.setAttribute('height', FO.height);
		
		//now we turn off all of 'el's current children.
		for(i=k=0;i< el.childNodes.length; i++,k++) {
			el.removeChild(el.childNodes[i]);
			i--;
		}
		el.appendChild(flashItem); //then stick the object into the document.			
	},
	
	writeFlashObject: function(FO, id)
	{
		if (typeof document.innerHTML == "undefined"
		&&
	   (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object")) //for some reason msie doesn't like doing it the xhtml way :-(
		{	UFO.writeFlashXHTML(FO, id);
		} else {
			UFO.writeFlashHTML(FO, id);
		}
	},

	writeFlashHTML: function(FO, id) {
		
		if (!document.getElementById) return;		
		var el = document.getElementById(id);
		if (typeof el.innerHTML == "undefined") return;
		
		var embHTML = "";
		var objAttrHTML = "";
		var objParamHTML = "";
		for (var i = 0; i < UFO.optionalAttrEmb.length; i++) {
			if (typeof FO[UFO.optionalAttrEmb[i]] != "undefined" && FO[UFO.optionalAttrEmb[i]] != "") {
				embHTML += ' ' + UFO.optionalAttrEmb[i] + '="' + FO[UFO.optionalAttrEmb[i]] + '"';
				//setting optional attributes for embed
			}
		}
		for (var i = 0; i < UFO.optionalAttrObj.length; i++) {
			if (typeof FO[UFO.optionalAttrObj[i]] != "undefined" && FO[UFO.optionalAttrObj[i]] != "") {
				objAttrHTML += ' ' + UFO.optionalAttrObj[i] + '="' + FO[UFO.optionalAttrObj[i]] + '"';
				//setting optional attributes for obj
			}
		}
		for (var i = 0; i < UFO.optionalAttrParams.length; i++) {
			if (typeof FO[UFO.optionalAttrParams[i]] != "undefined" && FO[UFO.optionalAttrParams[i]] != "") {
				embHTML += ' ' + UFO.optionalAttrParams[i] + '="' + FO[UFO.optionalAttrParams[i]] + '"';
				objParamHTML += '<param name="' + UFO.optionalAttrParams[i] + '" value="' + FO[UFO.optionalAttrParams[i]] + '" />';
				//setting optional attributes for params in both object and embed.
			}
		}
		if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") {
			var foHTML = '<embed type="application/x-shockwave-flash" src="' + FO.movie + '" width="' + FO.width + '" height="' + FO.height + '" pluginspage="http://www.macromedia.com/go/getflashplayer"';
			foHTML += embHTML;
			foHTML += '></embed>';
		}
		else {
			var foHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + objAttrHTML + ' width="' + FO.width + '" height="' + FO.height + '" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + FO.majorversion + ',0,' + FO.build + ',0">';
			foHTML += '<param name="movie" value="' + FO.movie + '" />';
			foHTML += objParamHTML;
			foHTML += '</object>';
		}
		
		el.innerHTML = foHTML; /* can't use innerHTML with true xhtml....*/
	},

	addLoadEvent: function(fn) {
		if (window.addEventListener) {
			window.addEventListener("load", fn, false);
		}
		else if (document.addEventListener) {
			document.addEventListener("load", fn, false);
		}
		else if (window.attachEvent) {
			window.attachEvent("onload", fn);
		}
		else if (typeof window.onload == "function") {
			var fnOld = window.onload;
			window.onload = function(){
				fnOld();
				fn();
			};
		}
		else {
			window.onload = fn;
		}
	}
};