<script>
  //Anonymous function
  (function(){
    var videos = document.querySelectorAll('video');
    for(var i=0;i<videos.length;i++){
      var localVideo = videos[i];
      var videoName = "";
      var videoLength = 0;
      var milestoneLengths = [];
      var milestonesAchieved = [];
      
      //Play Event
      localVideo.onplay = function(){
        if(localVideo.currentTime==0){ 
          //Calculate video name is the video file name
          videoName = localVideo.currentSrc.split('/');
          videoName = videoName[videoName.length-1];
          videoName = videoName.replace(/\..*/,'');
          
          //Calculate the total length of video
          videoLength = localVideo.duration;
          
          //25%, 50% and 75% are the milestones considered
          milestoneLengths = [parseInt(0.25*videoLength), parseInt(0.5*videoLength), parseInt(0.75*videoLength)];
          
          dataLayer.push({
            'event':"html5videoEvent",
            'html5VideoAction':"play",
            'html5VideoLabel': videoName
          });
        }
      };

      //Pause Event
      localVideo.onpause = function(){
        dataLayer.push({
          'event':"html5videoEvent",
          'html5VideoAction':"pause",
          'html5VideoLabel': videoName
        });
      };

      //Milestones Events
      localVideo.ontimeupdate = function(){
        if(milestonesAchieved.indexOf('25')==-1 && localVideo.currentTime>milestoneLengths[0]){
          milestonesAchieved.push('25');
          dataLayer.push({
            'event':"html5videoEvent",
            'html5VideoAction':"milestone - 25%",
            'html5VideoLabel': videoName
          });
        }
        if(milestonesAchieved.indexOf('50')==-1 && localVideo.currentTime>milestoneLengths[1]){
          milestonesAchieved.push('50');
          dataLayer.push({
            'event':"html5videoEvent",
            'html5VideoAction':"milestone - 50%",
            'html5VideoLabel': videoName
          });
        }
        if(milestonesAchieved.indexOf('75')==-1 && localVideo.currentTime>milestoneLengths[2]){
          milestonesAchieved.push('75');
          dataLayer.push({
            'event':"html5videoEvent",
            'html5VideoAction':"milestone - 75%",
            'html5VideoLabel': videoName
          });
        }        
      };

      //Video Complete
      localVideo.onended = function(){
        dataLayer.push({
          'event':"html5videoEvent",
          'html5VideoAction':"complete",
          'html5VideoLabel': videoName
        });
      };
    }
  })();
</script>