/* Requiert le fichier lib_dhtml.js */

function Param(nm,vl)
{
	this._name = '';
	if(testTypeOfObject(nm,'string'))
	{
		this._name = nm;
	}

	this._value = vl;

	this.getName = function()
	{
		return this._name;
	}

	this.getValue = function()
	{
		return this._value;
	}
}

function RequestParam()
{
	this._param = new Array();
	this._xmlCompat = true;

	this.setXmlCompat = function(xCB)
	{
		if(testTypeOfObject(xCB,'boolean'))
		{
			this._xmlCompat = xCB;
		}
	}

	this.addParam = function(pO)
	{
		if(testTypeOfObject(pO,Param))
		{
			this._param[this._param.length] = pO;
		}
	}

	this.getRequestString = function()
	{
		var rtStr = '';

		if(this._param.length > 0)
		{
			rtStr += '?';

			for(var i=0; i<this._param.length; i++)
			{
				if(i >0 && i != this._param.length)
				{
					if(this._xmlCompat)
					{
						rtStr += '&#38;';
					}
					else
					{
						rtStr += '&';
					}
				}

				rtStr += this._param.getName()+'='+this._param.getValue();
			}
		}

		return rtStr;
	}
}

function PluginInfo(majV,minV,rev)
{
	this._majorVersion = 0;
	this._minorVersion = 0;
	this._revision = 0;
	
	this._activeXObject = false;

	this.setMajorVersion = function(mV)
	{
		if(testTypeOfObject(mV,'number'))
		{
			this._majorVersion = mV;
		}
	}
	
	this.getMajorVersion = function()
	{
		return this._majorVersion;
	}

	this.setMinorVersion = function(mV)
	{
		if(testTypeOfObject(mV,'number'))
		{
			this._minorVersion = mV;
		}
	}
	
	this.getMinorVersion = function()
	{
		return this._minorVersion;
	}

	this.setRevision = function(mV)
	{
		if(testTypeOfObject(mV,'number'))
		{
			this._revision = mV;
		}
	}
	
	this.getRevision = function()
	{
		return this._revision;
	}
	
	this.setActiveXObject = function(aO)
	{
		if(testTypeOfObject(aO,'boolean'))
		{
			this._activeXObject = aO;
		}
	}
	
	this.isActiveXObject = function()
	{
		return this._activeXObject;
	}

	this.setMajorVersion(majV);
	this.setMinorVersion(minV);
	this.setRevision(rev);
}

function getPluginInfo()
{
	var pI = null;
	var majVersion,minVersion,rev;
	
	var aO = false;
	
	if(window.ActiveXObject)
	{
		try
		{
			var fObj = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
		
			var version = fObj.GetVariable("$version");
		
			var infoAr = version.split(' ');
		
			var sys = infoAr[0];
			var versionStr = infoAr[1];
			var versionAr = versionStr.split(',');
		
			var majVersion = parseInt(versionAr[0]);
			var minVersion = parseInt(versionAr[1]);
			var rev = parseInt(versionAr[2]);
			
			aO = true;
		}
		catch(e)
		{}
	}
	else
	{
		var fObj = navigator.plugins['Shockwave Flash'];
		
		var desc = fObj.description;
		
		var fStr = /([0-9]*\.[0-9]*)\s*r([0-9]*)/;
		var fSubStr = desc.match(fStr);
		
		var ver = fSubStr[1];
		var versionAr = ver.split('.');
		
		var majVersion = parseInt(versionAr[0]);
		var minVersion = parseInt(versionAr[1]);
		
		var rev = parseInt(fSubStr[2]);
	}

	if(testTypeOfObject(majVersion,'number') && testTypeOfObject(minVersion,'number') && testTypeOfObject(rev,'number'))
	{
		pI = new PluginInfo(majVersion,minVersion,rev);
		pI.setActiveXObject(aO);
	}
	
	return pI;
}

function AttributeObject(nm,val)
{
	if(testTypeOfObject(nm,'string'))
	{
		this._name = nm;
	}
	else
	{
		this._name = '';
	}

	if(testTypeOfObject(val,'string'))
	{
		this._value = val;
	}
	else
	{
		this._value = '';
	}

	this.getName = function()
	{
		return this._name;
	}

	this.getValue = function()
	{
		return this._value;
	}
}

