Boostrap - Custom Video Player

Fiddle exploring how to build a video player with custom controls that uses bootstrap styling.

HTML

<h3 id="navbar">&nbsp;Custom Video Player</h3>

<div id="fiddleHook" class="fiddle hidden"></div>

CSS

.fiddle {
    background-color: #000000;
}
.player .header {
    position: absolute;
    top: 152;
    text-align: center;
    width: 100%;
    padding: 10px;
    text-align: center;
    opacity: 1;
    border: none;
    z-index: 10;
}
#player-navbar {
    background-color: #000000;
    padding-left: 50px;
    padding-bottom: 10px;
    width: 100%;
}
.player-navbar .bs-component {
    padding-top: 40px !important;
}
.player-navbar .progress {
    padding-top: 38px;
}
.player video {
    width: 100%;
    background-color: #000000;
}
.video-control {
    height: 40px;
    width: 40px;
    vertical-align: top;
    margin-top: -3px;
    /*background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);*/
    border-radius: 23px;
    background-color: green;
    border-color: #ffffff;
    color: white;
    border-width: 3px;
    font-weight: 100;
    line-height: 40px;
    /*text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);*/
    font-size: 30px;
    text-align: center;
    /*opacity: 1; */
    cursor: hand;
}
.video-control a {
    color: white;
}
.video-control a .rotate {
    -webkit-transform: rotate(-90deg);
    -moz-transform: rotate(-90deg);
}
.video-control .left {
    margin-left: -20px;
}
.video-control .right {
    margin-right: -40px;
}
.player .progress {
    height: 20px;
    margin-left: -3%;
}
.player .progress-bar {
    width: 0%;
    height: 100%;
    background-color: #74A245;
}
.player .subTitle {
    position: absolute;
    top: 50%;
    margin-right: 100%;
    left: 25%;
    width: 100%;
    padding: 10px;
    text-align: center;
    opacity: 1;
    border: none;
    background-color: #333333;
    z-index: 10;
}
.player .hidden {
    display: none;
}
.enter-stage-right {
    -moz-animation-duration: 3s;
    -webkit-animation-duration: 3s;
    -moz-animation-name: slidein;
    -webkit-animation-name: slidein;
}
@-moz-keyframes slidein {
    from {
        margin-left: 100%;
    }
    to {
        margin-left: 10%;
   ...

JavaScript

(function (app, $, undefined) {

    var playerStreamDescriptionVisible = false;

    $(document).ready(function () {
        // Inject HTML structure
        $('#fiddleHook').html(app.store.html);

        // Wait a second, and then add event plumbing
        setTimeout(app.onAfterRender, 1000);
    });

    // Data Store

    app.store = {
        // Static "on-board" json.
        data: [{
            "id": "1",
                "name": "War on Drugs continues",
                "description": "Losses continue in agressive raid on local property",
                "content-url": "http://buffalogrove.sat.iit.edu/Kitty.mp4",
                "thumb-url": ""
        }],
        // This is static html necessary to draw video player and controls
        html: '<div class="player"><div id="playerStreamDescription" class="player subTitle hidden"></div><div id="playerStreamName" class="header hidden"></div><video id="playerStream" ></video><div id="player-navbar" class="collapse navbar-collapse"><ul class="nav navbar-nav" style="margin-left: 5%;"><li><div id="playerStartButton" onclick="app.playerStreamPlay();" class="video-control left" href="#" title="play"><a href="#">&gt;</a></div><div id="playerPauseButton" onclick="app.playerStreamPause();" class="video-control hidden" href="#" title="play"><a class="rotate" href="#">=</a></div></li><li><div class="span8" style="margin-right: -3%;"><div class="bs-component"><div class="progress" style="height: 36px; width=150px; margin-left: -3%; margin-right: 3%;"><div id="playerProgressBar" class="progress-bar"style="width: 0%; height: 100%; background-color: #74A245;"></div></div></div></div></li><li><div id="playerFullScreenButton" href="#" onclick="app.playerStreamMaximize();" class="video-control right" ><a href="#">+</a></a></li></ul><!--/.nav-collapse --></div><!-- /.player-navbar --></div>'
    };


    // Add Input Event handlers

    app.onAfterRender = function () {
        app.playerLoadVideo(app.store.data[0]);
       ...