(function () { var lastGBP = 0.0, lastUSD = 0.0, _fasttimer, _slowTimer, myBTC =3.49524333; var lows = { gbp: 0, usd: 0 }, highs = { gbp: 0, usd: 0 }; var list = [{ title: '101B ends', y: 2013, m: 9, d: 24, add: 1001 }, { title: 'Ends', y: 2015, m: 4, d: 10 }]; var addDays = function (myDate, days) { return new Date(myDate.getTime() + days * 24 * 60 * 60 * 1000); }; var getDays = function (startdate, enddate) { var r, s, e; s = startdate.getTime(); e = enddate.getTime(); r = (e - s) / (24 * 60 * 60 * 1000); return r; }; var tick = function () { var today = new Date(); var start101 = new Date(); var end101 = new Date(); var endContract = new Date(); var third = new Date(); start101.setFullYear(2013, 9, 24); end101 = addDays(start101, 1001); endContract.setFullYear(2015, 4, 10); third.setFullYear(2013, 7, 25); $('#one').text('101B ends: ' + Math.ceil(getDays(today, end101)) + " days / " + Math.ceil(getDays(today, end101) / 7) + " weeks"); $('#two').text('Ends: ' + Math.ceil(getDays(today, endContract)) + " days / " + Math.ceil(getDays(today, endContract) / 7) + " weeks"); $('#three').hide(); }; var get_weather = function () { navigator.geolocation.getCurrentPosition(show_weather); }; var show_weather = function (position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; // let's show a map or do something interesting! $.ajax({ type: 'GET', url: 'https://api.forecast.io/forecast/0657dc0d81c037cbc89ca88e383b6bbf/' + latitude.toString() + ',' + longitude.toString(), data: '', dataType: 'jsonp', timeout: 10000, context: $('body'), contentType: ('application/json'), headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, success: function (data) { // console.log(data); var calc = ((5.0 / 9.0 * (data.currently.temperature - 32))); $('#weather').html(data.currently.summary + " " + parseInt(calc) + '°c ' + '' + data.daily.summary + ''); }, error: function (xhr, type) { console.log("ajax error"); console.log(xhr); console.log(type); } }); }; var updateBTC = function (g, u) { var title, total, elm = $('#btc'); if (lastGBP !== 0) { elm.removeClass(); if (g > lastGBP) { elm.addClass('up'); } else if (g < lastGBP) { elm.addClass('down'); } } else { lows.gbp = g; lows.usd = u; highs.gbp = g; highs.usd = u; } lastGBP = g; lastUSD = u; if (g < lows.gbp) lows.gbp = g; if (u < lows.usd) lows.usd = u; if (highs.gbp < g) highs.gbp = g; if (highs.usd < u) highs.usd = u; total = myBTC * g; title = "High: $" + parseFloat(highs.usd.toFixed(2)) + " / Low $" + parseFloat(lows.usd.toFixed(2)); elm.html("$" + parseFloat(u.toFixed(2)) + " / £" + parseFloat(g.toFixed(2)) + " (£" + parseFloat(total.toFixed(2)) + ")"); elm.prop('title', title); }; var updateFX = function (data) { var title, total, elm = $('#fx'); //title = "High: $" + parseFloat(highs.usd.toFixed(2)) + " / Low $" + parseFloat(lows.usd.toFixed(2)); elm.html("£1 = $" + parseFloat(data.gpbe.toFixed(2)) + " = " + parseFloat(data.sekex.toFixed(2)) + " SEK"); // elm.prop('title', title); }; var btcValue = function () { var url = '/btc'; $.ajax({ type: 'GET', url: url, data: '', dataType: 'json', timeout: 10000, //contentType: ('application/json'), headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, success: function (data) { // console.log(data); var gbp = data.bpi.GBP.rate_float, usd = data.bpi.USD.rate_float; updateBTC(gbp, usd); }, error: function (xhr, type) { console.log("ajax error"); console.log(xhr); console.log(type); } }); }; var getFX = function () { var url = '/fx'; $.ajax({ type: 'GET', url: url, data: '', dataType: 'json', timeout: 10000, //contentType: ('application/json'), headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, success: function (data) { //console.log(data); var gpbex = (1 / data.rates.GBP); var sekex = (gpbex * data.rates.SEK); var fxdata = { usd: 1, gbp: data.rates.GBP, sek: data.rates.SEK, gpbe: gpbex, sekex: sekex }; // console.log(fxdata); //var fxdata = data.bpi.GBP.rate_float, usd = data.bpi.USD.rate_float; updateFX(fxdata); }, error: function (xhr, type) { console.log("ajax error"); console.log(xhr); console.log(type); } }); }; var getNextTrainTime = function(toStation,fromStation) { var url = '/getnexttraintimes?from=' + fromStation + '&to=' + toStation ; var target = fromStation + toStation; console.log('Target: ' + target); $.ajax({ type: 'GET', url: url, data: '', dataType: 'json', timeout: 10000, //contentType: ('application/json'), headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, success: function (data) { console.log(data); updateTrain(target,data); //updateFX(fxdata); }, error: function (xhr, type) { console.log("ajax error"); console.log(xhr); console.log(type); } }); }; var updateTrain = function (n, obj) { var elm = $('#'+n); var output, status; output = (obj.eta == "On Time") ? obj.eta : obj.sta; status = (obj.eta == "On Time") ? 'delayed' : 'ontime'; elm.html(output); elm.prop('class', status); }; var getTrainsCB = function (results) { var dest$ = $('#trainResults'); var html = new EJS({url: '/template/trains.ejs'}).render(results); // console.log(html); dest$.empty(); dest$.append(html); // dest$.toggle(); }; var getTrains = function(from, to) { var url = '/gettrains?from=' + from + "&to=" + to; $.ajax({ type: 'GET', url: url, data: '', dataType: 'json', timeout: 10000, //contentType: ('application/json'), headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, success: function (data) { //console.log(data); // updateTrain('glqdbe',data); getTrainsCB(data); }, error: function (xhr, type) { console.log("ajax error"); console.log(xhr); console.log(type); } }); }; var formatPassword = function (data) { var dest$ = $('#passwordOut'); var html = new EJS({url: '/template/password.ejs'}).render(data); console.log(html); dest$.empty(); dest$.append(html); dest$.show(); }; var generatePassword = function(from, to) { var url = '/generate'; $.ajax({ type: 'GET', url: url, data: '', dataType: 'json', timeout: 10000, //contentType: ('application/json'), headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, success: function (data) { console.log(data); formatPassword(data); }, error: function (xhr, type) { console.log("ajax error"); console.log(xhr); console.log(type); } }); }; tick(); get_weather(); // btcValue(); // getFX(); //getDBEGLQ(); //getGLQDBE(); getNextTrainTime('glc','pyg'); getNextTrainTime('dbe','glq'); getNextTrainTime('ptk','glc'); getNextTrainTime('dbe','ptk'); // start 15 minute timer _fastTimer = setInterval(function () { //btcValue(); // getDBEGLQ(); // getGLQDBE(); getNextTrainTime('glc','pyg'); getNextTrainTime('dbe','glq'); getNextTrainTime('ptk','glc'); getNextTrainTime('dbe','ptk'); }, (60000)); _slowTimer = setInterval(function () { // getFX(); get_weather(); }, (60000 * 15)); $('#glqdbeB').on('click',function(){ getTrains('glq','dbe'); }); $('#pygglcB').on('click',function(){ getTrains('pyg','glc'); }); $('#glcptkB').on('click',function(){ getTrains('glc','ptk'); }); $('#ptkdbeB').on('click',function(){ getTrains('ptk','dbe'); }); })(); var popitout = function (url) { newwindow = window.open(url, 'name', 'height=600,width=570'); if (window.focus) { newwindow.focus() } return false; }; var popitoutSmall = function (url) { newwindow = window.open(url, 'name', 'height=400,width=520'); if (window.focus) { newwindow.focus() } return false; };