var mppLocalTest = false; //false triggers proper use
var ua = navigator.userAgent.toLowerCase();
var thishost = location.hostname;
var playlist,myVideo,setInt,uGuid;
var initGuidGet = false;
var initPlay = false;
var uGuid;
var deviceId = '';
var currentGroup = 0;
var currentItem = 0;
var currentItemID = '';
var currentSpeed = 0;
var vload = 0;
var logTimer = 0;
var properties = new Array();
var hiddenControls = new Array();
var playerThemes = new Array();
var servicesUrl = 'http://services.istreamplanet.com/ispPlayerBuilderService.asmx';
var loggingUrl = 'http://director.istreamplanet.com/webservices/PlayersLoggingService.asmx';
var hoverStates = false;
var touchControls = true; //sets to iDevice mode without hover - should be combined with hoverStates
var hoverStateA = true;
var hoverStateB = true; //set OPPOSITE of startup (since toggling will be initiated)
var itemData = new Array();
var ttl = 120;
var logXml = '';
var iPhone = false;
var mb_autoplay = false;
var mediagroup = new Array;

var buttons = new Array(/*0*/'play',/*1*/'pause',/*2*/'rewind',/*3*/'fast',/*4*/'replay',/*5*/'live',/*6*/'goLive',/*7*/'share',/*8*/'volume',/*9*/'fullScreen',/*10*/'playlist',/*11*/'playlistScrollLeft',/*12*/'playlistScrollRight');
var buttonevents = new Array('','','changeSpeed(-1)','changeSpeed(2)','replay()','goLive()','goLive()','showShare()','','makeBig()','togglePlaylist()','scrollPlaylist(-1)','scrollPlaylist(1)');
var scrubber = new Array('loaded','played','timePlayed','totalTime');
var canvasData = new Array();

