/**
 * videoplayer.js
 * @autor: m_simard
 * @since: 25-Oct-2010  12:39:26 PM
 * @version $Id: videoplayer.js, #1 25-Oct-2010  12:39:26 PM m_simard $
 * This jQuery plugin instanciate flowplayer in HTTP mode (480p/720p) on our tour platform
 *
 */
 (function($){
// Default Setting
var settings = {
    player_http: 'http://static.brazzers.com/player/flowplayer.commercial-http.swf',
    player_rtmp: 'http://static.brazzers.com/player/flowplayer.commercial-rtmp.swf?v=1',
    player_url: 'http://static.brazzers.com/player/flowplayer.commercial-http.swf',
    image_loader: 'http://static.brazzers.com/player/FPImageLoader.swf',
	image_loader_default_image: 'http://static.brazzers.com/player/player_default_768x432b.jpg',
    width: '100%',
    height: '100%',
    quality: '480', // 480 or 720
    mode: 'http', // http or rtmp
    autoplay: false,
    player_image_name: '975x548.jpg',
    player_image: false, // path for bg image
	player_key:null, // license key of the player
	goto:null, // this will lead to join page
	error_url: null, // this will lead to error url in case of error
	label:null, // player label text
	notrailer:null, // file not found state
	imgExist:true, // img found state
    scroll_hack:true,
	scroll_hack_pos:0	
};
// Bitrates per Quality
$.fn.videoplayerbitrates = {
    'mp4': { 480: 2000, 720: 2600},
    'f4v': { 432: 2000, 720: 3000}
};

var methods = {

	/**
	* @member videoplayer    	
	* @return this dependency object		
	* Usage: $(selector).videoplayer("init", params); if you want to prepare a player information before it instantiated in the browser. 	
	* Prepare, Analyse and Associate the video information located in the DOM to the videoplayer function. 
	**/		
	init: function ( options )
    {
        var elements = this;
      
         //Loop in Chain element
        return this.each(function()
        {
            var $this = $(this),
                params = $.extend(settings, options);

            // Verify scene data : an attribute scenedata must exist on the videoplayer element and a object on the site must have an ID assign with the same value
            if($this.attr("scenedata") == '' && $("#"+$this.attr("scenedata")).size() == 0) return false;

            var scene_data = eval('(' + $("#"+$this.attr("scenedata")).html() + ')');

            if(params.goto)
            {
                params.notrailer = true;
            }

            if(!params.player_image)
            {                       
                params.player_image = "http://i1.bzpics.com/scenes/" + scene_data.scene.id + "/" + params.player_image_name;
            }

            $this.data("scene_data", scene_data)
                 .data("params", params)
                 .data("state", 1);
        }); 
    },  
    
	/**
	* @member videoplayer    	
	* @return false		
	* Usage: $(selector).videoplayer("render", params); or $(selector).videoplayer("render") if the initialisation of the player was already done before. 
	* Initiate a videoplayer in default mode. 
	**/		
    render: function (arguments)
    {
        parent_arguments = new Array(arguments);
        var body = $('body');

        //Loop in Chain element
        return this.each(function()
        {
               var $this = $(this);
				
               // trigger init function if it was never called.
               if(!$this.data("state")){methods.init.apply($this, parent_arguments);}

               var date = new Date();
			   $this.data("loadstart", date.getTime());
            
               var params = $this.data("params");
			  
               // does image were already verified
               if(!params.imgExist)
               {
                  //methods.imageExist.apply($this, parent_arguments);
                  //return false; // If not the process will loop over again.				  
               }

               var scene_data = $this.data("scene_data"),
                   httpfile;

               var playObj = {
                       playlist:[],
                       plugins:{ }
                   };

               // Find trailer based on quality specification
               try{
                   if(!params.notrailer)
                   {
                       if(scene_data['trailer']['http'][480])
                       {
                            var extension = 'mp4';
                       }
                       else
                       {
                            var extension = 'f4v';
                            if(params.quality == 480) params.quality = 432;
                       }

                       if(params.mode == 'http')
                       {
                           // if we don't have the file try the old format support
                           if(scene_data['trailer']['http'][params.quality][extension][$.fn.videoplayerbitrates[extension][params.quality]])
                            httpfile = scene_data['trailer']['http'][params.quality][extension][$.fn.videoplayerbitrates[extension][params.quality]]['url'];
                           else{
                            httpfile = scene_data['trailer']['http'][params.quality][extension][0]['url'];
                           }

                           var clipobj = {
                            autoPlay  : params.autoplay,
                            scaling   : 'fit',
                            provider  : 'pseudostreaming',
                            url       : httpfile
                           };
                       }
                       else
                       {
						   // Use rtmp player
						   params.player_url = params.player_rtmp;
                           //Last attempt to play a video - old support for flv format.
                           httpfile = scene_data['trailer']['rtmp'][params.quality][extension][$.fn.videoplayerbitrates[extension][params.quality]];
                           var clipobj = {
                                autoPlay  : params.autoplay,
                                scaling   : 'fit',
                                provider  : 'rtmp',
                                url       : httpfile
                           };
                           playObj.plugins.rtmp = {
                            netConnectionUrl:  scene_data['trailer']['rtmp']['connection']
                           };
                       }
                   }
				} 
				catch(e)
				{
                    try{
                        if(scene_data['trailer']['http'][480]['wmv'])
                        {
                           httpfile = scene_data['trailer']['http'][480]['wmv'][0]['url'].replace("wmv", "flv");
                           var clipobj = {
                            autoPlay  : params.autoplay,
                            scaling   : 'fit',
                            provider  : 'pseudostreaming',
                            url       : httpfile
                           }; 
                        }else
                        {
                          throw "no-flv";  
                        }                           
                    }   
                    catch(e)
                    {
					    params.notrailer = true;					                  
					    methods.errorHandler.apply($this, [404, 'File not found']);
                     }
				}   

			   // Prepare overlay label
               if(params.label)
               {				  
				   var toppos = params.goto ? 240 : 310,
				       pfontsize = params.goto ? 40 : 28;	 
			   
                   playObj.plugins.content = {
                       top:toppos,
                       height:50,
                       display:'block',
                       border: 'none',
                       background: 'transparent',
                       backgroundGradient: [0,0],
                       color: '#ffffff',
                       textDecoration:'outline',
                       opacity:0.9,
                       style: {
                           'p': {
                               fontFamily: 'Arial',
                               fontWeight: 'bold',
                               fontSize: pfontsize,
                               textAlign: 'center',
                               color: '#ffffff',
                               cursor: 'pointer'
                           }
                       },
                       html: '<p>' + params.label + '</p>',
                       onClick: function(){                            
                            if(!params.notrailer){fp.play();}else {window.location = params.goto;}
                       }
                   }; 
				   if(!params.goto)
				   {
					playObj.play = {replayLabel: ''};
				   }
				   else
				   {
					playObj.play = null;
				   }
               }

               // push the image to the player
               if (!params.autoplay)
               {
                   if(params.imgExist === true)
                   {                       
                       //playObj.playlist.push({scaling: 'fit', url: params.player_image, autoplay:false, linkUrl  : params.goto});
                       playObj.playlist.push({scaling: 'fit', url: params.image_loader,  linkUrl  : params.goto});
					   playObj.splash = {};
					   playObj.splash.img    =  params.player_image;
					   playObj.splash.fallback 	= params.image_loader_default_image;
					   
                   }
                   else if(!params.notrailer)
				   {
                       clipobj.autoPlay = true;   
                   }
               }
               
			   // Bind The Clip and the JS Events to the player only if a trailer clip exist
               if(!params.notrailer)
			   {			   
				  // The videobufferingstart event handler
                  clipobj.onBegin  = function(e){                      
						var date = new Date();						
						$this.data("bufferstart", date.getTime());						
						if(fp.getPlugin('content')) fp.getPlugin('content').hide();
						body.trigger("videoplayer.begin");
                  };				  
				  // The videostreamingstart event handler
                  clipobj.onStart  = function(e){
						var date = new Date();
						$this.data("bufferingdone", date.getTime());						
						methods.bufferingtime.apply($this, arguments);
						body.trigger("videoplayer.start");
				  };
				  // The video pause event handler
                  clipobj.onPause  = function(e){
					    body.trigger("videoplayer.pause")
				  };
				  // The video resume event handler
                  clipobj.onResume = function(e){
                        if(fp.getPlugin('content')) fp.getPlugin('content').hide();
                        body.trigger("videoplayer.resume");
                  };
				  // The video seek event handler
                  clipobj.onSeek   = function(e){
						body.trigger("videoplayer.seek")
				  };
				  // The video finish event handler
                  clipobj.onFinish = function(e){                      
					    body.trigger("videoplayer.finish");
				  };		  
				
                  // push the video clip to the player
                  playObj.playlist.push(clipobj);				 

                  // push another time the image for after preview.
                  if(params.imgExist === true)
                  {                      
                    //playObj.playlist.push({scaling: 'fit', url: params.player_image, autoplay:false});
					playObj.playlist.push({scaling: 'fit', url: params.image_loader});					
                  }				 
               }
			   
			  //Bind a custom error handler to the player
			  playObj.onError = methods.errorHandler;
              //playObj.onLoad  = methods.loadHandler;
			   
			   // Send License Key
               if(params.player_key)
               {
                    playObj.key = params.player_key;
               }                                     
                          
			   // Instanciate the player          
               fp = $f(this, {
					src: params.player_url, 
					wmode: 'transparent', 
					cachebusting:false, 
					width:params.width, 
					height:params.height
					
					}, playObj);
        });
    },
    
	/**
	* @member videoplayer    	
	* @return false		
	* Usage: $(selector).videoplayer("render480p", params); or $(selector).videoplayer("render480p") if the initialisation of the player was already done before. 
	* Initiate a videoplayer in 480p mode. 
	**/	
    render480: function (arguments)
    {
       parent_arguments = new Array(arguments);
        var body = $('body');
        //Loop in Chain element
        return this.each(function()
        {
			var $this = $(this);

            // trigger init function if it was never called.
            if(!$this.data("state")){methods.init.apply($this, parent_arguments);}

            var params = $this.data("params"),
        
            // force quality option
            params = $this.data("params");
            params.quality = 480;
            $this.data("params", params);
            // render videoplayer
            methods.render.apply($this, new Array(arguments));
        });
    },
	
	/**
	* @member videoplayer    	
	* @return false		
	* Usage: $(selector).videoplayer("render720p", params); or $(selector).videoplayer("render720p") if the initialisation of the player was already done before. 
	* Initiate a videoplayer in 720p mode. 
	**/	
    render720: function (arguments)
    {
        parent_arguments = new Array(arguments);
        var body = $('body');
        //Loop in Chain element
        return this.each(function()
        {
			var $this = $(this);

            // trigger init function if it was never called.
            if(!$this.data("state")){methods.init.apply($this, parent_arguments);}
            
            var params = $this.data("params");    
             
            // force quality option
            params.quality = 720;              
            $this.data("params", params);
            // render videoplayer
            methods.render.apply($this, new Array(arguments));
        });
    },
	
	/**
	* @member videoplayer    	
	* @return this
	* Usage: $(selector).videoplayer("renderHTML5", params);
	* Initiate a videoplayer in HTML5 mode.
	**/	
    renderHTML5: function (arguments)
    {
		parent_arguments = new Array(arguments);
        var body = $('body');
        //Loop in Chain element
        return this.each(function()
        {		
			var $this = $(this);

            // trigger init function if it was never called.
            if(!$this.data("state")){methods.init.apply($this, parent_arguments);}

            var params = $this.data("params"),
                scene_data = $this.data("scene_data");

			try
			{
                // video format optimized for Ipad support
				var httpfile = scene_data['trailer']['http'][368]['mp4'][0]['url'];
			}
			catch(err)
			{ 
				$this.data("params", params);
				methods.errorHandler.apply($this, [4040, 'Ipad format not found']);
				if(!params.error_url){
					if(params.goto) params.error_url = params.go_to;
					else params.error_url = "#";				
				}				
				$this.html('<a href="' + params.error_url  + '" style="position: relative; width:768px; height: 432px; cursor:pointer; background-image: url(\''+ params.player_image +'\'); "><img src="http://scripts.bzpics.com/tours/bzn/tour3/images/btn/bigplay_btn.png" width="105" height="105" style="position: absolute; left: 336px; top:166px"></a>');		
				return false;
			}
			      
			if(!params.goto)
            {
				$this.html('<video controls width="100%" height="100%" src="'+httpfile+'"></video>');
			}
			else
			{
				$this.html('<a href="' + params.goto + '" style="display:block;position: relative; width:100%; height: 100%; cursor:pointer; background-image: url(\''+ params.player_image +'\'); "><img src="http://scripts.bzpics.com/tours/bzn/tour3/images/btn/bigplay_btn.png" style="height:105px;width:105px;display:block;position:relative;margin:0 auto;top:50%;"></a>');		
			}
			return false;   
		});			
    },	
	/**
	* @member videoplayer		
	* @return false		
	* Usage: is triggered only if params.imgExist is set to false
	* This is a function that prevent 404 img request on the flash object. In the case the url is wrong we force autoplay the video. 
	**/		
    imageExist: function(arguments)
    {
		parent_arguments = new Array(arguments);

        //Loop in Chain element
        return this.each(function()
        {
            $this = $(this);
            params = $this.data("params");
            $('<img />').load(function(){
               params.imgExist = true;
               $this.data("params", params);
               methods.render.apply($this, parent_arguments);
            })
            .error(function(){
              params.imgExist = 'badfile';
              params.autoplay = true;
              $this.data("params", params);
              methods.render.apply($this, parent_arguments );
            })
            .attr('src', params.player_image);
        });
    },

    
		
	/**
	* @member videoplayer		
	* @return false		
	* Usage: Is used via the start clip event handler of the player
	* Report a calculated the buffering time taken to start displaying the video to our stats server. 
	**/	
	bufferingtime: function()
	{
		$this = $(this);
		var bufferstart = $this.data("bufferstart"),	
		    bufferdone = $this.data("bufferingdone");
		    
	    if(!bufferstart || !bufferdone) return false;
		// video start - buffer start time = buffering laps time
		var buffertime = bufferdone - bufferstart,	
		    scene_data =  $this.data("scene_data"),
            params = $this.data("params");

        var event = (params.mode == 'http') ? "videoplayer.tour.http.3sbuffering" : "videoplayer.tour.rtmp.3sbuffering" ;

		// Send bufferingtime to stats server if ST is defined
		window._ST = window._ST || [];				
		window._ST.push(['_event', "videoplayer", event, "site:" + scene_data.scene.site.id + ",scene:" + scene_data.scene.id , buffertime]);
		return false;
	},

    /**
	* @member videoplayer
	* @return false
	* Usage: Trigger on player ready
	* Report a calculated the average time taken to start displaying the video to our stats server. 
	**/
	loadHandler: function()
	{      
		var loadstart = $this.data("loadstart");
	    if(!loadstart) return false;

        var date = new Date();
	    var loaddone =  date.getTime();	
		// loaddone - loadstart = buffering laps time
		var loadtime = loaddone - loadstart,
		    scene_data =  $this.data("scene_data"),
            params = $this.data("params");
		// Send loadtime to stats server if ST is defined          
		window._ST = window._ST || [];
		window._ST.push(['_event', "videoplayer", "videoplayer.tour.loadtime" , params.mode , loadtime]);  
              
		return false;
	},
	
	/**
	* @member videoplayer	
	* @param errorCode integer Error Code to monitor
	* @param errorMessage string Error Message
	* @return false		
	* Usage: Binded on the player via a event handler. Can be used in the plugin for try/catch JS error as well. 
	* Report an error type to our stats server and redirect the user to a error url if the player have a defined url.
	**/	
	errorHandler: function(errorCode, errorMessage)
	{
		$this = $(this);
        var scene_data = $this.data("scene_data"),
            params = $this.data("params");        
		// Send error type to stats server if ST is defined

        var event = (params.mode == 'http') ? "videoplayer.tour.http.error."  : "videoplayer.tour.rtmp.error." ;

		window._ST = window._ST || [];
		window._ST.push(['_event', "videoplayer", event + errorCode, "site:" + scene_data.scene.site.id + ",scene:" + scene_data.scene.id , 1]);

        if(params.error_url){
         setTimeout(function(){window.location = params.error_url;}, 1000); 
        }
		return false;
	}
};

// Generates the FlowPlayer Flash object
jQuery.fn.videoplayer = function(method, params){
    if ( methods[method] )
    {
     return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    }
    else if ( typeof method === 'object' || ! method )
    {
     return methods.init.apply( this, arguments );
    }
    else
    {
     $.error( 'Method ' +  method + ' does not exist on jQuery.videoplayer' );
    }
};

     
})(jQuery);


