var events=[];var errors=[];var vid='';var chromeless=false;var isAS2=false;var useOriginalParameters=true;var definedPlayers={'AS2':1,'AS3':1,'HTML5':1};var playerParameters=['autohide','autoplay','border','cc_load_policy','color','controls','disablekb','enablejsapi','egm','fs','hd','iv_load_policy','loop','modestbranding','origin','playerapiid','playlist','rel','showinfo','showsearch','start'];var unsupported={'AS2':{'controls':1,'modestbranding':1,'origin':1,'playlist':1},'AS3':{'border':1,'color':1,'egm':1,'hd':1,'showsearch':1},'HTML5':{'border':1,'cc_load_policy':1,'color':1,'disablekb':1,'egm':1,'fs':1,'hd':1,'iv_load_policy':1,'modestbranding':1,'playerapiid':1,'rel':1,'showinfo':1,'showsearch':1},}
var as2Options={'border':1,'color1':1,'color2':1,'disablekb':1,'egm':1,'hd':1,'showsearch':1};var as3Options={'controls':1,'playlist':1};var ytswf;var qualityLevels={'default':1,'highres':1,'hd1080':1,'hd720':1,'large':1,'medium':1,'small':1};var colorRegex=/\#?[0-9A-Fa-f]{6}/;function getParamValue(param){var loc=location.search.substring(1,location.search.length);var paramValue;var params=loc.split('&')
for(i=0;i<params.length;i++){paramName=params[i].substring(0,params[i].indexOf('='));if(paramName==param){paramValue=params[i].substring(params[i].indexOf('=')+1);}}
return paramValue;}
function constructUrl(baseUrl){vid=getParamValue('v')?getParamValue('v'):'u1zgFlCw8Aw';chromeless=(getParamValue('playerType')&&(getParamValue('playerType')=='chromeless')?true:false);isAS2=getParamValue('playerVersion')&&(getParamValue('playerVersion')=='as2');var argsString='enablejsapi=1&playerapiid=ytplayer';(baseUrl.search('\/$'))||(baseUrl+='/');if(xssSanitizer('Video ID',vid,'videoId')){if(chromeless){apiUrl=(isAS2)?baseUrl+'apiplayer?video_id='+vid+'&'+argsString:baseUrl+'apiplayer?version=3&video_id='+vid+'&'+argsString;}else if(!isAS2){apiUrl=(argsString)?baseUrl+'v/'+vid+'?version=3&'+argsString:baseUrl+'v/'+vid+'?version=3';}else{apiUrl=(argsString)?baseUrl+'v/'+vid+'?'+argsString:baseUrl+'v/'+vid;}
return apiUrl;}
return baseUrl+'apiplayer?version=3&video_id=u1zgFlCw8Aw&'+argsString;}
function updatePlayer(){var playerType=document.getElementById('playerType').value;var playerVersion=document.getElementById('playerVersion').value;location.href='/apis/youtube/youtube_player_demo.html?'+'playerType='+playerType+'&playerVersion='+playerVersion;}
function switchPlayerType(playerType){document.getElementById('playerType').value=playerType;updatePlayer();}
function setPlayerOptions(){if(chromeless){document.getElementById('playerType').value='chromeless';}
if(isAS2){document.getElementById('playerVersion').value='as2';}}
function showPlayerParameters(selectId){var originalParameters=getParamValue('playerVersion');if(originalParameters&&definedPlayers[originalParameters]&&useOriginalParameters){document.getElementById('playerVersion').value=originalParameters;}
useOriginalParameters=false;var firstChangeText='any YouTube embedded player';var secondChangeText='any YouTube embedded player';var parameterSubheaderText='All YouTube player parameters';var playerVersion=document.getElementById('playerVersion').value;if(playerVersion&&definedPlayers[playerVersion]){firstChangeText='the '+playerVersion+' embedded player';parameterSubheaderText=playerVersion+' player parameters';}
var firstChangeElement=document.getElementById('first_change_text');if(firstChangeElement){firstChangeElement.innerHTML=firstChangeText;}
var secondChangeElement=document.getElementById('second_change_text');if(secondChangeElement){secondChangeElement.innerHTML=firstChangeText;}
var parameterSubheader=document.getElementById('parameter-subheader');if(parameterSubheader){parameterSubheader.innerHTML=parameterSubheaderText;}
for(var count in playerParameters){parameterName=document.getElementById(playerParameters[count]);parameterDefinition=document.getElementById(playerParameters[count]+'-definition');parameterLink=document.getElementById(playerParameters[count]+'-link');if(parameterName&&parameterDefinition&&parameterLink){if(playerVersion&&unsupported[playerVersion]&&unsupported[playerVersion][playerParameters[count]]){parameterName.style.display='none';parameterDefinition.style.display='none';parameterLink.style.display='none';}else{parameterName.style.display='';parameterDefinition.style.display='';parameterLink.style.display='';}}}}
function setDisplayedOptions(){for(var option in as2Options){paramRow=document.getElementById(option+'-param');if(isAS2&&paramRow){paramRow.style.display='';}else if(paramRow){paramRow.style.display='none';}}
for(var option in as3Options){paramRow=document.getElementById(option+'-param');if(!isAS2&&paramRow){paramRow.style.display='';}else if(paramRow){paramRow.style.display='none';}}}
function updateColor(box){var colorValue=box.value;var result=colorRegex.exec(colorValue);if(result!=null){if(colorValue.length==6){colorValue='#'+colorValue;}
if(document.getElementById(box.id+'-preview')){document.getElementById(box.id+'-preview').style.backgroundColor=colorValue;}}}
function onYouTubePlayerReady(playerId){if(playerId&&playerId!='undefined'){ytswf=document.getElementById('myytplayer');if(ytswf){if(vid&&chromeless){cueVideo(vid,0);}
setInterval(updateytplayerInfo,1);getVideoUrl();updateytplayerInfo();ytswf.addEventListener('onStateChange','onytplayerStateChange');ytswf.addEventListener('onError','onPlayerError');ytswf.addEventListener('onPlaybackQualityChange','onytplayerQualityChange');}}}
function onytplayerStateChange(newState){events.push('onStateChange event: Player state changed to: "'+newState+'" ('+getPlayerState(newState)+')');updateHTML('playerstate',newState);}
function onPlayerError(errorCode){errors.push('Error: '+errorCode);}
function onytplayerQualityChange(newQuality){events.push('onPlaybackQualityChange event: '+'Playback quality changed to "'+newQuality+'"');updateHTML('playerq',newQuality);}
function updateHTML(elmId,value){if(document.getElementById(elmId)){document.getElementById(elmId).innerHTML=value;}}
function clearOutput(){updateHTML('errorCode','');updateHTML('videoUrl','');updateHTML('eventhistory','');updateHTML('embedCode','');updateHTML('embedPreview','');events=[];errors=[];}
function loadVideo(idOrUrl,startSeconds,quality){if(xssSanitizer('Video ID or URL',idOrUrl,'videoIdOrUrl')&&xssSanitizer('Start at',startSeconds,'digits')&&xssSanitizer('Suggested quality',quality,'qualitylevels')){var urlRegex=/http\:/;if(idOrUrl.match(urlRegex)){ytswf.loadVideoByUrl(idOrUrl,parseInt(startSeconds),quality);events.push('loadVideoByUrl('+idOrUrl+', parseInt('+startSeconds+'), '+quality+');');}else{ytswf.loadVideoById(idOrUrl,parseInt(startSeconds),quality);events.push('loadVideoById('+idOrUrl+', parseInt('+startSeconds+'), '+quality+');');}
getVideoUrl();}}
function cueVideo(idOrUrl,startSeconds,quality){if(xssSanitizer('Video ID or URL',idOrUrl,'videoIdOrUrl')&&xssSanitizer('Start at',startSeconds,'digits')&&xssSanitizer('Suggested quality',quality,'qualitylevels')){var urlRegex=/http\:/;if(idOrUrl.match(urlRegex)){ytswf.cueVideoByUrl(idOrUrl,parseInt(startSeconds),quality);events.push('cueVideoByUrl('+idOrUrl+', parseInt('+startSeconds+'), '+quality+');');}else{ytswf.cueVideoById(idOrUrl,parseInt(startSeconds),quality);events.push('cueVideoById('+idOrUrl+', parseInt('+startSeconds+'), '+quality+');');}
getVideoUrl();}}
function getQuality(){var quality=ytswf.getPlaybackQuality();if(!quality){return'';}
return quality;}
function setQuality(newQuality){events.push('setPlaybackQuality('+newQuality+');');ytswf.setPlaybackQuality(newQuality);}
function getQualityLevels(){return ytswf.getAvailableQualityLevels();}
function play(){events.push('playVideo();');ytswf.playVideo();}
function pause(){events.push('pauseVideo();');ytswf.pauseVideo();}
function stop(){events.push('stopVideo();');ytswf.stopVideo();}
function xssSanitizer(field,value,rulesOfSanitation,skipEvent){var regex=/[\"\<\>]/;if(value.match(regex)){errors.push('These aren\'t the XSS vulnerabilities you\'re looking for.');return false;}else if(rulesOfSanitation){if(rulesOfSanitation=='alphanumeric'){var regex=/[\W]/;if(value.match(regex)){errors.push('This \''+field+'\' value is not supported. The value must be an alphanumeric string.');return false;}}else if(rulesOfSanitation=='digits'){var regex=/[\D]/;if(value.match(regex)){errors.push('This \''+field+'\' value is not supported. The value must be an integer.');return false;}}else if(rulesOfSanitation=='playlist'){var regex=/^[\w\-]{11}(,[\w\-]{11})*$/;if(value.match(regex)){return true;}
errors.push('This \''+field+'\' value is not supported. The value must be a comma-delimited list of 11-character YouTube video IDs.');return false;}else if(rulesOfSanitation=='qualitylevels'){if(qualityLevels[value]){errors.push('This \''+field+'\' value is not supported. The value must be a supported quality level.');}}else if(rulesOfSanitation=='videoIdOrUrl'){if(!xssSanitizer(field,value,'videoId',true)){if(!xssSanitizer(field,value,'videoUrl',true)){errors.push('This \''+field+'\' value is not supported. The value must be an 11-character YouTube video ID or a YouTube watch page URL in the format \'http://www.youtube.com/v/VIDEO_ID\'.');return false;}}}else if(rulesOfSanitation=='videoId'){var regex=/^[\w\-]{11}$/;if(value.match(regex)){return true;}
if(!skipEvent){errors.push('This \''+field+'\' value is not supported. The value must be an 11-character YouTube video ID.');}
return false;}else if(rulesOfSanitation=='videoUrl'){var regex=/^http\:\/\/www.youtube.com\/v\/([\w\-]){11}$/;if(value.match(regex)){return true;}
if(!skipEvent){errors.push('This \''+field+'\' value is not supported. The value must be a YouTube watch page URL in the format \'http://www.youtube.com/v/VIDEO_ID\'.');}
return false;}}
return true;}
function mute(){events.push('mute();');ytswf.mute();}
function unMute(){events.push('unMute();');ytswf.unMute();}
function isMuted(){if(!ytswf.isMuted()){return'on';}
return'off';}
function getVolume(){return ytswf.getVolume();}
function setVolume(newVolume){if(xssSanitizer('Volume',newVolume,'digits')){events.push('setVolume('+newVolume+');');ytswf.setVolume(newVolume);}}
function setPlayerHeight(aspectRatio,playerWidth){if(xssSanitizer('Width',playerWidth,'digits')){if(aspectRatio=='widescreen'){updateHTML('playerHeight',((playerWidth*9)/16));}else if(aspectRatio=='standard'){updateHTML('playerHeight',((playerWidth*3)/4));}}}
function setPlayerSize(playerWidth,playerHeight){events.push('setSize('+playerWidth+', '+playerHeight+');');ytswf.setSize(playerWidth,playerHeight);document.getElementById('myytplayer').width=playerWidth;document.getElementById('myytplayer').height=playerHeight;}
function updateytplayerInfo(){updateHTML('volume',getVolume());updateHTML('videoduration',getDuration());updateHTML('videotime',getCurrentTime());updateHTML('playerstate',getPlayerState());updateHTML('bytestotal',getBytesTotal());updateHTML('startbytes',getStartBytes());updateHTML('bytesloaded',getBytesLoaded());updateHTML('playbackquality',getQuality());updateHTML('availablelevels',getQualityLevels());updateHTML('ismuted',isMuted());if(events.length>0){updateHTML('eventhistory','<ol><li>'+events.join('<li>')+'</ol>');}
if(errors.length>0){updateHTML('errorCode','<ol><li>'+errors.join('<li>')+'</ol>');}}
function getDuration(){return ytswf.getDuration();}
function roundNumber(number,decimalPlaces){decimalPlaces=(!decimalPlaces?2:decimalPlaces);return Math.round(number*Math.pow(10,decimalPlaces))/Math.pow(10,decimalPlaces);}
function getCurrentTime(){var currentTime=ytswf.getCurrentTime();return roundNumber(currentTime,3);}
function getPlayerState(){var playerState=ytswf.getPlayerState();switch(playerState){case 5:return'video cued';case 3:return'buffering';case 2:return'paused';case 1:return'playing';case 0:return'ended';case-1:return'unstarted';default:return'Status uncertain';}
return ytswf.getPlayerState();}
function getBytesTotal(){return ytswf.getVideoBytesTotal();}
function getStartBytes(){return ytswf.getVideoStartBytes();}
function getBytesLoaded(){return ytswf.getVideoBytesLoaded();}
function getVideoUrl(){var videoUrl=ytswf.getVideoUrl();updateHTML('videoUrl',videoUrl);}
function seekTo(seconds,allowSeekAhead){if(xssSanitizer('Seek to',seconds,'digits')){events.push('seekTo('+seconds+', '+allowSeekAhead+');');ytswf.seekTo(seconds,allowSeekAhead);}}
function xssSanitizer(field,value,rulesOfSanitation,skipEvent){var regex=/[\"\<\>]/;if(value.match(regex)){errors.push('These aren\'t the XSS vulnerabilities you\'re looking for.');return false;}else if(rulesOfSanitation){if(rulesOfSanitation=='alphanumeric'){var regex=/[\W]/;if(value.match(regex)){errors.push('This \''+field+'\' value is not supported. The value must be an alphanumeric string.');return false;}}else if(rulesOfSanitation=='digits'){var regex=/[\D]/;if(value.match(regex)){errors.push('This \''+field+'\' value is not supported. The value must be an integer.');return false;}}else if(rulesOfSanitation=='playlist'){var regex=/^[\w\-]{11}(,[\w\-]{11})*$/;if(value.match(regex)){return true;}
errors.push('This \''+field+'\' value is not supported. The value must be a comma-delimited list of 11-character YouTube video IDs.');return false;}else if(rulesOfSanitation=='qualitylevels'){if(qualityLevels[value]){errors.push('This \''+field+'\' value is not supported. The value must be a supported quality level.');}}else if(rulesOfSanitation=='videoIdOrUrl'){if(!xssSanitizer(field,value,'videoId',true)){if(!xssSanitizer(field,value,'videoUrl',true)){errors.push('This \''+field+'\' value is not supported. The value must be an 11-character YouTube video ID or a YouTube watch page URL in the format \'http://www.youtube.com/v/VIDEO_ID\'.');return false;}}}else if(rulesOfSanitation=='videoId'){var regex=/^[\w\-]{11}$/;if(value.match(regex)){return true;}
if(!skipEvent){errors.push('This \''+field+'\' value is not supported. The value must be an 11-character YouTube video ID.');}
return false;}else if(rulesOfSanitation=='videoUrl'){var regex=/^http\:\/\/www.youtube.com\/v\/([\w\-]){11}$/;if(value.match(regex)){return true;}
if(!skipEvent){errors.push('This \''+field+'\' value is not supported. The value must be a YouTube watch page URL in the format \'http://www.youtube.com/v/VIDEO_ID\'.');}
return false;}}
return true;}