/* DEFAULTS */
properties['TemplateId'] = 2;
properties['ThemeId'] = 1;
properties['primaryColor'] = '#FF9BAFC2';
properties['accentColor'] = '#FFD79300';
properties['replaySecs'] = 15;
properties['emailButtonEnabled'] = true;
playerThemes[1] = new Array('Dark','000000','FFFFFF');
playerThemes[2] = new Array('Medium','999999','FFFFFF');
playerThemes[3] = new Array('Light','EEEEEE','000000');
/* END DEFAULTS */
if(ua.indexOf('iphone')>=0){deviceId=1;}else if(ua.indexOf('ipad')>=0){deviceId=2;}else if(ua.indexOf('android')>=0){deviceId=3;}
$(document).ready(function() {
	mppSendLogs(); //sends initial log
	getConfig($('#PlayerIdHiddenField').val());
	//getConfig(playerId); //acquire config moved to onsuccess of first log insert
	if(debug==true){
		$('mppReporter').html('<div id="props" style="margin-top:270px;display:none;"></div><div id="debugger"><textarea id="eventReport"></textarea><input type="text" id="tt" value="10"/></div>');
		showIma();
	}
	if(debug!=true&&(ua.indexOf('ipad')<1 && ua.indexOf('iphone')<1)){
		setTimeout("redirect()",100);
		return false;
	}else{
		if(ua.indexOf('ipad')>=0 || ua.indexOf('iphone')>=0){
			if(ua.indexOf('iphone')>=0){ 
				iPhone = true;
				var t = $('#mppPlaylist').html();
				$('#mppPlaylist').remove();
				$('#video-player-container').append('<div id="mppPlaylist" class="vp standard" style="margin-top:3px;">'+t+'</div>');
				hiddenControls.push('playlistButton','replayButton','shareButton','fullScreenButton','controls');
			}
			touchControls = true;
			hiddenControls.push('replayButton','scrubber','fastButton','volumeButton','goLiveButton','liveButton','pauseButton');
		}else{
			hiddenControls.push('volumeButton');
		}
		if(touchControls==true){
			hiddenControls.push('show-playlist-button');
		}
		myVideo = $('video')[0];
		myVideo.addEventListener('progress',showLoad,false);
		myVideo.addEventListener('canplaythrough',myAutoPlay,false);
		myVideo.addEventListener('ended',restartVideo,false);
	}
	$('#playbackRegion').hover(//for non-touch device
		function(){
			if(hoverStates==true){
				imaReport('hover in');
				$('#show-video-title,#show-playlist-button,#playlist').show();
			}
		},
		function(){
			if(hoverStates==true){
				imaReport('hover out');
				$('#show-video-title,#show-playlist-button,#playlist').delay(1000).fadeOut(300);
			}
		}
	);
});
function showIma(){
	if(document.getElementById('debugger')){$('#debugger').css('display','block');}
}
function findDomain(u){
	if(u){
	var url = u.replace('http://','');
	urlparts = url.split('/');
	return urlparts[0];
	}
}
function mppLogging(ue,data,added){
	logXml += '<log id="'+ue+'" v="'+data+'"';
	if(added!=''){ logXml += ' b="'+added+'"';}
	logXml += '/>';
}
function mppSendLogs(){	
	if(uGuid) { 
		//alert('<?xml version="1.0" encoding="utf-8"?><logs id="'+uGuid+'">'+logXml+'</logs>');
		var blogXml = encodeBase64('<?xml version="1.0" encoding="utf-8"?><logs id="'+uGuid+'">'+logXml+'</logs>');
		//if(findDomain(loggingUrl)==thishost){
			var logUrl = 'mppProxy.aspx';
			logUrl = loggingUrl+'/PlayerLogInsertXML';
			var lData = 'xmlStr='+blogXml;
			//var logData = (logUrl!='mppProxy.aspx') ? lData : 'url='+loggingUrl+'/PlayerLogInsertXML&params='+lData;
			logData = lData;
			//var logData = (logUrl!='mppProxy.aspx') ? lData : 'url='+loggingUrl+'/PlayerLogInsertXML&params='+lData.replace(/=/gi,'**').replace(/&/gi,'!!').replace('+','^^');
			$.ajax({
				type: 'POST',
				url: logUrl,
				data: logData,
				dataType: 'text',
				cache: false,
				success: function(t){
					//mppClearLogs();
				}
			});
			mppClearLogs();
		//}else{ //send through iframe
		//	$('#xmlStr').val(blogXml); alert(blogXml);
		//	var logUrl = loggingUrl+'/PlayerLogInsertXML';
		//	$('#mppLogForm').attr('action',logUrl);
		//	$('#mppLogForm').submit();
		//	mppClearLogs();
		//}
	}else{
		if(initGuidGet==false){
			initGuidGet = true;
			var playerId = $('#PlayerIdHiddenField').val();
			//if not on domain
			var logUrl = (findDomain(loggingUrl)==thishost) ? loggingUrl+'/InsertPlayerLog' : 'mppProxy.aspx';
			var lData = 'GUID=&propertyValue='+playerId;
			var logData = (logUrl!='mppProxy.aspx') ? lData : 'url='+loggingUrl+'/InsertPlayerLog&params='+lData.replace(/=/gi,'**').replace(/&/gi,'!!');
			$.ajax({
				type: 'GET',
				url: logUrl,
				data: logData,
				dataType: 'xml',
				cache: false,
				success: function(xml){
					mppClearLogs();
					uGuid = $(xml).find('string').text();
					//getConfig(playerId);//now called without log regard
				},
				statusCode: {
					404: function() { $('#loader div').html('Unable to initialize player.'); },
					500: function() { $('#loader div').html('Error initializing player.'); },
					501: function() { $('#loader div').html('Error initializing player ID'); }
				}
			});
		}
	}
}
function mppClearLogs(){
	logXml = '';
	clearInterval(logTimer);
	logTimer = setInterval("mppSendLogs()",30000);
}
function getConfig(pid){
	var mppConfigUrl = (findDomain(servicesUrl)==thishost) ? servicesUrl+'/GetPlayerProperties' : 'mppProxy.aspx';
	if(mppLocalTest){ mppConfigUrl = 'GetPlayerProperties.xml'; }
	var cData = 'PlayerId='+pid+'&rand='+randomInt();
	var mppConfigData = (mppConfigUrl!='mppProxy.aspx') ? cData : 'url='+servicesUrl+'/GetPlayerProperties&params='+cData.replace(/=/gi,'**').replace(/&/gi,'!!');
	//var mppConfigData = (mppConfigUrl!='mppProxy.aspx') ? cData : 'url='+servicesUrl+'/GetPlayerProperties&'+cData;
	$.ajax({
		type: 'GET',
		url: mppConfigUrl,
		data: mppConfigData,
		dataType: 'text',
		cache: false,
		statusCode: {
			404: function() { showError('Unable to locate player configuration'); },
			500: function() { showError('Unable to retrieve player configuration'); },
			501: function() { showError('Unable to decode player configuration'); }
		},
		success: function(t){
			var xml = StringtoXML( t.replace(/&gt;/gi,'>').replace(/&lt;/gi,'<') );
			$(xml).find('Player').each(function(i){
				properties['TemplateId'] = $(this).attr('TemplateId');
				properties['ThemeId'] = $(this).attr('ThemeId');
			});
			$(xml).find('Property').each(function(j){
				properties[$(this).attr('PropertyName')] = $(this).attr('PropertyValue');
				//alert($(this).attr('PropertyName')+' = '+$(this).attr('PropertyValue')+'\n'+properties[$(this).attr('PropertyName')]);
			});
			buildPlayerVisual();
			var p = ua+'<br/>';
			for(k in properties){
				p += k+': '+properties[k]+'<br/>';
			}
			$('#props').html(p);
			getPlaylist();
			//beginPlayFade('in');
		}
	});
}

