<!DOCTYPE HTML>
<html>
 <head>
  <title>Radio Helsinki - Automation Import</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="description" content="Importtool for Radio Helsinki">
  <meta name="author" content="Christian Pointner <equinox@ffgraz.net>">

  <link href="/javascript/twitter-bootstrap/css/bootstrap.css" rel="stylesheet">
  <link href="/styles/signin.css" rel="stylesheet">
  <link href="/styles/shows.css" rel="stylesheet">
  <link href="/styles/musicpools.css" rel="stylesheet">
  <style type="text/css">
    body {
      background-color: #eee;
      padding-top: 60px;
      padding-bottom: 40px;
    }

    .btn i[class*='icon-'] {
      vertical-align: middle;
    }
  </style>
  <link href="/javascript/twitter-bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
  <script src="/javascript/jquery/jquery.min.js"></script>
  <script src="/javascript/twitter-bootstrap/js/bootstrap.min.js"></script>
  <script src="/javascript/twitter-bootstrap/js/bootstrap-alert.min.js"></script>
  <script type="text/javascript">
    var username = sessionStorage.getItem("username");
    var token = sessionStorage.getItem("token");
    var app = sessionStorage.getItem("app");

    alertbox = function() {}
    alertbox.warning = function (heading, message) {
      $('#alertbox').html('<div class="alert"><a class="close" data-dismiss="alert" href="#">&times;</a><h4 class="alert-heading">' + heading + '</h4>' + message + '</div>');
    }
    alertbox.error = function (heading, message) {
      $('#alertbox').html('<div class="alert alert-error"><a class="close" data-dismiss="alert" href="#">&times;</a><h4 class="alert-heading">' + heading + '</h4>' + message + '</div>');
    }
    alertbox.info = function (heading, message) {
      $('#alertbox').html('<div class="alert alert-info"><a class="close" data-dismiss="alert" href="#">&times;</a><h4 class="alert-heading">' + heading + '</h4>' + message + '</div>');
    }

    var weekday = new Array(7);
    weekday[0] =  "Sonntag";
    weekday[1] = "Montag";
    weekday[2] = "Dienstag";
    weekday[3] = "Mittwoch";
    weekday[4] = "Donnerstag";
    weekday[5] = "Freitag";
    weekday[6] = "Samstag";



    var shows_list = [];
    var current_show;
    var group_carts = [];
    var log_carts = [];

    function updateShowListing() {
      $('#show-carts tbody').find('tr').remove();
      $('#show-info-dumper').text(
         'Current Show:\n' + JSON.stringify(current_show, null, ' ') +
         '\n\nGroup Carts:\n' + JSON.stringify(group_carts, null, ' ') +
         '\n\nLog Carts:\n' + JSON.stringify(log_carts, null, ' ')
       );

    }

    function updateGroupCartList(data, status, req) {
      group_carts = [];
      $('#show-carts').find('tr:gt(0)').remove();
      var cartlist = $(data).find("cartList");
      var carts = cartlist.children();
      carts.each(function() {
          var cut = $(this).find("cutList").get(0);
          cart = {
            number: $(this).find('number').text(),
            title: $(this).find('title').text(),
            length: $(cut).find('length').text(),
            imported: new Date($(cut).find('originDatetime').text()),
            playcnt: new Date($(cut).find('playCounter').text()),
            lastplayed: new Date($(cut).find('lastPlayDatetime').text()),
          };
          group_carts.push(cart);
        }
      );
    }

    function updateLogCartList(data, status, req) {
      log_carts = [];
      var loglist = $(data).find("logList");
      var loglines = loglist.children();
      loglines.each(function() {
          var number = $(this).find('cartNumber').text();
          if(number >= current_show.group.lowcart && number <= current_show.group.highcart) {
            log_carts.push(number);
          }
        }
      );
    }

    function showSelectedShow() {
      var id = $('#show-selector option:selected').attr('value');
      current_show = $.grep(shows_list, function(elem) { return elem.id == id; })[0];
      $('#show-title').text(current_show.title);
      $('#show-dow').text(weekday[current_show.dow]);
      $('#show-rhythm').text(current_show.rhythm);
      $('#show-starttime').text(current_show.starttime);
      $('#show-length').text(current_show.length + ' Min.');

      log_carts = [];
      data = { COMMAND: 22, LOGIN_NAME: username, PASSWORD: token, NAME: current_show.log };
      lcd = $.post("/rd-bin/rdxport.cgi", data, updateLogCartList, "xml");

      group_carts = [];
      data = { COMMAND: 6, LOGIN_NAME: username, PASSWORD: token, GROUP_NAME: current_show.group.name, INCLUDE_CUTS: 1 };
      gcd = $.post("/rd-bin/rdxport.cgi", data, updateGroupCartList, "xml");

      $.when(lcd, gcd).done(
        function(lcres, gcres) {
          if(lcres[1] == 'success' && gcres[1] == 'success') {
            updateShowListing();
          }
        }
      );
    }


    function updateShowsList(data, status, req) {
      shows_list = [];
      $('#show-selector').find('option').remove();
      var dblist = $(data).find("dropboxList");
      var dbs = dblist.children();
      dbs.each(function() {
          type = $(this).find('type').text();
          if(type == 'show') {
            var show = {
              id: $(this).find('showid').text(),
              title: $(this).find('show-title').text(),
              dow: $(this).find('show-dayofweek').text(),
              rhythm: $(this).find('show-rhythm').text(),
              starttime: $(this).find('show-starttime').text(),
              length: $(this).find('show-length').text(),
              group: {
                name: $(this).find('group').text(),
                lowcart: $(this).find('group-low-cart').text(),
                highcart: $(this).find('group-high-cart').text(),
              },
              log: $(this).find('log').text(),
              normlevel: $(this).find('normalization-level').text(),
              trimlevel: $(this).find('autotrim-level').text(),
            }

            var name = show.title + ' (' + show.rhythm + ', ' + weekday[show.dow] + ', ' + show.starttime + ', ' + show.length + ' Min.)';
            $('#show-selector').append($('<option>').attr('value',show.id).text(name));

            shows_list.push(show);
          }
        }
      );
      showSelectedShow();
    }

    function app_shows_init() {
      shows_list = [];
      data = { LOGIN_NAME: username, PASSWORD: token };
      $.post("/listdropboxes.cgi", data, updateShowsList, "xml")
    }




    function selectApp(app) {
       switch(app) {
         case "musicpools":
           $('#app-shows').hide();
           $('#nav-btn-shows').removeClass('active');
           $('#app-musicpools').show();
           $('#nav-btn-musicpools').addClass('active');
           break;
         default:
           $('#app-shows').show();
           $('#nav-btn-shows').addClass('active');
           $('#app-musicpools').hide();
           $('#nav-btn-musicpools').removeClass('active');
           app = 'shows';
           app_shows_init();
       }
       sessionStorage.setItem("app", app);
    }

    function authSuccess(data) {
       if (data.status == 'OK') {
         username = data.username;
         sessionStorage.setItem("username", username);

         token = data.token;
         sessionStorage.setItem("token", token);

         selectApp('shows');

         $('#username-field').html(username);
         $('#loginbox').slideUp();
         $('#mainwindow').fadeIn();
       } else {
         alertbox.error("Fehler beim Login", data.errorstring);

         sessionStorage.removeItem("username");
         delete username;
         $("#username").val('').focus();

         sessionStorage.removeItem("token");
         delete token;
         $("#password").val('');

         sessionStorage.removeItem("app");
         delete app;
       }
    }

    function authError(req, status, error) {
       message = req.status + ': ' + error;
       if(req.status == 401) {
         message = "Benutzer und/oder Passwort sind falsch!";
       }
       alertbox.error("Fehler beim Login", message);
       $("#password").val('');
    }

    function login()
    {
      $.ajax("/authtoken.json",
              { cache: false,
                username: $("#username").val(),
                password: $("#password").val(),
                dataType: "json",
                error: authError,
                success: authSuccess
              });
    }

    function logout()
    {
      sessionStorage.removeItem("username");
      delete username;
      sessionStorage.removeItem("token");
      delete token;
      sessionStorage.removeItem("app");
      delete app;

      $(".alert").alert('close');
      $("#username").val('');
      $("#password").val('');
      $("#mainwindow").fadeOut();
      $('#username-field').html('');
      $('#loginbox').slideDown();
    }
  </script>
 </head>
 <body>

  <div class="container">

    <div id="loginbox">

      <form id="loginform" class="form-signin" role="form">
        <img src="/img/helsinki.png" />
        <h1 class="form-signin-heading">Radio Helsinki - Import</h1>
        <input id="username" type="text" class="form-control" placeholder="Benutzername" required autofocus>
        <input id="password" type="password" class="form-control" placeholder="Passwort" required>
        <div id="alertbox"></div>
        <button class="btn btn-primary btn-large" type="submit"><i class="icon-user icon-white"></i> Anmelden</button>
      </form>

    </div>


    <div id="mainwindow">

      <div class="navbar navbar-fixed-top">
        <div class="navbar-inner">
          <div class="container-fluid">
            <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
            </a>
            <span class="brand">Radio Helsinki - Import</span>
            <div class="nav-collapse">
              <ul class="nav">
                <li id="nav-btn-shows"><a href="#" onclick="selectApp('shows')">Sendungen</a></li>
                <li id="nav-btn-musicpools"><a href="#" onclick="selectApp('musicpools')">Musikpools</a></li>
              </ul>
              <form id="logoutform" class="navbar-form pull-right">
                <span class="navbar-text">angmeldet als <strong id="username-field">UNKNOWN</strong></span>&nbsp;&nbsp;
                <button style="margin-top: 0;" type="button" class="btn btn-danger btn-small" onclick="logout()">
                  <i class="icon-off icon-white"></i> Abmelden
                </button>
              </form>
            </div>
          </div>
        </div>
      </div>

      <div id="app-shows" class="container-fluid">
        <div class="row-fluid">
          <div class="span10">
            <form class="well form-inline">
              <label class="control-label" for="select-dropbox"><h3>Sendung auswählen</h3></label>&nbsp;&nbsp;
              <select id="show-selector" onchange="showSelectedShow()">
              </select>
            </form>
          </div>
          <div class="span2">
            <center>
              <h4>Aktuelle Woche</h4>
              <span id="current-week" class="label label-success">Woche 1</span>
            </center>
          </div>
        </div>
        <div class="row-fluid">
          <div class="span12">
            <h2 id="show-title"></h2>
          </div>
        </div>
        <div class="row-fluid" id="show-details">
          <div class="span2">&nbsp;</div>
          <div class="span2">
            <strong>Tag:</strong> <span id="show-dow"></span>
          </div>
          <div class="span2">
            <strong>Rythmus:</strong> <span id="show-rhythm"></span>
          </div>
          <div class="span2">
            <strong>Startzeit:</strong> <span id="show-starttime"></span>
          </div>
          <div class="span2">
            <strong>Dauer:</strong> <span id="show-length"></span>
          </div>
          <div class="span2">&nbsp;</div>
        </div>
        <div class="row-fluid">
          <div class="span12">
            <table class="table table-striped" id="show-carts">
              <thead>
                <tr>
                  <th>Cart #</th>
                  <th>Titel</th>
                  <th>Länge</th>
                  <th>importiert</th>
                  <th># gespielt</th>
                  <th>zuletzt gespielt</th>
                  <th>Aktionen</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>1234</td>
                  <td>Das ist ein Cart Titel</td>
                  <td>57:14.120</td>
                  <td>Mit, 17 Sep 2014 15:12:29</td>
                  <td>1</td>
                  <td>Fre, 19 Sep 2014 17:58:12</td>
                  <td>
                    <button class="btn btn-info btn-mini disabled"><i class="icon-arrow-up icon-white"></i></button>
                    <button class="btn btn-info btn-mini"><i class="icon-arrow-down icon-white"></i></button>
                    <button class="btn btn-danger btn-mini"><i class="icon-trash icon-white"></i> Löschen</button>
                  </td>
                </tr>
                <tr>
                  <td>1235</td>
                  <td>-</td>
                  <td>-</td>
                  <td>-</td>
                  <td>-</td>
                  <td>-</td>
                  <td>
                    <button class="btn btn-info btn-mini"><i class="icon-arrow-up icon-white"></i></button>
                    <button class="btn btn-info btn-mini disabled"><i class="icon-arrow-down icon-white"></i></button>
                    <button class="btn btn-success btn-mini"><i class="icon-upload icon-white"></i> Importieren</button>
                </tr>
              </tbody>
            </table>
            <pre id='show-info-dumper'>
            </pre>
          </div>
        </div>
      </div>

      <div id="app-musicpools" class="container-fluid">
        <div class="span12">
          <h1>Musikpools</h1>
          <p>
            coming soon!
          </p>
        </div>
      </div>

    </div>

  </div>

  <script type="text/javascript">
    $("#loginform").submit(function(event) { login(); event.preventDefault(); });
    $('#username-field').html(username);
    selectApp(app);
    if(token && username) {
      $("#loginbox").hide();
    } else {
      $("#mainwindow").hide();
    }
  </script>

 </body>
</html>