function FlashObject()
{
	this._flashParam = new Array();
	this._urlParam = new RequestParam();
	this._flashUrl = '';
	this._flashId = '';
	this._domCompat = false;
	this._versionCompat = false;
	this._attribute = new Array();
	this._secure = false;
	this._validXhtml = false;

	this._minVersion = new PluginInfo(7,0,0);

	if((arguments.length >= 1) && testTypeOfObject(arguments[0],'number'))
	{
		this._minVersion.setMajorVersion(arguments[0]);
	}
	if((arguments.length >= 2) && testTypeOfObject(arguments[1],'number'))
	{
		this._minVersion.setMinorVersion(arguments[1]);
	}
	if((arguments.length == 3) && testTypeOfObject(arguments[2],'number'))
	{
		this._minVersion.setRevision(arguments[2]);
	}

	this._getVersionString = function()
	{
		return this._minVersion.getMajorVersion()+'.'+this._minVersion.getMinorVersion()+'.'+this._minVersion.getRevision();
	}

	this._errorMessage = 'Mauvaise version de flash : vous devez installer une version '+this._getVersionString()+' ou sup\u00E9rieure';

	this._currentVersion = getPluginInfo();

	if(this._currentVersion.getMajorVersion() > this._minVersion.getMajorVersion())
	{
		this._versionCompat = true;
	}
	else if(this._currentVersion.getMajorVersion() == this._minVersion.getMajorVersion())
	{
		if(this._currentVersion.getMinorVersion() > this._minVersion.getMinorVersion())
		{
			this._versionCompat = true;
		}
		else if(this._currentVersion.getMinorVersion() == this._minVersion.getMinorVersion())
		{
			if(this._currentVersion.getRevision() >= this._minVersion.getRevision())
			{
				this._versionCompat = true;
			}
		}
	}

	this.setSecure = function(sV)
	{
		if(testTypeOfObject(sV,'boolean'))
		{
			this._secure = sV;
		}
	}
	
	this.setValidXhtml = function(vV)
	{
		if(testTypeOfObject(vV,'boolean'))
		{
			this._validXhtml = vV;
		}
	}

	this.setDomCompat = function(dC)
	{
		if(testTypeOfObject(dC,'boolean'))
		{
			this._domCompat = dC;
		}
	}

	this.addUrlParam = function(rPN,rPV)
	{
		this._urlParam.addParam(new Param(rPN,rPV));
	}

	this.addFlashParam = function(fPN,fPV)
	{
		if(testTypeOfObject(fPN,'string'))
		{
			this._flashParam[this._flashParam.length] = new Param(fPN,fPV);
		}
	}

	this.addAttribute = function(aN,aV)
	{
		if(testTypeOfObject(aN,'string') && (aN != '') && this._canAddAttribute(aN) && testTypeOfObject(aV,'string'))
		{
			this._attribute[this._attribute.length] = new AttributeObject(aN,aV);
		}
	}

	this._canAddAttribute = function(nm)
	{
		var rtB = false;

		if((nm.toLowerCase() != 'id') && (nm.toLowerCase() != 'classid') && (nm.toLowerCase() != 'codebase') && (nm.toLowerCase() != 'src')  && (nm.toLowerCase() != 'pluginspage')  && (nm.toLowerCase() != 'type'))
		{
			rtB = true;
		}

		return rtB;
	}

	this.setId = function(idS)
	{
		if(testTypeOfObject(idS,'string'))
		{
			this._flashId = idS;
		}
	}

	this.setUrl = function(urlS)
	{
		if(testTypeOfObject(urlS,'string'))
		{
			this._flashUrl = urlS;
		}
	}

	this.setErrorMessage = function(eM)
	{
		this._errorMessage = '';

		if(testTypeOfObject(eM,'string'))
		{
			this._errorMessage += eM;
		}

		this._errorMessage += this._getVersionString();

		if(testTypeOfObject(arguments[1],'string'))
		{
			this._errorMessage += arguments[1];
		}
	}

	this.getErrorMessage = function()
	{
		return this._errorMessage;
	}

	this.isSecure = function()
	{
		return this._secure;
	}
	
	this.isValidXhtml = function()
	{
		return this._validXhtml;
	}

	this._getProtocol = function()
	{
		var pStr = 'http';

		if(this.isSecure())
		{
			pStr = 'https';
		}

		return pStr;
	}

	this.generateFlashCode = function()
	{
		var obj = null;

		if(this._versionCompat)
		{
			var clI = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
			var cB = this._getProtocol()+'://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0';

			var pP = this._getProtocol()+'://www.macromedia.com/go/getflashplayer';
			var tp = 'application/x-shockwave-flash';

			if(this._flashUrl != '')
			{
				var flUri = this._flashUrl+this._urlParam.getRequestString();

				if(this._domCompat)
				{
					var emb;
					
					obj = document.createElement('object');

					if((this._flashId != '') && this._currentVersion.isActiveXObject())
					{
						obj.setAttribute('id',this._flashId);
					}

					obj.setAttribute('classid',clI);
					obj.setAttribute('codebase',cB);

					var tUP = document.createElement('param');
					tUP.setAttribute('movie',flUri);

					obj.appendChild(tUP);

					if(!this.isValidXhtml())
					{
						emb = document.createElement('embed');
						emb.setAttribute('src',flUri);
						emb.setAttribute('pluginspage',pP);
						emb.setAttribute('type',tp);
						
						if((this._flashId != '') && !this._currentVersion.isActiveXObject())
						{
							emb.setAttribute('id',this._flashId);
						}
					}

					for(var i=0; i<this._attribute.length; i++)
					{
						obj.setAttribute(this._attribute[i].getName(),this._attribute[i].getValue());
						
						if(!this.isValidXhtml())
						{
							emb.setAttribute(this._attribute[i].getName(),this._attribute[i].getValue());
						}
					}

					for(var i=0; i<this._flashParam.length; i++)
					{
						var tp = document.createElement('param');
						tp.setAttribute('name',this._flashParam[i].getName());
						tp.setAttribute('value',this._flashParam[i].getValue());
						obj.appendChild(tp);

						if(!this.isValidXhtml())
						{
							emb.setAttribute(this._flashParam[i].getName(),this._flashParam[i].getValue());
						}
					}
					
					if(!this.isValidXhtml())
					{
						obj.appendChild(emb);
					}
				}
				else
				{
					obj = '<object';

					if((this._flashId != '') && this._currentVersion.isActiveXObject())
					{
						obj += ' id="'+this._flashId+'"';
					}

					var attrCode = '';

					for(var i=0; i<this._attribute.length; i++)
					{
						attrCode += ' '+this._attribute[i].getName()+'="'+this._attribute[i].getValue()+'"';
					}

					obj += attrCode;
					obj += ' classid="'+clI+'" codebase="'+cB+'">';
					obj += '<param name="movie" value="'+this._flashUrl+'" />';

					var objCode = '';
					var embCode = '';

					for(var i=0; i<this._flashParam.length; i++)
					{
						objCode += '<param name="'+this._flashParam[i].getName()+'" value="'+this._flashParam[i].getValue()+'" />';
						
						if(!this.isValidXhtml())
						{
							embCode += ' '+this._flashParam[i].getName()+'="'+this._flashParam[i].getValue()+'"';
						}
					}

					embCode += attrCode;
					
					if((this._flashId != '') && !this._currentVersion.isActiveXObject())
					{
						embCode += ' id="'+this._flashId+'"';
					}

					if(!this.isValidXhtml())
					{
						obj += objCode+'<embed src="'+this._flashUrl+'"'+embCode+' pluginspage="'+pP+'" type="'+tp+'"></embed>';
					}
					
					obj += '</object>';
				}
			}
		}
		else
		{
			alert(this.getErrorMessage());
		}

		return obj;
	}

	this.insertFlashCode = function(tObj)
	{
		if(tObj)
		{
			var fC = this.generateFlashCode();

			if(fC)
			{
				if(this._domCompat)
				{
					tObj.appendChild(fC);
				}
				else
				{
					tObj.innerHTML = fC;
				}
			}
		}
	}
}