function buildPlayerVisual(){
	canvasData[0] = new Array('P:25,10|25,26|40,17'); //play
	canvasData[1] = new Array('R:22,13,6,11','R:30,13,6,11'); //pause
	canvasData[2] = new Array('P:45,10|45,26|35,17','P:35,10|35,26|25,17'); //rewind
	canvasData[3] = new Array('P:25,10|25,26|35,17','P:35,10|35,26|45,17'); //fast
	canvasData[4] = new Array('P:16,19|30,19|23,25','T:'+properties['replaySecs'],'BC:S,23,19,26,9,38,9,41,16,3');
	canvasData[5] = new Array('T:LIVE');
	canvasData[6] = new Array('T:GO LIVE');
	canvasData[7] = new Array('L:37,13|25,18','L:37,23|25,18','A:F,25,18,3,0,2,false','A:F,37,13,3,0,2,false','A:F,37,23,3,0,2,false');
	canvasData[8] = new Array();
	canvasData[9] = new Array('P:30,19|28,21|25,19|25,26|32,26|30,23|32,20|36,14|38,11|36,8|43,8|43,15|40,13|37,15|36,14|32,20');
	canvasData[10] = new Array('R:22,13,6,4','R:22,19,6,4','R:30,13,6,4','R:30,19,6,4');
	canvasData[11] = new Array('P:28,40|28,60|12,50'); //scrollLeft
	canvasData[12] = new Array('P:12,40|12,60|28,50'); //scrollRight
	
	//this stays in function - the button stuff should move outside
	var buttonsL = new Array(1,2,0,3,4,5,6);
	var buttonsR = new Array(8,9,7);
	var buttonsP = new Array(11,12);
	if(touchControls==true){buttonsR.push(10);}
	//control regions
	if(properties['TemplateId']==1){
		$('#scrubber').remove();
		$('#controls').append($('<div></div>')
			.attr( { id: 'scrubber' } )
			.addClass('vp')
			.addClass('standard')
		);
	}
	$('#scrubber').addClass('tpl'+properties['TemplateId']);
	$('#controls-inner-under').append($('<canvas></canvas>')
		.attr( { id: 'controlsCanvas' } )
		.attr( { width: myVideo.width } )
		.attr( { height: 35 } )
		.css('position','absolute')
		.css('top','18px')
	);
	drawCanvas(0,'controls');
	if(iPhone==false){
		//dont draw beginplay if iPhone
		//canvas of the beginPlay box
		var mvw = Math.ceil(myVideo.width/3);
		var mvh = Math.ceil(myVideo.height/2);
		$('#begin-play').append($('<div></div>')
			.attr( { id: 'inner-begin-play' } )
			.attr( { width: Math.ceil(myVideo.width/3) } )
			.attr( { height: Math.ceil(myVideo.height/2) } )
			.css('margin',Math.ceil((myVideo.height/2)/2)+'px auto')
		);
		$('#inner-begin-play').append($('<canvas></canvas>')
			.attr( { id: 'beginPlayCanvas' } )
			.attr( { width: Math.ceil(myVideo.width/3) } )
			.attr( { height: Math.ceil(myVideo.height/2) } )
			.css('opacity','.35')
		);
		$('#inner-begin-play').append($('<canvas></canvas>')
			.attr( { id: 'beginPlayArrowCanvas' } )
			.attr( { width: Math.ceil(myVideo.width/3) } )
			.attr( { height: Math.ceil(myVideo.height/2) } )
			.css('opacity','1')
			.css('margin-left',-mvw+'px')
		);
		canvasData[98] = new Array('R:0,0,'+mvw+','+mvh);
		drawCanvas(98,'beginPlay');
		canvasData[99] = new Array('P:'+mvw/3+','+mvh/3+'|'+mvw/3+','+2*(mvh/3)+'|'+2*(mvw/3)+','+mvh/2);
		drawCanvas(99,'beginPlayArrow');
		$('#begin-play').show();
	}else{
		canvasData[11] = new Array('P:40,30|40,70|0,50'); //scrollLeft
		canvasData[12] = new Array('P:0,30|0,70|40,50'); //scrollRight
		//color the playlist
		$('#mppPlaylist,#playlist-videos').addClass('theme'+properties['ThemeId']);
	}
	
	//buttons
	buttonsR.reverse(); //switches the order so that they will stack properly
	for(k in buttonsR){
		var value = buttonsR[k];
		$('#video-controls').addClass('theme'+properties['ThemeId']);
		$('#'+buttons[value]+'Button').append($('<canvas></canvas>')
			.attr( { id: buttons[value]+'Canvas' } )
			.attr( { width: 65 } )
			.attr( { height: 35 } )
			.addClass('buttonCanvas')
		);
		drawCanvas(value,buttons[value]);
	}
	for(k in buttonsL){
		var value = buttonsL[k];
		$('#'+buttons[value]+'Button').append($('<canvas></canvas>')
			.attr( { id: buttons[value]+'Canvas' } )
			.attr( { width: 65 } )
			.attr( { height: 35 } )
			.addClass('buttonCanvas')
		);
		drawCanvas(value,buttons[value]);
	}
	for(k in scrubber){
		var value = scrubber[k];
		$('#scrubber').append($('<div></div>')
			.attr( { id: scrubber[value] } )
		);
	}
	for(k in buttonsP){
		var value = buttonsP[k];
		$('#'+buttons[value]+'Button').append($('<canvas></canvas>')
			.attr( { id: buttons[value]+'Canvas' } )
			.attr( { width: 40 } )
			.attr( { height: 100 } )
			.addClass('pointer')
		);
		drawCanvas(value,buttons[value]);
	}
	if(properties['emailButtonEnabled'].toLowerCase()=='false'){
		hiddenControls.push('shareButton');
	}
	if($('#watermark img').attr('src')=='undefined'||$('#watermark img').attr('src')==undefined){
		$('#watermark').hide();
	}
	for(o in hiddenControls){
		$('#'+hiddenControls[o]).hide();
		if(hiddenControls[o]=='scrubber'){
			$('#controlsCanvas').css('top','0px');
		}
	}
	var tabColor = playerThemes[ properties['ThemeId'] ][1];
	var txtColor = playerThemes[ properties['ThemeId'] ][2];
	
	$('#controls').addClass('theme'+properties['ThemeId']);
	$('#mppreporter').addClass('theme'+properties['ThemeId']);
	$('#shareBoxInner').css('background-color','rgba('+h2d(tabColor.substr(0,2))+','+h2d(tabColor.substr(2,2))+','+h2d(tabColor.substr(4,2))+',.6)');
	$('#shareBoxInner').css('border','solid 1px #'+tabColor);
	$('#shareBoxHeader').css('background-color','#'+tabColor);
	$('#shareBoxHeader').css('color','#'+txtColor);
	$('#shareBox').hide();
	if(properties['watermark']!=''){
		$('#watermark').html('<img style="float:right;" src="'+properties['watermark']+'"/>');
		$('#watermark').css('display','block');
		$('#watermark').css('margin-top', ($('#video-player').height-$('#watermark').height()-2)+'px');
	}
	$('#loader').fadeOut(300).remove();
}

