2 * Copyright (c) 2013, Intel Corporation.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 var currentMenu = "main";
12 var resizeCB = resizeMainMenu;
15 var screenOrientation;
18 var contentType = "AUDIO";
19 var audioContent = new Array();
20 var videoContent = new Array();
21 var imageContent = new Array();
24 var currentPlayerType = "AUDIO";
25 var currentMediaList = $("#audioMediaList");
26 var currentMediaListItems = $("#audioMediaListItems");
27 var currentPlayerControls;
28 var audioMediaListLoaded = false;
29 var videoMediaListLoaded = false;
30 var imageMediaListLoaded = false;
36 var vidIcon = new Image();
37 var imgIcon = new Image();
38 var musicIcon = new Image();
39 var imagesLoaded = false;
43 var loadAndPlay = false;
44 var currentFileLoaded = false;
48 var nightMode = false;
49 var waitingToResumeVideo = false; //Media has been paused by exterior forces. If set to true, resume previous media when given the signal.
51 var mainMenuTitleTemplateLandscape = {"font" : "oblique bolder 30pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
52 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
54 var mainMenuTitleTemplate = {"font" : "oblique bolder 40pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
55 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
57 var mainTrackTemplateLandscape = {"font" : "bold 20pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
58 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
60 var mainTrackTemplate = {"font" : "bold 30pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
61 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
63 var mediaTextTemplate2 = {"font" : "bold 20pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
64 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
66 var mediaTextTemplate3 = {"font" : "bold 20pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
68 var trackTextTemplate = {"font" : "bold 16pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
70 var mediaTextTemplate2Landscape = {"font" : "bold 15pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
71 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
73 var mediaTextTemplate3Landscape = {"font" : "bold 15pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
75 var trackTextTemplateLandscape = {"font" : "bold 11pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
78 var mediaTextTemplate = {"font" : "bold 20pt Arial", "fillStyle" : "", "textAlign" : "left",
79 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 12, "shadowColor" : "red"};
83 console.log("Content discovery failed");
86 function setupSpeech()
88 console.log("MediaPlayer in setupSpeech");
90 speechObj = tizen.speech;
91 speechObj.vocalizeString(" ");
95 var speechEventListener = {
96 onaudiostart: function(){console.log("MediaPlayer: onaudiostart received");},
97 onsoundstart: function(){console.log("MediaPlayer: onsoundstart received");},
98 onspeechstart: function(){console.log("MediaPlayer: onspeechstart received");},
99 onspeechend: function(){console.log("MediaPlayer: onspeechend received");},
100 onsoundend: function(){console.log("MediaPlayer: onsoundend received");},
101 onaudioend: function(){console.log("MediaPlayer: onaudioend received");},
102 onresult: function(result){
104 console.log("MediaPlayer: onresult received");
106 for (var i = 0; i < result.length; i++)
108 console.log("MediaPlayer: forloop, command = " + result[i]);
109 var commandFound = false;
138 onnomatch: function(result){console.log("MediaPlayer: onnomatch received ");},
139 onerror: function(error){console.log("MediaPlayer: onerror received");},
140 onstart: function(){console.log("MediaPlayer: onstart received");},
141 onend: function(){console.log("MediaPlayer: onend received");}
144 speechObj.setCBListener(speechEventListener);
149 console.log("MediaPlayer setupSpeech FAILED + " + err.message);
154 function updateMediaName(newArtist, newTitle, newCover)
156 if (currentMenu === "audio")
158 var playBarHeight = mediaNameCanvas.height;
159 var boxWidth = playBarHeight * 0.75;
160 mediaNameCTX.clearRect(0,0,mediaNameCanvas.width, mediaNameCanvas.height);
162 if (currentPlayerType === "AUDIO")
165 var alphaJump = 0.01;
169 mediaNameCTX.fillStyle="rgba(30,30,30,0.5)";
170 mediaNameCTX.strokeStyle="rgba(130,130,130,1)";
171 mediaNameCTX.lineWidth = 5;
172 mediaNameCTX.fillRect(0,0,mediaNameCanvas.width, playBarHeight);
173 mediaNameCTX.strokeRect(-20,0,mediaNameCanvas.width + 40, playBarHeight);
175 if (newCover === undefined || newCover.naturalWidth === undefined || newCover.naturalWidth <= 0)
177 newCover = musicIcon;
180 mediaNameCTX.drawImage(newCover, 20, (playBarHeight - boxWidth) / 2, boxWidth, boxWidth);
182 if (screenOrientation === "portrait")
184 var textStartX = boxWidth + 50;
186 var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 70 , "zLoc" : 0,
187 "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 65, "wordWrap" : true});
188 trackText.applyTemplate(mainMenuTitleTemplate);
190 var artistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 70, "zLoc" : 0,
191 "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 50, "wordWrap" : true});
192 artistText.applyTemplate(mainTrackTemplate);
196 var textStartX = boxWidth + 50;
197 var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 50 , "zLoc" : 0,
198 "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
199 trackText.applyTemplate(mainMenuTitleTemplateLandscape);
200 var artistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 50, "zLoc" : 0,
201 "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
202 artistText.applyTemplate(mainTrackTemplateLandscape);
206 trackText.drawLargeShadow();
208 artistText.yLoc += trackText.height;
209 artistText.drawObj();
214 function onContentItemArraySuccess(content)
216 console.log("MediaPlayer in onContentItemArraySuccess");
217 var emptyContent = true;
219 if (!content || content === undefined || content.length <= 0)
220 console.log("Invalid content for " + contentType);
223 emptyContent = false;
234 audioContent = audioContent.concat(content);
236 $("#audioSrc").attr("src", audioContent[0].contentURI);
240 for (var i = 0; i < audioContent.length; i++)
242 var iconURI = (audioContent[i].thumbnailURIs !== undefined && audioContent[i].thumbnailURIs !== null) ? audioContent[i].thumbnailURIs[0] : "images/musicIcon.png";
243 audioContent[i].coverArtURI = iconURI;
248 audioMediaListLoaded = true;
249 currentMediaListItems = $("#audioMediaListItems");
250 fillMediaList(audioContent);
255 console.log("Error when parsing audioContent");
259 contentType = "VIDEO";
265 videoContent = videoContent.concat(content);
266 $("#videoSrc").attr("src", videoContent[0].contentURI);
268 contentType = "IMAGE";
274 imageContent = imageContent.concat(content);
275 $("#imagePlayer").css("background", "url(" + imageContent[0].contentURI + ") no-repeat center");
276 $("#imagePlayer").css("background-size", "contain");
278 contentType = undefined;
282 console.log("Undefined content search type");
283 nextContentType = undefined;
287 if (contentType !== undefined)
288 getMedia(contentType);
291 function getMedia(mediaType)
293 console.log("MediaPlayer in getMedia");
294 var manager = tizen.content;
296 var filter = new tizen.AttributeFilter("type", "EXACTLY", mediaType);
297 manager.find(onContentItemArraySuccess, onError, null, filter);
300 function showMediaMenu()
302 console.log("MediaPlayer in showMediaMenu");
303 $(".navButton").fadeIn(800);
305 switch(currentPlayerType)
311 if (audioContent.length > 0)
312 updateMediaName(audioContent[audioIndex].artists[0], audioContent[audioIndex].title, audioContent[audioIndex].coverArt);
316 console.log("updateMediaName failed for showMediaMenu (audio) : " + err.message);
319 $("#mediaName").fadeIn(800);
320 $(".sortButton").fadeIn(800);
321 currentPlayer.fadeIn(800);
323 if (screenOrientation === "landscape" )
324 $("#audioMediaList").addClass("landscape");
326 $("#audioMediaList").removeClass("landscape");
328 $("#audioMediaList").fadeIn(800);
333 setTimeout(function(){currentPlayer.show()}, 800); //The video element can't be faded, so wait a moment before showing
338 currentPlayer.fadeIn(800);
342 console.log("Invalid player type");
347 function showMediaList()
349 console.log("MediaPlayer in showMediaList");
351 if (currentMediaList.is(":visible"))
352 currentMediaList.fadeOut(300);
355 currentMediaList.fadeIn(300);
359 function changeMenu(menuButtonId)
361 console.log("MediaPlayer in changeMenu");
362 var clickedButton = $("#" + menuButtonId);
363 var buttonWidth = clickedButton.width();
364 var buttonHeight = clickedButton.height();
365 var buttonBottom = clickedButton.css("bottom");
366 var buttonRight = clickedButton.css("right");
368 //Animate the clicked button slightly
369 clickedButton.animate({
370 bottom: screenOrientation === "portrait" ? "+=0" : "+=50",
371 right: screenOrientation === "portrait" ? "+=50" : "+=0",
375 //Reset the size once done
377 clickedButton.width(buttonWidth);
378 clickedButton.height(buttonHeight);
380 if (screenOrientation === "portrait")
381 clickedButton.css({"right": buttonRight});
383 clickedButton.css({"bottom": buttonBottom});
387 $(".mainButton").fadeOut(300);
391 case ("mainMusicButton"):
392 speechObj.vocalizeString("Music player");
393 currentMenu = "audio";
394 currentPlayer = $("#audioPlayer");
395 currentPlayerControls = document.getElementById("audioPlayer");
396 currentPlayerType = "AUDIO";
397 currentMediaList = $("#audioMediaList");
398 currentMediaListItems = $("#audioMediaListItems");
399 currentContent = audioContent;
401 if (!audioMediaListLoaded)
402 fillMediaList(currentContent);
407 case ("mainVideoButton"):
408 speechObj.vocalizeString("Video player");
409 currentMenu = "video";
410 currentPlayer = $("#videoPlayer");
411 currentPlayerControls = document.getElementById("videoPlayer");
412 currentPlayerType = "VIDEO";
413 currentMediaList = $("#videoMediaList");
414 currentMediaListItems = $("#videoMediaListItems");
415 currentContent = videoContent;
417 if (!videoMediaListLoaded)
418 fillMediaList(currentContent);
423 case ("mainImageButton"):
424 speechObj.vocalizeString("Picture viewer");
425 currentMenu = "image";
426 currentPlayer = $("#imagePlayer");
427 currentPlayerControls = imageControls;
428 currentPlayerType = "IMAGE";
429 currentMediaList = $("#imageMediaList");
430 currentMediaListItems = $("#imageMediaListItems");
431 currentContent = imageContent;
433 if (!imageMediaListLoaded)
434 fillMediaList(currentContent);
439 console.log("Error: No menu by that name");
444 function showMainMenu()
446 console.log("MediaPlayer in showMainMenu");
447 currentMenu = "main";
448 currentPlayerControls.pause();
450 $("#playButton").toggleClass('playing', false);
452 //If the media list is showing, hide it. Remove the mediaListAudioList class if it exists so that it will resize properly
453 if (currentMediaList.is(":visible"))
454 currentMediaList.fadeOut(300);
456 $(".navButton").fadeOut(300);
457 $(".sortButton").fadeOut(300);
458 $("#mediaName").fadeOut(300);
460 if (currentPlayerType !== "VIDEO")
461 currentPlayer.fadeOut(300);
463 currentPlayer.hide();
466 $(".mainButton").css({"opacity": "100"});
467 $(".mainButton").fadeIn(800);
470 function sortByAlpha(contentToSort)
472 console.log("MediaPlayer in sortByAlpha");
474 if (currentPlayerType === "AUDIO")
477 //If contentToSort is undefined it's because the request came from the sortBy buttons
478 if (contentToSort === undefined)
479 contentToSort = audioContent;
481 contentToSort.sort(function (a,b) {
482 var first = a.title.toLowerCase();
483 var second = b.title.toLowerCase();
493 fillMediaList(contentToSort);
496 function sortByArtist(contentToSort)
498 console.log("MediaPlayer in sortByArtist");
500 if (currentPlayerType === "AUDIO")
503 if (contentToSort === undefined)
504 contentToSort = audioContent;
506 contentToSort.sort(function (a,b) {
507 var first = a.artists[0].toLowerCase();
508 var second = b.artists[0].toLowerCase();
518 fillMediaList(contentToSort);
521 function sortByAlbum(contentToSort)
523 if (currentPlayerType === "AUDIO")
526 console.log("MediaPlayer in sortByAlbum");
527 if (contentToSort === undefined)
528 contentToSort = audioContent;
530 contentToSort.sort(function (a,b) {
531 var first = a.album.toLowerCase();
532 var second = b.album.toLowerCase();
542 fillMediaList(contentToSort);
545 /**************************************** NAVIGATION FUNCTIONS *******************************************/
547 // This function is called once a file being loaded is ready to play
548 function playLoadedMedia()
550 console.log("MediaPlayer in playLoadedMedia");
551 currentFileLoaded = true;
555 currentPlayerControls.play();
557 $("#playButton").toggleClass('playing', true);
562 function playButtonClick()
564 console.log("MediaPlayer in playButtonClick");
565 if (currentPlayerType !== "AUDIO" || currentFileLoaded)
567 if (currentPlayerControls.paused)
569 $("#playButton").toggleClass('playing', true);
570 currentPlayerControls.play();
574 $("#playButton").toggleClass('playing', false);
575 currentPlayerControls.pause();
579 console.log(audioContent[audioIndex].artists[0] + " : " + audioContent[audioIndex].title + " can't play yet, it hasn't loaded");
582 function pauseButtonClick()
584 console.log("MediaPlayer in pauseButtonClick");
585 if (!currentPlayerControls.paused)
587 currentPlayerControls.pause();
588 $("#playButton").toggleClass('playing', false);
592 function backButtonClick()
594 console.log("MediaPlayer in backButtonClick");
595 switch (currentPlayerType)
603 audioIndex = audioContent.length - 1;
608 $("#playButton").toggleClass('playing', false);
610 $("#audioSrc").attr("src", audioContent[audioIndex].contentURI);
611 updateMediaName(audioContent[audioIndex].artists[0], audioContent[audioIndex].title, audioContent[audioIndex].coverArt);
622 videoIndex = videoContent.length - 1;
625 $("#playButton").toggleClass('playing', false);
626 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
637 imageIndex = imageContent.length - 1;
639 $("#imagePlayer").css("background", "url(" + imageContent[imageIndex].contentURI + ") no-repeat center");
640 $("#imagePlayer").css("background-size", "contain");
645 console.log("Content failure");
651 function nextButtonClick()
653 console.log("MediaPlayer in nextButtonClick");
654 switch (currentPlayerType)
659 if (audioContent.length > (audioIndex + 1))
667 $("#playButton").toggleClass('playing', false);
669 $("#audioSrc").attr("src", audioContent[audioIndex].contentURI);
670 updateMediaName(audioContent[audioIndex].artists[0], audioContent[audioIndex].title, audioContent[audioIndex].coverArt);
678 if (videoContent.length > (videoIndex + 1))
684 $("#playButton").toggleClass('playing', false);
685 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
693 if (imageContent.length > (imageIndex + 1))
698 $("#imagePlayer").css("background", "url(" + imageContent[imageIndex].contentURI + ") no-repeat center");
699 $("#imagePlayer").css("background-size", "contain");
704 console.log("Content failure");
709 /**************************************** END NAVIGATION FUNCTIONS *******************************************/
711 function resizeMainMenu()
713 console.log("MediaPlayer in resizeMainMenu");
715 currentMediaList.fadeOut(0);
716 screenWidth = window.innerWidth;
717 screenHeight = window.innerHeight;
718 screenOrientation = screenWidth < screenHeight ? "portrait" : "landscape";
719 iconWidth = screenOrientation === "portrait" ? screenHeight / 4 : screenWidth / 4;
722 $(".mainButton").width(iconWidth + "px");
723 $(".mainButton").height(iconWidth + "px");
725 var iconsTop = screenOrientation === "portrait" ? ((screenHeight - (iconWidth * 3)) / 2) - (padding * 3) : (screenHeight - iconWidth) / 2;
727 if (screenOrientation === "portrait")
728 $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : (screenWidth / 2) - (iconWidth /2) - padding + "px", "width" : "50%"});
731 $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : ((iconWidth / 2) - (padding * 3)) + "px", "width" : "100%"});
732 $("#sortButtons").addClass("landscape");
736 function resizePlayerPage()
738 console.log("MediaPlayer in resizePlayerPage");
740 audioPlayer = document.getElementById("audioPlayer");
741 videoPlayer = document.getElementById("videoPlayer");
742 screenWidth = window.innerWidth;
743 screenHeight = window.innerHeight;
746 var buttonWidth = screenOrientation === "portrait" ? screenHeight * 0.05 : screenWidth * 0.05;
748 $("#backButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) - (buttonWidth *3)) + "px"});
749 $("#nextButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) + (buttonWidth *2)) + "px"});
750 $("#returnButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": padding + "px"});
751 $("#listButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": (screenWidth - buttonWidth - padding * 2) + "px"});
752 $("#playButton").css({"width": buttonWidth * 1.15 + "px", "height": buttonWidth * 1.15 + "px", "top": padding * 0.3 + "px", "left": (screenWidth / 2) - (buttonWidth / 2) + "px"});
754 mediaNameCanvas.width = (screenWidth);
755 mediaNameCanvas.height = (screenHeight * 0.34) - (buttonWidth + (2 * padding));
756 mediaNameCanvas.style.top = (buttonWidth + (2 * padding) ) + "px";
757 mediaNameCanvas.style.left = "0px";
759 var sortButtonTop = (buttonWidth + (2 * padding) ) + mediaNameCanvas.height - (buttonWidth * 1.3);
760 var sortButtonWidth = buttonWidth * 2.5;
761 var buttonSpacing = screenWidth / 5;
763 mediaListItemW = $("#videoMediaList").width() * 0.92;
764 mediaListItemH = $("#videoMediaList").height() / 10;
769 console.log("MediaPlayer in resizeAll");
775 * swipe - Handles swipe events. Currently it just acts as another way to hit the next / back buttons, but
776 * it could be expanded to other things in the future.
779 function swipe(direction, object)
781 console.log("MediaPlayer in swipe");
785 if (direction === "right")
787 else if (direction === "left")
796 function toggleNightMode(nightModeValue)
798 if (nightMode !== nightModeValue)
800 Array.prototype.forEach.call (document.querySelectorAll ('*'), function (el) {el.classList.toggle('night');});
801 nightMode = nightModeValue;
807 console.log("MediaPlayer in init");
808 var vehicle = tizen.vehicle;
811 /* Subscribe to AMB NightMode signal, and switch colors
812 * upon receipt of the signal
815 if (vehicle && vehicle !== undefined)
817 var getVal = vehicle.get("NightMode");
819 //Check that NightMode returned a value before trying to hook up to it
822 toggleNightMode(getVal.nightMode);
825 /* Subscribe to AMB NightMode signal, and switch colors
826 * upon receipt of the signal
829 vehicle.subscribe("NightMode",function(value) {
830 console.log("MediaPlayer: Day / Night mode changed to " + value.nightMode);
831 toggleNightMode(value.nightMode);
835 /* Subscribe to AMB DrivingMode signal, and pause video
836 * upon receipt of the signal
840 vehicle.subscribe("DrivingMode",function(value) {
841 console.log("MediaPlayer: DrivingMode changed to " + value.drivingMode);
843 if (value.drivingMode > 0 && currentPlayerType === "VIDEO" && !currentPlayerControls.paused)
845 console.log("MediaPlayer: pausing video due to vehicle motion");
846 currentPlayerControls.pause();
847 waitingToResumeVideo = true;
849 else if (value.drivingMode === 0 && currentPlayerType === "VIDEO" && waitingToResumeVideo)
851 console.log("MediaPlayer: vehicle has stopped, resuming video");
852 currentPlayerControls.play();
853 waitingToResumeVideo = false;
858 musicIcon.src = "images/musicIcon.png";
859 vidIcon.src = "images/videoIcon.png";
860 imgIcon.src = "images/imageIcon.png";
861 imageControls = new ImageControls();
863 mediaNameCanvas = document.getElementById("mediaName");
864 mediaNameCTX = mediaNameCanvas.getContext("2d");
866 //Resize all items and search for local media
869 //Check if DLNA plugin is installed. If so, scan for media.
870 if (tizen.mediaserver)
872 tizen.mediaserver.scanNetwork(foundMediaServer);
875 console.log("MediaPlayer: No DLNA server running, using local media only...");
877 //Setup voice control
881 console.log("MediaPlayer: Speech Recognition not running, voice control will be unavailable");
884 setTimeout(function(){getMedia(contentType);}, 500);
886 //Prevent highlighting
887 window.ondragstart = function() { return false; }
889 $(window).bind('resize', resizeAll);
891 //Simple swipe detection
892 $("#mediaName").mousedown(function(e){mouseDownEvent = e;});
893 $("#mediaName").mouseup(function(e){
894 if (Math.abs(mouseDownEvent.clientY - e.clientY) < 100)
896 if (Math.abs(mouseDownEvent.clientX - e.clientX) > 100)
898 if (mouseDownEvent.clientX > e.clientX)
899 swipe("left", "mediaName");
901 swipe("right", "mediaName");
906 document.getElementById('videoPlayer').addEventListener("playing", function() {
907 $("#navigationButtons").hide();
909 document.getElementById('videoPlayer').addEventListener("pause", function() {
910 $("#navigationButtons").show();
914 $(document).ready(function () {