var _tag=this;
if(!window.carousels){
	var carousels=new Array();

	// load dependencies
	var escripts=[
		[window.hasH5mp4, '/template/main/javascript/util.js'],
		[window.swfobject, '/template/main/javascript/swfobject22.js'],
		[window.easeFunction, '/template/main/javascript/ease_fn.js'],
		[window.DetectFlashVer, '/template/main/javascript/AC_OETags.js'],
		[window.isMobile, '/template/main/javascript/mobile_detect.js']
	];
	for(var i=0;i<escripts.length;i++){
		if(!escripts[i][0]) document.write('<scr'+'ipt type="text/javascript" src="'+escripts[i][1]+'"></sc'+'ript>');
	}
}

_tag.Carousel=function(args){
	var me=this;
	carousels[args.container]=me;
	
	this.defaults={
		trans_type: 'fade',
		trans_time: 500,
		trans_easing: 'quadratic',
		frame_time: 4000,
		controls_autohide: 'fade',
		controls_autohide_delay: 500,
		controls_inithide_delay: 1000,
		controls_easing_in: 'quadratic',
		controls_easing_out: 'quadratic',
		controls_trans_time_in: 200,
		controls_trans_time_out: 500,
		hide_empty: 'true',
		nav_autohide: 'true',
		nav_splash: 'true',
		player_mask: 'false',
		player_stretching: 'fill',
		auto_cycle: 'true',
		framerate: 30,
		player_skin: '',
		mobile_ids: ''
	};
	
	for(var i in this.defaults) this[i]=args[i]||this.defaults[i];
	this.hide_empty_bool=(this.hide_empty=='true'?true:false);
	this.nav_autohide_bool=(this.nav_autohide=='true'?true:false);
	this.nav_splash_bool=(this.nav_splash=='true'?true:false);
	this.player_mask_bool=(this.player_mask=='true'?true:false);
	this.auto_cycle_bool=(this.auto_cycle=='true'?true:false);

	// globals
	this.container=$(args.container);
	this.HTML_ori=this.container.innerHTML;
	this.cycling=true;
	this.mouseover_done=false;
	this.controls_visible=true;
	this.video_playing=false;
	this.frame_interval=Math.round(1000/this.framerate);
	this.playerdiv=null;

	this.indexes={
		previous: 0,
		current: 0,
		target: 0
	};
	
	this.timers={
		cycle: 0,
		cycle_transition: 0,
		controls_mouseout: 0,
		controls_transition: 0
	};
	
	this.ts_trans={
		slide_start: 0,
		slide_end: 0,
		controls_start: 0,
		controls_end: 0
	};

	// init

	this.profile={
		html5: hasH5mp4(),
		flash: DetectFlashVer(9,0,128),
		mobile: isMobile(),
		ipad: isIpad()
	};
	
	if(window.carouselPreInit) carouselPreInit(args);

/*
	this.profile={
		html5: true,
		flash: false,
		mobile: true,
		ipad: true
	};
*/

	var containers=this.container.getElementsByTagName('UL');
	this.slides_container=containers[0];
	this.slides=this.slides_container.getElementsByTagName('LI');

	if(this.profile.mobile){
		if(this.slides.length>1){
			this.controls_autohide='none';
			classAdd(this.container,'mobile');
			if(args.mobile_ids){
				var arr_mobile=args.mobile_ids.split(',');
				for(var i=0;i<arr_mobile.length;i++){
					$(arr_mobile[i]).className='mobile';
				}
			}
		}
		if(this.profile.ipad){
			this.playerType='html5destroy';
		}else{
			this.playerType='none';
		}
	}else if(this.profile.flash){
		this.playerType='flash';
	}else if(this.profile.html5){
		this.playerType='html5';
	}else{
		this.playerType='none';
	}
	
	//alert('html5:'+this.profile.html5+' flash:'+this.profile.flash+' mobile:'+this.profile.mobile+' ipad:'+this.profile.ipad+' player:'+this.playerType);
	
	if(window.easeFunction){
		this.easeSlide=easeFunction(this.trans_easing);
		this.easeControlsIn=easeFunction(this.controls_easing_in);
		this.easeControlsOut=easeFunction(this.controls_easing_out);
	}else{
		this.easeSlide=this.easeDefault;
		this.easeControlsIn=this.easeDefault;
		this.easeControlsOut=this.easeDefault;
	}
	
	if(this.slides.length==0){
		if(this.hide_empty_bool) this.container.style.display='none';
		return false;
	}
	this.slide_dims={w:this.slides[0].offsetWidth, h:this.slides[0].offsetHeight};
	if(containers.length>1){
		this.thumbnails_container=containers[1];
		this.thumbnails=this.thumbnails_container.getElementsByTagName('LI');
	}else{
		this.thumbnails_container=null;
		this.thumbnails=null;
	}
	this.player=null;
	
	if(this.slides.length<2){
		if(this.thumbnails) this.thumbnails_container.style.display='none';
		this.playerInit();
		return false;
	}
	
	if(document.all){
		this.op_set=function(obj,op){obj.style.filter="alpha(opacity="+op+")";};
	}else{
		this.op_set=function(obj,op){obj.style.opacity=op/100;};
	}

	this.navInit();
	this.playerInit();
	this.slidesInit();
	this.thumbnailsInit();
	this.controlsInit();

	if(!this.nav_splash_bool && !this.profile.mobile){
		// hide nav asap
		this.controls_visible=false;
		this.ts_trans.controls_end=new Date().getTime();
		this.controlsHideAni();
	}

	this.start();
	
	if(this.has_video && this.profile.ipad) this.html5dummy();

	addEvent(window,'beforeunload',function(){me.timersClearAll();},false);
	if(window.carouselReady) carouselReady(this.container.id);

};

