$(function (){
	videoPlayer.embedVideos();
});

var videoPlayer = {
	
	videoSection: 'Toyota',
	videoSubSection: 'Generic',
	videoPageType: 'Homepage',
	videoVehicle: 'Generic',
	videoPlace: 'Page',
	videoPageTitle: 'Page',
	videoName: 'Video',
	videoDuration: 0,
	videoShareURL: '#',
	videoInstances: [],
	
	getSection: function(){
		switch($('body').attr('id')) {
			case 'vehicles':
				videoPlayer.videoSection = 'Vehicle Hub';
			break;
			case 'events':
				videoPlayer.section = 'Events';
			break;
			case 'finance-advantage':
				videoPlayer.videoSection = 'Finance Advantage';
			break;
			case 'special-offers':
				videoPlayer.videoSection = 'Special Offers';
			break;
			case 'toyota':
			case 'promise':
			case 'toyota promise':
				videoPlayer.videoSection = 'Promise Hub';
			break;
		}
		
	},
	getSubSection: function(){
		var oBody = $('body');
		if(oBody.hasClass('aurion')){
			videoPlayer.videoSubSection = 'Aurion';
			videoPlayer.videoVehicle = 'Aurion';
		}else if(oBody.hasClass('camry')){
			videoPlayer.videoSubSection = 'Camry';
			videoPlayer.videoVehicle = 'Camry';
		}else if(oBody.hasClass('corolla')){
			videoPlayer.videoSubSection = 'Corolla';
			videoPlayer.videoVehicle = 'Corolla';
		}else if(oBody.hasClass('coaster')){
			videoPlayer.videoSubSection = 'Coaster';
			videoPlayer.videoVehicle = 'Coaster';
		}else if(oBody.hasClass('fj-cruiser')){
			videoPlayer.videoSubSection = 'FJCruiser';
			videoPlayer.videoVehicle = 'FJCruiser';
		}else if(oBody.hasClass('ft86')){
			videoPlayer.videoSubSection = 'FT86';
			videoPlayer.videoVehicle = 'FT86';
		}else if(oBody.hasClass('hiace')){
			videoPlayer.videoSubSection = 'HiAce';
			videoPlayer.videoVehicle = 'HiAce';
		}else if(oBody.hasClass('hilux')){
			videoPlayer.videoSubSection = 'HiLux';
			videoPlayer.videoVehicle = 'HiLux';
		}else if(oBody.hasClass('camry-hybrid-camry')){
			videoPlayer.videoSubSection = 'HybridCamry';
			videoPlayer.videoVehicle = 'HybridCamry';
		}else if(oBody.hasClass('kluger')){
			videoPlayer.videoSubSection = 'Kluger';
			videoPlayer.videoVehicle = 'Kluger';
		}else if(oBody.hasClass('landcruiser-200')){
			videoPlayer.videoSubSection = 'LC200';
			videoPlayer.videoVehicle = 'LC200';
		}else if(oBody.hasClass('landcruiser-70-series')){
			videoPlayer.videoSubSection = 'LC70';
			videoPlayer.videoVehicle = 'LC70';
		}else if(oBody.hasClass('lm')){
			videoPlayer.videoSubSection = 'LM';
			videoPlayer.videoVehicle = 'LM';
		}else if(oBody.hasClass('prado')){
			videoPlayer.videoSubSection = 'Prado';
			videoPlayer.videoVehicle = 'Prado';
		}else if(oBody.hasClass('prius')){
			videoPlayer.videoSubSection = 'Prius';
			videoPlayer.videoVehicle = 'Prius';
		}else if(oBody.hasClass('priusfamily')){
			videoPlayer.videoSubSection = 'PriusFamily';
			//videoPlayer.videoVehicle = 'Prius';
		}else if(oBody.hasClass('rav4')){
			videoPlayer.videoSubSection = 'RAV4';
			videoPlayer.videoVehicle = 'RAV4';
		}else if(oBody.hasClass('rukus')){
			videoPlayer.videoSubSection = 'Rukus';	
			videoPlayer.videoVehicle = 'Rukus';		
		}else if(oBody.hasClass('tarago')){
			videoPlayer.videoSubSection = 'Tarago';
			videoPlayer.videoVehicle = 'Tarago';
		}else if(oBody.hasClass('yaris')){
			videoPlayer.videoSubSection = 'Yaris';
			videoPlayer.videoVehicle = 'Yaris';
		}
		
		else if(oBody.hasClass('afl')){
			videoPlayer.videoSubSection = 'AFL';
		}
		else if(oBody.hasClass('nrl')){
			videoPlayer.videoSubSection = 'NRL';
		}		
	},
	getPageType: function(){
		var oBody = $('body');
		if(oBody.hasClass('homepage')){
			videoPlayer.videoPageType = 'Homepage';
			videoPlayer.videoPlace = 'Homepage Banner';
		} else if(oBody.hasClass('range')){
			videoPlayer.videoPageType = 'Range';
		} else if(oBody.hasClass('specifications')){
			videoPlayer.videoPageType = 'Specifications';
		} else if(oBody.hasClass('features')){
			videoPlayer.videoPageType = 'Features';
		} else if(oBody.hasClass('colours')){
			videoPlayer.videoPageType = 'Colours';
		} else if(oBody.hasClass('accessories')){
			videoPlayer.videoPageType = 'Accessories';
		} else if(oBody.hasClass('prices')){
			videoPlayer.videoPageType = 'Prices';
		} else if(oBody.hasClass('media-gallery')){
			videoPlayer.videoPageType = 'Gallery';
		}
	},
	getPageTitle: function(){
		videoPlayer.videoPageTitle = $('.seo-page-title').find('h1').text();
	},
	getShareURL: function(){
		videoPlayer.videoShareURL = location.href;
	},
	getGeneralData: function(){
		videoPlayer.getSection();
		videoPlayer.getSubSection();
		videoPlayer.getPageType();
		videoPlayer.getPageTitle();
		videoPlayer.getShareURL();
	},
	embedVideos: function(){
		videoPlayer.getGeneralData();
		
		$('.brightcove-video-player').each(function(i, video){
			var sVideoId = $(video).attr('id');
			var aVideoId = sVideoId.split('-');
			videoPlayer.activateVideo(aVideoId[1], aVideoId[2], aVideoId[3], aVideoId[4], sVideoId);
		});
		brightcove.createExperiences();
	},
	activateVideo: function(sPlayerType, sVideoID, sWidth, sHeight, sVideoElementId){
		switch (sPlayerType) {
			case 'camrydefault':
			default:
				sPlayerID = '1303927255001';
				sPlayerKey = 'AQ~~,AAABKt-qoiE~,Ip1hsx3g339LbMPE4Kn5yX-Gk5FAUwjc';
			break;
		}
		
		var sVideoCode = '';
		sVideoCode += '<object id="brightcove-'+sVideoID+'" class="BrightcoveExperience">';
		sVideoCode += '<param name="bgcolor" value="#ffffff" />';
		sVideoCode += '<param name="width" value="'+sWidth+'" />';
		sVideoCode += '<param name="height" value="'+sHeight+'" />';
		sVideoCode += '<param name="playerID" value="'+sPlayerID+'" />';
		sVideoCode += '<param name="playerKey" value="'+sPlayerKey+'" />';
		sVideoCode += '<param name="isVid" value="true" />';
		sVideoCode += '<param name="isUI" value="true" />';
		sVideoCode += '<param name="htmlFallback" value="true" />';
		sVideoCode += '<param name="wmode" value="transparent" />';
		sVideoCode += '<param name="linkBaseURL" value="'+videoPlayer.videoShareURL+'" />';
		sVideoCode += '<param name="dynamicStreaming" value="true" />';
		sVideoCode += '<param name="@videoPlayer" value="'+sVideoID+'" />';
		sVideoCode += '</object>';
		
		$('#'+sVideoElementId).append(sVideoCode);
	},
	pauseVideo: function(videoID) {
		for(i=0;i<videoPlayer.videoInstances.length;i++) {
			if(videoPlayer.videoInstances[i].id == videoID.attr('id')) {
				videoPlayer.videoInstances[i].player.pause(true);
			}
		}
	},
	onVideoBegin: function(evt) {
		var videoIndex = videoPlayer.lookupVideoIndex(evt);
		if(!videoPlayer.videoInstances[videoIndex].vidTracking.started) {
			videoPlayer.videoInstances[videoIndex].vidTracking.started = true;
			hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_status':'Playing the video', 'WT.flv_percentplay':videoPlayer.calculatePercentPlay(evt)+'%'}, true);
		}
	},
	onVideoComplete: function(evt) {
		var videoIndex = videoPlayer.lookupVideoIndex(evt);
		videoPlayer.videoInstances[videoIndex].vidTracking.replay = true;
		if(!videoPlayer.videoInstances[videoIndex].vidTracking.complete) {
			videoPlayer.videoInstances[videoIndex].vidTracking.complete = true;
			hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_status':'Completing the video', 'WT.flv_percentplay':videoPlayer.calculatePercentPlay(evt)+'%'}, true);
		}
	},
	onVideoPlay: function(evt) {
		var videoIndex = videoPlayer.lookupVideoIndex(evt);
		if(videoPlayer.videoInstances[videoIndex].vidTracking.started) {
			if(!videoPlayer.videoInstances[videoIndex].vidTracking.replay) {			
				hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_status':'Resuming the video'}, true);
			} else {
				hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_status':'Playing the video'}, true);
				videoPlayer.videoInstances[videoIndex].vidTracking.replay = false;
			}
		}
	},
	onVideoStop: function(evt) {
		if(videoPlayer.calculatePercentPlay(evt) != 100) {
			hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_status':'Pausing the video'}, true);
		}
	},
	onVideoProgress: function(evt) {
		percentageThrough = videoPlayer.calculatePercentPlay(evt);
		var videoIndex = videoPlayer.lookupVideoIndex(evt);
		switch(percentageThrough) {
			case 25:
				if(!videoPlayer.videoInstances[videoIndex].vidTracking.quarterPlayed) {
					videoPlayer.videoInstances[videoIndex].vidTracking.quarterPlayed = true;
					hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_percentplay':percentageThrough+'%'}, true);
				}
				break;
			case 50:
				if(!videoPlayer.videoInstances[videoIndex].vidTracking.halfPlayed) {
					videoPlayer.videoInstances[videoIndex].vidTracking.halfPlayed = true;
					hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_percentplay':percentageThrough+'%'}, true);
				}
				break;
			case 75:
				if(!videoPlayer.videoInstances[videoIndex].vidTracking.threeQuartersPlayed) {
					videoPlayer.videoInstances[videoIndex].vidTracking.threeQuartersPlayed = true;
					hh_WT.trackEvent({'WT.flv_name':videoPlayer.videoSection+'|'+videoPlayer.videoSubSection+'|'+videoPlayer.videoPageType+'|'+videoPlayer.videoVehicle+'|'+videoPlayer.videoPlace+'|'+videoPlayer.videoPageTitle+'|'+evt.media.displayName+'|'+evt.duration, 'WT.flv_percentplay':percentageThrough+'%'}, true);
				}
				break;
		}
	},
	lookupVideoIndex: function(evt) {
		for(i=0;i<videoPlayer.videoInstances.length;i++) {
			if(videoPlayer.videoInstances[i].id == 'brightcove-'+evt.media.id) {
				return i;
			}
		}
	},
	calculatePercentPlay: function(evt) {
		return Math.round((evt.position/evt.duration)*100);
	}
}

// sample implementation <div class="brightcove-video-player" id="video-${element.playerType}-${element.videoId}-${width}-${height}"></div>
// sample implementation <div class="brightcove-video-player" id="video-camrydefault-1305374595001-536-302"></div>

function onTemplateLoaded(experienceId) {
    var player = brightcove.getExperience(experienceId);
    var vidPlayer = player.getModule(APIModules.VIDEO_PLAYER);
    
    vidPlayer.addEventListener(BCMediaEvent.BEGIN, videoPlayer.onVideoBegin);
	vidPlayer.addEventListener(BCMediaEvent.COMPLETE, videoPlayer.onVideoComplete);
	vidPlayer.addEventListener(BCMediaEvent.PLAY, videoPlayer.onVideoPlay);
	vidPlayer.addEventListener(BCMediaEvent.STOP, videoPlayer.onVideoStop);
	vidPlayer.addEventListener(BCMediaEvent.PROGRESS, videoPlayer.onVideoProgress);
    
    videoPlayer.videoInstances.push({id: experienceId, player: vidPlayer, vidTracking: {started: false, complete: false, quarterPlayed: false, halfPlayed: false, threeQuartersPlayed: false, allPlayed: false}});
}