function drawCanvas(k,o) {
	var canvas = document.getElementById(o+'Canvas');
	var ctx = canvas.getContext("2d");
	//if(o=='controls'||o=='beginPlay'){
	if(o=='controls'){
		var cgr = ctx.createLinearGradient(0,0,0,canvas.height);
		cgr.addColorStop(0,'#'+playerThemes[ properties['ThemeId'] ][2]);
		cgr.addColorStop(0.1,'#'+playerThemes[ properties['ThemeId'] ][1]);
		ctx.fillStyle = cgr;
		ctx.fillRect(0,0,canvas.width,canvas.height);
	}else{
		ctx.fillStyle = properties['primaryColor'].replace(/#FF/i,'#');
		ctx.strokeStyle = properties['primaryColor'].replace(/#FF/i,'#');
		if(canvasData[k].length>0){
			var canvasItem = canvasData[k];
			for(ck in canvasItem){
				var thisSet = canvasItem[ck].split(':');
				switch(thisSet[0]){
					case 'R': //rect
						var coords = thisSet[1].split(',');
						ctx.fillRect(coords[0],coords[1],coords[2],coords[3]);
						break;
					case 'T': //text
						ctx.save();
						ctx.textBaseline = 'top';
						ctx.font = '20px Sans-Serif';
						ctx.translate(0,0);
						ctx.fillText = (thisSet[1],0,20);
						//now you need to center it with offsets if included in additional set values
						//centerX -(Math.round(c.measureText(text).width/2))
						ctx.restore();
						break;
					case 'P': //path
					case 'L': //path
						var i = 0;
						ctx.beginPath();
						var coords = thisSet[1].split('|');
						for(v in coords){
							var pair = coords[v];
							var thisv = pair.split(',');
							if(i==0){
								ctx.moveTo( parseInt(thisv[0]),parseInt(thisv[1]) );
							}else{
								ctx.lineTo( parseInt(thisv[0]),parseInt(thisv[1]) );
							}
							i++;
						}
						if(thisSet[0]=='P'){
							ctx.closePath();
							ctx.fill();
						}else{
							ctx.lineWidth=2;
							ctx.stroke();
						}
						break;
					case 'A':
						ctx.beginPath();
						var arcdata = thisSet[1].split(',');
						ctx.arc(arcdata[1],arcdata[2],arcdata[3],arcdata[4],Math.PI*arcdata[5],arcdata[6]);
						if(arcdata[0]=='F'){//Fill or Stroke
							ctx.fill();
						}else{
							ctx.lineWidth=arcdata[7];
							ctx.stroke();
						}
						ctx.closePath();
						break;
					case 'BC':
						ctx.beginPath();
						var curvedata = thisSet[1].split(',');
						ctx.moveTo(curvedata[1],curvedata[2]);
						ctx.bezierCurveTo(curvedata[3],curvedata[4],curvedata[5],curvedata[6],curvedata[7],curvedata[8]);
						if(curvedata[0]=='F'){//Fill or Stroke
							ctx.fill();
						}else{
							ctx.lineWidth=curvedata[9];
							ctx.stroke();
						}
						ctx.closePath();
						break;
				}
			}
		}
	}
}

function getPlaylist(){
	if(properties['mediaFeedUrl']!=''){
		var mppPlaylistUrl = (findDomain(properties['mediaFeedUrl'])==thishost) ? properties['mediaFeedUrl'] : 'mppProxy.aspx';
		if(mppLocalTest){ mppConfigUrl = 'mediafeed-6.xml'; }
		var cData = 'rand='+randomInt();
		var mppPlaylistData = (mppPlaylistUrl!='mppProxy.aspx') ? cData : 'url='+properties['mediaFeedUrl']+'&params='+cData.replace(/=/gi,'**').replace(/&/gi,'!!');
		$.ajax({
			type: 'GET',
			url: mppPlaylistUrl,
			data: mppPlaylistData,
			dataType: 'xml',
			cache: false,
			success: function(xml){
				aBullets = new Array;
				ttl = $(xml).find('ttl').text(); if(ttl<1){ttl=300;}
				mb_autoplay = $(xml).find('autoPlay').text(); 
				var g = 0;
				var i = 0;
				var phtml = '';
				var thtml = '';
				$(xml).find('mediaBlob > mediaGroup').each(function(){
					var groups = new Array();
					var inner = new Array();
					if(g>0){
						phtml += '</div>';
					}
					//$('#foo').append( $(this).find('mediaGroupTitle:first').text()+' = <em>'+$(this).find('mediaGroupType:first').text().toUpperCase()+'</em><br/>' );
					groups['mediagrouptype'] = $(this).find('mediaGroupType:first').text().toUpperCase();
					
					phtml += '<div id="group'+g+'" class="groupitems" style="left:0px;">';
					thtml += '<span id="tab'+g+'" class="grouptab '+$(this).find('mediaGroupType:first').text()+'" onclick="changeGroup('+g+');"><span>'+$(this).find('mediaGroupTitle:first').text()+'</span></span>';
					var skipItems = false;
					groups['mediagrouptitle'] = $(this).find('mediaGroupTitle:first').text();
					var useThumb = '';
					
					$(this).children('item').each(function(){
						//$('#foo').append( '- '+$(this).find('itemTitle:first').text()+'<br/>' );
						var iteminner = new Array();
						if(i==0&&skipItems==true){
							useThumb = $(this).find('itemImages:first').find("image").text();
							skipItems = false;
							i = -1;
						}else{
							useThumb = ($(this).find('itemImages:first').find('image').text()=='') ? useThumb : $(this).find('itemImages').find('image').text();
							phtml += '<div id="group'+g+'-item'+i+'" class="item" onclick="startPlayback('+g+','+i+');">';
							phtml += '	<div class="iteminnerdata"><img src="'+useThumb+'" border="0"/></div>';
							phtml += '	<div class="iteminnerdata itemtitle">'+$(this).find('itemTitle:first').text()+'</div>';
							phtml += '</div>';
							iteminner['category'] = $(this).attr('group');
							iteminner['rank'] = $(this).attr('rank');
							iteminner['rank'] = $(this).attr('rank');
							iteminner['itemID'] = $(this).find('itemID:first').text();
							iteminner['itemTitle'] = $(this).find('itemTitle:first').text();
							iteminner['itemAbstract'] = $(this).find('itemAbstract:first').text();
							iteminner['itemAuthor'] = $(this).find('itemAuthor:first').text();
							iteminner['itemDuration'] = $(this).find('itemDuration:first').text();
							iteminner['thumb'] = useThumb;
							iteminner['tags'] = $(this).find('tags').text();
							iteminner['media'] = $(this).find('itemMediaURI:first').find('midBitrate:first').text();
							inner[i] = iteminner;
						}
						i++;

					});
					groups['items'] = inner;
					mediagroup[g] = groups;
					g++;
					i = 0;
				});
				phtml += '</div>';
				$('#playlist-categories').html(thtml);
				$('#scroller-region').html(phtml);
				for(g in mediagroup){
					$('#tab'+g+' span').html( mediagroup[g]['mediagrouptitle'] );
					$('#group'+g).css('width', ($('#group'+g+' .item').size()*165)+'px');
				}
				changeGroup(0);
				var tabColor = playerThemes[ properties['ThemeId'] ][1];
				var txtColor = playerThemes[ properties['ThemeId'] ][2];
				$('.grouptab').css('background-color','rgba('+h2d(tabColor.substr(0,2))+','+h2d(tabColor.substr(2,2))+','+h2d(tabColor.substr(4,2))+',.6)');
				$('.grouptab').css('color','#'+txtColor);
				//click_togglePlaylist();
				resizeScroller();
				startPlayback(currentGroup,currentItem);
				setTimeout("getPlaylist()",(ttl*1000));
				$('#tt').val(ttl);
			}
		});
	}else{
		showError('mediaFeed not specified');
	}
}
function resizeScroller(){
	$('#scroller-region').css('width',($('#playlist-region').width()-80-4)+'px');
}
function countInstances(str,needle){
	var s = str.split(needle);
	return s.length-1;
}
function dump(arr,level) { //acts as print_r
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
function d2h(d) {return d.toString(16);}
function h2d(h) {return parseInt(h,16);} 
function restartVideo(){
	itemData = new Array();
	currentItem = 0;
	getPlaylist();
}
function beginPlayFade(inout){
	if(iPhone==false){
		if(inout=='in'){
			$('#begin-play').fadeIn(100);
		}else{
			$('#begin-play').fadeOut(100);
		}
	}
}
function countdown(){
	if(ttl==0){
		clearInterval(setInt);
	}else{
		if($('#tt').val()>-1){
			$('#tt').val( parseInt($('#tt').val())-1 );	
		}else{
			$('#tt').val(ttl);
		}
	}
}
function redirect(){
	if(iPhone){
		location.href='ipadonly.html';
	}else{
		location.href='ipadonly.html';
	}
}
function click_goLive(){
	imaReport('goLive()');
	if(adPlaying==false){
		myVideo.load();
		myVideo.play();
		$('#goLiveButton').hide();
		$('#liveButton').show();
	}
}
var currentSource = '';
function startPlayback(g,i){
	//alert('startPlayback('+g+','+i+')');
	//$('#adUrl').val(itemData[i][4]);
	//imaReport('video buffer state: '+myVideo.buffered);
	//alert(mediagroup[currentGroup]['items'][i]['itemTitle']);
	//if(itemData[i][5]=='true' && initPlay==true){ //do ads
	//	imaReport('run ad from '+itemData[i][4]);
	//	$('#reporter').html('ADVERTISEMENT - we will return to programming shortly');
	//	if(adPlaying==false){
	//		requestAds();
	//	}
	//}else{
		initPlay=true;
		//if(adPlaying==true && itemData[i][5]=='false'){
		//	imaReport('resume content (adPlaying='+adPlaying+'|xml-runads='+itemData[i][5]+')');
		//}
		//need to add check in case playback has stopped for some reason
		if(currentSource!=mediagroup[currentGroup]['items'][i]['itemID']){
			currentSource = mediagroup[currentGroup]['items'][i]['itemID'];
			imaReport('startPlayback('+g+','+i+') new video: '+mediagroup[currentGroup]['items'][i]['media']);
			myVideo.src=mediagroup[currentGroup]['items'][i]['media'];
			$('#loaded,#played').css('width','0px');
			myVideo.load();
			myVideo.play();
			$('#reporter,#show-video-title span').html(mediagroup[currentGroup]['items'][i]['itemTitle']);
			$('#playTitle').val(mediagroup[currentGroup]['items'][i]['itemTitle']);
			$('#playPauseButton,#replayButton').show();
			mppLogging(10,mediagroup[currentGroup]['items'][i]['itemID'],deviceId);
			if(mediagroup[currentGroup]['mediagrouptype']=='VOD'){
				$('#goLiveButton,#liveButton').hide();
			}else{
				$('#goLiveButton').hide();
				$('#liveButton').show();
			}
			mppSendLogs();
			toggleScrubber(mediagroup[currentGroup]['mediagrouptype'].toUpperCase());
			vload = setInterval("showLoad()",100);
			click_playPause();
			click_togglePlaylist();
		}
	//}
}
function toggleScrubber(mediatype){
	if(touchControls==true || mediatype=='LIVE'){
		$('#scrubber').hide();
	}else{
		$('#scrubber').show();
		$('#scrubber').css('margin','-2px auto');
	}
	
	resizeControls();
}
function resizeControls(){
	if($('#scrubber').css('display','none')){
		$('#controls').css('height', parseInt($('#video-controls').css('height')) );
		$('#controlsCanvas').css('top','0px');
	}else{
		$('#controls').css('height', parseInt($('#video-controls').css('height'))+parseInt($('#scrubber').css('height')) );
		$('#controlsCanvas').css('top',$('#scrubber').css('height'));
	}
}
function nextPlaylistItem(){
	currentItem++;
	startPlayback(currentGroup,currentItem);
}
function click_replay(){
	imaReport('replay()');
	if(adPlaying==false){
		var ct = myVideo.currentTime;
		if(ct>parseInt(properties['replaySecs'])){
			myVideo.currentTime = ct-parseInt(properties['replaySecs']);
		}else{
			myVideo.currentTime = 0;
		}
		if( mediagroup[currentGroup]=='LIVE' ) {
			$('#goLiveButton').show();
			$('#liveButton').hide();
		}
	}
}
function playPause(){
	click_playPause();
}
function click_playPause() {
	imaReport('playPause()');
	if(iPhone){
		//always hidden in iPhone (uses native)
		$('#pauseButton,#playButton').hide();
	}else{
		if (myVideo.paused){
			myVideo.play();
			vload = setInterval("showLoad()",100);
		}else{
			clearInterval(vload);
			myVideo.pause();
		}
		setTimeout("toggle_pp()",750);
		//$('#playButton,#pauseButton,#begin-play').toggle();
	}
}
function toggle_pp(){
//		alert(myVideo.paused);
		if (myVideo.paused){
			$('#pauseButton').hide();
			$('#playButton').show();
			$('#begin-play').show();
		}else{
			$('#playButton').hide();
			$('#begin-play').hide();
			$('#pauseButton').show();
		}
}
function showShare() {
	click_showShare();
}
function click_showShare() {
	$('#mppPlaylist').hide();
	if($('#shareBox').css('display')=='block'){
		$('#shareBox').fadeOut(300);
	}else{
		$('#shareBox').fadeIn(200);
	}
}
function click_shareLink(i){
	var mppi_title = encodeURI(mediagroup[currentGroup]['items'][currentItem]['itemTitle']);
	var mppi_thumb = encodeURI(mediagroup[currentGroup]['items'][currentItem]['thumb']);
	var mppi_eurl = encodeURI(window.location.href);
	var mppi_desc = encodeURI(mediagroup[currentGroup]['items'][currentItem]['itemAbstract']);
	var mpps_wurl = '';
	switch(i){
		case 3:	//FB
			mpps_wurl = 'http://www.facebook.com/sharer.php?s=100&p[title]='+mppi_title+'&p[url]='+mppi_eurl+'&p[summary]='+mppi_desc+'&p[images][0]='+mppi_thumb;
			break;
		case 2: //TW
			mpps_wurl = 'http://twitter.com/?status='+mppi_title+' '+mppi_eurl;
			break;
		case 4: //ST
			mpps_wurl = 'http://www.stumbleupon.com/submit?url='+mppi_eurl+'&title='+mppi_title;
			break;
		case 5: //DG
			mpps_wurl = 'http://digg.com/login?redirect=%2Ftools%2Fdiggthis%2Fconfirm%3Furl%3D'+mppi_eurl+'%26title%3D'+mppi_title;
			break;
		case 6: //GO
			mpps_wurl = '';
			break;
		case 7: //YBZ
			mpps_wurl = 'https://www.google.com/accounts/ServiceLogin?hl=en&continue=https://www.google.com/bookmarks/mark%3Fop%3Dadd%26bkmk%3D'+mppi_eurl+'%26title%3D'+mppi_title+'&nui=1&service=bookmarks';
			break;
		case 8: //YBK
			mpps_wurl = 'https://login.yahoo.com/config/login?.src=bmk2&.intl=us&.done=http%3A%2F%2Fbookmarks.yahoo.com%2Fmyresults%2Fbookmarklet%3Ft%3D'+mppi_title+'%26amp%3Bu%3D'+mppi_eurl;
			break;
	}
	if(mpps_wurl!=''){ 
		window.open(mpps_wurl,'D3'); 
		mppLogging(26,mediagroup[currentGroup]['items'][i]['itemID'],i)
	}
}
function click_makeBig() {
	if(ua.indexOf('ipad')>=0 && myVideo.webkitSupportsFullscreen){
		myVideo.webkitEnterFullscreen();
	}else{
		var test = $('#video-player').width();
		if(test>640){
			$('.vp,.playbackContainer,#players').addClass('standard');
			$('.vp,.playbackContainer,#players').removeClass('wide');
		}else{
			/*
			$('#playbackRegion').addClass('wide');
			$('#playbackRegion').removeClass('standard');
			var w = $('#playbackRegion').width();
			$('.vp').animate({ width: w+'px' }, 500);
			$('.playbackContainer').animate({ width: w+'px' }, 500);
			*/
			$('.vp,.playbackContainer,#players').addClass('wide'); //
			$('.vp,.playbackContainer,#players').removeClass('standard'); //
		}
		$('#controlsCanvas').attr('width',$('#video-player').width());
		$('#mppVideoPlayerBox').css('height',$('#video-player').height()+'px');
		resizeScroller();
		$('#watermark').css('margin-top', ($('#video-player').height()-$('#watermark').height()-2)+'px');
	}
}
function makeNormal() {
	myVideo.height = (myVideo.videoHeight) ;
	resizeScroller()
}
function showLoad() {
	var X = ' | ';
	var pctLoaded = (myVideo.buffered) ? (myVideo.buffered.end(0) / myVideo.duration) : 0;
	var pixLoaded = parseInt($('#scrubber').css('width'))*pctLoaded;
	if(pixLoaded>parseInt($('#scrubber').css('width'))){pixLoaded=parseInt($('#scrubber').css('width'));}
	$('#loaded').css('width',parseInt(pixLoaded)+'px');

	var pctPlayed = (myVideo.currentTime / myVideo.duration);
	var pixPlayed = parseInt($('#scrubber').css('width'))*pctPlayed;
	if(pixPlayed>parseInt($('#scrubber').css('width'))){pixPlayed=parseInt($('#scrubber').css('width'));}
	$('#played').css('width',parseInt(pixPlayed)+'px');
	
	var mb = myVideo.buffered;
	$('#timePlayed').html( makeTimer(myVideo.currentTime) );
	$('#totalTime').html( makeTimer(myVideo.duration) );
}
function reportData(){
	//$('#reporter').html( parseInt(myVideo.currentTime)+X+myVideo.buffered[0]+X+myVideo.played[0]+X+myVideo.seekable );
}
function myAutoPlay() {
	//myVideo.play();
}
function changeSpeed(s){
	click_changeSpeed(s);
}
function click_changeSpeed(s){
	alert(myVideo.playbackRate);
	//can range -1,1,2
	//http://net.tutsplus.com/tutorials/html-css-techniques/html5-audio-and-video-what-you-must-know/
	//currently only works in Webkit browsers
	if (s == undefined) s = 2; // or -1 for reverse  
	if (myVideo.playbackRate != undefined) {  
		//myVideo.playbackRate = direction == 1 ? 2 : -2;  
		myVideo.playbackRate = s;
	} else { // do it manually  
		myVideo.setAttribute('data-playbackRate', setInterval ((function playbackRate () { 
			myVideo.currentTime += s; 
			return playbackRate; // allows us to run the function once and setInterval 
		})(), 500)); 
	} 
}

function makeTimer(s){
	var t;
	s = Math.floor(s);
	if(s>60){
		var n = Math.floor(s/60);
		s = s - (n*60);
		if(n>60){
			var h = Math.floor(n/60);
			n = n - (h*60);
			t = padNum(h)+':'+padNum(n)+':'+padNum(s);
		}else{
			t = padNum(n)+':'+padNum(s);
		}
	}else{
		t = '00:'+padNum(s);
	}
	return t;
}
function padNum(n){
	pn = (n<10) ? '0'+n : n ;
	return pn;
}
function makeNaturalSize() {
	myVideo.width=myVideo.videoWidth;
	myVideo.height=myVideo.videoHeight;
	$('#video-player,#video-controls,#scrubber').css('width',myVideo.width+'px');
	$('#video-player').css('height',myVideo.height+'px');
}
function click_togglePlaylist(){
	$('#shareBox').hide();
	if(!iPhone){
		if(hoverStateB==false){
			hoverStateB=true;
			$('#mppPlaylist').fadeIn(300);
			$('#show-video-title').show();
		}else{
			hoverStateB=false;
			$('#mppPlaylist').fadeOut(200);
			$('#show-video-title').hide();
		}
	}
	
}
function click_scrollPlaylist(d){
	//need diff for touch/non? mouseover/mousedown/mouseup
	var curGroupPosition = parseInt($('#group'+currentGroup).css('left'));
	var curGroupSize = $('#group'+currentGroup).width();
	var displayWindowSize = $('#scroller-region').width();
	var itemsFullView = Math.floor(displayWindowSize / ($('#scroller-region div.item').width()+4));
	var newGroupPosition = Math.floor( curGroupPosition + (d*(itemsFullView * 164))  );
	if(d<0 && (-1*newGroupPosition)>(curGroupSize-164)){
		newGroupPosition = curGroupPosition;
	}
	if(d>0 && newGroupPosition>0){
		newGroupPosition = 0;
	}
	//alert('Pos: '+curGroupPosition+'\nSize: '+curGroupSize+'\nAllow: '+displayWindowSize+'\nItems Each: '+itemsFullView+'\nMove To: '+newGroupPosition);
	$('#group'+currentGroup).css('left',newGroupPosition+'px');
}

function changeGroup(g){
	currentGroup = g;
	$('#scroller-region .groupitems').css('left','0px');
	$('.groupitems').hide();
	$('#group'+g).show();
	if(Math.floor($('#scroller-region').width()/($('#scroller-region div.item').width()+4))>=$('#group'+g+' .item').size()){
		$('.mppScrollControl').css('opacity','0');
	}else{
		$('.mppScrollControl').css('opacity','1');
	}
}
function randomInt(){
	return Math.floor(Math.random()*1000000000000);
}
function failed(e) {
	// video playback failed - show a message saying why
	switch (e.target.error.code) {
		case e.target.error.MEDIA_ERR_ABORTED:
			alert('You aborted the video playback.');
			break;
		case e.target.error.MEDIA_ERR_NETWORK:
			alert('A network error caused the video download to fail part-way.');
			break;
		case e.target.error.MEDIA_ERR_DECODE:
			alert('The video playback was aborted due to a corruption problem or because the video used features your browser did not support.');
			break;
		case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
			alert('The video could not be loaded, either because the server or network failed or because the format is not supported.');
			break;
		default:
			alert('An unknown error occurred.');
			break;
	}
}

function showError(e){
	alert(e);
	//need to pop message on interface
}
function StringtoXML(text){
	if (window.ActiveXObject){
	  var doc=new ActiveXObject('Microsoft.XMLDOM');
	  doc.async='false';
	  doc.loadXML(text);
	} else {
	  var parser=new DOMParser();
	  var doc=parser.parseFromString(text,'text/xml');
	}
	return doc;
}
function imaReport(r){
	if(document.getElementById('eventReport')){$('#eventReport').val( r + '\n' + $('#eventReport').val() );}
}
function logError(v){
	v = v.replace(/</g,'&lt;');
	v = v.replace(/>/g,'&gt;');
	imaReport(v);
}
