/** * FusionCharts: Flash Player detection and Chart embedding. * Version: 1.2 (1st November, 2007) - Added Player detection, New conditional fixes for IE, New FORM fixes for IE  * Version: 1.1 (29th June, 2007) - Added Player detection, New conditional fixes for IE * * Morphed from SWFObject (http://blog.deconcept.com/swfobject/) under MIT License: * http://www.opensource.org/licenses/mit-license.php * */if(typeof infosoftglobal == "undefined") var infosoftglobal = new Object();if(typeof infosoftglobal.FusionChartsUtil == "undefined") infosoftglobal.FusionChartsUtil = new Object();infosoftglobal.FusionCharts = function(swf, id, w, h, debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect){	if (!document.getElementById) { return; }		//Flag to see whether data has been set initially	this.initialDataSet = false;		//Create container objects	this.params = new Object();	this.variables = new Object();	this.attributes = new Array();		//Set attributes for the SWF	if(swf) { this.setAttribute('swf', swf); }	if(id) { this.setAttribute('id', id); }	if(w) { this.setAttribute('width', w); }	if(h) { this.setAttribute('height', h); }		//Set background color	if(c) { this.addParam('bgcolor', c); }		//Set Quality		this.addParam('quality', 'high');		//Add scripting access parameter	this.addParam('allowScriptAccess', 'always');		//Pass width and height to be appended as chartWidth and chartHeight	this.addVariable('chartWidth', w);	this.addVariable('chartHeight', h);	//Whether in debug mode	debugMode = debugMode ? debugMode : 0;	this.addVariable('debugMode', debugMode);	//Pass DOM ID to Chart	this.addVariable('DOMId', id);	//Whether to registed with JavaScript	registerWithJS = registerWithJS ? registerWithJS : 0;	this.addVariable('registerWithJS', registerWithJS);		//Scale Mode of chart	scaleMode = scaleMode ? scaleMode : 'noScale';	this.addVariable('scaleMode', scaleMode);		//Application Message Language	lang = lang ? lang : 'EN';	this.addVariable('lang', lang);		//Whether to auto detect and re-direct to Flash Player installation	this.detectFlashVersion = detectFlashVersion?detectFlashVersion:1;	this.autoInstallRedirect = autoInstallRedirect?autoInstallRedirect:1;		//Ger Flash Player version 	this.installedVer = infosoftglobal.FusionChartsUtil.getPlayerVersion();		if (!window.opera && document.all && this.installedVer.major > 7) {		// Only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE		infosoftglobal.FusionCharts.doPrepUnload = true;	}}infosoftglobal.FusionCharts.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;	},	getVariablePairs: function(){		var variablePairs = new Array();		var key;		var variables = this.getVariables();		for(key in variables){			variablePairs.push(key +"="+ variables[key]);		}		return variablePairs;	},	getSWFHTML: function() {		var swfNode = "";		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { 			// netscape plugin architecture						swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'"  ';			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';			var params = this.getParams();			 for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }			var pairs = this.getVariablePairs().join("&");			 if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }			swfNode += '/>';		} else { // PC IE						swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'">';			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';			var params = this.getParams();			for(var key in params) {			 swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';			}			var pairs = this.getVariablePairs().join("&");						if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}			swfNode += "</object>";		}		return swfNode;	},	setDataURL: function(strDataURL){		//This method sets the data URL for the chart.		//If being set initially		if (this.initialDataSet==false){			this.addVariable('dataURL',strDataURL);			//Update flag			this.initialDataSet = true;		}else{			//Else, we update the chart data using External Interface			//Get reference to chart object			var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this.getAttribute('id'));			chartObj.setDataURL(strDataURL);		}	},	setDataXML: function(strDataXML){		//If being set initially		if (this.initialDataSet==false){			//This method sets the data XML for the chart INITIALLY.			this.addVariable('dataXML',strDataXML);			//Update flag			this.initialDataSet = true;		}else{			//Else, we update the chart data using External Interface			//Get reference to chart object			var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this.getAttribute('id'));			chartObj.setDataXML(strDataXML);		}	},	setTransparent: function(isTransparent){		//Sets chart to transparent mode when isTransparent is true (default)		//When no parameter is passed, we assume transparent to be true.		if(typeof isTransparent=="undefined") {			isTransparent=true;		}					//Set the property		if(isTransparent)			this.addParam('WMode', 'transparent');		else			this.addParam('WMode', 'Opaque');	},		render: function(elementId){		//First check for installed version of Flash Player - we need a minimum of 8		if((this.detectFlashVersion==1) && (this.installedVer.major < 8)){			if (this.autoInstallRedirect==1){				//If we can auto redirect to install the player?				var installationConfirm = window.confirm("You need Adobe Flash Player 8 (or above) to view the charts. It is a free and lightweight installation from Adobe.com. Please click on Ok to install the same.");				if (installationConfirm){					window.location = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash";				}else{					return false;				}			}else{				//Else, do not take an action. It means the developer has specified a message in the DIV (and probably a link).				//So, expect the developers to provide a course of way to their end users.				//window.alert("You need Adobe Flash Player 8 (or above) to view the charts. It is a free and lightweight installation from Adobe.com. ");				return false;			}					}else{			//Render the chart			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;			n.innerHTML = this.getSWFHTML();						//Added <FORM> compatibility			//Check if it's added in Mozilla embed array or if already exits 			if(!document.embeds[this.getAttribute('id')] && !window[this.getAttribute('id')])		      	window[this.getAttribute('id')]=document.getElementById(this.getAttribute('id')); 				//or else document.forms[formName/formIndex][chartId]						return true;				}	}}/* ---- detection functions ---- */infosoftglobal.FusionChartsUtil.getPlayerVersion = function(){	var PlayerVersion = new infosoftglobal.PlayerVersion([0,0,0]);	if(navigator.plugins && navigator.mimeTypes.length){		var x = navigator.plugins["Shockwave Flash"];		if(x && x.description) {			PlayerVersion = new infosoftglobal.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));		}	}else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ 		//If Windows CE		var axo = 1;		var counter = 3;		while(axo) {			try {				counter++;				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);				PlayerVersion = new infosoftglobal.PlayerVersion([counter,0,0]);			} catch (e) {				axo = null;			}		}	} else { 		// Win IE (non mobile)		// Do minor version lookup in IE, but avoid Flash Player 6 crashing issues		try{			var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");		}catch(e){			try {				var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");				PlayerVersion = new infosoftglobal.PlayerVersion([6,0,21]);				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)			} catch(e) {				if (PlayerVersion.major == 6) {					return PlayerVersion;				}			}			try {				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");			} catch(e) {}		}		if (axo != null) {			PlayerVersion = new infosoftglobal.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));		}	}	return PlayerVersion;}infosoftglobal.PlayerVersion = function(arrVersion){	this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;	this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;	this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;}// ------------ Fix for Out of Memory Bug in IE in FP9 ---------------///* Fix for video streaming bug */infosoftglobal.FusionChartsUtil.cleanupSWFs = function() {	var objects = document.getElementsByTagName("OBJECT");	for (var i = objects.length - 1; i >= 0; i--) {		objects[i].style.display = 'none';		for (var x in objects[i]) {			if (typeof objects[i][x] == 'function') {				objects[i][x] = function(){};			}		}	}}// Fixes bug in fp9if (infosoftglobal.FusionCharts.doPrepUnload) {	if (!infosoftglobal.unloadSet) {		infosoftglobal.FusionChartsUtil.prepUnload = function() {			__flash_unloadHandler = function(){};			__flash_savedUnloadHandler = function(){};			window.attachEvent("onunload", infosoftglobal.FusionChartsUtil.cleanupSWFs);		}		window.attachEvent("onbeforeunload", infosoftglobal.FusionChartsUtil.prepUnload);		infosoftglobal.unloadSet = true;	}}/* Add document.getElementById if needed (mobile IE < 5) */if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }}/* Add Array.push if needed (ie5) */if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }}/* Function to return Flash Object from ID */infosoftglobal.FusionChartsUtil.getChartObject = function(id){  var chartRef=null;  if (navigator.appName.indexOf("Microsoft Internet")==-1) {    if (document.embeds && document.embeds[id])      chartRef = document.embeds[id]; 	else	chartRef  = window.document[id];  }  else {    chartRef = window[id];  }  if (!chartRef)	chartRef  = document.getElementById(id);    return chartRef;}/* Aliases for easy usage */var getChartFromId = infosoftglobal.FusionChartsUtil.getChartObject;var FusionCharts = infosoftglobal.FusionCharts;