_tag.Carousel.prototype={

	/* Slides
	*********************************/

	slidesInit: function(){
		switch(this.trans_type){
			case 'snap': this.slidesInitSnap();break;
			case 'fade': this.slidesInitFade();break;
			case 'h_slide': this.slidesInitSlide('h');break;
			case 'v_slide': this.slidesInitSlide('v');break;
		}
	},
	
	slidesInitSnap: function(){
		// structure
		for(var i=0;i<this.slides.length;i++){
			with(this.slides[i].style){
				position="absolute";
				visibility=(i>0?'hidden':'visible');
			}
		}
		
		// transition functions
		this.slideDisplayMain=function(){
			this.slides[this.indexes.previous].style.visibility="hidden";
			this.slides[this.indexes.current].style.visibility="visible";
			this.indexes.previous=this.indexes.current;
		}

	},
	
	slidesInitFade: function(){
		var me=this;
		// structure

		for(var i=0;i<this.slides.length;i++){
			with(this.slides[i].style){
				position="absolute";
				if(i>0){
					visibility="hidden";
					zIndex=10;
				}else{
					visibility="visible";
					zIndex=20;
				}
			}
		}

		// transition functions
		this.slideDisplayMain=function(){
			for(var i=0;i<this.slides.length;i++){
				if(i!=this.indexes.previous && i!=this.indexes.current){
					this.slides[i].style.visibility='hidden';
				}
			}
			this.op_set(this.slides[this.indexes.previous],100);
			with(this.slides[this.indexes.previous].style){
				visibility="visible";
				zIndex=10;
			}
			this.op_set(this.slides[this.indexes.current],0);
			with(this.slides[this.indexes.current].style){
				visibility="visible";
				zIndex=20;
			}
			this.timers.cycle_transition=setInterval(function(){me.slideDisplayAni()},this.frame_interval);
		};

		this.slideDisplayAni=function(){
			var now=new Date().getTime();
			if(now<=this.ts_trans.slide_end){
				this.op_set(this.slides[this.indexes.current],Math.round(this.easeSlide(this.trans_time-(this.ts_trans.slide_end-now), 0, 100, this.trans_time)));
			}else{
				clearInterval(this.timers.cycle_transition);
				this.op_set(this.slides[this.indexes.current],100);
				this.op_set(this.slides[this.indexes.previous],0);
				this.slides[this.indexes.previous].style.visibility='hidden';
				this.indexes.previous=this.indexes.current;
			}
		};
	},
	
	slidesInitSlide: function(direction){
		var me=this;

		// direction-specific settings
		if(direction=='h'){
			this.slide_pos_get=function(){this.slides_container.style.marginLeft.match(/^-?(\d+)/);return parseInt(RegExp.$1);};
			this.slide_pos_set=function(val){this.slides_container.style.marginLeft=(-1*val)+'px';};
			this.slide_distance=this.slide_dims.w;
			var slide_float='left';
			var container_prop='width';
		}else{
			this.slide_pos_get=function(){this.slides_container.style.marginTop.match(/^-?(\d+)/);return parseInt(RegExp.$1);};
			this.slide_pos_set=function(val){this.slides_container.style.marginTop=(-1*val)+'px';};
			this.slide_distance=this.slide_dims.h;
			var slide_float='none';
			var container_prop='height';
		}
		
		// structure
		this.container.style.overflow='hidden';
		this.slide_pos_set(0);
		this.slides_container.style[container_prop]=(this.slide_distance * this.slides.length)+'px';
		for(var i=0;i<this.slides.length;i++){
			if(document.all){
				this.slides[i].style.styleFloat=slide_float;
			}else{
				this.slides[i].style.cssFloat=slide_float;
			}
			this.slides[i].style.position='relative';
			this.slides[i].style.zIndex=10;
		}
		
		// transition functions
		this.slideDisplayMain=function(){
			this.slide_pos_start=this.slide_pos_get();
			this.slide_pos_delta=this.indexes.current*this.slide_distance - this.slide_pos_start;
			this.timers.cycle_transition=setInterval(function(){me.slideDisplayAni()},this.frame_interval);
		};

		this.slideDisplayAni=function(){
			var now=new Date().getTime();
			if(now<=this.ts_trans.slide_end){
				var coeff=this.easeSlide(this.trans_time-(this.ts_trans.slide_end-now), 0, 1, this.trans_time);
				var pos=Math.round(coeff*this.slide_pos_delta);
				this.slide_pos_set(this.slide_pos_start+pos);
			}else{
				clearInterval(this.timers.cycle_transition);
				this.slide_pos_set(this.slide_pos_start+this.slide_pos_delta);
				this.indexes.previous=this.indexes.current;
			}
		};
	},

	slideInc: function(delta){
		var tgt=this.indexes.current+delta;
		if(tgt<0) tgt=this.slides.length-1;
		if(tgt==this.slides.length) tgt=0;
		this.slideDisplay(tgt);
	},

	slideDisplay: function(index){
		if(index==this.indexes.current) return false;
		if(this.video_playing) this.playerStop();
		this.indexes.previous=this.indexes.current;
		this.indexes.current=index;
		if(this.thumbnails){
			this.thumbnails[this.indexes.previous].className='';
			this.thumbnails[index].className='current';
		}
		clearInterval(this.timers.cycle_transition);
		this.ts_trans.slide_start=new Date().getTime();
		this.ts_trans.slide_end=this.ts_trans.slide_start+this.trans_time;
		this.slideDisplayMain();
	},
	
	/* Thumbnails
	*********************************/

	thumbnailsInit: function(){
		if(!this.thumbnails) return false;
		var me=this;
		for(var i=0;i<this.thumbnails.length;i++){
			var newspan=document.createElement('SPAN');
			newspan.innerHTML=this.thumbnails[i].childNodes[0].innerHTML;
			this.thumbnails[i].innerHTML='';
			this.thumbnails[i].appendChild(newspan);
			this.addThumbListeners(i);
		}
		this.thumbnails[0].className='current';
	},
	
	addThumbListeners: function(index){
		var me=this;
		addEvent(this.thumbnails[index],'click',function(){me.thumbnailClicked(index);},false);
	},

	thumbnailClicked: function(index){
		clearInterval(this.timers.cycle);
		this.slideDisplay(index);
		if(this.cycling) this.start();
	},
	
	/* Nav
	*********************************/

	navInit: function(){
		var me=this;

		this.controls=document.createElement('UL');
		this.controls.className='controls';
		
		// previous
		var newli=document.createElement('LI');
		newli.className='previous';
		
		var newa=document.createElement('SPAN');
		newa.innerHTML='Previous';
		addEvent(newa,'click',function(){me.navClicked(-1)},false);
		newli.appendChild(newa);
		this.controls.appendChild(newli);
	
		// play/pause
		var newli=document.createElement('LI');
		newli.className='pause';
		var newa=document.createElement('SPAN');
		newa.innerHTML='Pause';
		
		this.playPauseButton=newli;
		addEvent(newa,'click',function(){me.navClicked(0)},false);
		newli.appendChild(newa);
		this.controls.appendChild(newli);
	
		// next
		var newli=document.createElement('LI');
		newli.className='next';
		var newa=document.createElement('SPAN');
		newa.innerHTML='Next';
		addEvent(newa,'click',function(){me.navClicked(1)},false);
		newli.appendChild(newa);
		this.controls.appendChild(newli);
		
		this.container.appendChild(this.controls);
		var str_bwidth=getStyle(this.container,'borderWidth')||'0px';
		str_bwidth.match(/^(\d+)/);
		var bwidth=parseInt(RegExp.$1);
		this.controls_location=(this.controls.offsetTop-bwidth>0?'bottom':'top');
	},
	
	navClicked: function(delta){
		clearInterval(this.timers.cycle);
		if(delta==0){
			if(this.cycling){
				this.cycling=false;
				this.playPauseButton.className='play';
			}else{
				this.cycling=true;
				this.playPauseButton.className='pause';
				this.slideInc(1);
			}
		}else{
			this.slideInc(delta);
		}
		if(this.cycling) this.start();
	},
	
	/* Controls (thumbnails + nav)
	*********************************/

	controlsInit: function(){
		var me=this;

		switch(this.controls_autohide){
			case 'snap': this.controlsInitSnap();break;
			case 'fade': this.controlsInitFade();break;
			case 'slide': this.controlsInitSlide();break;
		}

		if(this.controls_autohide=='none'){
			this.controlsHideAni=function(){return;}
		}else{
			if(this.nav_splash_bool) this.timers.controls_mouseout=setTimeout(function(){me.controlsHide()}, this.controls_inithide_delay);
			addEvent(this.container,'mouseover',function(){clearTimeout(me.timers.controls_mouseout)},false);
			addEvent(this.container,'mouseover',function(ev){me.controlsShow(ev)},false);
			addEvent(this.container,'mouseout',function(ev){me.controlsMouseout(ev)},false);
		}

	},
	
	controlsInitSnap: function(){
		var me=this;

		this.controlsHide=function(){
			if(this.controls_autohide=='none') return false;
			if(this.nav_autohide_bool) this.controls.style.visibility='hidden';
			if(this.thumbnails) this.thumbnails_container.style.visibility='hidden';
		};

		this.controlsShow=function(){
			if(this.controls_autohide=='none') return false;
			clearTimeout(this.timers.controls_mouseout);
			if(this.nav_autohide_bool) this.controls.style.visibility='visible';
			if(this.thumbnails) this.thumbnails_container.style.visibility='visible';
		};		

	},
	
	controlsInitFade: function(){
		var me=this;
		this.controlsShow=function(ev){
			if(this.controls_autohide=='none') return false;
			if(this.mouseover_done) return false;
			if(this.controls_visible) return false;
			this.mouseover_done=true;
			clearInterval(this.timers.controls_transition);
			this.controls_visible=true;
			
			// start from current point if fade out not complete
			this.ts_trans.controls_start=new Date().getTime();
			if(this.ts_trans.controls_end>this.ts_trans.controls_start){
				var remaining=Math.round(this.controls_trans_time_in*(this.ts_trans.controls_end-this.ts_trans.controls_start)/this.controls_trans_time_out);
				this.ts_trans.controls_end=this.ts_trans.controls_start+(this.controls_trans_time_in-remaining);
			}else{
				this.ts_trans.controls_end=this.ts_trans.controls_start+this.controls_trans_time_in;
			}
			this.timers.controls_transition=setInterval(function(){me.controlsShowAni()},this.frame_interval);
		};
		
		this.controlsShowAni=function(){
			var now=new Date().getTime();
			if(now<=this.ts_trans.controls_end){
				var ieop=Math.round(this.easeControlsIn(this.controls_trans_time_in-(this.ts_trans.controls_end-now), 0, 100, this.controls_trans_time_in));
				if(this.nav_autohide_bool) this.op_set(this.controls, ieop);
				if(this.thumbnails) this.op_set(this.thumbnails_container, ieop);
			}else{
				clearInterval(this.timers.controls_transition);
				if(this.nav_autohide_bool) this.op_set(this.controls, 100);
				if(this.thumbnails) this.op_set(this.thumbnails_container, 100);
			}
		};

		this.controlsHide=function(){
			if(this.controls_autohide=='none') return false;
			clearInterval(this.timers.controls_transition);
			this.ts_trans.controls_start=new Date().getTime();
			this.ts_trans.controls_end=this.ts_trans.controls_start+this.controls_trans_time_out;
			this.timers.controls_transition=setInterval(function(){me.controlsHideAni()},this.frame_interval);
		};
		
		this.controlsHideAni=function(){
			var now=new Date().getTime();
			this.controls_visible=false;
			if(now<=this.ts_trans.controls_end){
				var ieop=100-Math.round(this.easeControlsOut(this.controls_trans_time_out-(this.ts_trans.controls_end-now), 0, 100, this.controls_trans_time_out));
				if(this.nav_autohide_bool) this.op_set(this.controls, ieop);
				if(this.thumbnails) this.op_set(this.thumbnails_container, ieop);
			}else{
				clearInterval(this.timers.controls_transition);
				if(this.nav_autohide_bool) this.op_set(this.controls,0);
				if(this.thumbnails) this.op_set(this.thumbnails_container, 0);
			}
		};
		
	},
	
	controlsInitSlide: function(){
		var me=this;
		if(this.thumbnails){
			this.controls_height=(this.thumbnails_container.offsetHeight > this.controls.offsetHeight ? this.thumbnails_container.offsetHeight:this.controls.offsetHeight);
		}else{
			this.controls_height=this.controls.offsetHeight;
		}
		this.controls_height+=2;
		//this.controls_height=this.controls.offsetHeight+2;
		this.container.style.overflow='hidden';
		if(this.controls_location=='top'){
			this.controls_animate='marginTop';
		}else{
			this.controls_animate='marginBottom';
		}

		this.controlsShow=function(ev){
			if(this.controls_autohide=='none') return false;
			if(this.mouseover_done) return false;
			if(this.controls_visible) return false;
			this.mouseover_done=true;
			clearInterval(this.timers.controls_transition);
			this.controls_visible=true;
			
			// start from current point if slide out not complete
			this.ts_trans.controls_start=new Date().getTime();
			if(this.ts_trans.controls_end>this.ts_trans.controls_start){
				var remaining=Math.round(this.controls_trans_time_in*(this.ts_trans.controls_end-this.ts_trans.controls_start)/this.controls_trans_time_out);
				this.ts_trans.controls_end=this.ts_trans.controls_start+(this.controls_trans_time_in-remaining);
			}else{
				this.ts_trans.controls_end=this.ts_trans.controls_start+this.controls_trans_time_in;
			}
			this.timers.controls_transition=setInterval(function(){me.controlsShowAni()},this.frame_interval);
		};
		
		this.controlsShowAni=function(){
			var now=new Date().getTime();
			if(now<=this.ts_trans.controls_end){
				var pos=Math.round(this.easeControlsIn(this.controls_trans_time_in-(this.ts_trans.controls_end-now), 0, this.controls_height, this.controls_trans_time_in));
				if(this.nav_autohide_bool){
					this.controls.style[this.controls_animate]=(pos-this.controls_height)+'px';
				}
				if(this.thumbnails){
					this.thumbnails_container.style[this.controls_animate]=(pos-this.controls_height)+'px';
				}
			}else{
				clearInterval(this.timers.controls_transition);
				if(this.nav_autohide_bool){
					this.controls.style[this.controls_animate]='0px';
				}
				if(this.thumbnails){
					this.thumbnails_container.style[this.controls_animate]='0px';
				}
			}
		};

		this.controlsHide=function(){
			if(this.controls_autohide=='none') return false;
			clearInterval(this.timers.controls_transition);
			this.ts_trans.controls_start=new Date().getTime();
			this.ts_trans.controls_end=this.ts_trans.controls_start+this.controls_trans_time_out;
			this.timers.controls_transition=setInterval(function(){me.controlsHideAni()},this.frame_interval);
		};
		
		this.controlsHideAni=function(){
			var now=new Date().getTime();
			this.controls_visible=false;
			if(now<=this.ts_trans.controls_end){
				var pos=this.controls_height-Math.round(this.easeControlsOut(this.controls_trans_time_out-(this.ts_trans.controls_end-now), 0, this.controls_height, this.controls_trans_time_out));
				if(this.nav_autohide_bool){
					this.controls.style[this.controls_animate]=(pos-this.controls_height)+'px';
				}
				if(this.thumbnails){
					this.thumbnails_container.style[this.controls_animate]=(pos-this.controls_height)+'px';
				}
			}else{
				if(this.nav_autohide_bool){
					this.controls.style[this.controls_animate]=(-1 * this.controls_height)+'px';
				}
				if(this.thumbnails){
					this.thumbnails_container.style[this.controls_animate]=(-1 * this.controls_height)+'px';
				}
				clearInterval(this.timers.controls_transition);
			}
		};
		
	},

	controlsMouseout: function(ev){
		var me=this;
		
		// exit if still inside of container
		ev=ev||window.event;
		var tgt=ev.relatedTarget||ev.toElement;
		if(typeof(tgt)!='undefined'){
			while(tgt.parentNode){
				tgt=tgt.parentNode;
				if(tgt==this.container) return false;
			}
		}
		clearTimeout(this.timers.controls_mouseout);
		this.mouseover_done=false;
		this.timers.controls_mouseout=setTimeout(function(){me.controlsHide()}, this.controls_autohide_delay);
	},
	
	/* Video player
	*********************************/
	
	playerInit: function(){
		if(this.playerType=='none') return false;
		this.has_video=false;
		for(var i=0;i<this.slides.length;i++){
			if(this.slides[i].className=='video'){
				if(!this.has_video){
					this.playerCreate();
					this.has_video=true;
				}
				this.playerSlideInit(i);
			}
		}
	},
	
	playerSlideInit: function(index){
		var me=this;
		var vidlink=this.slides[index].getElementsByTagName('A')[0];
		this.slides[index].video=vidlink.href;
		addEvent(vidlink,'click',function(evt){
			evt=evt||window.event;
			if(evt.preventDefault){
				evt.preventDefault();
			}else{
				evt.returnValue=false;
			}
			clearInterval(me.timers.cycle);
			me.video_playing=true;
			me.playerdiv.style.zIndex=3000;
			me.playerPlay(index);
		},false);
	},
	
	playerCreate: function(){
		var me=this;
		
		var player_container_id=this.container.id+'_player_container';
		var player_id=this.container.id+'_player';
		this.playerdiv=document.createElement('DIV');
		this.playerdiv.id=player_container_id;
		this.playerdiv.className='carousel_player';
		
		switch(this.playerType){

			case 'html5':

				this.playerdiv.style.display='none';
				this.player=document.createElement('VIDEO');
				with(this.player){
					id=player_id;
					width=this.slide_dims.w;
					height=this.slide_dims.h;
					controls=true;
					style.backgroundColor='#000';
					style.zIndex=0;
				}
				addEvent(this.player,'ended',function(){
					me.playerdiv.style.display='none';
					me.playerFinish();
				},false);
				this.playerdiv.appendChild(this.player);
				this.container.appendChild(this.playerdiv);
				
				this.playerPlay=function(slide_index){
					this.playerdiv.style.display='block';
					this.player.src=this.slides[slide_index].video;
					this.player.play();
				};

				this.playerStop=function(){
					this.player.pause();
					this.video_playing=false;
					this.playerdiv.style.zIndex=0;
				};

				break;
			
			case 'html5destroy':

				this.playerdiv.style.display='none';
				this.container.appendChild(this.playerdiv);
				
				this.playerPlay=function(slide_index){
					this.player=document.createElement('VIDEO');
					this.playerdiv.innerHTML='';
					this.playerdiv.appendChild(this.player);
					with(this.player){
						id=player_id;
						width=this.slide_dims.w;
						height=this.slide_dims.h;
						src=this.slides[slide_index].video;
						controls=true;
						//autoplay=true;
						style.backgroundColor='#000';
						style.zIndex=4000;
					}
					addEvent(this.player,'ended',function(){
						me.playerdiv.style.display='none';
						me.playerFinish();
					},false);
					this.playerdiv.style.display='block';
					this.playerdiv.style.zIndex=3000;
					//this.playerdiv.appendChild(this.player);
					this.player.load();
					this.player.play();
					this.player.style.zIndex=4000;
				};

				this.playerStop=function(){
					this.playerDestroy();
				};
				
				this.playerDestroy=function(){
					this.playerdiv.innerHTML='';
					this.playerdiv.style.display='none';
				};
				
				break;

			case 'flash':
	
				var newdiv=document.createElement('DIV');
				newdiv.id=player_id;
				this.playerdiv.appendChild(newdiv);
				this.container.appendChild(this.playerdiv);
			
				var flashvars = {
					controlbar: "over",
					autostart: "false",
					fullscreen: "true",
					stretching: this.player_stretching
				};
				if(this.player_skin>'') flashvars.skin=this.player_skin;
				
				var params = {
					allowfullscreen:"true",
					allowscriptaccess:"always",
					wmode: "transparent"
				};
				
				var attributes = {
					id: player_id,
					name:player_id
				};
	
				swfobject.embedSWF("/template/main/swf/player5.2.swf", player_id, this.slide_dims.w, this.slide_dims.h, "9.0.115", false, flashvars, params, attributes);

				this.playerPlay=function(slide_index){
					this.player.sendEvent('STOP');
					this.player.sendEvent('LOAD',{file:this.slides[slide_index].video});
					this.player.sendEvent('PLAY',"true");
				};

				this.playerStop=function(){
					this.player.sendEvent('STOP');
					this.video_playing=false;
					this.playerdiv.style.zIndex=0;
				};

				break;
			
			default: // leave as-is

		}
	},
	
	playerFinish: function(){
		this.video_playing=false;
		if(this.playerType=='html5destroy') this.playerDestroy();
		this.playerdiv.style.zIndex=0;
		if(this.cycling) this.start();
	},
	
	// Flash-only functions

	playerReady: function(){
		var cid=this.container.id;
		this.player=$(cid+'_player');
		this.player.addModelListener('STATE', 'carousels["'+cid+'"].playerStateListener');
		this.player.addControllerListener("STOP",'carousels["'+cid+'"].playerFinish');

		// create mask to lay on top
		if(this.player_mask_bool){
			this.player_mask=document.createElement('DIV');
			with(this.player_mask.style){
				width=this.slide_dims.w+'px';
				height=this.slide_dims.h+'px';
				position='absolute';
				left='0px';
				backgroundColor='#000';
				zIndex=7;
			};
			var posAttribute=(this.controls_location=='top'?'bottom':'top');
			this.player_mask.style[posAttribute]='0px';
			this.container.appendChild(this.player_mask);
		}

	},
	
	playerStateListener: function(obj){
		if(obj.newstate=='COMPLETED' || (obj.oldstate=='PAUSED' && obj.newstate=='IDLE')) this.playerFinish();
	},
	
	/* Shared, utility
	*********************************/
	
	start: function(){
		if(!this.auto_cycle_bool) return false;
		var me=this;
		clearInterval(this.timers.cycle);
		this.timers.cycle=setInterval(function(){me.slideInc(1)},this.frame_time);
	},

	easeDefault: function(t,b,c,d){
		// t=increment (0..d), c=scale, d=total
		if((t/=d/2)<1) return c/2*t*t;
		return -c/2*(--t*(t-2)-1);
	},
	
	html5dummy: function(){
		var vdummy=document.createElement('VIDEO');
		with(vdummy){
			width=1;
			height=1;
			controls=false;
			style.position='absolute';
			style.visibility='hidden';
		}
		this.playerdiv.appendChild(vdummy);
	},
	
	timersClearAll: function(){
		for(var i in this.timers){
			if(i=='mouseout'){
				clearTimeout(this.timers[i]);
			}else{
				clearInterval(this.timers[i]);
			}
		}
	}

};

function playerReady(object) {
	if(object.id.match(/^(.+)_player$/)){
		var carousel_id=RegExp.$1;
		carousels[carousel_id].playerReady();
	}
}

