Flash = {
	hasVersion : function (p_versionRequired) {
		var versionRequired = parseInt(p_versionRequired);
		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes['application/x-shockwave-flash'] && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
			var description = navigator.plugins['Shockwave Flash'].description;
			var version = parseInt(description.split(' ')[2].split('.')[0]);
			return version >= versionRequired;
		} else if (navigator.appVersion.indexOf('Windows') != -1 && window.execScript) {
			this.hasVersionResult = null;
			execScript('on error resume next: Flash.hasVersionResult=IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.' + versionRequired + '"))','VBScript');
			return this.hasVersionResult;
		}
		return false;
	}
};
FlashElement = function (p_movie, p_options) {
	this.movie = p_movie;
	this.version = p_options.version || '9';
	this.vars = p_options.vars || new Object();
	this.alt = p_options.alt || null;
	this.options = new Object();
	this.options.id                = p_options.id                || null;
	this.options.width             = p_options.width             || '550';
	this.options.height            = p_options.height            || '400';
	this.options.menu              = p_options.menu              || null;
	this.options.quality           = p_options.quality           || null;
	this.options.bgcolor           = p_options.bgcolor           || null;
	this.options.wmode             = p_options.wmode             || null;
	this.options.scale             = p_options.scale             || null;
	this.options.align             = p_options.align             || null;
	this.options.salign            = p_options.salign            || null;
	this.options.allowFullScreen   = p_options.allowFullScreen   || null;
	this.options.allowScriptAccess = p_options.allowScriptAccess || null;
	var flashvars = '';
	for (var n in this.vars) {
		var v = this.vars[n];
		if (v) flashvars += n + '=' + escape(v) + '&';
	}
	this.options.FlashVars = flashvars;
	this.movie += '?' + flashvars;
	if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
		this.options.src = this.movie;
		this.options.type = 'application/x-shockwave-flash';
		this.options.pluginspage = 'http://www.macromedia.com/go/getflashplayer';
		if (this.options.id != null) {
			this.options.name = this.options.id;
			delete this.options.id;
		}
		var html = '<embed';
		for (var n in this.options) {
			var v = this.options[n];
			if (v) html += ' ' + n + '="' + v + '"';
		}
		html += '></embed>';
	} else {
		var attrs = new Object();
		this.options.movie = this.movie;
		attrs.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
		attrs.codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + this.version + ',0,0,0';
		attrs.id = this.options.id;
		delete this.options.id;
		attrs.width = this.options.width;
		delete this.options.width;
		attrs.height = this.options.height;
		delete this.options.height;
		attrs.align = this.options.align;
		delete this.options.align;
		var html = '<object';
		for (var n in attrs) {
			var v = attrs[n];
			if (v) html += ' ' + n + '="' + v + '"';
		}
		html += '>';
		for (var n in this.options) {
			var v = this.options[n];
			if (v) html += '<param name="' + n + '" value="' + v + '" />';
		}
		html += '</object>';
	}
	this.html = html;
};
FlashElement.prototype.getHtml = function(){
	if (this.alt != null && ! Flash.hasVersion(this.version)) {
		return this.alt;
	} else {
		return this.html;
	}
};
FlashElement.prototype.getElement = function(){
	var div = document.createElement('div');
	div.innerHTML = this.getHtml();
	return div.firstChild;
};
FlashElement.prototype.write = function(){
	document.write(this.getHtml());
};
FlashElement.prototype.insertInto = function (p_elem) {
	this.$(p_elem).innerHTML = this.getHtml();
};
FlashElement.prototype.appendTo = function (p_elem) {
	this.$(p_elem).appendChild(this.getElement());
};
FlashElement.prototype.$ = function (p_elem) {
	if (typeof(p_elem) == 'string') {
		p_elem = document.getElementById(p_elem);
	}
	return p_elem;
};