/*
 * flowplayer.js 3.2.4. 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/>.
 *
 * Date: 2010-08-25 12:48:46 +0000 (Wed, 25 Aug 2010)
 * Revision: 551
 */
(function(){function g(o){console.log("$f.fireEvent",[].slice.call(o))}function k(q){if(!q||typeof q!="object"){return q}var o=new q.constructor();for(var p in q){if(q.hasOwnProperty(p)){o[p]=k(q[p])}}return o}function m(t,q){if(!t){return}var o,p=0,r=t.length;if(r===undefined){for(o in t){if(q.call(t[o],o,t[o])===false){break}}}else{for(var s=t[0];p<r&&q.call(s,p,s)!==false;s=t[++p]){}}return t}function c(o){return document.getElementById(o)}function i(q,p,o){if(typeof p!="object"){return q}if(q&&p){m(p,function(r,s){if(!o||typeof s!="function"){q[r]=s}})}return q}function n(s){var q=s.indexOf(".");if(q!=-1){var p=s.slice(0,q)||"*";var o=s.slice(q+1,s.length);var r=[];m(document.getElementsByTagName(p),function(){if(this.className&&this.className.indexOf(o)!=-1){r.push(this)}});return r}}function f(o){o=o||window.event;if(o.preventDefault){o.stopPropagation();o.preventDefault()}else{o.returnValue=false;o.cancelBubble=true}return false}function j(q,o,p){q[o]=q[o]||[];q[o].push(p)}function e(){return"_"+(""+Math.random()).slice(2,10)}var h=function(t,r,s){var q=this,p={},u={};q.index=r;if(typeof t=="string"){t={url:t}}i(this,t,true);m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){var v="on"+this;if(v.indexOf("*")!=-1){v=v.slice(0,v.length-1);var w="onBefore"+v.slice(2);q[w]=function(x){j(u,w,x);return q}}q[v]=function(x){j(u,v,x);return q};if(r==-1){if(q[w]){s[w]=q[w]}if(q[v]){s[v]=q[v]}}});i(this,{onCuepoint:function(x,w){if(arguments.length==1){p.embedded=[null,x];return q}if(typeof x=="number"){x=[x]}var v=e();p[v]=[x,w];if(s.isLoaded()){s._api().fp_addCuepoints(x,r,v)}return q},update:function(w){i(q,w);if(s.isLoaded()){s._api().fp_updateClip(w,r)}var v=s.getConfig();var x=(r==-1)?v.clip:v.playlist[r];i(x,w,true)},_fireEvent:function(v,y,w,A){if(v=="onLoad"){m(p,function(B,C){if(C[0]){s._api().fp_addCuepoints(C[0],r,B)}});return false}A=A||q;if(v=="onCuepoint"){var z=p[y];if(z){return z[1].call(s,A,w)}}if(y&&"onBeforeBegin,onMetaData,onStart,onUpdate,onResume".indexOf(v)!=-1){i(A,y);if(y.metaData){if(!A.duration){A.duration=y.metaData.duration}else{A.fullDuration=y.metaData.duration}}}var x=true;m(u[v],function(){x=this.call(s,A,y,w)});return x}});if(t.onCuepoint){var o=t.onCuepoint;q.onCuepoint.apply(q,typeof o=="function"?[o]:o);delete t.onCuepoint}m(t,function(v,w){if(typeof w=="function"){j(u,v,w);delete t[v]}});if(r==-1){s.onCuepoint=this.onCuepoint}};var l=function(p,r,q,t){var o=this,s={},u=false;if(t){i(s,t)}m(r,function(v,w){if(typeof w=="function"){s[v]=w;delete r[v]}});i(this,{animate:function(y,z,x){if(!y){return o}if(typeof z=="function"){x=z;z=500}if(typeof y=="string"){var w=y;y={};y[w]=z;z=500}if(x){var v=e();s[v]=x}if(z===undefined){z=500}r=q._api().fp_animate(p,y,z,v);return o},css:function(w,x){if(x!==undefined){var v={};v[w]=x;w=v}r=q._api().fp_css(p,w);i(o,r);return o},show:function(){this.display="block";q._api().fp_showPlugin(p);return o},hide:function(){this.display="none";q._api().fp_hidePlugin(p);return o},toggle:function(){this.display=q._api().fp_togglePlugin(p);return o},fadeTo:function(y,x,w){if(typeof x=="function"){w=x;x=500}if(w){var v=e();s[v]=w}this.display=q._api().fp_fadeTo(p,y,x,v);this.opacity=y;return o},fadeIn:function(w,v){return o.fadeTo(1,w,v)},fadeOut:function(w,v){return o.fadeTo(0,w,v)},getName:function(){return p},getPlayer:function(){return q},_fireEvent:function(w,v,x){if(w=="onUpdate"){var z=q._api().fp_getPlugin(p);if(!z){return}i(o,z);delete o.methods;if(!u){m(z.methods,function(){var B=""+this;o[B]=function(){var C=[].slice.call(arguments);var D=q._api().fp_invoke(p,B,C);return D==="undefined"||D===undefined?o:D}});u=true}}var A=s[w];if(A){var y=A.apply(o,v);if(w.slice(0,1)=="_"){delete s[w]}return y}return o}})};function b(q,G,t){var w=this,v=null,D=false,u,s,F=[],y={},x={},E,r,p,C,o,A;i(w,{id:function(){return E},isLoaded:function(){return(v!==null&&v.fp_play!==undefined&&!D)},getParent:function(){return q},hide:function(H){if(H){q.style.height="0px"}if(w.isLoaded()){v.style.height="0px"}return w},show:function(){q.style.height=A+"px";if(w.isLoaded()){v.style.height=o+"px"}return w},isHidden:function(){return w.isLoaded()&&parseInt(v.style.height,10)===0},load:function(J){if(!w.isLoaded()&&w._fireEvent("onBeforeLoad")!==false){var H=function(){u=q.innerHTML;if(u&&!flashembed.isSupported(G.version)){q.innerHTML=""}if(J){J.cached=true;j(x,"onLoad",J)}flashembed(q,G,{config:t})};var I=0;m(a,function(){this.unload(function(K){if(++I==a.length){H()}})})}return w},unload:function(J){if(this.isFullscreen()&&/WebKit/i.test(navigator.userAgent)){if(J){J(false)}return w}if(u.replace(/\s/g,"")!==""){if(w._fireEvent("onBeforeUnload")===false){if(J){J(false)}return w}D=true;try{if(v){v.fp_close();w._fireEvent("onUnload")}}catch(H){}var I=function(){v=null;q.innerHTML=u;D=false;if(J){J(true)}};setTimeout(I,50)}else{if(J){J(false)}}return w},getClip:function(H){if(H===undefined){H=C}return F[H]},getCommonClip:function(){return s},getPlaylist:function(){return F},getPlugin:function(H){var J=y[H];if(!J&&w.isLoaded()){var I=w._api().fp_getPlugin(H);if(I){J=new l(H,I,w);y[H]=J}}return J},getScreen:function(){return w.getPlugin("screen")},getControls:function(){return w.getPlugin("controls")._fireEvent("onUpdate")},getLogo:function(){try{return w.getPlugin("logo")._fireEvent("onUpdate")}catch(H){}},getPlay:function(){return w.getPlugin("play")._fireEvent("onUpdate")},getConfig:function(H){return H?k(t):t},getFlashParams:function(){return G},loadPlugin:function(K,J,M,L){if(typeof M=="function"){L=M;M={}}var I=L?e():"_";w._api().fp_loadPlugin(K,J,M,I);var H={};H[I]=L;var N=new l(K,null,w,H);y[K]=N;return N},getState:function(){return w.isLoaded()?v.fp_getState():-1},play:function(I,H){var J=function(){if(I!==undefined){w._api().fp_play(I,H)}else{w._api().fp_play()}};if(w.isLoaded()){J()}else{if(D){setTimeout(function(){w.play(I,H)},50)}else{w.load(function(){J()})}}return w},getVersion:function(){var I="flowplayer.js 3.2.4";if(w.isLoaded()){var H=v.fp_getVersion();H.push(I);return H}return I},_api:function(){if(!w.isLoaded()){throw"Flowplayer "+w.id()+" not loaded when calling an API method"}return v},setClip:function(H){w.setPlaylist([H]);return w},getIndex:function(){return p},_swfHeight:function(){return v.clientHeight}});m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut").split(","),function(){var H="on"+this;if(H.indexOf("*")!=-1){H=H.slice(0,H.length-1);var I="onBefore"+H.slice(2);w[I]=function(J){j(x,I,J);return w}}w[H]=function(J){j(x,H,J);return w}});m(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip,playFeed,setKeyboardShortcutsEnabled,isKeyboardShortcutsEnabled").split(","),function(){var H=this;w[H]=function(J,I){if(!w.isLoaded()){return w}var K=null;if(J!==undefined&&I!==undefined){K=v["fp_"+H](J,I)}else{K=(J===undefined)?v["fp_"+H]():v["fp_"+H](J)}return K==="undefined"||K===undefined?w:K}});w._fireEvent=function(Q){if(typeof Q=="string"){Q=[Q]}var R=Q[0],O=Q[1],M=Q[2],L=Q[3],K=0;if(t.debug){g(Q)}if(!w.isLoaded()&&R=="onLoad"&&O=="player"){v=v||c(r);o=w._swfHeight();m(F,function(){this._fireEvent("onLoad")});m(y,function(S,T){T._fireEvent("onUpdate")});s._fireEvent("onLoad")}if(R=="onLoad"&&O!="player"){return}if(R=="onError"){if(typeof O=="string"||(typeof O=="number"&&typeof M=="number")){O=M;M=L}}if(R=="onContextMenu"){m(t.contextMenu[O],function(S,T){T.call(w)});return}if(R=="onPluginEvent"||R=="onBeforePluginEvent"){var H=O.name||O;var I=y[H];if(I){I._fireEvent("onUpdate",O);return I._fireEvent(M,Q.slice(3))}return}if(R=="onPlaylistReplace"){F=[];var N=0;m(O,function(){F.push(new h(this,N++,w))})}if(R=="onClipAdd"){if(O.isInStream){return}O=new h(O,M,w);F.splice(M,0,O);for(K=M+1;K<F.length;K++){F[K].index++}}var P=true;if(typeof O=="number"&&O<F.length){C=O;var J=F[O];if(J){P=J._fireEvent(R,M,L)}if(!J||P!==false){P=s._fireEvent(R,M,L,J)}}m(x[R],function(){P=this.call(w,O,M);if(this.cached){x[R].splice(K,1)}if(P===false){return false}K++});return P};function B(){if($f(q)){$f(q).getParent().innerHTML="";p=$f(q).getIndex();a[p]=w}else{a.push(w);p=a.length-1}A=parseInt(q.style.height,10)||q.clientHeight;E=q.id||"fp"+e();r=G.id||E+"_api";G.id=r;t.playerId=E;if(typeof t=="string"){t={clip:{url:t}}}if(typeof t.clip=="string"){t.clip={url:t.clip}}t.clip=t.clip||{};if(q.getAttribute("href",2)&&!t.clip.url){t.clip.url=q.getAttribute("href",2)}s=new h(t.clip,-1,w);t.playlist=t.playlist||[t.clip];var I=0;m(t.playlist,function(){var K=this;if(typeof K=="object"&&K.length){K={url:""+K}}m(t.clip,function(L,M){if(M!==undefined&&K[L]===undefined&&typeof M!="function"){K[L]=M}});t.playlist[I]=K;K=new h(K,I,w);F.push(K);I++});m(t,function(K,L){if(typeof L=="function"){if(s[K]){s[K](L)}else{j(x,K,L)}delete t[K]}});m(t.plugins,function(K,L){if(L){y[K]=new l(K,L,w)}});if(!t.plugins||t.plugins.controls===undefined){y.controls=new l("controls",null,w)}y.canvas=new l("canvas",null,w);u=q.innerHTML;function J(L){var K=w.hasiPadSupport&&w.hasiPadSupport();if(/iPad|iPhone|iPod/i.test(navigator.userAgent)&&!/.flv$/i.test(F[0].url)&&!K){return true}if(!w.isLoaded()&&w._fireEvent("onBeforeClick")!==false){w.load()}return f(L)}function H(){if(u.replace(/\s/g,"")!==""){if(q.addEventListener){q.addEventListener("click",J,false)}else{if(q.attachEvent){q.attachEvent("onclick",J)}}}else{if(q.addEventListener){q.addEventListener("click",f,false)}w.load()}}setTimeout(H,0)}if(typeof q=="string"){var z=c(q);if(!z){throw"Flowplayer cannot access element: "+q}q=z;B()}else{B()}}var a=[];function d(o){this.length=o.length;this.each=function(p){m(o,p)};this.size=function(){return o.length}}window.flowplayer=window.$f=function(){var p=null;var o=arguments[0];if(!arguments.length){m(a,function(){if(this.isLoaded()){p=this;return false}});return p||a[0]}if(arguments.length==1){if(typeof o=="number"){return a[o]}else{if(o=="*"){return new d(a)}m(a,function(){if(this.id()==o.id||this.id()==o||this.getParent()==o){p=this;return false}});return p}}if(arguments.length>1){var t=arguments[1],q=(arguments.length==3)?arguments[2]:{};if(typeof t=="string"){t={src:t}}t=i({bgcolor:"#000000",version:[9,0],expressInstall:"http://static.flowplayer.org/swf/expressinstall.swf",cachebusting:true},t);if(typeof o=="string"){if(o.indexOf(".")!=-1){var s=[];m(n(o),function(){s.push(new b(this,k(t),k(q)))});return new d(s)}else{var r=c(o);return new b(r!==null?r:o,t,q)}}else{if(o){return new b(o,t,q)}}}return null};i(window.$f,{fireEvent:function(){var o=[].slice.call(arguments);var q=$f(o[0]);return q?q._fireEvent(o.slice(1)):null},addPlugin:function(o,p){b.prototype[o]=p;return $f},each:m,extend:i});if(typeof jQuery=="function"){jQuery.fn.flowplayer=function(q,p){if(!arguments.length||typeof arguments[0]=="number"){var o=[];this.each(function(){var r=$f(this);if(r){o.push(r)}});return arguments.length?o[arguments[0]]:new d(o)}return this.each(function(){$f(this,k(q),p?k(p):{})})}}})();(function(){var h=document.all,j="http://www.adobe.com/go/getflashplayer",c=typeof jQuery=="function",e=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,b={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:false,cachebusting:false};if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}})}function i(m,l){if(l){for(var f in l){if(l.hasOwnProperty(f)){m[f]=l[f]}}}return m}function a(f,n){var m=[];for(var l in f){if(f.hasOwnProperty(l)){m[l]=n(f[l])}}return m}window.flashembed=function(f,m,l){if(typeof f=="string"){f=document.getElementById(f.replace("#",""))}if(!f){return}if(typeof m=="string"){m={src:m}}return new d(f,i(i({},b),m),l)};var g=i(window.flashembed,{conf:b,getVersion:function(){var m,f;try{f=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(o){try{m=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");f=m&&m.GetVariable("$version")}catch(n){try{m=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");f=m&&m.GetVariable("$version")}catch(l){}}}f=e.exec(f);return f?[f[1],f[3]]:[0,0]},asString:function(l){if(l===null||l===undefined){return null}var f=typeof l;if(f=="object"&&l.push){f="array"}switch(f){case"string":l=l.replace(new RegExp('(["\\\\])',"g"),"\\$1");l=l.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return'"'+l+'"';case"array":return"["+a(l,function(o){return g.asString(o)}).join(",")+"]";case"function":return'"function()"';case"object":var m=[];for(var n in l){if(l.hasOwnProperty(n)){m.push('"'+n+'":'+g.asString(l[n]))}}return"{"+m.join(",")+"}"}return String(l).replace(/\s/g," ").replace(/\'/g,'"')},getHTML:function(o,l){o=i({},o);var n='<object width="'+o.width+'" height="'+o.height+'" id="'+o.id+'" name="'+o.id+'"';if(o.cachebusting){o.src+=((o.src.indexOf("?")!=-1?"&":"?")+Math.random())}if(o.w3c||!h){n+=' data="'+o.src+'" type="application/x-shockwave-flash"'}else{n+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}n+=">";if(o.w3c||h){n+='<param name="movie" value="'+o.src+'" />'}o.width=o.height=o.id=o.w3c=o.src=null;o.onFail=o.version=o.expressInstall=null;for(var m in o){if(o[m]){n+='<param name="'+m+'" value="'+o[m]+'" />'}}var p="";if(l){for(var f in l){if(l[f]){var q=l[f];p+=f+"="+(/function|object/.test(typeof q)?g.asString(q):q)+"&"}}p=p.slice(0,-1);n+='<param name="flashvars" value=\''+p+"' />"}n+="</object>";return n},isSupported:function(f){return k[0]>f[0]||k[0]==f[0]&&k[1]>=f[1]}});var k=g.getVersion();function d(f,n,m){if(g.isSupported(n.version)){f.innerHTML=g.getHTML(n,m)}else{if(n.expressInstall&&g.isSupported([6,65])){f.innerHTML=g.getHTML(i(n,{src:n.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title})}else{if(!f.innerHTML.replace(/\s/g,"")){f.innerHTML="<h2>Flash version "+n.version+" or greater is required</h2><h3>"+(k[0]>0?"Your version is "+k:"You have no flash plugin installed")+"</h3>"+(f.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+j+"'>here</a></p>");if(f.tagName=="A"){f.onclick=function(){location.href=j}}}if(n.onFail){var l=n.onFail.call(this);if(typeof l=="string"){f.innerHTML=l}}}}if(h){window[n.id]=document.getElementById(n.id)}i(this,{getRoot:function(){return f},getOptions:function(){return n},getConf:function(){return m},getApi:function(){return f.firstChild}})}if(c){jQuery.tools=jQuery.tools||{version:"3.2.4"};jQuery.tools.flashembed={conf:b};jQuery.fn.flashembed=function(l,f){return this.each(function(){$(this).data("flashembed",flashembed(this,l,f))})}}})();
