/** 
 * flowplayer.js 3.0.5. The Flowplayer API
 * 
 * Copyright 2009 Flowplayer Oy
 * 
 * This file is part of Flowplayer.
 * 
 * Flowplayer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Flowplayer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Flowplayer.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Version: 3.0.5 - Tue Feb 03 2009 13:14:17 GMT-0000 (GMT+00:00)
 */
(function(){
	function log(args){
		console.log("$f.fireEvent",[].slice.call(args));
	}
	function clone(obj){
		if(!obj||typeof obj!='object'){
			return obj;
		}
		var temp=new obj.constructor();
		for(var key in obj){
			if(obj.hasOwnProperty(key)){
				temp[key]=clone(obj[key]);
			}
		}
		return temp;
	}
	function each(obj,fn){
		if(!obj){
			return;
		}
		var name,i=0,length=obj.length;
		if(length===undefined){
			for(name in obj){
				if(fn.call(obj[name],name,obj[name])===false){
					break;
				}
			}
		}
		else {
			for(var value=obj[0];i<length&&fn.call(value,i,value)!==false;value=obj[++i]){
			}
		}
		return obj;
	}
	function el(id){
		return document.getElementById(id);
	}
	function extend(to,from,skipFuncs){
		if(to&&from){
			each(from,function(name,value){
				if(!skipFuncs||typeof value!='function'){
					to[name]=value;
				}
			});
		}
	}
	function select(query){
		var index=query.indexOf(".");
		if(index!=-1){
			var tag=query.substring(0,index)||"*";
			var klass=query.substring(index+1,query.length);
			var els=[];
			each(document.getElementsByTagName(tag),function(){
				if(this.className&&this.className.indexOf(klass)!=-1){
					els.push(this);
				}
			});
			return els;
		}
	}
	function stopEvent(e){
		e=e||window.event;
		if(e.preventDefault){
			e.stopPropagation();
			e.preventDefault();
		}
		else {
			e.returnValue=false;
			e.cancelBubble=true;
		}
		return false;
	}
	function bind(to,evt,fn){
		to[evt]=to[evt]||[];
		to[evt].push(fn);
	}
	function makeId(){
		return"_"+(""+Math.random()).substring(2,10);
	}
	var Clip=function(json,index,player){
		var self=this;
		var cuepoints={};
		var listeners={};
		self.index=index;
		if(typeof json=='string'){
			json={url:json};
		}
		extend(this,json,true);
		each(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){
			var evt="on"+this;
			if(evt.indexOf("*")!=-1){
				evt=evt.substring(0,evt.length-1);
				var before="onBefore"+evt.substring(2);
				self[before]=function(fn){
					bind(listeners,before,fn);
					return self;
				};
			}
			self[evt]=function(fn){
				bind(listeners,evt,fn);
				return self;
			};
			if(index==-1){
				if(self[before]){
					player[before]=self[before];
				}
				if(self[evt]){
					player[evt]=self[evt];
				}
			}
		});
		extend(this,{
			onCuepoint:function(points,fn){
				if(arguments.length==1){
					cuepoints.embedded=[null,points];
					return self;
				}
				if(typeof points=='number'){
					points=[points];
				}
				var fnId=makeId();
				cuepoints[fnId]=[points,fn];
				if(player.isLoaded()){
					player._api().fp_addCuepoints(points,index,fnId);
				}
				return self;
			},
			update:function(json){
				extend(self,json);
				if(player.isLoaded()){
					player._api().fp_updateClip(json,index);
				}
				var conf=player.getConfig();
				var clip=(index==-1)?conf.clip:conf.playlist[index];
				extend(clip,json,true);
			},
			_fireEvent:function(evt,arg1,arg2,target){
				if(evt=='onLoad'){
					each(cuepoints,function(key,val){
						if(val[0]){
							player._api().fp_addCuepoints(val[0],index,key);
						}
					});
					return false;
				}
				target=target||self;
				if(evt=='onCuepoint'){
					var fn=cuepoints[arg1];
					if(fn){
						return fn[1].call(player,target,arg2);
					}
				}
				if(evt=='onStart'||evt=='onUpdate'){
					extend(target,arg1);
					if(!target.duration){
						target.duration=arg1.metaData.duration;
					}
					else {
						target.fullDuration=arg1.metaData.duration;
					}
				}
				var ret=true;
				each(listeners[evt],function(){
					ret=this.call(player,target,arg1,arg2);
				});
				return ret;
			}
		});
		if(json.onCuepoint){
			var arg=json.onCuepoint;
			self.onCuepoint.apply(self,typeof arg=='function'?[arg]:arg);
			delete json.onCuepoint;
		}
		each(json,function(key,val){
			if(typeof val=='function'){
				bind(listeners,key,val);
				delete json[key];
			}
		});
		if(index==-1){
			player.onCuepoint=this.onCuepoint;
		}
	};
	var Plugin=function(name,json,player,fn){
		var listeners={};
		var self=this;
		var hasMethods=false;
		if(fn){
			extend(listeners,fn);
		}
		each(json,function(key,val){
			if(typeof val=='function'){
				listeners[key]=val;
				delete json[key];
			}
		});
		extend(this,{
			animate:function(props,speed,fn){
				if(!props){
					return self;
				}
				if(typeof speed=='function'){
					fn=speed;speed=500;
				}
				if(typeof props=='string'){
					var key=props;
					props={};
					props[key]=speed;
					speed=500;
				}
				if(fn){
					var fnId=makeId();
					listeners[fnId]=fn;
				}
				if(speed===undefined){
					speed=500;
				}
				json=player._api().fp_animate(name,props,speed,fnId);
				return self;
			},
			css:function(props,val){
				if(val!==undefined){
					var css={};
					css[props]=val;
					props=css;
				}
				json=player._api().fp_css(name,props);
				extend(self,json);
				return self;
			},
			show:function(){
				this.display='block';
				player._api().fp_showPlugin(name);
				return self;
			},
			hide:function(){
				this.display='none';
				player._api().fp_hidePlugin(name);
				return self;
			},
			toggle:function(){
				this.display=player._api().fp_togglePlugin(name);
				return self;
			},
			fadeTo:function(o,speed,fn){
				if(typeof speed=='function'){
					fn=speed;speed=500;
				}
				if(fn){
					var fnId=makeId();
					listeners[fnId]=fn;
				}
				this.display=player._api().fp_fadeTo(name,o,speed,fnId);
				this.opacity=o;return self;
			},
			fadeIn:function(speed,fn){
				return self.fadeTo(1,speed,fn);
			},
			fadeOut:function(speed,fn){
				return self.fadeTo(0,speed,fn);
			},
			getName:function(){
				return name;
			},
			_fireEvent:function(evt,arg){
				if(evt=='onUpdate'){
					var json=player._api().fp_getPlugin(name);
					if(!json){
						return;
					}
					extend(self,json);
					delete self.methods;
					if(!hasMethods){
						each(json.methods,function(){
							var method=""+this;
							self[method]=function(){
								var a=[].slice.call(arguments);
								var ret=player._api().fp_invoke(name,method,a);
								return ret=='undefined'?self:ret;
							};
						});
						hasMethods=true;
					}
				}
				var fn=listeners[evt];
				if(fn){
					fn.call(self,arg);
					if(evt.substring(0,1)=="_"){
						delete listeners[evt];
					}
				}
			}
		});
	};
	function Player(wrapper,params,conf){
		var self=this,api=null,html,commonClip,playlist=[],plugins={},listeners={},playerId,apiId,playerIndex,activeIndex,swfHeight,wrapperHeight;
		extend(self,{
			id:function(){
				return playerId;
			},
			isLoaded:function(){
				return(api!==null);
			},
			getParent:function(){
				return wrapper;
			},
			hide:function(all){
				if(all){
					wrapper.style.height="0px";
				}
				if(api){
					api.style.height="0px";
				}
				return self;
			},
			show:function(){
				wrapper.style.height=wrapperHeight+"px";
				if(api){
					api.style.height=swfHeight+"px";
				}
				return self;
			},
			isHidden:function(){
				return api&&parseInt(api.style.height,10)===0;
			},
			load:function(fn){
				if(!api&&self._fireEvent("onBeforeLoad")!==false){
					each(players,function(){
						this.unload();
					});
					html=wrapper.innerHTML;flashembed(wrapper,params,{
						config:conf
					});
					if(fn){
						fn.cached=true;
						bind(listeners,"onLoad",fn);
					}
				}
				return self;
			},
			unload:function(){
				try{
					if(api&&api.fp_isFullscreen()){
					}
				}
				catch(error){
					return;
				}
				if(api&&html.replace(/\s/g,'')!==''&&!api.fp_isFullscreen()&&self._fireEvent("onBeforeUnload")!==false){
					api.fp_close();
					wrapper.innerHTML=html;
					self._fireEvent("onUnload");
					api=null;
				}
				return self;
			},
			getClip:function(index){
				if(index===undefined){
					index=activeIndex;
				}
				return playlist[index];
			},
			getCommonClip:function(){
				return commonClip;
			},
			getPlaylist:function(){
				return playlist;
			},
			getPlugin:function(name){
				var plugin=plugins[name];
				if(!plugin&&self.isLoaded()){
					var json=self._api().fp_getPlugin(name);
					if(json){
						plugin=new Plugin(name,json,self);
						plugins[name]=plugin;
					}
				}
				return plugin;
			},
			getScreen:function(){
				return self.getPlugin("screen");
			},
			getControls:function(){
				return self.getPlugin("controls");
			},
			getConfig:function(copy){
				return copy?clone(conf):conf;
			},
			getFlashParams:function(){
				return params;
			},
			loadPlugin:function(name,url,props,fn){
				if(typeof props=='function'){
					fn=props;props={};
				}
				var fnId=fn?makeId():"_";self._api().fp_loadPlugin(name,url,props,fnId);
				var arg={};
				arg[fnId]=fn;
				var p=new Plugin(name,null,self,arg);
				plugins[name]=p;
				return p;
			},
			getState:function(){
				return api?api.fp_getState():-1;
			},
			play:function(clip){
				function play(){
					if(clip!==undefined){
						self._api().fp_play(clip);
					}
					else {
						self._api().fp_play();
					}
				}
				if(api){
					play();
				}
				else {
					self.load(function(){
						play();
					});
				}
				return self;
			},
			getVersion:function(){
				var js="flowplayer.js 3.0.5";
				if(api){
					var ver=api.fp_getVersion();
					ver.push(js);
					return ver;
				}
				return js;
			},
			_api:function(){
				if(!api){
					throw"Flowplayer "+self.id()+" not loaded. Try moving your call to player's onLoad event";
				}
				return api;
			},
			_dump:function(){
				console.log(listeners);
			},
			setClip:function(clip){
				self.setPlaylist([clip]);
			},
			getIndex:function(){
				return playerIndex;
			}
		});
		each(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,Fullscreen*,FullscreenExit,Error").split(","),function(){
			var name="on"+this;
			if(name.indexOf("*")!=-1){
				name=name.substring(0,name.length-1);
				var name2="onBefore"+name.substring(2);
				self[name2]=function(fn){
					bind(listeners,name2,fn);
					return self;
				};
			}
			self[name]=function(fn){
				bind(listeners,name,fn);
				return self;
			};
		});
		each(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,reset,close,setPlaylist").split(","),function(){
			var name=this;
			self[name]=function(arg){
				if(!api){
					return self;
				}
				var ret=(arg===undefined)?api["fp_"+name]():api["fp_"+name](arg);
				return ret=='undefined'?self:ret;
			};
		});
		self._fireEvent=function(evt,arg0,arg1,arg2){
			if(conf.debug){
				log(arguments);
			}
			if(!api&&evt=='onLoad'&&arg0=='player'){
				api=api||el(apiId);
				swfHeight=api.clientHeight;
				each(playlist,function(){
					this._fireEvent("onLoad");
				});
				each(plugins,function(name,p){
					p._fireEvent("onUpdate");
				});
				commonClip._fireEvent("onLoad");
			}
			if(evt=='onLoad'&&arg0!='player'){
				return;
			}
			if(evt=='onError'){
				if(typeof arg0=='string'||(typeof arg0=='number'&&typeof arg1=='number')){
					arg0=arg1;arg1=arg2;
				}
			}
			if(evt=='onContextMenu'){
				each(conf.contextMenu[arg0],function(key,fn){
					fn.call(self);
				});
				return;
			}
			if(evt=='onPluginEvent'){
				var name=arg0.name||arg0;
				var p=plugins[name];
				if(p){
					p._fireEvent("onUpdate",arg0);
					p._fireEvent(arg1);
				}
				return;
			}
			if(evt=='onPlaylistReplace'){
				playlist=[];
				var index=0;
				each(arg0,function(){
					playlist.push(new Clip(this,index++,self));
				});
			}
			var ret=true;
			if(typeof arg0=='number'&&arg0<playlist.length){
				activeIndex=arg0;
				var clip=playlist[arg0];
				if(clip){
					ret=clip._fireEvent(evt,arg1,arg2);
				}
				if(!clip||ret!==false){
					ret=commonClip._fireEvent(evt,arg1,arg2,clip);
				}
			}
			var i=0;
			each(listeners[evt],function(){
				ret=this.call(self,arg0,arg1);
				if(this.cached){
					listeners[evt].splice(i,1);
				}
				if(ret===false){
					return false;
				}
				i++;
			});
			return ret;
		};
		function init(){
			if($f(wrapper)){
				$f(wrapper).getParent().innerHTML="";
				playerIndex=$f(wrapper).getIndex();
				players[playerIndex]=self;
			}
			else {
				players.push(self);
				playerIndex=players.length-1;
			}
			wrapperHeight=parseInt(wrapper.style.height,10)||wrapper.clientHeight;
			if(typeof params=='string'){
				params={src:params};
			}
			playerId=wrapper.id||"fp"+makeId();
			apiId=params.id||playerId+"_api";params.id=apiId;
			conf.playerId=playerId;
			if(typeof conf=='string'){
				conf={clip:{url:conf}};
			}
			if(typeof conf.clip=='string'){
				conf.clip={url:conf.clip};
			}
			conf.clip=conf.clip||{};
			if(wrapper.getAttribute("href",2)&&!conf.clip.url){
				conf.clip.url=wrapper.getAttribute("href",2);
			}
			commonClip=new Clip(conf.clip,-1,self);
			conf.playlist=conf.playlist||[conf.clip];
			var index=0;
			each(conf.playlist,function(){
				var clip=this;
				if(typeof clip=='object'&&clip.length){
					clip=""+clip;
				}
				if(typeof clip=='string'){
					clip={url:clip};
				}
				each(conf.clip,function(key,val){
					if(conf.clip[key]!==undefined&&typeof val!='function'){
						clip[key]=val;
					}
				});
				conf.playlist[index]=clip;
				clip=new Clip(clip,index,self);
				playlist.push(clip);
				index++;
			});
			each(conf,function(key,val){
				if(typeof val=='function'){
					bind(listeners,key,val);
					delete conf[key];
				}
			});
			each(conf.plugins,function(name,val){
				if(val){
					plugins[name]=new Plugin(name,val,self);
				}
			});
			if(!conf.plugins||conf.plugins.controls===undefined){
				plugins.controls=new Plugin("controls",null,self);
			}
			params.bgcolor=params.bgcolor||"#000000";
			params.version=params.version||[9,0];
			params.expressInstall='http://www.flowplayer.org/swf/expressinstall.swf';
			function doClick(e){
				if(!self.isLoaded()&&self._fireEvent("onBeforeClick")!==false){
					self.load();
				}
				return stopEvent(e);
			}
			html=wrapper.innerHTML;
			if(html.replace(/\s/g,'')!==''){
				if(wrapper.addEventListener){
					wrapper.addEventListener("click",doClick,false);
				}
				else if(wrapper.attachEvent){
					wrapper.attachEvent("onclick",doClick);
				}
			}
			else {
				if(wrapper.addEventListener){
					wrapper.addEventListener("click",stopEvent,false);
				}
				self.load();
			}
		}
		if(typeof wrapper=='string'){
			flashembed.domReady(function(){
				var node=el(wrapper);
				if(!node){
					throw"Flowplayer cannot access element: "+wrapper;
				}
				else {
					wrapper=node;
					init();
				}
			});
		}
		else {
			init();
		}
	}
	var players=[];
	function Iterator(arr){
		this.length=arr.length;
		this.each=function(fn){
			each(arr,fn);
		};
		this.size=function(){
			return arr.length;
		};
	}
	window.flowplayer=window.$f=function(){
		var instance=null;
		var arg=arguments[0];
		if(!arguments.length){
			each(players,function(){
				if(this.isLoaded()){
					instance=this;
					return false;
				}
			});
			return instance||players[0];
		}
		if(arguments.length==1){
			if(typeof arg=='number'){
				return players[arg];
			}
			else {
				if(arg=='*'){
					return new Iterator(players);
				}
				each(players,function(){
					if(this.id()==arg.id||this.id()==arg||this.getParent()==arg){
						instance=this;
						return false;
					}
				});
				return instance;
			}
		}
		if(arguments.length>1){
			var swf=arguments[1];
			var conf=(arguments.length==3)?arguments[2]:{};
			if(typeof arg=='string'){
				if(arg.indexOf(".")!=-1){
					var instances=[];
					each(select(arg),function(){
						instances.push(new Player(this,clone(swf),clone(conf)));
					});
					return new Iterator(instances);
				}
				else {
					var node=el(arg);
					return new Player(node!==null?node:arg,swf,conf);
				}
			}
			else if(arg){
				return new Player(arg,swf,conf);
			}
		}
		return null;
	};
	extend(window.$f,{fireEvent:function(id,evt,a0,a1,a2){
		var p=$f(id);
		return p?p._fireEvent(evt,a0,a1,a2):null;
	},
	addPlugin:function(name,fn){
		Player.prototype[name]=fn;
		return $f;
	},
	each:each,extend:extend});
	if(document.all){
		window.onbeforeunload=function(){
			$f("*").each(function(){
				if(this.isLoaded()){
					this.close();
				}
			});
		};
	}
	if(typeof jQuery=='function'){
		jQuery.prototype.flowplayer=function(params,conf){
			if(!arguments.length||typeof arguments[0]=='number'){
				var arr=[];this.each(function(){
					var p=$f(this);
					if(p){
						arr.push(p);
					}
				});
				return arguments.length?arr[arguments[0]]:new Iterator(arr);
			}
			return this.each(function(){
				$f(this,clone(params),conf?clone(conf):{});
			});
		};
	}
})();
(function(){
	var jQ=typeof jQuery=='function';
	function isDomReady(){
		if(domReady.done){
			return false;
		}
		var d=document;
		if(d&&d.getElementsByTagName&&d.getElementById&&d.body){
			clearInterval(domReady.timer);
			domReady.timer=null;
			for(var i=0;i<domReady.ready.length;i++){
				domReady.ready[i].call();
			}
			domReady.ready=null;
			domReady.done=true;
		}
	}
	var domReady=jQ?jQuery:function(f){
		if(domReady.done){
			return f();
		}
		if(domReady.timer){
			domReady.ready.push(f);
		}
		else {
			domReady.ready=[f];
			domReady.timer=setInterval(isDomReady,13);
		}
	};
	function extend(to,from){
		if(from){
			for(key in from){
				if(from.hasOwnProperty(key)){
					to[key]=from[key];
				}
			}
		}
		return to;
	}
	function asString(obj){
		switch(typeOf(obj)){
			case'string':obj=obj.replace(new RegExp('(["\\\\])','g'),'\\$1');
			obj=obj.replace(/^\s?(\d+)%/,"$1pct");
			return'"'+obj+'"';case'array':return'['+map(obj,function(el){
				return asString(el);
			}).join(',')+']';
			case'function':return'"function()"';
			case'object':var str=[];
			for(var prop in obj){
				if(obj.hasOwnProperty(prop)){
					str.push('"'+prop+'":'+asString(obj[prop]));
				}
			}
			return'{'+str.join(',')+'}';
		}
		return String(obj).replace(/\s/g," ").replace(/\'/g,"\"");
	}
	function typeOf(obj){
		if(obj===null||obj===undefined){
			return false;
		}
		var type=typeof obj;
		return(type=='object'&&obj.push)?'array':type;
	}
	if(window.attachEvent){
		window.attachEvent("onbeforeunload",function(){
			__flash_unloadHandler=function(){};
			__flash_savedUnloadHandler=function(){};
		});
	}
	function map(arr,func){
		var newArr=[];
		for(var i in arr){
			if(arr.hasOwnProperty(i)){
				newArr[i]=func(arr[i]);
			}
		}
		return newArr;
	}
	function getHTML(p,c){
		var ie=document.all;
		var html='<object width="'+p.width+'" height="'+p.height+'"';
		if(ie&&!p.id){
			p.id="_"+(""+Math.random()).substring(9);
		}
		if(p.id){
			html+=' id="'+p.id+'"';
		}
		if(p.w3c||!ie){
			html+=' data="'+p.src+'" type="application/x-shockwave-flash"';
		}
		else {
			html+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
		}
		html+='>';
		if(p.w3c||ie){
			html+='<param name="movie" value="'+p.src+'" />';
		}
		var e=extend({},p);
		e.width=e.height=e.id=e.w3c=e.src=null;
		for(var k in e){
			if(e[k]!==null){
				html+='<param name="'+k+'" value="'+e[k]+'" />';
			}
		}
		var vars="";
		if(c){
			for(var key in c){
				if(c[key]!==null){
					vars+=key+'='+(typeof c[key]=='object'?asString(c[key]):c[key])+'&';
				}
			}
			vars=vars.substring(0,vars.length-1);
			html+='<param name="flashvars" value=\''+vars+'\' />';
		}
		html+="</object>";
		return html;
	}
	function Flash(root,opts,flashvars){
		var version=flashembed.getVersion();
		extend(this,{getContainer:function(){
			return root;
		},
		getConf:function(){
			return conf;
		},
		getVersion:function(){
			return version;
		},
		getFlashvars:function(){
			return flashvars;
		},
		getApi:function(){
			return root.firstChild;
		},
		getHTML:function(){
			return getHTML(opts,flashvars);
		}});
		var required=opts.version;
		var express=opts.expressInstall;
		var ok=!required||flashembed.isSupported(required);
		if(ok){
			opts.onFail=opts.version=opts.expressInstall=null;
			root.innerHTML=getHTML(opts,flashvars);
		}
		else if(required&&express&&flashembed.isSupported([6,65])){
			extend(opts,{src:express});
			flashvars={MMredirectURL:location.href,MMplayerType:'PlugIn',MMdoctitle:document.title};
			root.innerHTML=getHTML(opts,flashvars);
		}
		else {
			if(root.innerHTML.replace(/\s/g,'')!==''){
			}
			else {
				root.innerHTML="<h2>Flash version "+required+" or greater is required</h2>"+"<h3>"+(version[0]>0?"Your version is "+version:"You have no flash plugin installed")+"</h3>"+"<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>";
			}
		}
		if(!ok&&opts.onFail){
			var ret=opts.onFail.call(this);
			if(typeof ret=='string'){
				root.innerHTML=ret;
			}
		}
	}
	window.flashembed=function(root,conf,flashvars){
		if(typeof root=='string'){
			var el=document.getElementById(root);
			if(el){
				root=el;
			}
			else {
				domReady(function(){
					flashembed(root,conf,flashvars);
				});
				return;
			}
		}
		if(!root){
			return;
		}
		var opts={width:'100%',height:'100%',allowfullscreen:true,allowscriptaccess:'always',quality:'high',version:null,onFail:null,expressInstall:null,w3c:false};
		if(typeof conf=='string'){
			conf={src:conf};
		}
		extend(opts,conf);return new Flash(root,opts,flashvars);
	};
	extend(window.flashembed,{
		getVersion:function(){
			var version=[0,0];
			if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){
				var _d=navigator.plugins["Shockwave Flash"].description;
				if(typeof _d!="undefined"){
					_d=_d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");
					var _m=parseInt(_d.replace(/^(.*)\..*$/,"$1"),10);
					var _r=/r/.test(_d)?parseInt(_d.replace(/^.*r(.*)$/,"$1"),10):0;
					version=[_m,_r];
				}
			}
			else if(window.ActiveXObject){
				try{
					var _a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
				}
				catch(e){
					try{
						_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
						version=[6,0];
						_a.AllowScriptAccess="always";
					}
					catch(ee){
						if(version[0]==6){
							return;
						}
					}
					try{
						_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
					}
					catch(eee){}
				}
				if(typeof _a=="object"){
					_d=_a.GetVariable("$version");
					if(typeof _d!="undefined"){
						_d=_d.replace(/^\S+\s+(.*)$/,"$1").split(",");
						version=[parseInt(_d[0],10),parseInt(_d[2],10)];
					}
				}
			}
			return version;
		},
		isSupported:function(version){
			var now=flashembed.getVersion();
			var ret=(now[0]>version[0])||(now[0]==version[0]&&now[1]>=version[1]);
			return ret;
		},
		domReady:domReady,asString:asString,getHTML:getHTML
	});
	if(jQ){
		jQuery.prototype.flashembed=function(conf,flashvars){
			return this.each(function(){
				flashembed(this,conf,flashvars);
			});
		};
	}
})();
