function strpad(a,b,c){return a.length<b?strpad(c+a,b,c):a}var config_presets=[];config_presets["widget"]=[];config_presets["widget"]["show_map"]=false;config_presets["widget"]["result_limit"]=5;config_presets["widget"]["show_route_summary"]=false;config_presets["widget"]["show_routes"]=true;config_presets["bus"]=[];config_presets["bus"]["show_map"]=true;config_presets["bus"]["result_limit"]=10;config_presets["bus"]["show_route_summary"]=true;config_presets["bus"]["show_routes"]=false;config_presets["full"]=[];config_presets["full"]["show_map"]=true;config_presets["full"]["result_limit"]=50;config_presets["full"]["show_route_summary"]=true;config_presets["full"]["show_routes"]=true;var config;var widget_type="widget";var preselected_route=null;var result_limit=10;var container="#real_time_container";var map_container="map_container";var xhr=null;var refresh_timer=refresh_timer_start=null;var refresh_interval=30;var all_routes;var routes=[];var inbound_route=outbound_route="";var inbound_disabled=outbound_disabled=false;var direction="outbound";var map;var infowindow=new google.maps.InfoWindow({maxWidth:200});var markers_array=[];var bus_colours=[];var idle_time=0;var inactivity_limit=60;var user_is_laving_page=false;var form=["form#real_time",'<form id="real_time" action=""></form>'];var select_route=["#route_select",'<span id="route_select_container">\n                     <select id="route_select"><select>\n                     </span>'];var direction_html='\n  <span id="direction_select_container">\n  <input type="radio" id="outbound" name="dir" value="outbound" />\n  <label for="outbound">From City</label>\n  <input type="radio" id="inbound" name="dir" value="inbound" />\n  <label for="inbound">To City</label>\n  </span>\n  <div style="clear: both;"></div>';var route_summary=["#route_summary",'<span id="route_summary"></span>\n                     <br>'];var select_stop=["#stop_select",'<span id="stop_select_container">\n                    <select id="stop_select"><select>\n                    </span>'];var results_table=["#live_results",'<div id="live_results_container">\n                      <table id="live_results"></table>\n                      </div>\n                      <div id="refresh_counter_container">\n                      <span id="refresh_seconds_remaining">Auto refresh in <span id="refresh_counter">'+refresh_interval+'</span> seconds.</span>\n                      <a href="#" id="refresh_live_data">Refresh Now</a></div>'];var ticker=["#ticker",'<span id="ticker">Fetching live data...</span>'];(function(a){function x(a){var b,c,d;for(b in bus_colours){for(c=0,d=bus_colours[b].length;c<d;c++){if(bus_colours[b][c]==a){if(b=="pathfinder"){return""}return b}}}return""}function w(){idle_time++;if(idle_time>inactivity_limit){clearInterval(refresh_timer);a("#refresh_seconds_remaining").hide()}date=new Date;var b=Math.round(refresh_interval-(date.getTime()-refresh_timer_start)/1e3);if(b>0){a("#refresh_counter").html(b)}else{q()}}function v(){clearInterval(refresh_timer);a("#refresh_counter_container").hide()}function u(){a("#refresh_counter").html(refresh_interval);date=new Date;refresh_timer_start=date.getTime();refresh_timer=setInterval(w,1e3);a("#refresh_live_data").unbind("click");a("#refresh_counter_container").show();a("#refresh_seconds_remaining").show();a("#refresh_live_data").click(function(a){a.preventDefault();q()})}function t(){a(ticker[0]).hide()}function s(){if(a(ticker[0]).length<=0){a(container).append(ticker[1])}a(ticker[0]).show()}function r(b){alert(b);a("#refresh_counter_container").remove();a(results_table[0]).remove();a(ticker[0]).remove()}function q(){var b=a("#stop_select option:selected").attr("name");if(xhr!=null){xhr.abort();xhr=null;t()}if(b==undefined||b==""){return false}s();v();xhr=a.ajax({type:"GET",url:"/nctx_real_time/get_next_buses.php",data:"stop_code="+b,success:function(b){if(b.status!="ok"){r("Something went wrong, please try again later.");return false}var d=b.request_time;var e,f,g,h;var i="";if(b.buses.length>0){i+='<thead class="">\n                        <tr>\n                          <td class="">Bus</td>\n                          <td class="">Destination</td>\n                          <td class="">Time</td>\n                        <tr>\n                      </thead>'}a(b.buses).each(function(a,b){e=b.line_ref;f=b.destination.name;colour=x(e);if(b.monitored=="true"){h=Math.round((b.expected_arrival_time-d)/60);h=h==0?"Due":h+"mins"}else{date=new Date(b.expected_arrival_time*1e3);h=date.getHours()+":"+strpad(String(date.getMinutes()),2,"0")}i+='<tr class="'+colour+'">\n                        <td class="line_ref">'+e+'</td>\n                        <td class="destination">'+f+'</td>\n                        <td class="time">'+h+"</td>\n                      </tr>";return a<config["result_limit"]});i=i==""?"No buses in the next hour":i;t();c(i,results_table,form);u()},error:function(a){if(a.statusText!="abort"&&user_is_laving_page!==true){r("Service unavailable, please try again later.")}return false}})}function p(b){var c=false;a("#stop_select option").each(function(d,e){a(e).removeAttr("selected");if(a(e).attr("name")==b){a(e).attr("selected","selected");c=true}});a("#stop_select_container .easy-select-box").unbind();a("#stop_select_container .easy-select-box").remove();a(document).data("easySelect",null);g();if(c===true){q()}}function o(a,b,c,d){if(d===true){p(c[3])}infowindow.close();infowindow.setContent("<strong>"+c[2]+"</strong><br><br>See Live Departures board for real time bus information on this stop.");infowindow.open(b,a)}function n(b){if(config["show_map"]!==true){return false}if(a("#"+map_container).length<=0){config["show_map"]=false;return false}var c,d;var e=[];var f=min_x=max_y=min_y=null;var g=0;markersArray=[];a(b).each(function(a,b){c=parseFloat(b.lat);d=parseFloat(b.long);f=f==null?c:Math.max(c,f);min_x=min_x==null?c:Math.min(c,min_x);max_y=max_y==null?d:Math.max(d,max_y);min_y=min_y==null?d:Math.min(d,min_y);e.push([c,d,b.common_name,b.atco]);g++});var h=Math.abs(f-min_x);var i=Math.abs(max_y-min_y);var j=Math.round(.97*(-15.27*Math.max(h,i)+13.7));var k=new google.maps.LatLng((f+min_x)/2,(max_y+min_y)/2);var l={zoom:j,center:k,mapTypeId:google.maps.MapTypeId.ROADMAP};var m=new google.maps.Map(document.getElementById(map_container),l);a(e).each(function(a,b){latlng=new google.maps.LatLng(b[0],b[1]);var c=new google.maps.Marker({position:latlng,map:m,draggable:false,animation:google.maps.Animation.DROP,title:b[2]});markers_array[b[3]]=c;google.maps.event.addListener(c,"click",function(){o(c,m,b,true)});google.maps.event.addListener(c,"dblclick",function(){o(c,m,b,false)})})}function m(){var b=a("#route_select option:selected").attr("class");var c=a("#route_select option:selected").attr("name");var d="";a(all_routes).each(function(e,f){if(f.color==b){a(f.buses).each(function(a,b){if(b.number==c){if(inbound_disabled===true&&outbound_disabled===true){d=b.circularroute}else{if(direction=="inbound"){d=b.inboundroute}else{d=b.outboundroute}}}})}});return d}function l(b){a("#"+b).removeAttr("disabled");if(b=="inbound"){inbound_disabled=false}else{outbound_disabled=false}}function k(b){a("#"+b).removeAttr("checked");a("#"+b).attr("disabled","disabled");if(b=="inbound"){inbound_disabled=true}else{outbound_disabled=true}}function j(b){if(b=="outbound"){if(outbound_disabled===true){return false}else{direction="outbound"}}else{if(inbound_disabled===true){return false}else{direction="inbound"}}a("#"+direction).attr("checked","checked");return true}function i(){direction=a("#outbound").attr("checked")=="checked"?"outbound":"inbound";f()}function h(){if(a("#inbound").length<=0){b(direction_html,form);a("#inbound").change(function(){i()});a("#outbound").change(function(){i()})}a("#"+direction).attr("checked","checked")}function g(){a("#stop_select").easySelectBox({speed:100});if(a("#stop_select_container select:last").attr("id")!="stop_select"){a("#stop_select_container select:last").remove()}a("#stop_select_container .easy-select-box ul li:first a").html("");a("#stop_select_container .easy-select-box ul li a").click(function(){var b=a("#stop_select_container .easy-select-box ul li").index(a(this).parent());a("#stop_select option").each(function(c,d){a(d).removeAttr("selected");if(c==b){a(d).attr("selected","selected")}});if(config["show_map"]===true&&b!=0){google.maps.event.trigger(markers_array[a("#stop_select option:selected").attr("name")],"dblclick")}q()})}function f(){a("#refresh_counter_container").remove();a(route_summary[0]).html("");a(select_stop[0]).html("");a("#live_results_container").remove();a(ticker[0]).remove();a("#stop_select_container .easy-select-box").unbind();a("#stop_select_container .easy-select-box").remove();a(document).data("easySelect",null);var b=a("#route_select option:selected").attr("name");if(b==""){return false}if(xhr!=null){xhr.abort()}xhr=a.ajax({url:"/nctx_real_time/get_json.php?file=route_"+b,dataType:"json",success:function(b){if(b==null||b==""){if(config["show_routes"]!==false){r("Sorry this route is temporarily unavailable.")}return false}h();l("inbound");l("outbound");var d=inbound_options=outbound_options='<option name="">Select your stop</option>';var e=b.injourney;var f=0;a(e).each(function(a,b){f++;inbound_options+='<option name="'+b.atco+'">'+b.common_name+"</option>"});if(f==0){k("inbound")}e=b.outjourney;f=0;a(e).each(function(a,b){f++;outbound_options+='<option name="'+b.atco+'">'+b.common_name+"</option>"});if(f==0){k("outbound")}if(inbound_disabled===true&&outbound_disabled===true){e=b.circularjourney;f=0;a(e).each(function(a,b){f++;d+='<option name="'+b.atco+'">'+b.common_name+"</option>"});if(f==0){r("No stops found for this route. Please try again.");return false}}if(direction=="inbound"&&inbound_disabled===true){j("outbound")}else if(direction=="outbound"&&outbound_disabled===true){j("inbound")}if(d=='<option name="">Select your stop</option>'){d=direction=="inbound"?inbound_options:outbound_options;e=direction=="inbound"?b.injourney:b.outjourney}n(e);if(config["show_route_summary"]===true){if(a("#route_summary").length>0){a("#route_summary").html(m())}else{c(m(),route_summary,form)}}a("#stop_select").unbind();c(d,select_stop,form);g();a("#stop_select").change(function(){if(config["show_map"]===true){google.maps.event.trigger(markers_array[a("#stop_select option:selected").attr("name")],"dblclick")}q()})},error:function(){if(e.statusText!="abort"){if(config["show_routes"]!==false){r("Route unavailable. Please try again later.")}}return false}})}function d(){var c='<option name="">Select bus</option>';var d=false;var e;a(all_routes).each(function(b,f){e=f.color;a(f.buses).each(function(a,b){if(e in bus_colours){bus_colours[e].push(b.number)}else{bus_colours[e]=[b.number]}if(config["show_routes"]===false&&preselected_route==b.number){c+='<option class="'+b.color+'" name="'+b.number+'" selected="selected">'+b.number+"</option>";d=true}else{c+='<option class="'+b.color+'" name="'+b.number+'">'+b.number+"</option>"}})});b(c,select_route,form);if(config["show_routes"]===false){a("#route_select_container").hide();if(d===true){f()}}else{a("#route_select").easySelectBox({speed:100});if(a("#route_select_container select:last").attr("id")!="route_select"){a("#route_select_container select:last").remove()}a("#route_select_container .easy-select-box ul li:first a").html("");a("#route_select_container .easy-select-box ul li a").click(function(){var b=a("#route_select_container .easy-select-box ul li").index(a(this).parent());a("#route_select option").each(function(c,d){a(d).removeAttr("selected");if(c==b){a(d).attr("selected","selected")}});f()})}a("#route_select").change(function(){f()})}function c(b,c,d){if(d==undefined){d=container}else{d=d[0]}if(a(c[0]).length<=0){a(d).append(c[1])}a(c[0]).html(b)}function b(b,c,d){if(d==undefined){d=container}else{d=d[0]}if(a(c[0]).length<=0){a(d).append(c[1])}a(c[0]).append(b)}a(document).ready(function(){if(typeof route_id!=="undefined"&&route_id!=null){preselected_route=route_id;config=config_presets["bus"]}else if(typeof is_homepage!="undefined"&&is_homepage===true){config=config_presets["widget"]}else{config=config_presets["full"]}b("",form);a.ajax({url:"/nctx_real_time/get_json.php?file=all_routes",dataType:"json",success:function(a){all_routes=a.all_routes;d(all_routes)},error:function(){return false}});a(this).mousemove(function(a){idle_time=0})})})(this.jQuery);window.onbeforeunload=function(){user_is_laving_page=true}
