if (!Ext.EMC) {
	Ext.namespace('Ext.EMC');
}

var videoWidth = 980;
var videoHeight = 553;
var bcExp;
var modVP;
var modExp;
var modCon;
var player;
var playerContainer;
var videoModal;

function embedVideo(videoID) {
	if(!videoID){return false;}
	if(modExp){
		try {
			modExp.unload();
		} catch(err) {
			if(console && console.log){
				console.log('Error trying to unload brightcove video. ', err)
			}
		}
	}
	var params = {};
	params.playerID = "876438680001";
	params.playerKey = "AQ~~,AAAAoc2nJVE~,yIQzUe15OpKZuWX7pkGrbfqEkE_mP6uZ";
	params.autoStart = "true";
	params.bgcolor = "#FFFFFF";
	params.width = videoWidth;
	params.height = videoHeight;
	params.isVid = "true";
	params.isUI = "true";
	params.dynamicStreaming = "true";
	params.wmode = "transparent";
	params['@videoPlayer'] = videoID;
	//params.templateLoadHandler = "onPlayerLoaded";
	//params.templateReadyHandler = "onPlayerReady";
	params.templateErrorHandler = "onPlayerError";

	player = brightcove.createElement("object");
	player.id = 'player'+videoID;
	var parameter;
	for (var i in params) {
	     parameter = brightcove.createElement("param");
	     parameter.name = i;
	     parameter.value = params[i];
	     player.appendChild(parameter);
	}
	
	playerContainer = document.createElement("div");
	playerContainer.id = 'myPlayerContainer';
	document.body.appendChild(playerContainer);

	videoModal = new Ext.EMC.Modal('#myPlayerContainer', {
        autoCenter:{
          vert:true,
          horz:true
        },
        width: videoWidth,
        height: videoHeight,
        buttons: [{
            text: 'Close',
            cls: 'close-btn hidden'
        }],
        closeOnOverlayClick: false,
        destroy: true,
        listeners : {
        	'modalOpened': function() {
                brightcove.createExperience(player, playerContainer, true);
            },
            'modalClosed': function(modalID) {
                Ext.get(modalID).remove();
            }
        }
	});
}

function killVideo(experienceID){
	try{
		modExp.unload();
		modExp = null;
	} catch(err){
		if(console && console.log){
			console.log('Error trying to unload brightcove video. ', err);
		} else {
			//alert(err);
		}
	}
	
	try{
		brightcove.removeExperience(experienceID);
	} catch(err){
		if(console && console.log){
			console.log('Error trying to remove brightcove experience. ', err);
		} else {
			//alert(err);
		}
	}
	
	videoModal.modalHide();
	
}

function onTemplateLoaded(experienceID) {
	try{
	    bcExp = brightcove.getExperience(experienceID);
	 
	    modVP = bcExp.getModule(APIModules.VIDEO_PLAYER);
	    modExp = bcExp.getModule(APIModules.EXPERIENCE);
	    modCon = bcExp.getModule(APIModules.CONTENT);
	    
		modVP.addEventListener('mediaProgress', trackVideoLiveEvent);
		
	} catch(err) {
		if (console && console.log) {
			console.log('onTemplateLoaded ERROR: ', err);
		}
	}
	
	Ext.get(Ext.select('.' + videoModal.cfg.classes.outerWrapper)).on('click', function(){
		killVideo(experienceID);
	});
	
	Ext.get(Ext.select('.' + videoModal.cfg.classes.buttonWrapper + ' .close-btn')).on('click', function(){
		killVideo(experienceID);
		return false;
	});
	
	Ext.get(Ext.select('.' + videoModal.cfg.classes.buttonWrapper + ' .close-btn')).removeCls('hidden');
}


function onPlayerError(err){
	if (console && console.log) {
		console.log('onPlayerError ', err);
	}
	//alert('There was an error requesting your video. Please try again.');
	videoModal.modalHide();
}


var trackingPoints={};

function trackVideoLiveEvent(ev) {
	var perc=Math.floor(ev.position/600)*10;
	var totalTime=modVP.getVideoDuration();
	doTrackLiveEvent('REPLAY',perc,totalTime);
}

function doTrackLiveEvent(vidURL,perc,duration) {
    if (trackingPoints[vidURL]==undefined) {
        trackingPoints[vidURL]=[];
        for (var i=0;i<600;i+=10) {
			trackingPoints[vidURL][i]=true;
		}
    }
    if (trackingPoints[vidURL][perc]===true) {
        trackingPoints[vidURL][perc]=false;
        var tStr=':(event) VID: '+vidURL+' '+perc+'min';
        if (console) {
        	if (console.log) {
        		console.log(window.location.pathname+tStr);
        	}
        }
        try {
        	emcTrackLiveEvent(window.location.pathname+tStr,null,'o',makeTimeCode(duration,false));
		} catch(err) {
			if (console && console.log) {
				console.log('TRACKING FUNCTION ERROR', err);
			}
		}
    }
}

function makeTimeCode(sec,includeLeadingZero) {
    sec=Math.round(sec);
	var tcString='';
	var h=Math.floor(sec/3600);
	var m=Math.floor((sec%3600)/60);
	var s=Math.floor((sec%3600)%60);
	if (h>0) {
		tcString+=(h<10 && includeLeadingZero) ? '0'+String(h) : String(h);
		includeLeadingZero=true;
		tcString+=':';
	}
	tcString+=(m<10 && includeLeadingZero) ? '0'+String(m) : String(m);
	tcString+=':';
	tcString+=(s<10) ? '0'+String(s) : String(s);
	return tcString;
}


Ext.onReady(function() {
    // give more time in order to work with slower connections
    brightcove.flashTimeoutInterval = 10000;
    

	
	Ext.get(Ext.select('.video-overlay-link')).on('click', function(e, el) {
		e.stopEvent();
		var target = el;
		while (target.tagName != 'A'){
			target = target.parentNode;
		}
		target = Ext.get(target);
		//check for brightcove video id
		var videoID = target.getAttribute('rel');
		if(!videoID){
			return false;
		}
		//create modal with video
		embedVideo(videoID);
	});
});


