@ -0,0 +1,59 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
|
|||
<title>BestBus Mumbai - Found Buses</title> |
|||
|
|||
<meta name="viewport" content="user-scalable=no, width=device-width" > |
|||
|
|||
<!-- <link rel="stylesheet" type="text/css" href="app.css"> --> |
|||
<link rel="stylesheet" type="text/css" href="./css/common.css"> |
|||
<link rel="stylesheet" type="text/css" href="./lib/jquery/jquery.mobile.min.css"> |
|||
|
|||
<script type="text/javascript" src="./lib/jquery/jquery.min.js"></script> |
|||
<script type="text/javascript" src="./lib/jquery/jquery.mobile.min.js"></script> |
|||
|
|||
<script type="text/javascript" src="init/areas.js"></script> |
|||
<script type="text/javascript" src="init/stopnames.js"></script> |
|||
<script type="text/javascript" src="libfns.js"></script> |
|||
<script type="text/javascript" src="cf.js"></script> |
|||
<script type="text/javascript" src="init/stopbus.js"></script> |
|||
<script type="text/javascript" src="init/busmaster.js"></script> |
|||
<script type="text/javascript" src="busesfound.js"></script> |
|||
|
|||
</head> |
|||
|
|||
<body onLoad='busesfoundinit();'> |
|||
<div data-role="page" data-theme="a"> |
|||
<div data-role="header" data-theme="a"> |
|||
<div data-role="navbar"> |
|||
<!-- <div id="navigation"> --> |
|||
<ul> |
|||
<li><a href="index.html" rel="external">Find</a></li> |
|||
<li><a href="busesfound.html" rel="external" class="ui-btn-active">Routes</a></li> |
|||
<!-- <li><a href="busroute.html" rel="external">Routes</a></li> --> |
|||
<li><a href="journey.html" rel="external">Journey</a></li> |
|||
</ul> |
|||
</div><!-- /navbar --> |
|||
</div> <!-- /header --> |
|||
|
|||
<div data-role="content" data-theme="c"> |
|||
<div id="foundBuses"> |
|||
<div id="foundBusFrom" class="bar_color"></div> |
|||
<div id="foundBusTo" class="bar_color"></div> |
|||
<div id="spacer"> </div> |
|||
<span id="directBuses" >Finding Buses ...</span> |
|||
</div> <!-- /foundbuses --> |
|||
<div id='spacer'> </div> |
|||
<div style='width:98%;line-height:8px;' data-role="collapsible" data-theme="a"> |
|||
<h5><span id="font-size:14px;">Recent Buses Found</h5> |
|||
<div id="recentBusesFound" class="tbl_color"></div> |
|||
</div> <!-- /collapsible --> |
|||
|
|||
</div> <!-- /content --> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
|
|||
|
|||
|
@ -0,0 +1,680 @@ |
|||
// Find buses between start and destination stop
|
|||
// Parameters: s - startstopnameid to d - deststopnameid
|
|||
//
|
|||
|
|||
var dBugLvl = 3; |
|||
var WALKDIST = 1000; // Find stops within 1 km radius
|
|||
var NEARLATLON = 0.01; |
|||
var CHECKSTOPS = 40; |
|||
var SHOWMAXSTOPS = 5; |
|||
var MAXBUSESTOSHOW = 4; |
|||
var MAXRECENTBUSESFOUND = 7; |
|||
|
|||
var stopLines; |
|||
var stopBusLines; |
|||
var busMaster; |
|||
var oStartStop, oDestStop; // The stopbus info for start and dest
|
|||
var startStopArea, destStopArea; |
|||
var arBusesFound = []; |
|||
var sAr, dAr; // Array of stops near start and destination
|
|||
|
|||
/* |
|||
$(document).ready(function() { |
|||
// var XMLFileSupport = CheckXMLHttpFile();
|
|||
busesfoundinit(); |
|||
return; |
|||
}); |
|||
*/ |
|||
|
|||
function busesfoundinit() { |
|||
scrollTo(0, 0); |
|||
s = gup('s'); |
|||
d = gup('d'); |
|||
if(s === "" && d === "") { |
|||
s = getCookie('cStartStopNameId'); |
|||
d = getCookie('cDestStopNameId'); |
|||
} |
|||
if(d === "") { |
|||
alert('No Buses Found as yet. Select from the Find Bus tab'); |
|||
window.location.href = "index.html"; |
|||
return; |
|||
} |
|||
|
|||
startStopNameId = s; |
|||
destStopNameId = d; |
|||
dBug('', ' s = ' + s + ', d = ' + d, 5); |
|||
stopBusLines = getStopBusList(); |
|||
busMaster = getbusmaster(); |
|||
var sStopSs = findStopId(startStopNameId).stopsrchstr; |
|||
var dStopSs = findStopId(destStopNameId).stopsrchstr; |
|||
var htmlTitle = sStopSs.stopsrchstr + ' <br>' + dStopSs; |
|||
var dirHdr = "<table class='tbl_color' id='directbuses'><tr><th>Stop name</th><th>Buses (frequency)</th></tr>"; |
|||
var dirHdrClose = '</table>'; |
|||
var htmlBody = ''; |
|||
var dHTML = '', nHTML = '', cHTML = ''; |
|||
if(startStopNameId !== '') { // start not empty, find near stops, needed for all
|
|||
rAr = getStopsNear(startStopNameId); |
|||
if(rAr !== null) { |
|||
sAr = rAr.startStops; |
|||
oStartStop = rAr.stopInfo; |
|||
} |
|||
document.getElementById("foundBusFrom").innertHTML = sStopSs; |
|||
} |
|||
if(destStopNameId !== '') { // dest not empty, find near stops
|
|||
rAr = getStopsNear(destStopNameId); |
|||
dAr = rAr.startStops; |
|||
oDestStop = rAr.stopInfo; |
|||
var el = "To: " + dStopSs; |
|||
document.getElementById("foundBusTo").innertHTML = el; |
|||
} |
|||
if(startStopNameId === '' && destStopNameId !== '') { // start is blank so stops at destination
|
|||
htmlTitle = 'Buses at and near destination: ' + dStopSs; |
|||
// document.getElementById("foundBusTitle").innerHTML = dStopSs;
|
|||
htmlStart = stopsNear(destStopNameId); |
|||
htmlBody = htmlStart; |
|||
} |
|||
else if(startStopNameId !== '' && destStopNameId === '') { |
|||
htmlTitle = 'Buses at and near start: ' + sStopSs; |
|||
htmlDest = stopsNear(startStopNameId); |
|||
|
|||
htmlBody = dirHdr + htmlDest + dirHdrClose; |
|||
} |
|||
else { |
|||
var rtDb = [0, '']; |
|||
var rtNb = [0, '']; |
|||
rtDb = getDirectBuses(oStartStop, oDestStop); |
|||
dHTML = ''; |
|||
if(rtDb != undefined) { |
|||
if(rtDb[0]) |
|||
dHTML = rtDb[1]; |
|||
else |
|||
dHTML = '<div class="hilite"> No Direct buses found</div>'; |
|||
if(rtDb[0] < 3) { |
|||
rtNb = getNearBuses(startStopNameId, destStopNameId); |
|||
if(rtNb[0]) |
|||
nHTML = rtNb[1]; |
|||
else |
|||
if(!rtDb[0]) // no message if we found direct buses
|
|||
nHTML = '<div class="hilite"> No buses from nearby stops</div>'; |
|||
} |
|||
} |
|||
cHTML = ''; |
|||
if(arBusesFound.length < 1) { |
|||
// if(rtDb[0]< 3 && rtNb[0] < 3) {
|
|||
rtCb = conxions(startStopNameId, destStopNameId); |
|||
if(rtCb !== null && rtCb[0]) |
|||
cHTML = rtCb[1]; |
|||
if(rtCb === null || !rtCb[0]) // no message if we found direct buses
|
|||
cHTML = '<div class="hilite"> No bus connections</div>'; |
|||
|
|||
/* if(cHTML != "") |
|||
fndBus = fndBus + "<br>" + cHTML |
|||
else |
|||
fndBus = fndBus + "<div id='notfound'>" + "No Connections found" + '</div>'; */ |
|||
} |
|||
// var dirHdr = '', dirHdrClose = '';
|
|||
if((rtDb == undefined || rtDb[0] === 0) && rtNb[0] === 0) { |
|||
dirHdr = ""; |
|||
dirHdrClose = ''; |
|||
} |
|||
|
|||
htmlBody = dirHdr + dHTML + nHTML + dirHdrClose + cHTML; |
|||
} |
|||
// document.getElementById("foundBusTitle").innerHTML = htmlTitle;
|
|||
if (startStopNameId != "") |
|||
if ( destStopNameId != "" ) |
|||
document.getElementById("foundBusFrom").innerHTML = "From: " + sStopSs; |
|||
else |
|||
document.getElementById("foundBusFrom").innerHTML = "Buses at and near: " + sStopSs; |
|||
|
|||
if(destStopNameId != "") |
|||
document.getElementById("foundBusTo").innerHTML = "To: " + dStopSs; |
|||
else |
|||
document.getElementById("foundBusTo").innerHTML = ""; // No dest provided, blank it
|
|||
|
|||
|
|||
if(htmlBody == "") |
|||
htmlBody = "<br>No buses found<br>"; |
|||
document.getElementById("directBuses").innerHTML = htmlBody; |
|||
addRecentBusesFound({'busesFrom':sStopSs, 'busesTo':dStopSs, 'busHtml':htmlBody}); |
|||
showRecentBusesFound(); |
|||
|
|||
} |
|||
|
|||
// Buses from exact start to dest
|
|||
function getDirectBuses(oStartStop, oDestStop) { |
|||
|
|||
dBug('getDirectBuses', 'start', 5); |
|||
// directBuses = "";
|
|||
var nDirectBuses = 0; |
|||
rAr = directBus(oStartStop, oDestStop); |
|||
if(rAr === null) |
|||
return null; |
|||
nDirectBuses = rAr[0]; |
|||
sDirectBuses = rAr[1]; |
|||
dBug('getDirectBuses', nDirectBuses + ', Start: ' + oStartStop.searchstr + ', Dest: ' + oDestStop, 5); |
|||
|
|||
// dirHdr = "<tr><th>Stop name</th><th>Buses</th></tr>";
|
|||
// sDirectBuses = "<table id='directbuses'>" + dirHdr + "<tr><td>Direct Buses (" +
|
|||
// nDirectBuses + ") </td><td>" + sDirectBuses + "</td></tr>";
|
|||
sDirectBuses = "<tr><td>Direct Buses (" + |
|||
nDirectBuses + ") </td><td>" + sDirectBuses + "</td></tr>"; |
|||
|
|||
if(nDirectBuses) |
|||
fndBusDirect = sDirectBuses; |
|||
else |
|||
fndBusDirect = "<div id='notfound'>No direct buses found</div>"; |
|||
|
|||
fndBus = fndBusDirect; |
|||
for(var x=0; x<nDirectBuses; x++) |
|||
arBusesFound[arBusesFound.length] = rAr[2][x][0]; |
|||
|
|||
return [nDirectBuses, fndBusDirect]; |
|||
} |
|||
|
|||
function getNearBuses(startStop, destStop) { |
|||
// Get the lat, lon of the current stop
|
|||
var STOPNAMEID = 0; |
|||
var STOPLAT = 1; |
|||
var STOPLON = 2; |
|||
var startStopIdx = 0; |
|||
var destStopIdx = 0; |
|||
var x = 0; |
|||
|
|||
// Now find stops near start to stops near destination
|
|||
// Check for 10 stops before and after since our stops are ordered by lat lon
|
|||
// Also within 111 m, 0.001, max 5 stops;
|
|||
|
|||
STOPIDX = 0; |
|||
DIIDX = 0; |
|||
|
|||
// Check for near buses from near start to near dest
|
|||
var sNearBuses = ""; |
|||
var nNearBuses = 0; |
|||
var arNearBuses = []; |
|||
for(x=0; x < sAr.length; x++) { |
|||
for(var y=0; y < dAr.length; y++) { |
|||
if(sAr[x][1].stopnameid == oStartStop.stopnameid && dAr[y][1].stopnameid == oDestStop) |
|||
continue; |
|||
|
|||
rAr = directBus(sAr[x][1], dAr[y][1]); |
|||
if(rAr[0] === 0) // No direct buses found, go to the next one
|
|||
continue; |
|||
// If the bus in any of the direct buses, skip it
|
|||
bFound = false; |
|||
for(a=0; a<rAr[2].length; a++) |
|||
bFound = checkFoundB4(rAr[2][a][STOPIDX]); |
|||
|
|||
if(bFound) |
|||
continue; |
|||
|
|||
nNearBuses = rAr[0]; |
|||
sBuses = rAr[1]; |
|||
distStartStop = sAr[x][DIIDX]; |
|||
distDestStop = dAr[y][DIIDX]; |
|||
s = distStartStop > 0 ? distStartStop : 0; |
|||
d = distDestStop > 0 ? distDestStop : 0; |
|||
if(nNearBuses) { |
|||
startSearchStr = sAr[x][1].searchstr; |
|||
destSearchStr = dAr[y][1].searchstr; |
|||
if(startStop == sAr[x][STOPIDX]) |
|||
arNearBuses[arNearBuses.length] = [d, '', destSearchStr, |
|||
sBuses, nNearBuses, rAr[2]]; |
|||
// sNearBuses = sNearBuses + '<tr><td>To ' + destSearchStr +
|
|||
// ' (' + nNearBuses + ') </td><td>' + sBuses + '</td></tr>';
|
|||
else if(destStop == dAr[y][STOPIDX]) |
|||
arNearBuses[arNearBuses.length] = [s, startSearchStr, '', |
|||
sBuses, nNearBuses, rAr[2]]; |
|||
|
|||
// sNearBuses = sNearBuses + '<tr><td>From : ' + startSearchStr +
|
|||
// ' (' + nNearBuses + ') </td><td>' + sBuses + '</td></tr>';
|
|||
else { |
|||
var combDist = ''; |
|||
if( distStartStop > 0 || distDestStop > 0) { |
|||
s = distStartStop > 0 ? distStartStop : 0; |
|||
d = distDestStop > 0 ? distDestStop : 0; |
|||
// combDist = '(' + distFormat(s + d) + ')';
|
|||
arNearBuses[arNearBuses.length] = [s+d, startSearchStr, destSearchStr, |
|||
sBuses, nNearBuses, rAr[2]]; |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
arNearBuses.sort(sortDiStop); |
|||
sNearBuses = ''; |
|||
// busesDone = [];
|
|||
sComma = ''; |
|||
sBus = ''; |
|||
nNearBuses = 0; |
|||
for(x=0; x<arNearBuses.length; x++) { |
|||
|
|||
// build string of buses not displayed before - leave out buses already found
|
|||
nearBusList = arNearBuses[x][5]; |
|||
var busFound = false; |
|||
var busesFoundInRow = 0; |
|||
for(var a=0; a<nearBusList.length; a++) { |
|||
busFound = false; |
|||
for(var b=0; b<arBusesFound.length; b++) { |
|||
if(arBusesFound[b] == nearBusList[a][0]) { |
|||
busFound = true; |
|||
busesFoundInRow++; |
|||
} |
|||
} |
|||
if(!busFound) { |
|||
url = 'journey.html?b=' + nearBusList[a][0] + '&s=' + nearBusList[a][1] + '&d=' + nearBusList[a][1] + '"> ' + nearBusList[a][0]; |
|||
sBus = sBus + sComma + '<a rel="external" href="javascript:window.location.href=' + url + '"> ' + nearBusList[a][0] + "</a>" ; |
|||
arBusesFound[arBusesFound.length] = nearBusList[a][0]; |
|||
} |
|||
sComma = ', '; |
|||
} |
|||
if(busesFoundInRow < nearBusList.length) { |
|||
nNearBuses++; |
|||
sNearBuses = sNearBuses + '<tr><td>' + (arNearBuses[x][1] !== "" ? 'From: ' + arNearBuses[x][1] : ""); |
|||
sNearBuses = sNearBuses + (arNearBuses[x][2] !== "" ? ' To: ' + arNearBuses[x][2] : "") + ' (' + arNearBuses[x][4] + ') - ' + distFormat(arNearBuses[x][0]) + '</td><td>' + arNearBuses[x][3] + '</td></tr>'; |
|||
} |
|||
|
|||
if(arBusesFound.length >= MAXBUSESTOSHOW) |
|||
break; |
|||
} |
|||
|
|||
/* if(!nDirectBuses) |
|||
sNearBuses = "<table id='directbuses'>" + "<tr><th>Stop name</th><th>Buses</th></tr>" |
|||
+ sNearBuses; |
|||
*/ |
|||
if(nNearBuses) { |
|||
fndBus = fndBus + "<tr><td><h3>From stops near you:</h3></td></tr>"; |
|||
fndBus = fndBus + sNearBuses; |
|||
} |
|||
else |
|||
fndBus = fndBus + "<div id='notfound'>No near buses found</div>"; |
|||
|
|||
// No direct or near buses found, look for connections
|
|||
|
|||
return [nNearBuses, sNearBuses]; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
function directBus(oSStop, oDStop) { |
|||
|
|||
if(oSStop === undefined || oDStop === undefined) |
|||
return null; |
|||
dBug("directBus", "start", 5); |
|||
var sDirectBus = ''; |
|||
var nDirectBus = 0; |
|||
var startBuses = ''; |
|||
var destBuses = ''; |
|||
var x = 0; |
|||
// Get the buses at the start and destination stops
|
|||
arStartBus = oSStop.busList.split(", "); |
|||
arDestBus = oDStop.busList.split(", "); |
|||
sComma = ""; |
|||
var retArray = []; |
|||
var dBus = []; |
|||
for(x=0; x < arStartBus.length; x++) { |
|||
sb = arStartBus[x].split("|"); |
|||
for(var y=0; y < arDestBus.length; y++) { |
|||
db = arDestBus[y].split("|"); |
|||
if(sb[0] == db[0]) { |
|||
busInfo = getBusInfo(sb[0]); |
|||
busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = " ( " + busInfo.frequency + " mins)"; |
|||
url = 'journey.html?b=' + sb[0] + '&s=' + sb[1] + '&d=' + db[1]; |
|||
url = '#'; |
|||
sDirectBus = sDirectBus + sComma + buildUrl(sb[0], sb[1], db[1]); |
|||
nDirectBus++; |
|||
sComma = ", "; |
|||
dBus[dBus.length] = [sb[0], sb[1], db[1]]; |
|||
} |
|||
} |
|||
} |
|||
retArray = [nDirectBus, sDirectBus, dBus]; |
|||
return retArray; |
|||
|
|||
} |
|||
|
|||
|
|||
// Find connections - change bus at one point between start and destination
|
|||
function conxions(startStop, destStop) { |
|||
if(startStop == undefined || destStop == undefined) |
|||
return null; |
|||
var AREA = 0; |
|||
var STOPNAMEID = 1; |
|||
var SEARCHSTR = 2; |
|||
var LAT = 3; |
|||
var LON = 4; |
|||
var BUSLIST = 5; |
|||
var MAXROUTES = 5; |
|||
var commonBus = new Array(); |
|||
// var sCB = new Array();
|
|||
// var dCB = new Array();
|
|||
var arBestDist = []; |
|||
var areas = getAreas(); |
|||
var startBuses = ''; |
|||
var destBuses = ''; |
|||
var htmCommonStops = ""; |
|||
|
|||
// first get the stop info
|
|||
|
|||
if(oStartStop == undefined || oDestStop == undefined) |
|||
return null; |
|||
|
|||
startBuses = oStartStop.busList; |
|||
destBuses = oDestStop.busList; |
|||
var startAreaLat = 0; var startAreaLon = 0; var destAreaLat = 0; var destAreaLon = 0; |
|||
for(var i=0; i<areas.length; i++) { |
|||
if(oStartStop.area == areas[i][0]) { |
|||
startAreaLat = areas[i][1]; |
|||
startAreaLon = areas[i][2]; |
|||
} |
|||
if(oDestStop.area == areas[i][0]) { |
|||
destAreaLat = areas[i][1]; |
|||
destAreaLon = areas[i][2]; |
|||
} |
|||
} |
|||
nwLat = startAreaLat; nwLon = startAreaLon; seLat = destAreaLat; seLon = destAreaLon; |
|||
if( startAreaLat < destAreaLat ) { |
|||
nwLat = destAreaLat; |
|||
seLat = startAreaLat; |
|||
} |
|||
if( startAreaLon > destAreaLon) { |
|||
nwLon = destAreaLon; |
|||
seLon = startAreaLon; |
|||
} |
|||
|
|||
arStartBuses = startBuses.split(", "); |
|||
arDestBuses = destBuses.split(", "); |
|||
var commonStops = []; |
|||
bStartFound = false; |
|||
bDestFound = false; |
|||
br = "<br>"; |
|||
var n = 1; |
|||
curStop = ""; |
|||
curSb = ""; curDb = ""; |
|||
|
|||
|
|||
for(x=0; x < stopBusLines.length; x++) { |
|||
// dBug('conxion: ', 'checking common stops - ' + x, 5);
|
|||
if(stopBusLines[x] !== "") { |
|||
ar = stopBusLines[x]; // ["138048", "10throad", "[Chembur W] 10Th Road", "8 L|34, 19 L|29, 92 L|48, 355 L|14, 362|2, 364|17"]
|
|||
// Check whether the area of this stop is within the square start and dest
|
|||
if(ar[LAT] > nwLat || ar[LON] > seLon || ar[LAT] < seLat || ar[LON] < nwLon) |
|||
continue; |
|||
sCb = ""; dCb = "";// Source and dest common buses
|
|||
|
|||
buses = ar[BUSLIST].split(", "); // ["8 L|34", "19 L|29", "92 L|48" ....]
|
|||
// check if the stop has a bus in start and a bus in destination
|
|||
bStartFound = false; bDestFound = false; |
|||
sCb = ''; sComma = ""; dCb = ''; dComma = ""; |
|||
for(var c=0; c<buses.length;c++) { |
|||
bus = buses[c].split('|'); |
|||
for(var y=0; y<arStartBuses.length; y++) { |
|||
sb = arStartBuses[y].split("|"); // ["A 70 Exp AC Exp", "13"] - bus, stopno.
|
|||
if(bus[0] == sb[0] && !checkFoundB4(sb[0])) {// start bus found, check if dest bus there
|
|||
bStartFound = true; |
|||
busInfo = getBusInfo(sb[0]); |
|||
busfreq = ""; |
|||
if(busInfo.frequency != undefined) |
|||
busfreq = " ( " + busInfo.frequency + " mins)"; |
|||
|
|||
sCb = sCb + sComma + '<a rel="external" href="journey.html?b=' + sb[0] + |
|||
'&s=' + sb[1] + '&d=' + bus[1] + '"> ' + sb[0] + busfreq + "</a>"; |
|||
|
|||
sComma = ", "; |
|||
} |
|||
} |
|||
for(var z=0; z<arDestBuses.length; z++) { |
|||
db = arDestBuses[z].split('|'); |
|||
if(bus[0] == db[0]) { |
|||
bDestFound = true; |
|||
busInfo = getBusInfo(sb[0]); |
|||
busfreq = ""; |
|||
if(busInfo.frequency != undefined) |
|||
busfreq = " ( " + busInfo.frequency + " mins)"; |
|||
|
|||
dCb = dCb + dComma + '<a rel="external" href="journey.html?b=' + db[0] +'&s=' + bus[1] + '&d=' + db[1] + '"> ' + db[0] + busfreq + "</a>"; |
|||
// dCb = dCb + dComma + db;
|
|||
dComma = ", "; |
|||
} |
|||
} |
|||
} |
|||
if(bStartFound && bDestFound) { |
|||
dBug('conxions: ', 'Found stop', 5); |
|||
var csLat = 0; var csLon = 0; var diStart = -1, diDest = -1; |
|||
for(i=0; i<areas.length; i++) { |
|||
if(ar[AREA] == areas[i][0]) { |
|||
csLat = areas[i][1]; |
|||
csLon = areas[i][2]; |
|||
diStart = distanceLatLon(csLat, csLon, startAreaLat, startAreaLon); |
|||
diDest = distanceLatLon(csLat, csLon, destAreaLat, destAreaLon); |
|||
} |
|||
} |
|||
combDist = -1; |
|||
if(diStart > 0 && diDest > 0) { |
|||
combDist = diStart + diDest; |
|||
arBestDist[combDist] = |
|||
[ar[STOPNAMEID], ar[SEARCHSTR], sCb, dCb, combDist]; |
|||
|
|||
dBug('conxions: ', 'Comb. dist - ' + combDist, 5); |
|||
} |
|||
// Check if this bus is in the direct or near buses, if so skip
|
|||
|
|||
|
|||
commonStops[commonStops.length] = |
|||
[ar[STOPNAMEID], ar[SEARCHSTR], sCb, dCb, combDist]; |
|||
n++; |
|||
|
|||
} |
|||
|
|||
} |
|||
} |
|||
dBug('conxions: ', 'found - ' + arBestDist.length, 5); |
|||
htmCommonStops = ""; |
|||
var nStops = 0; |
|||
for(y=0; y<arBestDist.length; y++) { |
|||
if(arBestDist[y] != undefined) { |
|||
htmCommonStops = htmCommonStops + "<tr><td>" + arBestDist[y][1] + " (" + distFormat(arBestDist[y][4]) + ")</td><td>" + arBestDist[y][2] + "</td><td>" + arBestDist[y][3] + "</td><td></tr>"; |
|||
nStops++; |
|||
dBug('conxions', arBestDist[y][1] + " (" + distFormat(arBestDist[y][4]), 5); |
|||
if(nStops > MAXROUTES) |
|||
|
|||
break; |
|||
} |
|||
} |
|||
if (!nStops) { |
|||
for(x=0; x<commonStops.length; x++) { |
|||
htmCommonStops = htmCommonStops + "<tr><td>" + commonStops[x][1] + ")</td><td>" |
|||
+ commonStops[x][2] + "</td><td>" + commonStops[x][3] + "</td><td></tr>"; |
|||
} |
|||
} |
|||
htmHdr = "<tr><th>Connecting Stop</th><th>Buses from start</th><th>Buses to Destination</th></tr>"; |
|||
htmCommonStops = '<table class="tbl_color">' + htmHdr + htmCommonStops + "</table>"; |
|||
|
|||
return [nStops, htmCommonStops]; |
|||
} |
|||
|
|||
|
|||
// Check if bus already found
|
|||
function checkFoundB4(busno) { |
|||
if(busno == undefined) |
|||
return false; |
|||
var bFound = false; |
|||
for(b=0; b<arBusesFound.length; b++) { |
|||
if(busno.replace(/ /g, '') == arBusesFound[b].replace(/ /g, '')) |
|||
bFound = true; |
|||
} |
|||
return bFound; |
|||
} |
|||
|
|||
function stopsNear(startStop) { |
|||
var STOPNAMEID = 0; |
|||
var STOPLAT = 1; |
|||
var STOPLON = 2; |
|||
var startStopIdx = 0; |
|||
var destStopIdx = 0; |
|||
var bStopFound = false; |
|||
|
|||
var rHTML = ''; |
|||
var arNearStopBuses = []; |
|||
for(x=0; x<sAr.length && x < SHOWMAXSTOPS; x++) { |
|||
stopInfo = sAr[x][1]; |
|||
/* if(sAr[x][0] === 0) // Its this stop, so we don't need it |
|||
continue; */ |
|||
sBus = ''; |
|||
sComma = ''; |
|||
arStopBus = stopInfo.busList.split(", "); |
|||
arBusesAtStop = []; |
|||
var nNewBus = 0; |
|||
var nBusesAtStop = 0; |
|||
for(var y=0; y < arStopBus.length; y++) { |
|||
stopbus = arStopBus[y].split("|"); |
|||
|
|||
var bBusFound = false; |
|||
for(var a=0; a<arNearStopBuses.length; a++) { |
|||
if(stopbus[0] == arNearStopBuses[a]) { |
|||
bBusFound = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!bBusFound) { |
|||
arNearStopBuses[arNearStopBuses.length] = stopbus[0]; |
|||
nNewBus++; |
|||
|
|||
} |
|||
// arBusesAtStop[arBuesesAtStop.length] = stopbus[0];
|
|||
sBus = sBus + sComma + '<a href="journey.html?b=' + stopbus[0] + '&s=0&d=0"> ' + stopbus[0] + "</a>" ; |
|||
sComma = ", "; |
|||
} |
|||
if(nNewBus) { |
|||
rHTML = rHTML + '<tr><td>' + stopInfo.searchstr + ' (' + distFormat(sAr[x][0]) + ')</td><td>'; |
|||
rHTML = rHTML + sBus + '</td></tr>'; |
|||
} |
|||
} |
|||
|
|||
return rHTML; |
|||
|
|||
} |
|||
|
|||
// Sort the distance, stops array by the shortest distance
|
|||
function sortDiStop(a, b) { |
|||
return ((a[0] < b[0]) ? -1 : ((a[0] > b[0]) ? 1 : 0)); |
|||
} |
|||
|
|||
function getStopInfo(stopnameid) { |
|||
var oBus = null; |
|||
for(x=0; x < stopBusLines.length; x++) { |
|||
if(stopBusLines[x] !== "") { |
|||
ar = stopBusLines[x]; |
|||
stopname = ar[1]; |
|||
if(stopname == stopnameid) { |
|||
oBus = {"area":ar[0], "stopnameid":ar[1], "searchstr":ar[2], |
|||
"lat":ar[3], "lon":ar[4], "busList":ar[5]}; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
return oBus; |
|||
} |
|||
|
|||
|
|||
function getStopsNear(stopNameId) { |
|||
var STOPNAMEID = 0; |
|||
var STOPLAT = 1; |
|||
var STOPLON = 2; |
|||
var startStopIdx = 0; |
|||
var destStopIdx = 0; |
|||
var bStopFound = false; |
|||
oStop = getStopInfo(stopNameId); |
|||
if(oStop === null) |
|||
return null; |
|||
var sAr = []; |
|||
for(x=0; x < stopBusLines.length && oStop != null; x++) { |
|||
var ar = stopBusLines[x]; |
|||
if(ar[3] != undefined && ar[4] != undefined) { |
|||
if(oStop.lat != undefined && Math.abs(oStop.lat - ar[3]) < NEARLATLON && |
|||
Math.abs(oStop.lon - ar[4]) < NEARLATLON) { |
|||
di = distanceLatLon(ar[3], ar[4], oStop.lat, oStop.lon); |
|||
if( di < WALKDIST) |
|||
sAr[sAr.length] = [di, {"area":ar[0], "stopnameid":ar[1], |
|||
"searchstr":ar[2], "lat":ar[3], "lon":ar[4], "busList":ar[5]}]; |
|||
} |
|||
} |
|||
} |
|||
sAr.sort(sortDiStop); |
|||
// Check if source and destination stops are there
|
|||
// If not prolly because lat lon not there add them
|
|||
var SHOWMAXSTOPS = 5; |
|||
var stopFound = false; |
|||
for(x=0; x<sAr.length; x++) { |
|||
if(sAr[x][1] == stopNameId) { |
|||
stopFound = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!stopFound) |
|||
sAr[sAr.length] = [0, oStop]; |
|||
|
|||
return { "startStops":sAr, "stopInfo":oStop }; |
|||
|
|||
|
|||
} |
|||
|
|||
// Add to the list of recent BusesFound
|
|||
function addRecentBusesFound(oBusesFound) { |
|||
var rs = localStorage['recentBusesFound']; |
|||
|
|||
var recentBusesFoundPrv; |
|||
if(rs != null) |
|||
recentBusesFoundPrv = JSON.parse(rs); |
|||
recentBusesFound = null; |
|||
var recentBusesFound = new Array; |
|||
recentBusesFound[0] = oBusesFound; |
|||
if(recentBusesFoundPrv !== null && recentBusesFoundPrv != undefined) { |
|||
for(var i = 0; i < recentBusesFoundPrv.length; i++) { |
|||
if(recentBusesFoundPrv[i] === undefined || recentBusesFoundPrv[i] === null) |
|||
continue; |
|||
// check if already in array, else add
|
|||
alreadyThere = false; |
|||
for(var j = 0; j < recentBusesFound.length; j++) { |
|||
if(recentBusesFound[j].busHtml === recentBusesFoundPrv[i].busHtml) { |
|||
alreadyThere = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!alreadyThere) |
|||
recentBusesFound[recentBusesFound.length] = recentBusesFoundPrv[i]; |
|||
} |
|||
} |
|||
localStorage['recentBusesFound']=JSON.stringify(recentBusesFound); |
|||
} |
|||
|
|||
function showRecentBusesFound() { |
|||
if(localStorage['recentBusesFound'] === undefined || localStorage['recentBusesFound'] === null) |
|||
return; |
|||
var recentBusesFound = JSON.parse(localStorage['recentBusesFound']); |
|||
recentBusesFoundStr = '<table id="recentBusesFound" class="tbl_color">'; |
|||
if(recentBusesFound === null) |
|||
return; |
|||
if(recentBusesFound.length) { |
|||
// recentBusesFoundStr = '<table id="recentBusesFound">';
|
|||
for(var i = 1; i < recentBusesFound.length && i < MAXRECENTBUSESFOUND; i++) { |
|||
if(recentBusesFound[i] !== null && recentBusesFound[i] !== undefined |
|||
&& typeof(recentBusesFound[i]) === 'object') { |
|||
elm = recentBusesFound[i].busesFrom + '<br>' + |
|||
recentBusesFound[i].busesTo + '<br>' + |
|||
recentBusesFound[i].busHtml + '<br>'; |
|||
recentBusesFoundStr = recentBusesFoundStr + elm; |
|||
} |
|||
} |
|||
recentBusesFoundStr = recentBusesFoundStr + '</table>'; |
|||
document.getElementById("recentBusesFound").innerHTML = recentBusesFoundStr; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
@ -0,0 +1,126 @@ |
|||
var bDbug = true; |
|||
var dBugLvl = 3; |
|||
|
|||
var STOPNO = 0; |
|||
var SEARCHSTR = 1; |
|||
var NXTDIST = 2; |
|||
var NXTTIME = 3; |
|||
var LAT = 4; |
|||
var LON = 5; |
|||
var NEARLAT = 0.01; |
|||
|
|||
var busno = ''; |
|||
var called_times = 0; |
|||
var stopLines = ""; |
|||
|
|||
var geoPos; |
|||
var arBusList = []; |
|||
var busNoList = []; |
|||
var stopBusLines = ''; |
|||
var gStartStopnameId = 0; |
|||
var gDestStopnameId = 0; |
|||
var gStartStopSearchStr; |
|||
var gDestStopSearchStr; |
|||
var gStartStop; |
|||
var gDestStop; |
|||
var busMaster = []; |
|||
|
|||
var homePage; |
|||
|
|||
|
|||
var gFndBus = ""; |
|||
|
|||
var startStopLat = 0; |
|||
var startStopLon = 0; |
|||
var destStopLat = 0; |
|||
var destStopLon = 0; |
|||
var stopBus = []; |
|||
var stopNames = []; |
|||
var db; |
|||
$(document).ready(function() { |
|||
arBusList = getbuslist(); |
|||
stopBus = getStopBusList(); |
|||
busMaster = getbusmaster(); |
|||
stopNames = getStopNames(); |
|||
|
|||
for(var i=0; i<arBusList.length; i++) |
|||
busNoList[i] = arBusList[i][0]; |
|||
PopulateAllBusList(); |
|||
PopulateOtherBusLists(); |
|||
getLocation(); // runs setGeoPos(pos), showLocation(pos)
|
|||
}); |
|||
|
|||
|
|||
|
|||
function PopulateOtherBusLists() { |
|||
var oBus = document.getElementById('oBus'); |
|||
var lBus = document.getElementById('lBus'); |
|||
var aBus = document.getElementById('aBus'); |
|||
var asBus = document.getElementById('asBus'); |
|||
var cBus = document.getElementById('cBus'); |
|||
|
|||
|
|||
if(oBus === null || lBus === null || aBus === null || asBus === null) |
|||
return; |
|||
for(var x=0; x<arBusList.length; x++) { |
|||
var option = document.createElement("option"); |
|||
var busInfo = getBusInfo(arBusList[x][1]); |
|||
var busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = '(' + busInfo.frequency + " mins)"; |
|||
|
|||
option.text = arBusList[x][1] + " - " + arBusList[x][2] + " to " + |
|||
arBusList[x][3]; // + ' ' + busfreq;
|
|||
option.value = arBusList[x][1]; |
|||
if(arBusList[x][1] == arBusList[x][0]) |
|||
oBus.add(option, null); |
|||
else if(arBusList[x][1].indexOf('AC Exp') >= 0) |
|||
aBus.add(option, null); |
|||
else if(arBusList[x][1].indexOf('L') >= 0) |
|||
lBus.add(option, null); |
|||
else if(arBusList[x][1].indexOf('AS') >= 0) |
|||
asBus.add(option, null); |
|||
else if(arBusList[x][1].indexOf('C') >= 0) |
|||
cBus.add(option, null); |
|||
|
|||
} |
|||
} |
|||
|
|||
$(function () { |
|||
|
|||
$("#busNo").autocomplete({ |
|||
source: function(req, response) { |
|||
var re = $.ui.autocomplete.escapeRegex(req.term); |
|||
re = re.toLowerCase(); |
|||
var len = re.length; |
|||
var i = 0; |
|||
matchArr = []; |
|||
for(var j=0; j<arBusList.length; j++) { |
|||
if(re == arBusList[j][0].toLowerCase().substring(0, len) |
|||
|| re == arBusList[j][1].toLowerCase().substring(0, len)) { |
|||
matchArr[i] = arBusList[j][1]; |
|||
i = i + 1; |
|||
} |
|||
} |
|||
|
|||
response(matchArr); |
|||
} |
|||
}); |
|||
|
|||
}); |
|||
|
|||
|
|||
|
|||
function showLocation(pos) { // Stops near you
|
|||
|
|||
|
|||
// showRoutesAtStop({'area':'Tardeo', 'id':'bhatiahospital'}, 'Bus Routes Near You');
|
|||
var oStop = findNearestStop(pos); |
|||
showRoutesAtStop(oStop, 'Bus Routes Near You '); |
|||
} |
|||
|
|||
// set the local variable so it can be used in this js file
|
|||
function setGeoPos(pos) { |
|||
geoPos = pos; |
|||
} |
|||
|
@ -0,0 +1 @@ |
|||
function getb10l() { bjs10l = [[1,"[Fort] Hutatma Chowk / Mumbai University",1207,3,18.94381,72.83924],[2,"[Dhobi Talao] V B Phadke Chk / Metro / Dhobi Talao",,,18.94463,72.83034],[3,"[Bhuleshwar] Kalbadevi",,,,],[4,"[Dhobi Talao] Swadeshi Market",,,,],[5,"[Bhuleshwar] Bhuleshwar",,,,],[6,"[Bhendi Bazar] Vijay Vallabh Chowk / Pydhuni",,,,],[7,"[Bhendi Bazar] Johar Chowk",,,18.95953,72.83176],[8,"[Bhendi Bazar] Dr M Iqbal Chowk",,,,],[9,"[Nagpada] A H Ansari Chowk",451,2,18.96646,72.83259],[10,"[Nagpada] St Marys High School",344,2,18.96985,72.83494],[11,"[Mazgaon] Mazgaon Court",339,2,18.96906,72.8381],[12,"[Mazgaon] Maharana Pratap Chowk Mazgaon",259,2,18.96864,72.84129],[13,"[Dockyard Road] Dockyard Road Railway Station",,,18.96836,72.84374],[14,"[Mazgaon] BEST Power House / Kussara",,,,],[15,"[Dockyard Road] Daru Khana",,,18.97152,72.84518],[16,"[Reay Road W] Reay Road Bridge",,,,],[17,"[Kala Chowky] Ghodpdeo",571,2,18.97967,72.84347],[18,"[Kala Chowky] Albert Road / Tanaji Malusare Chowk",318,2,18.98466,72.8422],[19,"[Kala Chowky] Shrawan Yeshwante Chowk",88,2,18.98745,72.84152],[20,"[Kala Chowky] Kala Chowky Police Station",,,18.98815,72.84112],[21,"[Sewree] Tank Bunder",,,18.98883,72.84574],[22,"[Sewree] Jackeria Bunder",,,18.99482,72.84884],[23,"[Sewree] Sewree Court",,,18.99652,72.85306],[24,"[Sewree] Sewree Station W",,,18.99851,72.85335],[25,"[Sewree] Shivaji Nagar Sewree",,,19.00131,72.85371],[26,"[Sewree] Dnyaneshwar Nagar",,,19.00503,72.85359],[27,"[Wadala W] Kidwai Nagar",,,,],[28,"[Wadala W] Madhav Nagar",,,,],[29,"[Wadala W] Wadala Station W",,,19.057,72.5127],[30,"[Wadala W] Wadala Gate No 4",,,,],[31,"[Wadala W] Amulakh High School / Arora Cinema",,,,],[32,"[Kings Circle] Maheshwari Udyan",764,3,19.02678,72.85468],[33,"[Kings Circle] Gandhi Market Matunga",407,2,19.03259,72.85856],[34,"[Sion E] Lokmanya Tilak Hospital / Sion Hosp",2727,6,19.03592,72.86017],[35,"[Sion E] Rani Laxmibai Chowk / Sion / Sion Circle",,,19.04573,72.86513],[36,"[Kurla W] Kurla Level Crossing",,,,],[37,"[Kurla W] Lions Park",,,,],[38,"[Kurla W] Kurla Post Office",,,,],[39,"[Kurla W] Anjanabai Magar",,,,],[40,"[Kurla W] Kurla Depot",1245,3,19.06783,72.87884],[41,"[Kurla W] Old Agra Road",381,2,19.079,72.87966],[42,"[Kurla W] Sheetal Cinema",708,3,19.08183,72.88171],[43,"[Vidyavihar W] Kamani",,,19.08513,72.88747],[44,"[Vidyavihar W] Mukund Company / P W D Office",,,19.08484,72.89034],[45,"[Vidyavihar W] Guru Nanak Nagar",,,19.0854,72.89332],[46,"[Ghatkopar W] Narayan Nagar Ghatkopar",,,19.5906,72.5343],[47,"[Ghatkopar W] Chirag Nagar",649,2,19.08659,72.89725],[48,"[Ghatkopar W] Ghatkopar Pipe Line",385,2,19.08778,72.9033],[49,"[Ghatkopar W] Sarvodaya Hospital",,,19.08876,72.90681],[50,"[Ghatkopar W] Gopal Bhuvan",,,19.0907,72.90984],[51,"[Ghatkopar W] Nityanand Nagar",,,19.53,72.5446],[52,"[Ghatkopar W] Laxmi Nagar",,,19.522,72.5458],[53,"[Ghatkopar E] Ghatkopar Depot / Caseurina",,,,]]; return bjs10l;} |
@ -0,0 +1,563 @@ |
|||
/*! |
|||
* Common funcs needed for bestbus |
|||
* |
|||
* Copyright 2011, Chetan Temkar |
|||
* |
|||
* Date: Thu Mar 31 15:28:23 2011 -0400 |
|||
*/ |
|||
|
|||
var CTIME = 100; // Cookie expires after 100 days
|
|||
var MAXNEARSTOPDIST = 1000; // Nearest stops should be within 1 km.
|
|||
var NEARLATLON = .001 // Within 1.1 kms.
|
|||
|
|||
function loadStyles() { |
|||
bl = BrowserLevel(); |
|||
|
|||
if(bl == 'A') { |
|||
document.write('<meta name="viewport" content="user-scalable=no, width=device-width" />'); |
|||
} |
|||
loadjscssfile("css/basic.css", 'css'); |
|||
loadjscssfile("css/main.css", 'css'); |
|||
} |
|||
|
|||
// See if smartphone or lower
|
|||
function BrowserLevel() { |
|||
browser = navigator.userAgent.toLowerCase(); |
|||
|
|||
if(browser.search('safari') || browser.search('android') ) |
|||
return 'A'; |
|||
if(browser.search('firefox')) |
|||
return 'FF'; // Firefox problems with offline storage
|
|||
if(browser.search('blackberry')) |
|||
return 'BB'; // Firefox problems with offline storage
|
|||
|
|||
else |
|||
return 'C'; |
|||
} |
|||
|
|||
|
|||
// distance between 2 lat, lon pairs
|
|||
function distanceLatLon(lat1, lon1, lat2, lon2) { |
|||
var R = 6371; // km
|
|||
var dLat = (lat2-lat1) * Math.PI / 180; |
|||
var dLon = (lon2-lon1) * Math.PI / 180; |
|||
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + |
|||
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2* Math.PI / 180) * |
|||
Math.sin(dLon/2) * Math.sin(dLon/2); |
|||
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); |
|||
var d = R * c; |
|||
return Math.ceil(d * 1000); // return distance in meters
|
|||
} |
|||
|
|||
|
|||
// setup location handler to get location by gps or cell towers
|
|||
|
|||
function getLocation() { |
|||
var lat, lon, gps, options, geo, watch; |
|||
gps = navigator.geolocation; |
|||
options = {timeout:60000, maximumAge:330000}; |
|||
|
|||
if(gps) { |
|||
browserSupportFlag = true; |
|||
navigator.geolocation.getCurrentPosition(function(position) { |
|||
lat = position.coords.latitude; |
|||
lon = position.coords.longitude; |
|||
}, function() { |
|||
handleNoGeolocation(browserSupportFlag); |
|||
}); |
|||
// Try Google Gears Geolocation
|
|||
} else if (google.gears) { |
|||
browserSupportFlag = true; |
|||
geo = google.gears.factory.create('beta.geolocation'); |
|||
geo.getCurrentPosition(function(position) { |
|||
setGeoPos(pos); |
|||
showLocation(position); |
|||
}, function() { |
|||
handleNoGeoLocation(browserSupportFlag); |
|||
}); |
|||
// Browser doesn't support Geolocation
|
|||
} else { |
|||
browserSupportFlag = false; |
|||
handleNoGeolocation(browserSupportFlag); |
|||
} |
|||
|
|||
if(gps != undefined) { |
|||
trackerId = gps.watchPosition(function(pos){ |
|||
setGeoPos(pos); |
|||
showLocation(pos); |
|||
|
|||
}, errorHandler, options); |
|||
} |
|||
else if (geo != undefined) { |
|||
watch = geo.watchPosition(function(pos){ |
|||
setGeoPos(pos); |
|||
showLocation(pos); |
|||
|
|||
}, errorHandler, options); |
|||
} |
|||
} |
|||
|
|||
|
|||
function handleNoGeolocation(errorFlag) { |
|||
if (errorFlag == true) { |
|||
// alert("Geolocation service failed.");
|
|||
initialLocation = null; |
|||
} else { |
|||
// alert("Your browser doesn't support geolocation");
|
|||
initialLocation = null; |
|||
} |
|||
// map.setCenter(initialLocation);
|
|||
} |
|||
|
|||
function showLoc(pos) { |
|||
setGeoPos(pos); |
|||
showLocation(pos); |
|||
|
|||
} |
|||
function errorHandler(err) { |
|||
if(err.code == 1) { |
|||
dBug("geo:", "Error: Access is denied!", 5); |
|||
}else if( err.code == 2) { |
|||
dBug("geo", "Error: Position is unavailable!", 5); |
|||
} |
|||
} |
|||
|
|||
|
|||
// Format a date into hours, minutes
|
|||
function timeStr(dt) { |
|||
var currentTime = dt; |
|||
var hours = currentTime.getHours(); |
|||
var minutes = currentTime.getMinutes(); |
|||
|
|||
var suffix = "AM"; |
|||
if (hours >= 12) { |
|||
suffix = "PM"; |
|||
hours = hours - 12; |
|||
} |
|||
if (hours === 0) { |
|||
hours = 12; |
|||
} |
|||
|
|||
if (minutes < 10) |
|||
minutes = "0" + minutes; |
|||
|
|||
return hours + ":" + minutes + " " + suffix; |
|||
|
|||
} |
|||
|
|||
function distFormat(d, maxd) { // d in meters, maxd -max distance allowed in km., else show as NA
|
|||
if(maxd === undefined) |
|||
maxd = 10; |
|||
if(d / 1000 > maxd || typeof(d) == undefined || isNaN(d)) |
|||
return "N/A"; |
|||
if( d >= 1000) |
|||
return Math.round((d/ 1000)*100)/100 + ' km'; |
|||
else |
|||
return Math.round(d*1000)/1000 + ' m'; |
|||
|
|||
} |
|||
|
|||
function getFile(fileName){ |
|||
oxmlhttp = null; |
|||
try{ |
|||
oxmlhttp = new XMLHttpRequest(); |
|||
oxmlhttp.overrideMimeType("text/xml"); |
|||
} |
|||
catch(e){ |
|||
try{ |
|||
oxmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); |
|||
} |
|||
catch(e){ |
|||
return null; |
|||
} |
|||
} |
|||
if(!oxmlhttp) return null; |
|||
try{ |
|||
oxmlhttp.open("GET",fileName,false); |
|||
oxmlhttp.send(null); |
|||
} |
|||
catch(e){ |
|||
return null; |
|||
} |
|||
return oxmlhttp.responseText; |
|||
} |
|||
|
|||
|
|||
|
|||
function stopTracking(){ |
|||
if (trackerId){ |
|||
navigator.geolocation.clearWatch(trackerId); |
|||
} |
|||
} |
|||
|
|||
|
|||
function setCookie(c_name,value,exdays) |
|||
{ |
|||
var exdate=new Date(); |
|||
exdate.setDate(exdate.getDate() + exdays); |
|||
var c_value=escape(value) + ((exdays===null) ? "" : "; expires="+exdate.toUTCString()); |
|||
document.cookie=c_name + "=" + c_value; |
|||
} |
|||
|
|||
function getCookie(c_name) |
|||
{ |
|||
var i,x,y,ARRcookies=document.cookie.split(";"); |
|||
for (i=0;i<ARRcookies.length;i++) |
|||
{ |
|||
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); |
|||
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); |
|||
x=x.replace(/^\s+|\s+$/g,""); |
|||
if (x==c_name) |
|||
{ |
|||
return unescape(y); |
|||
} |
|||
} |
|||
return ''; |
|||
} |
|||
|
|||
|
|||
function dBug(sModule, sDebugStr, lvl) { |
|||
if(dBug && lvl < dBugLvl) |
|||
alert(sModule + ': ' + sDebugStr); |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
var STOPNAMEID = 1; |
|||
var SEARCHSTR = 0; |
|||
|
|||
// return the first search string for a stopnameid
|
|||
function findStopSs(stopnameid) |
|||
{ |
|||
stopnameid = stopnameid.toLowerCase(); |
|||
stops = getStopNames(); |
|||
nStopsFound = 0; |
|||
for(var x=0; x < stops.length; x++) { |
|||
if(stopnameid == stops[x][STOPNAMEID]) |
|||
return stops[x][SEARCHSTR]; |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
// Find a stopnameid in the stopnames array and returns information about it
|
|||
// returns no. of stops found,
|
|||
function findStopId(stopid) { |
|||
stopid = stopid.toLowerCase(); |
|||
stopNames = getStopNames(); |
|||
nStopsFound = 0; |
|||
stopsFound = []; |
|||
stopsSrchStr = []; |
|||
for(var x=0; x < stopNames.length; x++) { |
|||
searchstr = stopNames[x][3].toLowerCase(); |
|||
if(searchstr.search(stopid) != -1) { |
|||
nStopsFound++; |
|||
stopsFound = stopNames[x][3]; |
|||
stopsSrchStr = stopNames[x][0] + ': ' + stopNames[x][1] + ' ' + stopNames[x][2]; |
|||
break; |
|||
} |
|||
} |
|||
return {'nostopsFound':nStopsFound, 'stopsfound':stopsFound, 'stopsrchstr':stopsSrchStr}; |
|||
} |
|||
|
|||
|
|||
// Find a stop searchstr in the stopnames array and returns information about it
|
|||
// returns no. of stops found,
|
|||
function findStop(stopstr) { |
|||
stopstr = stopstr.replace(/[^0-9a-zA-Z]+/g,'').toLowerCase(); // remove special characters, spaces
|
|||
stops = getStopNames(); |
|||
nStopsFound = 0; |
|||
stopsFound = []; |
|||
stopsSrchStr = []; |
|||
for(var x=0; x < stops.length; x++) { |
|||
searchstr = stops[x][0].replace(/[^0-9a-zA-Z]+/g,'').toLowerCase(); |
|||
if(searchstr.search(stopstr) != -1) { |
|||
nStopsFound++; |
|||
stopsFound[stopsFound.length] = stops[x][1]; |
|||
stopsSrchStr[stopsSrchStr.length] = stops[x][0]; |
|||
if(searchstr.length == stopstr.length) |
|||
break; // exact match, so we have found our stop
|
|||
} |
|||
} |
|||
return [nStopsFound, stopsFound, stopsSrchStr]; |
|||
} |
|||
|
|||
// Find a searchstr based on the stop name id
|
|||
function getSearchStr(stopid) { |
|||
stops = getStopNames(); |
|||
for(var x=0; x < stops.length; x++) { |
|||
if(stopid == stops[x][1]) { |
|||
// startStopLat = stopll[STOPLAT];
|
|||
// startStopLon = stopll[STOPLON];
|
|||
// startStopIdx = x;
|
|||
return stops[x][0]; |
|||
} |
|||
} |
|||
return ''; |
|||
} |
|||
|
|||
|
|||
function getWinDim() { |
|||
var winW = 630, winH = 460; |
|||
|
|||
if (document.body && document.body.offsetWidth) { |
|||
winW = document.body.offsetWidth; |
|||
winH = document.body.offsetHeight; |
|||
} |
|||
if (document.compatMode=='CSS1Compat' && |
|||
document.documentElement && |
|||
document.documentElement.offsetWidth ) { |
|||
winW = document.documentElement.offsetWidth; |
|||
winH = document.documentElement.offsetHeight; |
|||
} |
|||
if (window.innerWidth && window.innerHeight) { |
|||
winW = window.innerWidth; |
|||
winH = window.innerHeight; |
|||
} |
|||
// winW = screen.width < winW ? screen.width : winW;
|
|||
// winH = screen.height < winH ? screen.height : winH;
|
|||
// dBug('$window.width: ' + $(window).width() + ', $document.width(): ' + $(document).width());
|
|||
return { |
|||
"wd": parseInt(winW, 10), |
|||
"ht": parseInt(winH, 10) |
|||
}; |
|||
} |
|||
|
|||
// get frequency, first bus time, last bus time from busmaster
|
|||
function getBusInfo(busno) { |
|||
busno = busno.replace(/[^0-9a-zA-Z]+/g,'').toLowerCase(); |
|||
busno = busno.replace('expacexp', 'e'); |
|||
for(var x=0; x<busMaster.length; x++) { |
|||
if(busmaster[x][0] == busno) { |
|||
return { "firstFrom":busmaster[x][1], "lastFrom":busmaster[x][2], |
|||
"frequency":busmaster[x][3]}; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Call this link when bus is selected to set cookies and then fire the link.
|
|||
// Done so that parameters are passed through cookies not link
|
|||
// because offline storage does not work with changing links
|
|||
function goLinkBusRoute(busNo, startStopNo, destStopNo, direction) { |
|||
url = 'journey.html?b=' + busNo + '&s=' + startStopNo + |
|||
'&d=' + destStopNo + '&dir=' + direction; |
|||
setCookie('cBusNo', busNo, 1); |
|||
setCookie('cStartStopNo', startStopNo, CTIME); |
|||
setCookie('cDestStopNo', destStopNo, CTIME); |
|||
setCookie('cDirection', direction, CTIME); |
|||
|
|||
window.location = url; |
|||
return false; |
|||
} |
|||
|
|||
// Build the url for showstops
|
|||
function buildUrl(busNo, startStopNo, destStopNo) { |
|||
busInfo = getBusInfo(busNo); |
|||
busfreq = ""; |
|||
var direction = 'd'; |
|||
if(startStopNo < destStopNo) |
|||
direction = 'u'; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = " ( " + busInfo.frequency + " mins)"; |
|||
url = '<a href="#"' + ' onClick="return goLinkBusRoute(' |
|||
+ "'" + busNo + "'" + ',' + startStopNo + ',' + destStopNo + |
|||
", '" + direction + "'" + ')">' |
|||
+ busNo.replace(/ /g, ' ') + busfreq + "</a>" ; |
|||
return url; |
|||
|
|||
} |
|||
|
|||
// Show all bestbus cookies for debugging
|
|||
function showBBCookies() { |
|||
alert(printCookie('cMyLat') + printCookie('cMyLon') + printCookie('cStartStop') |
|||
+ printCookie('cStartStopId') + printCookie('cDestStop') |
|||
+ printCookie('cDestStopId') + printCookie('cStartStopNameId') |
|||
+ printCookie('cDestStopNameId') + printCookie('cBusNo') |
|||
+ printCookie('cStartStopNameid') + printCookie('cDestStopnameId')); |
|||
return; |
|||
} |
|||
|
|||
function printCookie(cookieName) { |
|||
return cookieName + " : " + getCookie(cookieName) + ", "; |
|||
} |
|||
|
|||
// This disables enter key for BB where you can select from auto suggest only with enter
|
|||
function disableEnterKey(e) |
|||
{ |
|||
var key; |
|||
if(window.event) |
|||
key = window.event.keyCode; //IE
|
|||
else |
|||
key = e.which; //firefox
|
|||
|
|||
return (key != 13); |
|||
} |
|||
|
|||
function showRoutesAtStop(oStop, title) { // Bus routes at stop
|
|||
var busList = null; |
|||
|
|||
document.getElementById("busroutesatstart").innerHTML = title + '(' + oStop.area + ')'; |
|||
|
|||
for(var i = 0; i < arStopBus.length; i++) { |
|||
if(arStopBus[i][1] == oStop.id) { |
|||
busList = arStopBus[i][5]; |
|||
break; |
|||
} |
|||
} |
|||
var firstStop, lastStop; |
|||
if(busList != null) { |
|||
arNearBuses = busList.split(","); |
|||
|
|||
routesAtStopStr = '<table id="routesAtStop" class="tbl_color">'; |
|||
for(var j = 0; j < arNearBuses.length; j++) { |
|||
busNo = arNearBuses[j].split("|")[0].trim(); |
|||
for(var a = 0; a < arBusList.length; a++) { |
|||
if(arBusList[a][1] == busNo) { |
|||
firstStop = arBusList[a][2]; |
|||
lastStop = arBusList[a][3]; |
|||
|
|||
} |
|||
} |
|||
|
|||
busInfo = getBusInfo(busNo); |
|||
busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = " ( " + busInfo.frequency + " mins)"; |
|||
|
|||
busInfo = getBusInfo(busNo); |
|||
busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = busInfo.frequency + " mins"; |
|||
sBusNo= busNo.replace('Exp AC Exp', 'AC Exp'); |
|||
sBusNo = sBusNo.replace(/ /g, ' '); |
|||
url = '<a href="#"' + ' onClick="return goLinkBusRoute(' + "'" + busNo + "'" |
|||
+ ', 0, 0)' + '">' + '<span style="font-weight:bold;">' + sBusNo + '</span>' + |
|||
'</td><td>' + firstStop + ' - ' + lastStop + |
|||
'</td><td>' + busfreq + "</a>" ; |
|||
|
|||
routesAtStopStr = routesAtStopStr + '<tr><td>' + url + "</a></td></tr>"; |
|||
// routesAtStopStr = routesAtStopStr + '<tr><td>' + recentStops[i] + '</td></tr>';
|
|||
} |
|||
|
|||
routesAtStopStr = routesAtStopStr + '</table>'; |
|||
document.getElementById("routesAtStop").innerHTML = routesAtStopStr; |
|||
} |
|||
} |
|||
|
|||
// Find stops near a postion (lat, lon)
|
|||
function findNearStops(pos) { |
|||
var nearStop, retNearStop, x, y, dLat, dLon, di; |
|||
nearStop = []; |
|||
aoNearStops= []; |
|||
y = 0; |
|||
for (x = 0; x < arStopNames.length; x += 1) { |
|||
dLat = parseFloat(arStopNames[x][4]); |
|||
dLon = parseFloat(arStopNames[x][5]); |
|||
if (Math.abs(pos.coords.latitude - dLat) < NEARLAT |
|||
&& Math.abs(pos.coords.longitude - dLon) < NEARLAT) { |
|||
di = distanceLatLon(pos.coords.latitude, pos.coords.longitude, |
|||
dLat, dLon); |
|||
if (di < MAXNEARSTOPDIST) { |
|||
var sname = stopNames[x][1]; |
|||
var lmark = stopNames[x][2]; |
|||
|
|||
stopnameext = lmark !== null ? sname + ' /' + lmark : sname; |
|||
aoNearStops[aoNearStops.length] = {"di": di, "id": arStopNames[x][3], |
|||
"area": arStopNames[x][0], "stopname": arStopNames[x][1], |
|||
"landmark": arStopNames[x][2], 'stopnameext':stopnameext}; |
|||
} |
|||
} |
|||
} |
|||
// aoNearStops.sort(distSort);
|
|||
aoNearStops.sort(function(a, b) {return a.di - b.di}); |
|||
if(aoNearStops.length === 0) |
|||
return null; |
|||
aoNearStops.length = 3; // return only 3 stops
|
|||
|
|||
return aoNearStops; |
|||
|
|||
} |
|||
|
|||
|
|||
function showRoute(busNo) |
|||
{ |
|||
goLinkBusRoute(busNo, 0, 0); |
|||
} |
|||
// Show a complete bus route
|
|||
function showRouteComplete() { |
|||
|
|||
bTxt = $('#busNo').val(); |
|||
// Find the route in array
|
|||
if(bTxt.length > 0) { |
|||
bTxt = bTxt.replace(/ /g, ""); |
|||
bTxt = bTxt.toUpperCase(); |
|||
var busFound = false; |
|||
for(var x=0; x<arBusList.length; x++) { |
|||
if(bTxt == arBusList[x][1].replace(/ /g, "").toUpperCase()) { |
|||
bTxt = arBusList[x][1]; |
|||
busFound = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!busFound) { |
|||
alert('Bus not found, please re-enter'); |
|||
return false; |
|||
} |
|||
busNo = bTxt; |
|||
setCookie('cBusNo', bTxt, 365); |
|||
} |
|||
else { |
|||
bCombo = document.getElementById('busNoCombo'); |
|||
busNo = bCombo.options[bCombo.selectedIndex].value; |
|||
} |
|||
|
|||
goLinkBusRoute(busNo, 0, 0); |
|||
|
|||
return; |
|||
|
|||
} |
|||
|
|||
// Populate the All buses List combo
|
|||
function PopulateAllBusList() { |
|||
|
|||
bCombo = document.getElementById('busNoCombo'); |
|||
for(var x=0; x<arBusList.length; x++) { |
|||
var busInfo = getBusInfo(arBusList[x][1]); |
|||
var busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = '(' + busInfo.frequency + " mins)"; |
|||
var option = document.createElement("option"); |
|||
option.text = arBusList[x][1] + " - " + arBusList[x][2] + " : " |
|||
+ arBusList[x][3]; // + ' ' + busfreq;
|
|||
option.value = arBusList[x][1]; |
|||
bCombo.add(option, null); |
|||
} |
|||
// $("#busNoCombo").selectmenu('refresh', true);
|
|||
} |
|||
|
|||
|
|||
function supports_local_storage() { |
|||
try { |
|||
return 'localStorage' in window && window['localStorage'] !== null; |
|||
} catch(e){ |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
|
|||
function showAndroidToast(toast) { |
|||
/* |
|||
txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>"; |
|||
txt+= "<p>Browser Name: " + navigator.appName + "</p>"; |
|||
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>"; |
|||
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>"; |
|||
txt+= "<p>Platform: " + navigator.platform + "</p>"; |
|||
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>"; |
|||
alert(txt); |
|||
*/ |
|||
if(navigator.userAgent.indexOf('Android') === -1) |
|||
alert(toast); |
|||
else |
|||
Android.showToast(toast); |
|||
} |
|||
|
After Width: | Height: | Size: 352 B |
@ -0,0 +1,201 @@ |
|||
@charset "UTF-8"; |
|||
/* CSS Document */ |
|||
/* |
|||
* RESET |
|||
* |
|||
*/ |
|||
|
|||
body { |
|||
font-family: Helvetica,Arial,sans-serif; |
|||
} |
|||
|
|||
/* |
|||
html, body, div, span, object, blockquote, pre, |
|||
abbr, acronym, address, big, cite, code, dfn, em, font, img, kbd, q, s, samp, |
|||
small, strike, strong, sub, sup, tt, var, |
|||
b, u, i, center, dl, dt, dd, fieldset, form, label, legend, |
|||
caption, tr, th, td { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: 0; |
|||
font-size: 100%; |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
font-family: Helvetica,Arial,sans-serif; |
|||
} |
|||
*/ |
|||
p { |
|||
border: 0; |
|||
font-size: 100%; |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
a { |
|||
margin: 0; |
|||
padding: 0; |
|||
font-weight: normal; |
|||
} |
|||
|
|||
|
|||
/* added styles not in Nokia template */ |
|||
.floatleft { |
|||
float: left; |
|||
opacity:0.8; |
|||
} |
|||
.hdrcontainer { |
|||
background-color: #0038E1; |
|||
color: #FFFFFF; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 22px; |
|||
line-height:30px; |
|||
} |
|||
.hdrtxt { |
|||
padding:10px; |
|||
display:inline; |
|||
} |
|||
.floatright { |
|||
float: right; |
|||
opacity:0.8; |
|||
|
|||
} |
|||
|
|||
.hilite { |
|||
background-color: #95CBE9; |
|||
color: black; |
|||
font-size: 18px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.app_logo { |
|||
padding-left: 30px; |
|||
padding-right: 0px; |
|||
} |
|||
|
|||
.header_table { |
|||
background-color: blue; |
|||
height: 26px; |
|||
width: 100%; |
|||
padding: 0px; |
|||
margin-bottom: 6px; |
|||
} |
|||
.header_table tr { |
|||
height: 24px; |
|||
width:98%; |
|||
} |
|||
|
|||
.header_left_img { |
|||
width:24px; |
|||
padding:2px; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.header_txt { |
|||
color: white; |
|||
font-size: 16px; |
|||
margin: 0 0 0 0; |
|||
text-align: center; |
|||
vertical-align: center; |
|||
} |
|||
.header_right_img { |
|||
width:24px; |
|||
} |
|||
|
|||
.header_search { |
|||
text-align: right; |
|||
} |
|||
|
|||
.header_background { |
|||
/* background-image:url('../img/header_background.png'); */ |
|||
} |
|||
|
|||
.app_logo { |
|||
width: 43px; |
|||
} |
|||
|
|||
.tbl_color { |
|||
color: black; |
|||
font-size:14px; |
|||
line-height:20px; |
|||
width:100%; |
|||
} |
|||
.tbl_color th { |
|||
background-color:#DAAF85; |
|||
color:black; |
|||
font-size:16px; |
|||
font-weight:bold; |
|||
text-align:left; |
|||
} |
|||
.tbl_color tr:nth-of-type(odd) { |
|||
background-color: #F0DDD5; |
|||
color:black; |
|||
width:100% |
|||
} |
|||
.tbl_color tr:nth-of-type(even) { |
|||
background-color: #EEEECE; |
|||
width:100% |
|||
} |
|||
|
|||
.bar_color { |
|||
background-color: #D5E1DD; |
|||
color:black; |
|||
font-size:16px; |
|||
font-weight:bold; |
|||
text-align:center; |
|||
|
|||
} |
|||
|
|||
body h6 { |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 16px; |
|||
|
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
text-align: center; |
|||
} |
|||
|
|||
.ttl { |
|||
/* |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
*/ |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 14px; |
|||
margin-bottom: 0.6em; |
|||
margin-left: 2%; |
|||
font-size: 16px; |
|||
line-height: 40px; |
|||
|
|||
/* float: left; |
|||
text-align: left; |
|||
*/ |
|||
|
|||
} |
|||
|
|||
.spacer { |
|||
font-size: 2px; |
|||
} |
|||
|
|||
.alignBottom{vertical-align: bottom;} |
|||
|
|||
.leftItem { |
|||
clear: both; |
|||
float: left; |
|||
} |
|||
|
|||
.rightItem { |
|||
float: right; |
|||
} |
|||
|
@ -0,0 +1,546 @@ |
|||
@charset "UTF-8"; |
|||
/* CSS Document */ |
|||
/* |
|||
* RESET |
|||
* |
|||
*/ |
|||
|
|||
|
|||
html, body, div, span, object, blockquote, pre, |
|||
abbr, acronym, address, big, cite, code, dfn, em, font, img, kbd, q, s, samp, |
|||
small, strike, strong, sub, sup, tt, var, |
|||
b, u, i, center, dl, dt, dd, fieldset, form, label, legend, |
|||
caption, tr, th, td { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: 0; |
|||
/* font-size: 100%; */ |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
|
|||
p { |
|||
border: 0; |
|||
font-size: 100%; |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
a { |
|||
margin: 0; |
|||
padding: 0; |
|||
font-weight: normal; |
|||
} |
|||
|
|||
h1, h2, h3, h4, h5, h6 { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: 0; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
|
|||
body table { |
|||
margin: 0; |
|||
padding: 0; |
|||
font-size: 100%; |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
border-collapse: collapse; |
|||
border-spacing: 0; |
|||
} |
|||
|
|||
/* |
|||
* DEFAULT STYLES |
|||
* |
|||
*/ |
|||
body { |
|||
color: #333333; |
|||
font-weight: normal; |
|||
font-family: sans-serif; |
|||
} |
|||
/*removes horizontal overflow on certain devices*/ |
|||
body div#wrap { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
position: absolute; |
|||
left: 0; |
|||
padding: 0; |
|||
} |
|||
/* |
|||
* HEADER |
|||
* |
|||
*/ |
|||
body div#header { |
|||
height: 2.5em; |
|||
background-color: #D8D8D8; |
|||
border-bottom: 4px solid #44AA33; |
|||
margin-bottom: .5em; |
|||
} |
|||
/* |
|||
* FOOTER |
|||
* |
|||
*/ |
|||
body div#footer { |
|||
background-color: #F6F6F6; |
|||
border-top: 1px solid #D8D8D8; |
|||
padding: .7em 0em; |
|||
clear: both; |
|||
height: 5em; |
|||
display: block; |
|||
} |
|||
body div#footer ul { |
|||
margin-left: 2em; |
|||
padding-left: 0; |
|||
margin-bottom: 0; |
|||
margin-top: 0; |
|||
} |
|||
body div#footer ul li { |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
body div#footer p { |
|||
margin-left: 2%; |
|||
margin-top: .3em; |
|||
padding: 0; |
|||
} |
|||
/* |
|||
* BASIC ELEMENTS |
|||
* |
|||
*/ |
|||
|
|||
/*body required as early browsers don't understand p by itself */ |
|||
body p { |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
padding: 0 2% 0 2%; |
|||
font-size: 100%; |
|||
} |
|||
|
|||
strong { |
|||
font-weight: bold; |
|||
} |
|||
em { |
|||
font-style: normal; |
|||
font-weight: bold; |
|||
} |
|||
/* |
|||
* LINK STATES |
|||
* |
|||
*/ |
|||
a:link { |
|||
color:#003399; |
|||
} |
|||
|
|||
a:visited { |
|||
color:#006600; |
|||
} |
|||
a:hover { |
|||
color:#FF9900; |
|||
} |
|||
|
|||
a:active { |
|||
color:#990000; |
|||
} |
|||
|
|||
/* |
|||
* HEADERS |
|||
* |
|||
*/ |
|||
body h1 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
line-height: normal; |
|||
clear: both; |
|||
} |
|||
|
|||
body h2 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
color: white; |
|||
background-color: #44AA33; |
|||
border-top: 1px solid #67DD30; |
|||
border-bottom: 2px solid #378C29; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
line-height: normal; |
|||
clear: both; |
|||
} |
|||
|
|||
body h3 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
background-color: #0038E1; |
|||
color: #FFFFFF; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
border-top: 1px solid #0081CA; |
|||
border-bottom: 2px solid #000C30; |
|||
|
|||
} |
|||
|
|||
body h4 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
color: #CC0066; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
body h5 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
color: #333333; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
} |
|||
|
|||
|
|||
body h6 { |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 18px; |
|||
|
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
text-align: center; |
|||
} |
|||
|
|||
|
|||
/* |
|||
* IMAGE WITH OPTIONAL CAPTION |
|||
* |
|||
*/ |
|||
body img.captioned { |
|||
margin: 0 0 0 2%; |
|||
} |
|||
|
|||
body p.caption-image { |
|||
font-size: small; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
padding-left: 2%; |
|||
} |
|||
/* |
|||
* BLOCKQUOTE |
|||
* |
|||
*/ |
|||
blockquote { |
|||
margin: 0 4% 0.4em 4%; |
|||
padding: .6em 0 .3em 0; |
|||
border-top: 1px solid #D8D8D8; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
} |
|||
blockquote p { |
|||
margin: .0; |
|||
padding: 0 0 0.6em 0; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
} |
|||
/* |
|||
* LISTS |
|||
* |
|||
*/ |
|||
/* compensates for smaller Opera Mini margins */ |
|||
ol, ul, dl { |
|||
margin-left: 2%; |
|||
} |
|||
|
|||
dd { |
|||
margin-left: 2%; |
|||
} |
|||
/*forces native margin*/ |
|||
body ul, body ol, body dl { |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
font-size: 100%; |
|||
} |
|||
/* |
|||
* BREADCRUMBS |
|||
* |
|||
*/ |
|||
body ul.breadcrumbs { |
|||
padding-top: 0; |
|||
padding-bottom: .5em; |
|||
padding-left: 0; |
|||
padding-right: .5em; |
|||
font-size: small; |
|||
list-style-type: none; |
|||
margin-bottom: 0.6em; |
|||
margin-top: 0; |
|||
margin-left: 2%; |
|||
} |
|||
|
|||
body ul.breadcrumbs li { |
|||
display: inline; |
|||
line-height: 1em; |
|||
} |
|||
/* |
|||
* FORMS |
|||
* |
|||
*/ |
|||
body fieldset { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: none; |
|||
} |
|||
body form { |
|||
margin: 0; |
|||
color: #333333; |
|||
} |
|||
body form label { |
|||
font-size: medium; |
|||
margin-bottom: .5em; |
|||
margin-top: .5em; |
|||
} |
|||
|
|||
body input[type='text'] { |
|||
padding: 0.2em; |
|||
margin-bottom: .5em; |
|||
display: block; |
|||
} |
|||
|
|||
body textarea { |
|||
padding: 0.2em; |
|||
margin-bottom: .7em; |
|||
display: block; |
|||
} |
|||
|
|||
body form input[type='radio'], body form input[type='checkbox'] { |
|||
margin:0.1em 0em; |
|||
padding: 0; |
|||
} |
|||
|
|||
body select { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
body input[type='button'] { |
|||
padding: 1em 1.3em; |
|||
color: #D8D8D8; |
|||
margin: 1em 0em; |
|||
} |
|||
|
|||
|
|||
/* |
|||
* TABLES |
|||
* |
|||
*/ |
|||
body table { |
|||
border: 1px solid #D8D8D8; |
|||
margin: 0; |
|||
width: 100%; |
|||
color: #333333; |
|||
font-size: 80%; |
|||
} |
|||
|
|||
body td { |
|||
padding-left: .3em; |
|||
padding-right: .3em; |
|||
padding-top: .2em; |
|||
padding-bottom: .2em; |
|||
line-height: 1.5em; |
|||
border: 1px solid #D8D8D8; |
|||
} |
|||
/*compensates for lack of consistent header support*/ |
|||
body td.table-header { |
|||
color: #0033CC; |
|||
font-weight: bold; |
|||
background-color: #F6F6F6; |
|||
} |
|||
body tr { |
|||
height: 1.5em; |
|||
} |
|||
|
|||
body table td.odd { |
|||
background-color: #F6F6F6; |
|||
} |
|||
/*caption-side unlikely to be supported*/ |
|||
body caption { |
|||
caption-side: bottom; |
|||
padding-top: 0.3em; |
|||
padding-bottom: 0.3em; |
|||
margin-left: .5em; |
|||
font-size: small; |
|||
text-align: left; |
|||
font-style: normal; |
|||
} |
|||
|
|||
/* |
|||
* CONTAINER BOXES |
|||
* |
|||
*/ |
|||
body div.box p.box-text { |
|||
border: 1px solid #D8D8D8; |
|||
width: 90%; |
|||
margin: 0 auto 0.6em auto; |
|||
padding: 0.4em 0.4em; |
|||
background-color: #F6F6F6; |
|||
} |
|||
body div.header-box p { |
|||
border: 1px solid #D8D8D8; |
|||
width: 90%; |
|||
margin: 0 auto 0.6em auto; |
|||
padding: 0.4em 0.4em; |
|||
background-color: #F6F6F6; |
|||
} |
|||
/* 2px border is required to ensure header is flush with the box */ |
|||
body div.header-box h3 { |
|||
border: 2px solid #0038E1; |
|||
width: 90%; |
|||
margin: 0em auto; |
|||
padding: 0.3em 0.3em; |
|||
background-color: #0038E1; |
|||
color: white; |
|||
} |
|||
/* |
|||
* BACK TO TOP/HOME |
|||
* |
|||
*/ |
|||
p.top { |
|||
font-size: small; |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
clear: both; |
|||
} |
|||
p.home { |
|||
font-size: small; |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
clear: both; |
|||
} |
|||
p.top a, p.home a { |
|||
color: #333333; |
|||
text-decoration: none; |
|||
width: 100%; |
|||
display: block; |
|||
} |
|||
|
|||
/* added styles not in Nokia template */ |
|||
.floatleft { |
|||
float: left; |
|||
opacity:0.8; |
|||
} |
|||
.hdrcontainer { |
|||
background-color: #0038E1; |
|||
color: #FFFFFF; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 22px; |
|||
line-height:30px; |
|||
} |
|||
.hdrtxt { |
|||
padding:10px; |
|||
display:inline; |
|||
} |
|||
.floatright { |
|||
float: right; |
|||
opacity:0.8; |
|||
|
|||
} |
|||
|
|||
.hilite { |
|||
background-color: #95CBE9; |
|||
color: black; |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.app_logo { |
|||
padding-left: 30px; |
|||
padding-right: 0px; |
|||
} |
|||
|
|||
.header_table { |
|||
background-color: blue; |
|||
height: 26px; |
|||
width: 100%; |
|||
padding: 0px; |
|||
margin-bottom: 6px; |
|||
} |
|||
.header_table tr { |
|||
height: 24px; |
|||
width:98%; |
|||
} |
|||
|
|||
.header_left_img { |
|||
width:24px; |
|||
padding:2px; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.header_txt { |
|||
color: white; |
|||
font-size: 16px; |
|||
margin: 0 0 0 0; |
|||
text-align: center; |
|||
vertical-align: center; |
|||
} |
|||
.header_right_img { |
|||
width:24px; |
|||
} |
|||
|
|||
.header_search { |
|||
text-align: right; |
|||
} |
|||
|
|||
.header_background { |
|||
/* background-image:url('../img/header_background.png'); */ |
|||
} |
|||
|
|||
.app_logo { |
|||
width: 43px; |
|||
} |
|||
/* |
|||
.tbl_color { |
|||
color: black; |
|||
font-size:16px; |
|||
width:100%; |
|||
} |
|||
.tbl_color th { |
|||
background-color:#DAAF85; |
|||
color:black; |
|||
font-size:16px; |
|||
font-weight:bold; |
|||
text-align:left; |
|||
} |
|||
.tbl_color tr:nth-of-type(odd) { |
|||
background-color: #F0DDD5; |
|||
color:black; |
|||
font-size:14px; |
|||
} |
|||
.tbl_color tr:nth-of-type(even) { |
|||
background-color: #EEEECE; |
|||
font-size:14px; |
|||
} |
|||
*/ |
|||
|
|||
.bar_color { |
|||
background-color: #D5E1DD; |
|||
color:black; |
|||
font-size:16px; |
|||
font-weight:bold; |
|||
text-align:center; |
|||
|
|||
} |
|||
|
|||
|
@ -0,0 +1,23 @@ |
|||
#wrapper { |
|||
background-color: #0038E1; |
|||
color: #FFFFFF; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 22px; |
|||
} |
|||
|
|||
#home { |
|||
float:left; |
|||
margin:0px; |
|||
} |
|||
#clearFld { |
|||
float:right; |
|||
margin:0px; |
|||
} |
|||
#help { |
|||
float:right; |
|||
margin:10px; |
|||
} |
|||
#hdr { |
|||
align:center; |
|||
} |
@ -0,0 +1,545 @@ |
|||
@charset "UTF-8"; |
|||
/* CSS Document */ |
|||
/* |
|||
* RESET |
|||
* |
|||
*/ |
|||
|
|||
|
|||
html, body, div, span, object, blockquote, pre, |
|||
abbr, acronym, address, big, cite, code, dfn, em, font, img, kbd, q, s, samp, |
|||
small, strike, strong, sub, sup, tt, var, |
|||
b, u, i, center, dl, dt, dd, fieldset, form, label, legend, |
|||
caption, tr, th, td { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: 0; |
|||
/* font-size: 100%; */ |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
|
|||
p { |
|||
border: 0; |
|||
font-size: 100%; |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
a { |
|||
margin: 0; |
|||
padding: 0; |
|||
font-weight: normal; |
|||
} |
|||
|
|||
h1, h2, h3, h4, h5, h6 { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: 0; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
} |
|||
|
|||
body table { |
|||
margin: 0; |
|||
padding: 0; |
|||
font-size: 100%; |
|||
font-weight: normal; |
|||
vertical-align: baseline; |
|||
background: transparent; |
|||
border-collapse: collapse; |
|||
border-spacing: 0; |
|||
} |
|||
|
|||
/* |
|||
* DEFAULT STYLES |
|||
* |
|||
*/ |
|||
body { |
|||
color: #333333; |
|||
font-weight: normal; |
|||
font-family: sans-serif; |
|||
} |
|||
/*removes horizontal overflow on certain devices*/ |
|||
body div#wrap { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
position: absolute; |
|||
left: 0; |
|||
padding: 0; |
|||
} |
|||
/* |
|||
* HEADER |
|||
* |
|||
*/ |
|||
body div#header { |
|||
height: 2.5em; |
|||
background-color: #D8D8D8; |
|||
border-bottom: 4px solid #44AA33; |
|||
margin-bottom: .5em; |
|||
} |
|||
/* |
|||
* FOOTER |
|||
* |
|||
*/ |
|||
body div#footer { |
|||
background-color: #F6F6F6; |
|||
border-top: 1px solid #D8D8D8; |
|||
padding: .7em 0em; |
|||
clear: both; |
|||
height: 5em; |
|||
display: block; |
|||
} |
|||
body div#footer ul { |
|||
margin-left: 2em; |
|||
padding-left: 0; |
|||
margin-bottom: 0; |
|||
margin-top: 0; |
|||
} |
|||
body div#footer ul li { |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
body div#footer p { |
|||
margin-left: 2%; |
|||
margin-top: .3em; |
|||
padding: 0; |
|||
} |
|||
/* |
|||
* BASIC ELEMENTS |
|||
* |
|||
*/ |
|||
|
|||
/*body required as early browsers don't understand p by itself */ |
|||
body p { |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
padding: 0 2% 0 2%; |
|||
font-size: 100%; |
|||
} |
|||
|
|||
strong { |
|||
font-weight: bold; |
|||
} |
|||
em { |
|||
font-style: normal; |
|||
font-weight: bold; |
|||
} |
|||
/* |
|||
* LINK STATES |
|||
* |
|||
*/ |
|||
a:link { |
|||
color:#003399; |
|||
} |
|||
|
|||
a:visited { |
|||
color:#006600; |
|||
} |
|||
a:hover { |
|||
color:#FF9900; |
|||
} |
|||
|
|||
a:active { |
|||
color:#990000; |
|||
} |
|||
|
|||
/* |
|||
* HEADERS |
|||
* |
|||
*/ |
|||
body h1 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
line-height: normal; |
|||
clear: both; |
|||
} |
|||
|
|||
body h2 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
color: white; |
|||
background-color: #44AA33; |
|||
border-top: 1px solid #67DD30; |
|||
border-bottom: 2px solid #378C29; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
line-height: normal; |
|||
clear: both; |
|||
} |
|||
|
|||
body h3 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
background-color: #0038E1; |
|||
color: #FFFFFF; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
border-top: 1px solid #0081CA; |
|||
border-bottom: 2px solid #000C30; |
|||
|
|||
} |
|||
|
|||
body h4 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
color: #CC0066; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
body h5 { |
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
color: #333333; |
|||
margin-top: 0; |
|||
margin-bottom: 0.4em; |
|||
} |
|||
|
|||
|
|||
body h6 { |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 18px; |
|||
|
|||
padding-left: 2%; |
|||
padding-right: 2%; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
text-align: center; |
|||
} |
|||
|
|||
|
|||
/* |
|||
* IMAGE WITH OPTIONAL CAPTION |
|||
* |
|||
*/ |
|||
body img.captioned { |
|||
margin: 0 0 0 2%; |
|||
} |
|||
|
|||
body p.caption-image { |
|||
font-size: small; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
padding-left: 2%; |
|||
} |
|||
/* |
|||
* BLOCKQUOTE |
|||
* |
|||
*/ |
|||
blockquote { |
|||
margin: 0 4% 0.4em 4%; |
|||
padding: .6em 0 .3em 0; |
|||
border-top: 1px solid #D8D8D8; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
} |
|||
blockquote p { |
|||
margin: .0; |
|||
padding: 0 0 0.6em 0; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
} |
|||
/* |
|||
* LISTS |
|||
* |
|||
*/ |
|||
/* compensates for smaller Opera Mini margins */ |
|||
ol, ul, dl { |
|||
margin-left: 2%; |
|||
} |
|||
|
|||
dd { |
|||
margin-left: 2%; |
|||
} |
|||
/*forces native margin*/ |
|||
body ul, body ol, body dl { |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
font-size: 100%; |
|||
} |
|||
/* |
|||
* BREADCRUMBS |
|||
* |
|||
*/ |
|||
body ul.breadcrumbs { |
|||
padding-top: 0; |
|||
padding-bottom: .5em; |
|||
padding-left: 0; |
|||
padding-right: .5em; |
|||
font-size: small; |
|||
list-style-type: none; |
|||
margin-bottom: 0.6em; |
|||
margin-top: 0; |
|||
margin-left: 2%; |
|||
} |
|||
|
|||
body ul.breadcrumbs li { |
|||
display: inline; |
|||
line-height: 1em; |
|||
} |
|||
/* |
|||
* FORMS |
|||
* |
|||
*/ |
|||
body fieldset { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: none; |
|||
} |
|||
body form { |
|||
margin: 0; |
|||
color: #333333; |
|||
} |
|||
body form label { |
|||
font-size: medium; |
|||
margin-bottom: .5em; |
|||
margin-top: .5em; |
|||
} |
|||
|
|||
body input[type='text'] { |
|||
padding: 0.2em; |
|||
margin-bottom: .5em; |
|||
display: block; |
|||
} |
|||
|
|||
body textarea { |
|||
padding: 0.2em; |
|||
margin-bottom: .7em; |
|||
display: block; |
|||
} |
|||
|
|||
body form input[type='radio'], body form input[type='checkbox'] { |
|||
margin:0.1em 0em; |
|||
padding: 0; |
|||
} |
|||
|
|||
body select { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
body input[type='button'] { |
|||
padding: 1em 1.3em; |
|||
color: #D8D8D8; |
|||
margin: 1em 0em; |
|||
} |
|||
|
|||
|
|||
/* |
|||
* TABLES |
|||
* |
|||
*/ |
|||
body table { |
|||
border: 1px solid #D8D8D8; |
|||
margin: 0; |
|||
width: 100%; |
|||
color: #333333; |
|||
font-size: 80%; |
|||
} |
|||
|
|||
body td { |
|||
padding-left: .3em; |
|||
padding-right: .3em; |
|||
padding-top: .2em; |
|||
padding-bottom: .2em; |
|||
line-height: 1.5em; |
|||
border: 1px solid #D8D8D8; |
|||
} |
|||
/*compensates for lack of consistent header support*/ |
|||
body td.table-header { |
|||
color: #0033CC; |
|||
font-weight: bold; |
|||
background-color: #F6F6F6; |
|||
} |
|||
body tr { |
|||
height: 1.5em; |
|||
} |
|||
|
|||
body table td.odd { |
|||
background-color: #F6F6F6; |
|||
} |
|||
/*caption-side unlikely to be supported*/ |
|||
body caption { |
|||
caption-side: bottom; |
|||
padding-top: 0.3em; |
|||
padding-bottom: 0.3em; |
|||
margin-left: .5em; |
|||
font-size: small; |
|||
text-align: left; |
|||
font-style: normal; |
|||
} |
|||
|
|||
/* |
|||
* CONTAINER BOXES |
|||
* |
|||
*/ |
|||
body div.box p.box-text { |
|||
border: 1px solid #D8D8D8; |
|||
width: 90%; |
|||
margin: 0 auto 0.6em auto; |
|||
padding: 0.4em 0.4em; |
|||
background-color: #F6F6F6; |
|||
} |
|||
body div.header-box p { |
|||
border: 1px solid #D8D8D8; |
|||
width: 90%; |
|||
margin: 0 auto 0.6em auto; |
|||
padding: 0.4em 0.4em; |
|||
background-color: #F6F6F6; |
|||
} |
|||
/* 2px border is required to ensure header is flush with the box */ |
|||
body div.header-box h3 { |
|||
border: 2px solid #0038E1; |
|||
width: 90%; |
|||
margin: 0em auto; |
|||
padding: 0.3em 0.3em; |
|||
background-color: #0038E1; |
|||
color: white; |
|||
} |
|||
/* |
|||
* BACK TO TOP/HOME |
|||
* |
|||
*/ |
|||
p.top { |
|||
font-size: small; |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
clear: both; |
|||
} |
|||
p.home { |
|||
font-size: small; |
|||
background-color: #F6F6F6; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
padding-top: .3em; |
|||
padding-bottom: .3em; |
|||
margin-top: 0; |
|||
margin-bottom: 0.6em; |
|||
clear: both; |
|||
} |
|||
p.top a, p.home a { |
|||
color: #333333; |
|||
text-decoration: none; |
|||
width: 100%; |
|||
display: block; |
|||
} |
|||
|
|||
/* added styles not in Nokia template */ |
|||
.floatleft { |
|||
float: left; |
|||
opacity:0.8; |
|||
} |
|||
.hdrcontainer { |
|||
background-color: #0038E1; |
|||
color: #FFFFFF; |
|||
border-bottom: 1px solid #D8D8D8; |
|||
border-top: 1px solid #D8D8D8; |
|||
font-size: 22px; |
|||
line-height:30px; |
|||
} |
|||
.hdrtxt { |
|||
padding:10px; |
|||
display:inline; |
|||
} |
|||
.floatright { |
|||
float: right; |
|||
opacity:0.8; |
|||
|
|||
} |
|||
|
|||
.hilite { |
|||
background-color: #95CBE9; |
|||
color: black; |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.app_logo { |
|||
padding-left: 30px; |
|||
padding-right: 0px; |
|||
} |
|||
|
|||
.header_table { |
|||
background-color: blue; |
|||
height: 26px; |
|||
width: 100%; |
|||
padding: 0px; |
|||
margin-bottom: 6px; |
|||
} |
|||
.header_table tr { |
|||
height: 24px; |
|||
width:98%; |
|||
} |
|||
|
|||
.header_left_img { |
|||
width:24px; |
|||
padding:2px; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.header_txt { |
|||
color: white; |
|||
font-size: 16px; |
|||
margin: 0 0 0 0; |
|||
text-align: center; |
|||
vertical-align: center; |
|||
} |
|||
.header_right_img { |
|||
width:24px; |
|||
} |
|||
|
|||
.header_search { |
|||
text-align: right; |
|||
} |
|||
|
|||
.header_background { |
|||
/* background-image:url('../img/header_background.png'); */ |
|||
} |
|||
|
|||
.app_logo { |
|||
width: 43px; |
|||
} |
|||
|
|||
.tbl_color { |
|||
color: black; |
|||
font-size:16px; |
|||
width:100%; |
|||
} |
|||
.tbl_color th { |
|||
background-color:#DAAF85; |
|||
color:black; |
|||
font-size:16px; |
|||
font-weight:bold; |
|||
text-align:left; |
|||
} |
|||
.tbl_color tr:nth-of-type(odd) { |
|||
background-color: #F0DDD5; |
|||
color:black; |
|||
font-size:14px; |
|||
} |
|||
.tbl_color tr:nth-of-type(even) { |
|||
background-color: #EEEECE; |
|||
font-size:14px; |
|||
} |
|||
|
|||
.bar_color { |
|||
background-color: #D5E1DD; |
|||
color:black; |
|||
font-size:16px; |
|||
font-weight:bold; |
|||
text-align:center; |
|||
|
|||
} |
|||
|
|||
|
@ -0,0 +1,70 @@ |
|||
|
|||
|
|||
#stops { |
|||
color: black; |
|||
font-size:18px; |
|||
width:100%; |
|||
} |
|||
#stops th { |
|||
background-color:#DAAF85; |
|||
color:black; |
|||
font-size: 18px; |
|||
font-weight:bold; |
|||
text-align:left; |
|||
} |
|||
#stops tr:nth-of-type(odd) { |
|||
background-color: #F0DDD5; |
|||
color:black; |
|||
} |
|||
#stops tr:nth-of-type(even) { |
|||
background-color: #EEEECE; |
|||
} |
|||
|
|||
#myLoc { |
|||
background-color: #DE9D7F; |
|||
color: black; |
|||
display: block; |
|||
font-size: 18px; |
|||
font-weight:bold; |
|||
text-align:left; |
|||
} |
|||
|
|||
#before { |
|||
/* background-color:#ffff00; */ |
|||
background-color:#C0C0C0; |
|||
color:black; |
|||
display:block;' |
|||
font-size: 18px; |
|||
text-align:center; |
|||
|
|||
} |
|||
|
|||
#past { |
|||
background-color:#ffff00; |
|||
color:red; |
|||
display:block; |
|||
font-size: 18px; |
|||
} |
|||
|
|||
#at { |
|||
background-color:#ffff00; |
|||
color:red; |
|||
display:block; |
|||
font-size: 18px; |
|||
} |
|||
|
|||
#neardest { |
|||
background-color:#ffff00; |
|||
} |
|||
|
|||
#journey { |
|||
background-color:#EFD9DC; |
|||
display:block; |
|||
font-family:'Helvetica'; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,59 @@ |
|||
#navigation { |
|||
background: #AFD5E0 url("bg-nav.gif") repeat-x; |
|||
border: 1px solid #979797; |
|||
border-width: 1px 0; |
|||
font-size: 1.1em; |
|||
margin-top: 1em; |
|||
padding-top: .6em; |
|||
} |
|||
|
|||
#navigation ul, #navigation ul li { |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
#navigation ul { |
|||
padding: 5px 0; |
|||
text-align: center; |
|||
} |
|||
|
|||
#navigation ul li { |
|||
display: inline; |
|||
margin-right: .75em; |
|||
} |
|||
|
|||
#navigation ul li.last { |
|||
margin-right: 0; |
|||
} |
|||
|
|||
#navigation ul li a { |
|||
background: url("tab-right.gif") no-repeat 100% 0; |
|||
color: #06C; |
|||
padding: 5px 0; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
#navigation ul li a span { |
|||
background: url("tab-left.gif") no-repeat; |
|||
padding: 5px 1em; |
|||
} |
|||
|
|||
#navigation ul li a:hover span { |
|||
color: #69C; |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
/*\*//*/ |
|||
#navigation ul li a { |
|||
display: inline-block; |
|||
white-space: nowrap; |
|||
width: 1px; |
|||
} |
|||
|
|||
#navigation ul { |
|||
padding-bottom: 0; |
|||
margin-bottom: -1px; |
|||
} |
|||
/**/ |
|||
// |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 800 B |
After Width: | Height: | Size: 800 B |
After Width: | Height: | Size: 199 B |
After Width: | Height: | Size: 571 B |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 819 B |
After Width: | Height: | Size: 926 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 695 B |
@ -0,0 +1,125 @@ |
|||
<!DOCTYPE html> |
|||
<!-- <html manifest="manifest.php"> --> |
|||
<html> |
|||
<head> |
|||
|
|||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> |
|||
<title>Mumbai Best Bus - Find a Bus (B.E.S.T)</title> |
|||
<meta name="viewport" content="user-scalable=no, width=device-width"> |
|||
|
|||
<link rel="stylesheet" type="text/css" href="./css/common.css"> |
|||
<!-- <link rel="stylesheet" type="text/css" href="./css/tab.css"> --> |
|||
<link rel="stylesheet" type="text/css" href="./lib/jquery/jquery.ui.custom.css"> |
|||
<link rel="stylesheet" type="text/css" href="./lib/jquery/jquery.mobile.min.css"> |
|||
|
|||
<script type="text/javascript" src="./lib/jquery/jquery.min.js"></script> |
|||
<script type="text/javascript" src="init.js"></script> |
|||
<script type="text/javascript" src="./lib/jquery/jquery.ui.custom.min.js"></script> |
|||
<script type="text/javascript" src="./lib/jquery/jquery.mobile.min.js"></script> |
|||
|
|||
<script type="text/javascript" src="libfns.js"></script> |
|||
<script type="text/javascript" src="cf.js"></script> |
|||
|
|||
<script type="text/javascript" src="./init/buslist.js"></script> |
|||
<script type="text/javascript" src="./init/stopnames.min.js"></script> |
|||
<script type="text/javascript" src="./init/busmaster.js"></script> |
|||
<script type="text/javascript" src="./init/stopbus.min.js"></script> |
|||
<script type="text/javascript" src="busroute.js"></script> |
|||
<script type="text/javascript" src="index.js"></script> |
|||
|
|||
</head> |
|||
<body> |
|||
<div data-role="page" data-theme="a"> |
|||
<div data-role="header" data-theme="a"> |
|||
<div data-role="navbar"> |
|||
<!-- <div id="navigation"> --> |
|||
<ul> |
|||
<li><a href="index.html" rel="external" class="ui-btn-active">Find</a></li> |
|||
<li><a href="busesfound.html" rel="external">Routes</a></li> |
|||
<!-- <li><a href="busroute.html" rel="external">Routes</a></li> --> |
|||
<li><a href="journey.html" rel="external">Journey</a></li> |
|||
</ul> |
|||
</div><!-- /navbar --> |
|||
</div> <!-- /header --> |
|||
<div data-role="content" data-theme="b"> |
|||
<form name="myForm" action="" onsubmit="validateFindBusForm(); return false;" > |
|||
<div id="findInput" class="text_entry" data-theme="d"> |
|||
<div><input id="startStop" name="startStop" class="ac_input" autocomplete="off" |
|||
placeholder="Start: eg. Hanuman Road" type="text" data-theme="d"></div> |
|||
<div><input id="destStop" name="destStop" class="ac_input" autocomplete="off" |
|||
placeholder="Destination: eg. Churchgate Station" type="text" data-theme="d"></div> |
|||
</div> |
|||
<a href="javascript:void(0)" onclick="clearInput();" |
|||
data-role="button" data-inline="true">Clear</a> |
|||
<a href="javascript:void(0)" name="fndBusBtn" id="fndBusBtn" |
|||
style="float:right;" |
|||
onclick="validateFindBusForm();" type="text" data-role="button" |
|||
data-theme="b" data-inline="true">Find Bus</a> |
|||
</form> |
|||
<div style='width:98%;line-height:8px;' data-role="collapsible" data-theme="a" > |
|||
<h5><span id='stopsnearyou' >Nearby Stops </span></h5> |
|||
<div id="myLoc" class="tbl_color">No location fix as yet</div> |
|||
</div> <!-- /collapsible --> |
|||
<div style='width:98%;line-height:16px;' data-role="collapsible" data-theme="a"> |
|||
<h5><span id='busroutesatstart'>Buses at </span></h5> |
|||
<div id="routesAtStop" class="tbl_color"></div> |
|||
<form name="routeForm" action="" onsubmit="showRouteComplete(); return false;"> |
|||
<div class="ui-grid-a"> |
|||
<div class="ui-block-a"> |
|||
<input type="text" style="width:45%;" |
|||
id="busNo" name="busNo" placeholder="Bus No." |
|||
data-theme="d" data-inline="true"/> |
|||
</div> |
|||
<div class="ui-block-b"> |
|||
<a href="javascript:void(0)" name="showRouteBtn" id="showRouteBtn" |
|||
style="float:right;" |
|||
onclick="showR();" type="text" data-role="button" |
|||
data-theme="b" data-inline="true">Show Route</a> |
|||
</div> |
|||
</div><!-- /grid-a --> |
|||
<div><select name="busNoCombo" data-role='none' id="busNoCombo" style="width:98%;" onChange='showRoute(this.options[this.selectedIndex].value);'> |
|||
<option value="" selected="selected">All Buses</option></select></div> |
|||
<div><select name="oBus" data-role='none' id="oBus" onChange='showRoute(this.options[this.selectedIndex].value);'> |
|||
<option value="" selected="selected">Ordinary Buses</option></select></div> |
|||
<div><select name="lBus" data-role='none' id="lBus" onChange='showRoute(this.options[this.selectedIndex].value);'> |
|||
<option value="" selected="selected">Limited Buses (L)</option></select></div> |
|||
<div><select name="asBus" data-role='none' id="asBus" onChange='showRoute(this.options[this.selectedIndex].value);'> |
|||
<option value="" selected="selected">A/C Buses (AS)</option></select></div> |
|||
<div><select name="aBus" data-role='none' id="aBus" onChange='showRoute(this.options[this.selectedIndex].value);'> |
|||
<option value="" selected="selected">A/C Express Buses (A)</option></select></div> |
|||
<div><select name="cBus" data-role='none' id="cBus" onChange='showRoute(this.options[this.selectedIndex].value);'> |
|||
<option value="" selected="selected">Corridor Buses (C)</option></select></div> |
|||
|
|||
<div> |
|||
<input data-role='none' type="radio" id='ALL' name="group1" value="ALL" CHECKED onClick='activateList("ALL");' > All |
|||
<input data-role='none' type="radio" id='O' name="group1" value="O" onClick='activateList("O");'> Ordin. |
|||
<input data-role='none' type="radio" name="group1" value="L" onClick='activateList("L");' > Ltd. |
|||
<input data-role='none' type="radio" name="group1" value="AS" onClick='activateList("AS");'> AC (AS) |
|||
<input data-role='none' type="radio" name="group1" value="A" onClick='activateList("A");'>AC Exp. |
|||
<input data-role='none' type="radio" name="group1" value="C" onClick='activateList("C");'>Cor. |
|||
|
|||
</div> |
|||
|
|||
|
|||
</form> |
|||
|
|||
</div> <!-- /collapsible --> |
|||
<div style='width:98%;line-height:8px;' data-role="collapsible" data-theme="a"> |
|||
<h5><span id="font-size:14px;">Recent Stops</h5> |
|||
<div id="recentStops" class="tbl_color"></div> |
|||
</div> <!-- /collapsible --> |
|||
<div class="ui-grid-a"> |
|||
<div class="ui-block-a"> |
|||
</div> |
|||
<div class="ui-block-b"> |
|||
<a rel='external' href="javascript:showStatus()" name="busStatus" id="busStatus" |
|||
style="float:right;" |
|||
type="text" data-role="button" |
|||
data-theme="b" data-inline="true">Status</a> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> <!-- /content --> |
|||
</div> <!-- /page --> |
|||
</body> |
|||
</html> |
@ -0,0 +1,414 @@ |
|||
/* |
|||
/* |
|||
var getStopNames, getCookie, setCookie, getWinDim, getLocation, |
|||
updateDestInfo, BrowserLevel, findNearestStop, updateStartInfo, goLinkBusesFound, findStop, |
|||
getCombo, setGeoPos, distanceLatLon, window; |
|||
*/ |
|||
|
|||
var firstLoad = true; |
|||
var arStopNames, arBusMaster, arBusList, arStopBus; |
|||
var gStartStop, gDestStop; |
|||
var gaoNearStops = null; //Array of near stop objects
|
|||
var goNearestStop = null; |
|||
var MAXRECENTSTOPS = 7; |
|||
var selectedInput = 1; |
|||
var goCurStop = {'id':''}; |
|||
|
|||
$(document).ready(function () { |
|||
|
|||
arStopNames = getStopNames(); |
|||
arBusMaster = getbusmaster(); |
|||
arBusList = getbuslist(); |
|||
arStopBus = getStopBusList(); |
|||
|
|||
scrollTo(0, 0); |
|||
|
|||
getLocation(); // runs setGeoPos(pos), showLocation(pos)
|
|||
|
|||
PopulateAllBusList(); |
|||
PopulateOtherBusLists(); |
|||
activateList('ALL'); |
|||
initStops(); |
|||
showRecentStops(); |
|||
// $("#startStop").focus();
|
|||
document.getElementById('busNoCombo').checked = true; |
|||
|
|||
$("#startStop").autocomplete({ |
|||
source: function(req, response) { |
|||
var re = $.ui.autocomplete.escapeRegex(req.term); |
|||
re = re.toLowerCase(); |
|||
stopid = re.replace(/[^a-zA-Z0-9]+/g,''); |
|||
var len = stopid.length; |
|||
var i = 0; |
|||
matchArr = []; |
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopid == stopNames[j][0].toLowerCase().substring(0, len)) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
i = i + 1; |
|||
} |
|||
} |
|||
if(!matchArr.length) { // No matching areas found, look for stops
|
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopNames[j][3].indexOf(stopid) >= 0) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
i = i + 1; |
|||
} |
|||
} |
|||
} |
|||
response(matchArr); |
|||
}, |
|||
minLength: 2, |
|||
select: function(event, ui) { |
|||
$('#startStop').val(ui.item.value); |
|||
setStart(ui.item); |
|||
$('#destStop').focus(); |
|||
} /* , |
|||
focus: function(event, ui) { |
|||
$('#startStop').autocomplete("close").val(ui.item.value) |
|||
} |
|||
*/ |
|||
// $('#abbrev').val(ui.item.abbrev);
|
|||
}); |
|||
$('#startStop').focus(function() { |
|||
selectedInput = 1; |
|||
}); |
|||
|
|||
$('#destStop').autocomplete({ |
|||
source: function(req, response) { |
|||
var re = $.ui.autocomplete.escapeRegex(req.term); |
|||
re = re.toLowerCase(); |
|||
stopid = re.replace(/[^a-zA-Z0-9]+/g,''); |
|||
var len = stopid.length; |
|||
var i = 0; |
|||
matchArr = []; |
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopid == stopNames[j][0].toLowerCase().substring(0, len)) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
// {'id':stopNames[j][3], 'label':stopNames[j][0] + ': ' + stopNames[j][1] + ' ' + stopNames[j][2],
|
|||
// 'area':stopNames[j][0], 'value':stopNames[j][1], 'stopname':stopNames[j][2]};
|
|||
i = i + 1; |
|||
} |
|||
} |
|||
if(!matchArr.length) { // No matching areas found, look for stops
|
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopNames[j][3].indexOf(stopid) >= 0) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
// {'id':stopNames[j][3], 'label':stopNames[j][0] + ': ' + stopNames[j][1] + ' ' + stopNames[j][2],
|
|||
// 'area':stopNames[j][0], 'value':stopNames[j][1], 'stopname':stopNames[j][2]};
|
|||
i = i + 1; |
|||
} |
|||
} |
|||
} |
|||
response(matchArr); |
|||
// response($.grep(stopNames, function(item){return matcher.test(item[0]); }) );
|
|||
}, |
|||
minLength: 2, |
|||
select: function(event, ui) { |
|||
$('#destStopId').val(ui.item.id); |
|||
setCookie('cDestStop', ui.item.value, 1); |
|||
setCookie('cDestStopNameId', ui.item.id, 1); |
|||
// addRecentStop(ui.item.value);
|
|||
setDest(ui.item); |
|||
$('#fndBusBtn').focus(); |
|||
} /*, |
|||
focus: function(event, ui) { |
|||
$('#destStop').autocomplete("close").val(ui.item.value) |
|||
} |
|||
*/ |
|||
}); |
|||
$('#destStop').focus(function() { |
|||
selectedInput = 2; |
|||
}); |
|||
|
|||
|
|||
|
|||
|
|||
}); |
|||
|
|||
// set the local variable so it can be used in this js file
|
|||
function setGeoPos(pos) { |
|||
geoPos = pos; |
|||
} |
|||
|
|||
function showLocation(pos) { // Stops near you
|
|||
|
|||
if(typeof(document.getElementById("myLoc")) === 'undefined') |
|||
return; // dom not loaded as yet
|
|||
var aoNearStops = []; |
|||
var oNearestStop, contentString, x, oNearStop, elm; |
|||
aoNearStops = findNearStops(pos); |
|||
contentString = '<table id="myLoc" class="tbl_color">'; |
|||
if (aoNearStops !== null) { |
|||
for (x = 0; x < aoNearStops.length; x += 1) { |
|||
oNearStop = aoNearStops[x]; |
|||
if(x === 0) { // Nearest stop and area
|
|||
goNearestStop = oNearStop; |
|||
document.getElementById('stopsnearyou').innerHTML = 'Nearby Stops (' + oNearStop.area + ')'; |
|||
setStart(oNearStop); |
|||
} |
|||
|
|||
elm = '<tr><td><a href="javascript:popStop({\'di\':' + x + ',\'id\':\'' + |
|||
oNearStop.id + '\', \'area\': \'' + oNearStop.area + |
|||
'\', \'stopname\': \'' + oNearStop.stopname + '\', \'landmark\': \'' + |
|||
oNearStop.landmark + '\', \'stopnameext\': \'' + oNearStop.stopnameext + '\'}, 1)">' + |
|||
oNearStop.stopname + "</td><td>" + oNearStop.di + " m" + "</a></td></tr>"; |
|||
|
|||
contentString = contentString + elm; |
|||
if (x >= 2) {// Show 2 nearest stops
|
|||
break; } |
|||
} |
|||
} else { |
|||
contentString = contentString + '<tr><td>' + 'No stops near you found' + '</td></tr>'; } |
|||
|
|||
if(firstLoad) { |
|||
if(goNearestStop !== null) { |
|||
$("#startStop").val(goNearestStop.stopname); |
|||
showRoutesAtStop(goNearestStop, 'Buses at ' + goNearestStop.stopname + ' '); |
|||
$('#destStop').focus(); |
|||
firstLoad = false; |
|||
} |
|||
} |
|||
contentString = contentString + '</tbody></table>'; |
|||
document.getElementById("myLoc").innerHTML = contentString; |
|||
|
|||
setCookie('cMyLat', pos.coords.latitude, 1); |
|||
setCookie('cMyLon', pos.coords.longitude, 1); |
|||
} |
|||
|
|||
|
|||
function setStart(oStop) { |
|||
gStartStop = oStop; |
|||
localStorage['startStop']=JSON.stringify(gStartStop); |
|||
setCookie('cStartStop', oStop.stopname, 1); |
|||
setCookie('cStartStopNameId', oStop.id, 1); |
|||
addRecentStop(oStop); |
|||
showRoutesAtStop(oStop, 'Buses at ' + oStop.stopname + ' '); |
|||
} |
|||
|
|||
// Add to the list of recent stops
|
|||
function addRecentStop(oStop) { |
|||
if(oStop.id === goCurStop.id) // stop hasn't changed
|
|||
return; |
|||
oCurStop = oStop; |
|||
var rs = localStorage['recentStops']; |
|||
var recentStopsPrv; |
|||
if(rs != null) |
|||
recentStopsPrv = JSON.parse(rs); |
|||
recentStops = null; |
|||
var recentStops = new Array; |
|||
recentStops[0] = oStop; |
|||
var alreadyThere = false; |
|||
if(recentStopsPrv !== null && recentStopsPrv != undefined) { |
|||
for(var i = 0; i < recentStopsPrv.length; i++) { |
|||
if(recentStopsPrv[i] === undefined || recentStopsPrv[i] === null) |
|||
continue; |
|||
// check if already in array, else add
|
|||
alreadyThere = false; |
|||
for(var j = 0; j < recentStops.length; j++) { |
|||
if(recentStops[j].stopname === recentStopsPrv[i].stopname) { |
|||
alreadyThere = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!alreadyThere) |
|||
recentStops[recentStops.length] = recentStopsPrv[i]; |
|||
} |
|||
} |
|||
if(!alreadyThere) { |
|||
localStorage['recentStops']=JSON.stringify(recentStops); |
|||
showRecentStops(); |
|||
} |
|||
} |
|||
|
|||
function showRecentStops() { |
|||
// alert('in showrecentstops');
|
|||
if(localStorage['recentStops'] === undefined || localStorage['recentStops'] === null) |
|||
return; |
|||
|
|||
|
|||
var recentStops = JSON.parse(localStorage['recentStops']); |
|||
|
|||
recentStopsStr = '<table id="recentStops" class="tbl_color">'; |
|||
if(recentStops === null) |
|||
return; |
|||
|
|||
if(recentStops.length) { |
|||
// recentStopsStr = '<table id="recentStops">';
|
|||
for(var i = 0; i < recentStops.length && i < MAXRECENTSTOPS; i++) { |
|||
if(recentStops[i] !== null && recentStops[i] !== undefined && typeof(recentStops[i]) === 'object') { |
|||
lmark = typeof(recentStops[i].landmark) == 'undefined' || recentStops[i].landmark == 'undefined' |
|||
? '' : recentStops[i].landmark; |
|||
elm = '<tr><td><a href="javascript:popStop({\'id\':\'' + |
|||
recentStops[i].id + '\', \'area\': \'' + recentStops[i].area + |
|||
'\', \'stopname\': \'' + recentStops[i].stopname + '\', \'landmark\': \'' + |
|||
recentStops[i].landmark + '\', \'stopnameext\': \'' + recentStops[i].stopnameext + '\'}, selectedInput)">' + |
|||
recentStops[i].stopname + '</td><td>' + recentStops[i].area + '</td><td>' + lmark |
|||
+ "</a></td></tr>"; |
|||
recentStopsStr = recentStopsStr + elm; |
|||
} |
|||
} |
|||
recentStopsStr = recentStopsStr + '</table>'; |
|||
document.getElementById("recentStops").innerHTML = recentStopsStr; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
// Buses lists, hide and show per radio button selection
|
|||
function activateList(cList) { |
|||
|
|||
document.getElementById('busNoCombo').style.display = 'none'; |
|||
document.getElementById('oBus').style.display = 'none'; |
|||
document.getElementById('lBus').style.display = 'none'; |
|||
document.getElementById('aBus').style.display = 'none'; |
|||
document.getElementById('asBus').style.display = 'none'; |
|||
document.getElementById('cBus').style.display = 'none'; |
|||
|
|||
|
|||
if(cList === "ALL") |
|||
document.getElementById('busNoCombo').style.display='block'; |
|||
else if(cList === "O") |
|||
document.getElementById('oBus').style.display='block'; |
|||
else if(cList === "L") |
|||
document.getElementById('lBus').style.display='block'; |
|||
else if(cList === "A") |
|||
document.getElementById('aBus').style.display='block'; |
|||
else if(cList === "AS") |
|||
document.getElementById('asBus').style.display='block'; |
|||
else if(cList === "C") |
|||
document.getElementById('cBus').style.display='block'; |
|||
|
|||
} |
|||
|
|||
|
|||
function createOStop(os) { |
|||
return {'id':os[3], 'label':os[0] + ': ' + os[1] + ' ' + os[2], |
|||
'area':os[0], 'value':os[1], 'stopname':os[1], 'landmark':os[2]}; |
|||
|
|||
} |
|||
|
|||
function popStop(oStop, stop) { |
|||
if(stop === 1) { |
|||
$("#startStop").val(oStop.stopname); |
|||
setCookie('cStartStop', oStop.stopname, 1); |
|||
setStart(oStop); |
|||
$("#destStop").focus(); |
|||
} else if(stop === 2) { |
|||
$("#destStop").val(oStop.stopname); |
|||
setCookie('cDestStop', oStop.stopname, 1); |
|||
setDest(oStop); |
|||
$("#findBus").focus(); |
|||
|
|||
} |
|||
} |
|||
|
|||
function setDest(oStop) { |
|||
gDestStop = oStop; |
|||
localStorage['destStop']=JSON.stringify(gDestStop); |
|||
setCookie('cDestStop', oStop.stopname, 1); |
|||
setCookie('cDestStopNameId', oStop.id, 1); |
|||
addRecentStop(oStop); |
|||
} |
|||
|
|||
// Initialize the input fields, start and destination from cookies/loca storage
|
|||
function initStops() { |
|||
|
|||
if(typeof(localStorage['destStop']) !== 'undefined') |
|||
if(localStorage['startStop'] !== null && localStorage['startStop'] !== 'undefined') { |
|||
gStartStop = JSON.parse(localStorage['startStop']); |
|||
$("#startStop").val(gStartStop.stopname); |
|||
} |
|||
if(typeof(localStorage['destStop']) !== 'undefined') |
|||
if(localStorage['destStop'] !== null && localStorage['destStop'] !== 'undefined') { |
|||
gDestStop = JSON.parse(localStorage['destStop']); |
|||
$("#destStop").val(gDestStop.stopname); |
|||
} |
|||
} |
|||
|
|||
// fn run on submit find bus form
|
|||
function validateFindBusForm() { |
|||
// document.getElementById("loading").className = "loading-visible";
|
|||
var loc, sNameId, dNameId, rSFound, |
|||
nomatch, rDFound, bSMatch, bDMatch, w; |
|||
loc = ''; |
|||
sNameId = ''; dNameId = ''; |
|||
if (gStartStop.id === '' && gDestStop.id === '') { |
|||
alert('Enter a start stop or a start and destination stop'); |
|||
return false; |
|||
} |
|||
if (gStartStop.id === '' && gDestStop.id !== '') { |
|||
alert('To check buses near a stop enter only start stop'); |
|||
return false; |
|||
} |
|||
if (gStartStop.id !== '' && gDestStop.id === '') { // empty destination - display info for start stop
|
|||
if (gStartStop !== undefined && gStartStop.id !== "") {// came from autocomplete, we already have stopnameid
|
|||
sNameId = gStartStop.id; |
|||
dNameId = ''; |
|||
loc = "busesfound.html?s=" + gStartStop.id; |
|||
} |
|||
} // We have both a start and destination entered by user
|
|||
if (gStartStop !== null && gDestStop.id !== null) { |
|||
sNameId = gStartStop.id; |
|||
dNameId = gDestStop.id; |
|||
loc = "busesfound.html?s=" + gStartStop.id + "&d=" + gDestStop.id; |
|||
} |
|||
|
|||
if (loc !== '') { |
|||
goLinkBusesFound(gStartStop.id, gDestStop.id); |
|||
return false; |
|||
} |
|||
// window.location = loc;
|
|||
return; |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
// Clear start or destination fields
|
|||
function clearInput() |
|||
{ |
|||
if (selectedInput === 1) { |
|||
document.getElementById("startStop").value = ""; |
|||
setCookie('cStartStop', "", 1); |
|||
setCookie('cStartStopNameId', 0, 1); |
|||
setCookie('cStartStopInfo', 0, 1); |
|||
$("#startStop").focus(); |
|||
gStartStop = null; |
|||
|
|||
} else { |
|||
document.getElementById("destStop").value = ""; |
|||
setCookie('cDestStop', "", 1); |
|||
setCookie('cDestStopNameId', 0, 1); |
|||
setCookie('cDestStopInfo', 0, 1); |
|||
$("#destStop").focus(); |
|||
gDestStop = null; |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
function goLinkBusesFound(startStopNameId, destStopNameId) { |
|||
var d; |
|||
setCookie("cStartStopNameId", startStopNameId, 1); |
|||
setCookie("cDestStopNameId", destStopNameId, 1); |
|||
if (startStopNameId !== "") { |
|||
d = destStopNameId !== "" ? "&d=" + destStopNameId : ""; |
|||
window.location = "busesfound.html"; |
|||
// window.location = "busesfound.html?s=" + startStopNameId + d;
|
|||
} |
|||
return false; |
|||
|
|||
} |
|||
|
|||
function showStatus() |
|||
{ |
|||
window.location='status.html?s=' + gStartStop.id; |
|||
} |
|||
|
|||
function showR() { |
|||
b = $('#busNo').val(); |
|||
if(b === '') |
|||
alert('Please type a Bus no. before hitting Select Route'); |
|||
else |
|||
showRouteComplete(); |
|||
} |
@ -0,0 +1,574 @@ |
|||
// findbus.js
|
|||
/* |
|||
var getStopNames, getStopLatLon, getCookie, setCookie, getWinDim, getLocation, |
|||
updateDestInfo, BrowserLevel, findNearestStop, updateStartInfo, goLinkBusesFound, findStop, |
|||
getCombo, setGeoPos, distanceLatLon, window; |
|||
*/ |
|||
|
|||
var startVld; |
|||
startVld = false; |
|||
var selectedInput = 1; |
|||
var dBugLvl = 3; |
|||
var phoneIA = true; // Iphone or Android
|
|||
|
|||
var stopNames; |
|||
var busMaster; |
|||
var gStartStop = {'id':'', 'value':''}; |
|||
var gDestStop = {'id':'', 'value':''}; |
|||
var geoPos; |
|||
var NEARLAT = 0.01; |
|||
var firstLoad = true; |
|||
var oNearestStop = null; |
|||
var arBusList; |
|||
var stopBus; |
|||
var selectedStop; |
|||
var near_stop; |
|||
var MAXRECENTSTOPS = 7; |
|||
|
|||
$(document).ready(function () { |
|||
|
|||
var sStop, dStop, sId, dId, w; |
|||
stopNames = getStopNames(); |
|||
stopLatLon = getStopLatLon(); |
|||
busMaster = getbusmaster(); |
|||
arBusList = getbuslist(); |
|||
stopBus = getStopBusList(); |
|||
|
|||
scrollTo(0, 0); |
|||
console.log('In index.js before initStops()'); |
|||
initStops(); |
|||
// w = getWinDim();
|
|||
// $('#startStop').width(w.wd * 0.90);
|
|||
$('#startStop').width("95%"); |
|||
$('#startStop').height('18px'); |
|||
$('#startStop').css('font-size', '16px'); |
|||
|
|||
$('#destStop').width("95%"); |
|||
$('#destStop').height('18px'); |
|||
$('#destStop').css('font-size', '16px'); |
|||
|
|||
getLocation(); // runs setGeoPos(pos), showLocation(pos)
|
|||
PopulateAllBusList(); |
|||
PopulateOtherBusLists(); |
|||
activateList('ALL'); |
|||
|
|||
showRecentStops(); |
|||
// $("#startStop").focus();
|
|||
document.getElementById('busNoCombo').checked = true; |
|||
|
|||
|
|||
$(function () { |
|||
$("#startStop").autocomplete({ |
|||
source: function(req, response) { |
|||
var re = $.ui.autocomplete.escapeRegex(req.term); |
|||
re = re.toLowerCase(); |
|||
stopid = re.replace(/[^a-zA-Z0-9]+/g,''); |
|||
var len = stopid.length; |
|||
var i = 0; |
|||
matchArr = []; |
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopid == stopNames[j][0].toLowerCase().substring(0, len)) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
i = i + 1; |
|||
} |
|||
} |
|||
if(!matchArr.length) { // No matching areas found, look for stops
|
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopNames[j][3].indexOf(stopid) >= 0) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
i = i + 1; |
|||
} |
|||
} |
|||
} |
|||
response(matchArr); |
|||
}, |
|||
minLength: 2, |
|||
select: function(event, ui) { |
|||
$('#startStop').val(ui.item.value); |
|||
setStart(ui.item); |
|||
$('#destStop').focus(); |
|||
} /* , |
|||
focus: function(event, ui) { |
|||
$('#startStop').autocomplete("close").val(ui.item.value) |
|||
} |
|||
*/ |
|||
// $('#abbrev').val(ui.item.abbrev);
|
|||
}); |
|||
$('#startStop').focus(function() { |
|||
selectedInput = 1; |
|||
}); |
|||
|
|||
|
|||
$('#destStop').autocomplete({ |
|||
source: function(req, response) { |
|||
var re = $.ui.autocomplete.escapeRegex(req.term); |
|||
re = re.toLowerCase(); |
|||
stopid = re.replace(/[^a-zA-Z0-9]+/g,''); |
|||
var len = stopid.length; |
|||
var i = 0; |
|||
matchArr = []; |
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopid == stopNames[j][0].toLowerCase().substring(0, len)) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
// {'id':stopNames[j][3], 'label':stopNames[j][0] + ': ' + stopNames[j][1] + ' ' + stopNames[j][2],
|
|||
// 'area':stopNames[j][0], 'value':stopNames[j][1], 'stopname':stopNames[j][2]};
|
|||
i = i + 1; |
|||
} |
|||
} |
|||
if(!matchArr.length) { // No matching areas found, look for stops
|
|||
for(var j=0; j<stopNames.length; j++) { |
|||
if(stopNames[j][3].indexOf(stopid) >= 0) { |
|||
matchArr[i] = createOStop(stopNames[j]); |
|||
// {'id':stopNames[j][3], 'label':stopNames[j][0] + ': ' + stopNames[j][1] + ' ' + stopNames[j][2],
|
|||
// 'area':stopNames[j][0], 'value':stopNames[j][1], 'stopname':stopNames[j][2]};
|
|||
i = i + 1; |
|||
} |
|||
} |
|||
} |
|||
response(matchArr); |
|||
// response($.grep(stopNames, function(item){return matcher.test(item[0]); }) );
|
|||
}, |
|||
minLength: 2, |
|||
select: function(event, ui) { |
|||
$('#destStopId').val(ui.item.id); |
|||
setCookie('cDestStop', ui.item.value, 1); |
|||
setCookie('cDestStopNameId', ui.item.id, 1); |
|||
// addRecentStop(ui.item.value);
|
|||
setDest(ui.item); |
|||
$('#fndBusBtn').focus(); |
|||
} /*, |
|||
focus: function(event, ui) { |
|||
$('#destStop').autocomplete("close").val(ui.item.value) |
|||
} |
|||
*/ |
|||
}); |
|||
$('#destStop').focus(function() { |
|||
selectedInput = 2; |
|||
}); |
|||
|
|||
$("#busNo").autocomplete({ |
|||
source: function(req, response) { |
|||
var re = $.ui.autocomplete.escapeRegex(req.term); |
|||
re = re.toLowerCase(); |
|||
var len = re.length; |
|||
var i = 0; |
|||
matchArr = []; |
|||
for(var j=0; j<arBusList.length; j++) { |
|||
if(re == arBusList[j][0].toLowerCase().substring(0, len) |
|||
|| re == arBusList[j][1].toLowerCase().substring(0, len)) { |
|||
matchArr[i] = arBusList[j][1]; |
|||
i = i + 1; |
|||
} |
|||
} |
|||
|
|||
response(matchArr); |
|||
} /*, |
|||
focus: function(event, ui) { |
|||
$('#busNo').autocomplete("close").val(ui.item.value) |
|||
} |
|||
*/ |
|||
}); |
|||
|
|||
}); |
|||
|
|||
function handle_error(err) { |
|||
if (err.code === 1) { |
|||
return 1;// user said no!
|
|||
} |
|||
} |
|||
function get_position() { |
|||
alert('Getting position'); |
|||
} |
|||
|
|||
|
|||
function myLocStop() { |
|||
$('#startStop').val(document.getElementById('nearStop').value); |
|||
// sessionStorage.startStop = document.getElementById('nearStop').value;
|
|||
setCookie('cStartStop', document.getElementById('nearStop').value, 1); |
|||
|
|||
$('#startStopId').val(document.getElementById('nearStopId').value); |
|||
setCookie('cStartStopId', document.getElementById('nearStopId').value, 1); |
|||
|
|||
// sessionStorage.startStopId = document.getElementById('nearStopId').value;
|
|||
updateStartInfo('n'); |
|||
} |
|||
|
|||
}); |
|||
|
|||
|
|||
function showLocation(pos) { // Stops near you
|
|||
if(typeof(document.getElementById("myLoc")) === 'undefined') |
|||
return; // dom not loaded as yet
|
|||
var resparr, contentString, x, near_stop, elm; |
|||
resparr = findNearestStop(pos); |
|||
contentString = '<table id="myLoc" class="tbl_color">'; |
|||
if (resparr !== null) { |
|||
for (x = 0; x < resparr.length; x += 1) { |
|||
near_stop = resparr[x]; |
|||
if(x === 0) { // Nearest stop and area
|
|||
oNearestStop = near_stop; |
|||
document.getElementById('stopsnearyou').innerHTML = 'Nearby Stops (' + near_stop.area + ')'; |
|||
setStart(near_stop); |
|||
} |
|||
|
|||
elm = '<tr><td><a href="javascript:popStart({\'di\':' + x + ',\'id\':\'' + |
|||
near_stop.id + '\', \'area\': \'' + near_stop.area + |
|||
'\', \'stopname\': \'' + near_stop.stopname + '\', \'landmark\': \'' + |
|||
near_stop.landmark + '\', \'stopnameext\': \'' + near_stop.stopnameext + '\'})">' + |
|||
near_stop.stopname + "</td><td>" + near_stop.di + " m" + "</a></td></tr>"; |
|||
|
|||
contentString = contentString + elm; |
|||
if (x >= 2) {// Show 2 nearest stops
|
|||
break; } |
|||
} |
|||
} else { |
|||
contentString = contentString + '<tr><td>' + 'No stops near you found' + '</td></tr>'; } |
|||
|
|||
if(firstLoad) { |
|||
if(oNearestStop !== null) { |
|||
$("#startStop").val(oNearestStop.stopname); |
|||
// document.myForm.startStop.value = oNearestStop.stopname;
|
|||
showRoutesAtStop(oNearestStop); |
|||
$('#destStop').focus(); |
|||
firstLoad = false; |
|||
} |
|||
} |
|||
contentString = contentString + '</tbody></table>'; |
|||
document.getElementById("myLoc").innerHTML = contentString; |
|||
|
|||
setCookie('cMyLat', pos.coords.latitude, 1); |
|||
setCookie('cMyLon', pos.coords.longitude, 1); |
|||
} |
|||
|
|||
// set the local variable so it can be used in this js file
|
|||
function setGeoPos(pos) { |
|||
geoPos = pos; |
|||
} |
|||
|
|||
function findNearestStop(pos) { |
|||
var nearStop, retNearStop, x, y, dLat, dLon, di; |
|||
nearStop = []; |
|||
retNearStop = []; |
|||
y = 0; |
|||
for (x = 0; x < stopLatLon.length; x += 1) { |
|||
dLat = parseFloat(stopLatLon[x][1]); |
|||
dLon = parseFloat(stopLatLon[x][2]); |
|||
if (Math.abs(pos.coords.latitude - dLat) < NEARLAT |
|||
|| Math.abs(pos.coords.longitude - dLon) < NEARLAT) { |
|||
di = distanceLatLon(pos.coords.latitude, pos.coords.longitude, |
|||
dLat, dLon); |
|||
if (di < 750) { |
|||
nearStop[di] = stopLatLon[x][0]; |
|||
y += 1; |
|||
} |
|||
} |
|||
} |
|||
for (x = 0; x < nearStop.length; x += 1) { |
|||
if (nearStop[x] !== undefined) { |
|||
for (y = 0; y < stopNames.length; y += 1) { |
|||
if (stopNames[y][3] === nearStop[x]) { |
|||
var sname = stopNames[y][1]; |
|||
var lmark = stopNames[y][2]; |
|||
|
|||
stopnameext = lmark !== null ? sname + ' /' + lmark : sname; |
|||
retNearStop[retNearStop.length] = {"di": x, "id": stopNames[y][3], |
|||
"area": stopNames[y][0], "stopname": stopNames[y][1], |
|||
"landmark": stopNames[y][2], 'stopnameext':stopnameext}; |
|||
break; |
|||
} |
|||
} |
|||
// retNearStop[retNearStop.length] = {"di":x, "stopnameid":nearStop[x]};
|
|||
} |
|||
} |
|||
return retNearStop; |
|||
} |
|||
|
|||
// fn run on submit find bus form
|
|||
function validateFindBusForm() { |
|||
// document.getElementById("loading").className = "loading-visible";
|
|||
var loc, sNameId, dNameId, rSFound, |
|||
nomatch, rDFound, bSMatch, bDMatch, w; |
|||
loc = ''; |
|||
sNameId = ''; dNameId = ''; |
|||
if (gStartStop.id === '' && gDestStop.id === '') { |
|||
alert('Enter a start stop or a start and destination stop'); |
|||
return false; |
|||
} |
|||
if (gStartStop.id === '' && gDestStop.id !== '') { |
|||
alert('To check buses near a stop enter only start stop'); |
|||
return false; |
|||
} |
|||
if (gStartStop.id !== '' && gDestStop.id === '') { // empty destination - display info for start stop
|
|||
if (gStartStop !== undefined && gStartStop.id !== "") {// came from autocomplete, we already have stopnameid
|
|||
sNameId = gStartStop.id; |
|||
dNameId = ''; |
|||
loc = "busesfound.html?s=" + gStartStop.id; |
|||
} |
|||
} // We have both a start and destination entered by user
|
|||
if (gStartStop !== null && gDestStop.id !== null) { |
|||
sNameId = gStartStop.id; |
|||
dNameId = gDestStop.id; |
|||
loc = "busesfound.html?s=" + gStartStop.id + "&d=" + gDestStop.id; |
|||
} |
|||
|
|||
if (loc !== '') { |
|||
goLinkBusesFound(gStartStop.id, gDestStop.id); |
|||
return false; |
|||
} |
|||
// window.location = loc;
|
|||
return; |
|||
|
|||
|
|||
} |
|||
|
|||
function goLinkBusesFound(startStopNameId, destStopNameId) { |
|||
var d; |
|||
setCookie("cStartStopNameId", startStopNameId, 1); |
|||
setCookie("cDestStopNameId", destStopNameId, 1); |
|||
if (startStopNameId !== "") { |
|||
d = destStopNameId !== "" ? "&d=" + destStopNameId : ""; |
|||
window.location = "busesfound.html"; |
|||
// window.location = "busesfound.html?s=" + startStopNameId + d;
|
|||
} |
|||
return false; |
|||
|
|||
} |
|||
|
|||
|
|||
// Show the bus nos. at a stop
|
|||
// input stop object
|
|||
function showRoutesAtStop(oStop) { // Bus routes at start - buses at start
|
|||
var busList = null; |
|||
|
|||
document.getElementById("busroutesatstart").innerHTML = 'Buses at ' + oStop.stopname + ' (' + oStop.area + ')'; |
|||
|
|||
for(var i = 0; i < stopBus.length; i++) { |
|||
if(stopBus[i][1] == oStop.id) { |
|||
busList = stopBus[i][5]; |
|||
break; |
|||
} |
|||
} |
|||
var firstStop, lastStop; |
|||
if(busList != null) { |
|||
arNearBuses = busList.split(","); |
|||
|
|||
routesAtStopStr = '<table id="routesAtStop" class="tbl_color">'; |
|||
for(var j = 0; j < arNearBuses.length; j++) { |
|||
busNo = arNearBuses[j].split("|")[0].trim(); |
|||
for(var a = 0; a < arBusList.length; a++) { |
|||
if(arBusList[a][1] == busNo) { |
|||
firstStop = arBusList[a][2]; |
|||
lastStop = arBusList[a][3]; |
|||
|
|||
} |
|||
} |
|||
|
|||
busInfo = getBusInfo(busNo); |
|||
busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = " ( " + busInfo.frequency + " mins)"; |
|||
|
|||
busInfo = getBusInfo(busNo); |
|||
busfreq = ""; |
|||
if(busInfo != undefined && busInfo.frequency !="") |
|||
busfreq = busInfo.frequency + " mins"; |
|||
|
|||
sBusNo = busNo.replace(/ /g, ' ').replace('Exp AC Exp', 'AC Exp'); |
|||
url = '<a href="#"' + ' onClick="return goLinkBusRoute(' + "'" + busNo + "'" |
|||
+ ', 0, 0)' + '">' + '<span style="font-weight:bold; width:15%;">' |
|||
+ sBusNo + '</span>' + |
|||
'</td><td>' + firstStop + ' - ' + lastStop + |
|||
'</td><td>' + busfreq + "</a>" ; |
|||
|
|||
routesAtStopStr = routesAtStopStr + '<tr><td>' + url + "</a></td></tr>"; |
|||
// routesAtStopStr = routesAtStopStr + '<tr><td>' + recentStops[i] + '</td></tr>';
|
|||
} |
|||
|
|||
routesAtStopStr = routesAtStopStr + '</table>'; |
|||
document.getElementById("routesAtStop").innerHTML = routesAtStopStr; |
|||
} |
|||
} |
|||
|
|||
// Clear start or destination fields
|
|||
function clearInput() |
|||
{ |
|||
if (selectedInput === 1) { |
|||
document.getElementById("startStop").value = ""; |
|||
setCookie('cStartStop', "", 1); |
|||
setCookie('cStartStopNameId', 0, 1); |
|||
setCookie('cStartStopInfo', 0, 1); |
|||
$("#startStop").focus(); |
|||
gStartStop = null; |
|||
|
|||
} else { |
|||
document.getElementById("destStop").value = ""; |
|||
setCookie('cDestStop', "", 1); |
|||
setCookie('cDestStopNameId', 0, 1); |
|||
setCookie('cDestStopInfo', 0, 1); |
|||
$("#destStop").focus(); |
|||
gDestStop = null; |
|||
|
|||
} |
|||
} |
|||
|
|||
// Stuff value from link into start field
|
|||
function popStart(oStop) { |
|||
$("#startStop").val(oStop.stopname); |
|||
setStart(oStop); |
|||
$("#destStop").focus(); |
|||
|
|||
} |
|||
|
|||
// Stuff value from link into the input field
|
|||
|
|||
function popStop(oStop) { |
|||
if(selectedInput === 1) { |
|||
$("#startStop").val(oStop.stopname); |
|||
setCookie('cStartStop', oStop.stopname, 1); |
|||
setStart(oStop); |
|||
$("#destStop").focus(); |
|||
} else if(selectedInput === 2) { |
|||
$("#destStop").val(oStop.stopname); |
|||
setCookie('cDestStop', oStop.stopname, 1); |
|||
setDest(oStop); |
|||
$("#findBus").focus(); |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
function setStart(oStop) { |
|||
gStartStop = oStop; |
|||
localStorage['startStop']=JSON.stringify(gStartStop); |
|||
setCookie('cStartStop', oStop.stopname, 1); |
|||
setCookie('cStartStopNameId', oStop.id, 1); |
|||
addRecentStop(oStop); |
|||
showRoutesAtStop(oStop); |
|||
} |
|||
|
|||
function setDest(oStop) { |
|||
gDestStop = oStop; |
|||
localStorage['destStop']=JSON.stringify(gDestStop); |
|||
setCookie('cDestStop', oStop.stopname, 1); |
|||
setCookie('cDestStopNameId', oStop.id, 1); |
|||
addRecentStop(oStop); |
|||
} |
|||
|
|||
// Initialize the input fields, start and destination from cookies/loca storage
|
|||
function initStops() { |
|||
|
|||
if(typeof(localStorage['destStop']) !== 'undefined') |
|||
if(localStorage['startStop'] !== null && localStorage['startStop'] !== 'undefined') { |
|||
gStartStop = JSON.parse(localStorage['startStop']); |
|||
$("#startStop").val(gStartStop.stopname); |
|||
} |
|||
if(typeof(localStorage['destStop']) !== 'undefined') |
|||
if(localStorage['destStop'] !== null && localStorage['destStop'] !== 'undefined') { |
|||
gDestStop = JSON.parse(localStorage['destStop']); |
|||
$("#destStop").val(gDestStop.stopname); |
|||
} |
|||
} |
|||
|
|||
// Add to the list of recent stops
|
|||
function addRecentStop(oStop) { |
|||
var rs = localStorage['recentStops']; |
|||
|
|||
var recentStopsPrv; |
|||
if(rs != null) |
|||
recentStopsPrv = JSON.parse(rs); |
|||
recentStops = null; |
|||
var recentStops = new Array; |
|||
recentStops[0] = oStop; |
|||
if(recentStopsPrv !== null && recentStopsPrv != undefined) { |
|||
for(var i = 0; i < recentStopsPrv.length; i++) { |
|||
if(recentStopsPrv[i] === undefined || recentStopsPrv[i] === null) |
|||
continue; |
|||
// check if already in array, else add
|
|||
alreadyThere = false; |
|||
for(var j = 0; j < recentStops.length; j++) { |
|||
if(recentStops[j].stopname === recentStopsPrv[i].stopname) { |
|||
alreadyThere = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!alreadyThere) |
|||
recentStops[recentStops.length] = recentStopsPrv[i]; |
|||
} |
|||
} |
|||
localStorage['recentStops']=JSON.stringify(recentStops); |
|||
showRecentStops(); |
|||
} |
|||
|
|||
function showRecentStops() { |
|||
|
|||
if(localStorage['recentStops'] === undefined || localStorage['recentStops'] === null) |
|||
return; |
|||
|
|||
var recentStops = JSON.parse(localStorage['recentStops']); |
|||
recentStopsStr = '<table id="recentStops" class="tbl_color">'; |
|||
if(recentStops === null) |
|||
return; |
|||
if(recentStops.length) { |
|||
// recentStopsStr = '<table id="recentStops">';
|
|||
for(var i = 0; i < recentStops.length && i < MAXRECENTSTOPS; i++) { |
|||
if(recentStops[i] !== null && recentStops[i] !== undefined && typeof(recentStops[i]) === 'object') { |
|||
lmark = typeof(recentStops[i].landmark) == 'undefined' || recentStops[i].landmark == 'undefined' |
|||
? '' : recentStops[i].landmark; |
|||
elm = '<tr><td><a href="javascript:popStop({\'id\':\'' + |
|||
recentStops[i].id + '\', \'area\': \'' + recentStops[i].area + |
|||
'\', \'stopname\': \'' + recentStops[i].stopname + '\', \'landmark\': \'' + |
|||
recentStops[i].landmark + '\', \'stopnameext\': \'' + recentStops[i].stopnameext + '\'})">' + |
|||
recentStops[i].stopname + '</td><td>' + recentStops[i].area + '</td><td>' + lmark |
|||
+ "</a></td></tr>"; |
|||
recentStopsStr = recentStopsStr + elm; |
|||
} |
|||
} |
|||
recentStopsStr = recentStopsStr + '</table>'; |
|||
document.getElementById("recentStops").innerHTML = recentStopsStr; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
function showR() { |
|||
b = $('#busNo').val(); |
|||
if(b === '') |
|||
alert('Please type a Bus no. before hitting Select Route'); |
|||
else |
|||
showRouteComplete(); |
|||
} |
|||
function createOStop(os) { |
|||
return {'id':os[3], 'label':os[0] + ': ' + os[1] + ' ' + os[2], |
|||
'area':os[0], 'value':os[1], 'stopname':os[1], 'landmark':os[2]}; |
|||
|
|||
} |
|||
|
|||
function activateList(cList) { |
|||
|
|||
document.getElementById('busNoCombo').style.display = 'none'; |
|||
document.getElementById('oBus').style.display = 'none'; |
|||
document.getElementById('lBus').style.display = 'none'; |
|||
document.getElementById('aBus').style.display = 'none'; |
|||
document.getElementById('asBus').style.display = 'none'; |
|||
document.getElementById('cBus').style.display = 'none'; |
|||
|
|||
|
|||
if(cList === "ALL") |
|||
document.getElementById('busNoCombo').style.display='block'; |
|||
else if(cList === "O") |
|||
document.getElementById('oBus').style.display='block'; |
|||
else if(cList === "L") |
|||
document.getElementById('lBus').style.display='block'; |
|||
else if(cList === "A") |
|||
document.getElementById('aBus').style.display='block'; |
|||
else if(cList === "AS") |
|||
document.getElementById('asBus').style.display='block'; |
|||
else if(cList === "C") |
|||
document.getElementById('cBus').style.display='block'; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,263 @@ |
|||
<!DOCTYPE HTML> |
|||
<html xmlns="http://www.w3.org/1999/xhtml" |
|||
xmlns:fb="http://www.facebook.com/2008/fbml"> |
|||
|
|||
<head> |
|||
|
|||
<title>BestBus Route Finder (Mumbai)</title> |
|||
<meta name="viewport" content="user-scalable=yes, width=device-width"> |
|||
|
|||
<!-- <link rel="stylesheet" type="text/css" href="css/common.css"> --> |
|||
<link rel="stylesheet" type="text/css" href="lib/jquery/jquerymobilemin.css"> |
|||
|
|||
<script type="text/javascript" src="lib/jquery/jquerymin.js"></script> |
|||
<script type="text/javascript" src="lib/jquery/jquerymobilemin.js"></script> |
|||
|
|||
</head> |
|||
|
|||
<body> |
|||
<div data-role="page" data-theme="a"> |
|||
<div data-role="header" data-theme="a"> |
|||
<h1>BestBus Route Finder (Mumbai)</h1> |
|||
<a href="help/bestbushelp.html" rel="external" data-icon="search">Help</a> |
|||
</div> |
|||
<!-- |
|||
<td style="width: 581px;" class="header_txt"> |
|||
BestBus Route Finder (Mumbai)</td> |
|||
<td style="width: 24px;" class="header_right_img"><a |
|||
href="help/BestbusHelp.html"> <img |
|||
style="border: 0px solid ; width: 24px; height: 24px;" id="Help" |
|||
title="Help" onclick="window.location='help/bestbushelp.html';" |
|||
src="./images/px24help.png"></a></td> |
|||
</div> |
|||
<!-- |
|||
<div class="menu"> |
|||
<h6><a href="findbus.html">Find your Bus</a></h6> |
|||
<h6><a href="busroute.html">Show a route</a></h6> |
|||
</div> |
|||
--> |
|||
|
|||
<div data-role="content"> |
|||
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="a"> |
|||
<li><a href="findbus.html" data-transition="slidedown" rel="external">Find your Bus</a></li> |
|||
<li><a href="busroute.html" data-transition="slidedown" rel="external">Show a route</a></li> |
|||
</ul> |
|||
</div> |
|||
<div data-role="footer" data-position="fixed" data-theme="c"> |
|||
|
|||
|
|||
|
|||
<?php |
|||
// AdMob Publisher Code |
|||
// Language: PHP (fsockopen) |
|||
// Version: 20081105 |
|||
// Copyright AdMob, Inc., All rights reserved |
|||
// Documentation at http://developer.admob.com/wiki/Main_Page |
|||
|
|||
$admob_params = array( |
|||
'PUBLISHER_ID' => 'a14df5265566847', // Required to request ads. To find your Publisher ID, log in to your AdMob account and click on the "Sites & Apps" tab. |
|||
'ANALYTICS_ID' => 'a14df5a1a495612', // Required to collect Analytics data. To find your Analytics ID, log in to your Analytics account and click on the "Edit" link next to the name of your site. |
|||
'AD_REQUEST' => true, // To request an ad, set to TRUE. |
|||
'ANALYTICS_REQUEST' => true, // To enable the collection of analytics data, set to TRUE. |
|||
'TEST_MODE' => false, // While testing, set to TRUE. When you are ready to make live requests, set to FALSE. |
|||
// Additional optional parameters are available at: http://developer.admob.com/wiki/AdCodeDocumentation |
|||
'OPTIONAL' => array() |
|||
); |
|||
|
|||
// Optional parameters for AdMob Analytics (http://analytics.admob.com) |
|||
//$admob_params['OPTIONAL']['title'] = "Enter Page Title Here"; // Analytics allows you to track site usage based on custom page titles. Enter custom title in this parameter. |
|||
//$admob_params['OPTIONAL']['event'] = "Enter Event Name Here"; // To learn more about events, log in to your Analytics account and visit this page: http://analytics.admob.com/reports/events/add |
|||
|
|||
/* This code supports the ability for your website to set a cookie on behalf of AdMob |
|||
* To set an AdMob cookie, simply call admob_setcookie() on any page that you call admob_request() |
|||
* The call to admob_setcookie() must occur before any output has been written to the page (http://www.php.net/setcookie) |
|||
* If your mobile site uses multiple subdomains (e.g. "a.example.com" and "b.example.com"), then pass the root domain of your mobile site (e.g. "example.com") as a parameter to admob_setcookie(). |
|||
* This will allow the AdMob cookie to be visible across subdomains |
|||
*/ |
|||
//admob_setcookie(); |
|||
|
|||
/* AdMob strongly recommends using cookies as it allows us to better uniquely identify users on your website. |
|||
* This benefits your mobile site by providing: |
|||
* - Improved ad targeting = higher click through rates = more revenue! |
|||
* - More accurate analytics data (http://analytics.admob.com) |
|||
*/ |
|||
|
|||
// Send request to AdMob. To make additional ad requests per page, copy and paste this function call elsewhere on your page. |
|||
echo admob_request($admob_params); |
|||
|
|||
///////////////////////////////// |
|||
// Do not edit below this line // |
|||
///////////////////////////////// |
|||
|
|||
// This section defines AdMob functions and should be used AS IS. |
|||
// We recommend placing the following code in a separate file that is included where needed. |
|||
|
|||
function admob_request($admob_params) { |
|||
static $pixel_sent = false; |
|||
|
|||
$ad_mode = false; |
|||
if (!empty($admob_params['AD_REQUEST']) && !empty($admob_params['PUBLISHER_ID'])) $ad_mode = true; |
|||
|
|||
$analytics_mode = false; |
|||
if (!empty($admob_params['ANALYTICS_REQUEST']) && !empty($admob_params['ANALYTICS_ID']) && !$pixel_sent) $analytics_mode = true; |
|||
|
|||
$protocol = 'http'; |
|||
if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') $protocol = 'https'; |
|||
|
|||
$rt = $ad_mode ? ($analytics_mode ? 2 : 0) : ($analytics_mode ? 1 : -1); |
|||
if ($rt == -1) return ''; |
|||
|
|||
list($usec, $sec) = explode(' ', microtime()); |
|||
$params = array('rt=' . $rt, |
|||
'z=' . ($sec + $usec), |
|||
'u=' . urlencode($_SERVER['HTTP_USER_AGENT']), |
|||
'i=' . urlencode($_SERVER['REMOTE_ADDR']), |
|||
'p=' . urlencode("$protocol://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']), |
|||
'v=' . urlencode('20081105-PHPFSOCK-33fdd8e59a40dd9a')); |
|||
|
|||
$sid = empty($admob_params['SID']) ? session_id() : $admob_params['SID']; |
|||
if (!empty($sid)) $params[] = 't=' . md5($sid); |
|||
if ($ad_mode) $params[] = 's=' . $admob_params['PUBLISHER_ID']; |
|||
if ($analytics_mode) $params[] = 'a=' . $admob_params['ANALYTICS_ID']; |
|||
if (!empty($_COOKIE['admobuu'])) $params[] = 'o=' . $_COOKIE['admobuu']; |
|||
if (!empty($admob_params['TEST_MODE'])) $params[] = 'm=test'; |
|||
|
|||
if (!empty($admob_params['OPTIONAL'])) { |
|||
foreach ($admob_params['OPTIONAL'] as $k => $v) { |
|||
$params[] = urlencode($k) . '=' . urlencode($v); |
|||
} |
|||
} |
|||
|
|||
$ignore = array('HTTP_PRAGMA' => true, 'HTTP_CACHE_CONTROL' => true, 'HTTP_CONNECTION' => true, 'HTTP_USER_AGENT' => true, 'HTTP_COOKIE' => true); |
|||
foreach ($_SERVER as $k => $v) { |
|||
if (substr($k, 0, 4) == 'HTTP' && empty($ignore[$k]) && isset($v)) { |
|||
$params[] = urlencode('h[' . $k . ']') . '=' . urlencode($v); |
|||
} |
|||
} |
|||
|
|||
$post = implode('&', $params); |
|||
$request_timeout = 1; // 1 second timeout |
|||
$contents = ''; |
|||
$errno = 0; |
|||
$errstr = ''; |
|||
list($usec_start, $sec_start) = explode(' ', microtime()); |
|||
$request = @fsockopen('r.admob.com', 80, $errno, $errstr, $request_timeout); |
|||
if($request) { |
|||
stream_set_timeout($request, $request_timeout); |
|||
$post_body = "POST /ad_source.php HTTP/1.0\r\nHost: r.admob.com\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: " . strlen($post) . "\r\n\r\n" . $post; |
|||
$post_body_len = strlen($post_body); |
|||
$bytes_written = 0; |
|||
$body = false; |
|||
|
|||
$info = stream_get_meta_data($request); |
|||
$timeout = $info['timed_out']; |
|||
while($bytes_written < $post_body_len && !$timeout) { |
|||
$current_bytes_written = fwrite($request, $post_body); |
|||
if($current_bytes_written === false) return ''; // write failed |
|||
$bytes_written += $current_bytes_written; |
|||
if($bytes_written === $post_body_len) break; |
|||
$post_body = substr($post_body, $bytes_written); |
|||
$info = stream_get_meta_data($request); |
|||
$timeout = $info['timed_out']; |
|||
} |
|||
|
|||
while(!feof($request) && !$timeout) { |
|||
$line = fgets($request); |
|||
if(!$body && $line == "\r\n") $body = true; |
|||
if($body && !empty($line)) $contents .= $line; |
|||
$info = stream_get_meta_data($request); |
|||
$timeout = $info['timed_out']; |
|||
} |
|||
fclose($request); |
|||
} |
|||
else { |
|||
$contents = ''; |
|||
} |
|||
|
|||
if (!$pixel_sent) { |
|||
$pixel_sent = true; |
|||
list($usec_end, $sec_end) = explode(' ', microtime()); |
|||
$contents .= "<img src=\"$protocol://p.admob.com/e0?" |
|||
. 'rt=' . $rt |
|||
. '&z=' . ($sec + $usec) |
|||
. '&a=' . ($analytics_mode ? $admob_params['ANALYTICS_ID'] : '') |
|||
. '&s=' . ($ad_mode ? $admob_params['PUBLISHER_ID'] : '') |
|||
. '&o=' . (empty($_COOKIE['admobuu']) ? '' : $_COOKIE['admobuu']) |
|||
. '&lt=' . ($sec_end + $usec_end - $sec_start - $usec_start) |
|||
. '&to=' . $request_timeout |
|||
. '" alt="" width="1" height="1"/>'; |
|||
} |
|||
|
|||
return $contents; |
|||
} |
|||
|
|||
function admob_setcookie($domain = '', $path = '/') { |
|||
if (empty($_COOKIE['admobuu'])) { |
|||
$value = md5(uniqid(rand(), true)); |
|||
if (!empty($domain) && $domain[0] != '.') $domain = ".$domain"; |
|||
if (setcookie('admobuu', $value, mktime(0, 0, 0, 1, 1, 2038), $path, $domain)) { |
|||
$_COOKIE['admobuu'] = $value; // make it visible to admob_request() |
|||
} |
|||
} |
|||
} |
|||
|
|||
?> |
|||
|
|||
<!-- |
|||
<fb:like></fb:like> |
|||
|
|||
<div id="fb-root"></div> |
|||
<script> |
|||
window.fbAsyncInit = function() { |
|||
FB.init({appId: '179731092083198', status: true, cookie: true, |
|||
xfbml: true}); |
|||
}; |
|||
(function() { |
|||
var e = document.createElement('script'); |
|||
e.type = 'text/javascript'; |
|||
e.src = document.location.protocol + |
|||
'//connect.facebook.net/en_US/all.js'; |
|||
e.async = true; |
|||
document.getElementById('fb-root').appendChild(e); |
|||
}()); |
|||
</script> |
|||
|
|||
--> |
|||
|
|||
|
|||
|
|||
<!-- |
|||
<div id="desc"> |
|||
You are at the main screen of the Mumbai Bus Route Finder. <br> |
|||
To find a bus from Point A (eg. Worli Naka) to Point B (Churgate |
|||
Station), select the Find a Bus option. <br> |
|||
To see a particular route (e.g. 2 L), select the Show a Route option.<br> |
|||
<br> |
|||
Disclaimer: The route suggestions, timings, frequencies are accurate to |
|||
the best of our knowledge. MESN, Tech. Services and its employees or |
|||
agents bear no responsibility for any information that may not be |
|||
updated or accurate. <br> |
|||
By continuing past this page you implicitly absolve us of any |
|||
responsibility or damages caused by the use of this software.<br> |
|||
Your location is determined by the different way. On a computer, it may |
|||
be based on the location of your Internet Service provider.<br> |
|||
On a GPS equipped phone, the location is based on either the GPS or the |
|||
cell phone tower location.<br> |
|||
Please make sure that you verify your location based on your |
|||
surroundings and do not completely |
|||
rely on this software. |
|||
</div> |
|||
--> |
|||
<script type="text/javascript" charset="utf-8" src="phonegap.js"></script> |
|||
<script type="text/javascript" charset="utf-8"> |
|||
document.addEventListener("deviceready", function() { |
|||
// alert('initialized'); |
|||
}, true); |
|||
</script> |
|||
|
|||
|
|||
|
|||
|
|||
</body> |
|||
</html> |
|||
|
@ -0,0 +1,6 @@ |
|||
|
|||
$(document).bind("mobileinit", function(){ |
|||
$.mobile.loadingMessage = false; |
|||
}); |
|||
|
|||
|
@ -0,0 +1,119 @@ |
|||
|
|||
function getAreas() { |
|||
|
|||
var a = [ |
|||
["Aksa", 19.188430, 72.798030], |
|||
["Anand Nagar", 19.150210, 72.836230], |
|||
["Andheri E", 19.129670, 72.883570], |
|||
["Andheri W", 19.138230, 72.847330], |
|||
["Arthur Road", 18.994660, 72.831220], |
|||
["Asalpha Village", 19.103220, 72.892340], |
|||
["Babulnath", 18.960830, 72.808610], |
|||
["Backbay", 18.917820, 72.824600], |
|||
["Bandra E", 19.068570, 72.867870], |
|||
["Bandra Kurla Complex", 19.070600, 72.871250], |
|||
["Bandra W", 19.068140, 72.837950], |
|||
["Bhandup W", 19.159310, 72.937650], |
|||
["Bhendi Bazar", 18.961950, 72.834160], |
|||
["Borivali E", 19.441600, 72.870170], |
|||
["Borivali W", 19.244570, 72.856130], |
|||
["Byculla E", 18.985590, 72.835270], |
|||
["Byculla W", 18.980750, 72.831960], |
|||
["Chandivli", 19.112770, 72.888460], |
|||
["Charkop", 19.219950, 72.833970], |
|||
["Charni Road E", 18.954330, 72.823340], |
|||
["Chembur", 19.053970, 72.911950], |
|||
["Chembur E", 19.054270, 72.891820], |
|||
["Chembur W", 19.069040, 72.904440], |
|||
["Chh Shivaji Terminus", 18.942000, 72.834680], |
|||
["Chunabhatti", 19.050830, 72.874540], |
|||
["Churchgate", 18.938610, 72.826690], |
|||
["Colaba", 18.924170, 72.831880], |
|||
["Dadar E", 19.019730, 72.848920], |
|||
["Dadar W", 19.022240, 72.844010], |
|||
["Dahisar E", 19.244250, 72.869830], |
|||
["Delisle Road", 18.991570, 72.831760], |
|||
["Deonar", 19.045620, 72.925230], |
|||
["Dhobi Talao", 18.946080, 72.831700], |
|||
["Dindoshi", 19.177000, 72.865100], |
|||
["Dockyard Road", 18.971520, 72.846550], |
|||
["Elphiston Road", 19.011590, 72.832430], |
|||
["Fort", 18.944340, 72.839720], |
|||
["Ghatkopar E", 19.078000, 72.915950], |
|||
["Ghatkopar W", 19.088760, 72.906810], |
|||
["Ghodbunder", 19.209840, 72.974490], |
|||
["Girgaon", 18.950200, 72.825340], |
|||
["Goregaon E", 19.178270, 72.884220], |
|||
["Goregaon W", 19.177470, 72.848340], |
|||
["Grant Road E", 18.965310, 72.819860], |
|||
["Grant Road W", 18.961830, 72.814380], |
|||
["Haji Ali", 18.982220, 72.814610], |
|||
["J V P D", 19.123250, 72.831240], |
|||
["Jogeshwari E", 19.146230, 72.870700], |
|||
["Jogeshwari W", 19.146850, 72.846580], |
|||
["Juhu", 19.125390, 72.836870], |
|||
["Kala Chowky", 18.988370, 72.843470], |
|||
["Kalina", 19.080670, 72.869230], |
|||
["Kandivali E", 19.214410, 72.878910], |
|||
["Kandivali W", 19.221670, 72.853070], |
|||
["Kanjurmarg W", 19.130810, 72.926570], |
|||
["Khar E", 19.067840, 72.846410], |
|||
["Khar W", 19.075020, 72.837160], |
|||
["Kings Circle", 19.032590, 72.858560], |
|||
["Kurla E", 19.074930, 72.879130], |
|||
["Kurla W", 19.093590, 72.883100], |
|||
["Lalbaug", 18.992740, 72.836420], |
|||
["Lower Parel", 18.998480, 72.831210], |
|||
["Madh", 19.196750, 72.816110], |
|||
["Mahalaxmi", 18.983280, 72.824200], |
|||
["Mahalaxmi W", 18.983390, 72.824520], |
|||
["Mahatma Phule Market", 18.945710, 72.834040], |
|||
["Mahim", 19.046180, 72.845570], |
|||
["Mahim W", 19.042960, 72.847810], |
|||
["Malad E", 19.194950, 72.869710], |
|||
["Malad W", 19.200990, 72.848780], |
|||
["Malvani", 19.196310, 72.821540], |
|||
["Mankhurd", 19.051730, 72.937660], |
|||
["Mankhurd S", 19.046180, 72.933750], |
|||
["Mantralaya", 18.931170, 72.830350], |
|||
["Marine Drive", 18.955960, 72.823740], |
|||
["Marine Lines", 18.941610, 72.826880], |
|||
["Marol", 19.123880, 72.886930], |
|||
["Marve", 19.196080, 72.799800], |
|||
["Matunga", 19.030610, 72.857840], |
|||
["Matunga W", 19.029980, 72.847030], |
|||
["Mazgaon", 18.969060, 72.847360], |
|||
["Mulund E", 19.173360, 72.964670], |
|||
["Mulund W", 19.175650, 72.951860], |
|||
["Mumbai Central E", 18.977480, 72.824030], |
|||
["Nagpada", 18.970510, 72.834940], |
|||
["Nana Chowk", 18.961310, 72.813110], |
|||
["Napean Sea Road", 18.976250, 72.808440], |
|||
["Opera House", 18.960200, 72.819670], |
|||
["Oshiwara", 19.150960, 72.845150], |
|||
["Parel", 19.012260, 72.844250], |
|||
["Pedder Rd", 18.973330, 72.808890], |
|||
["Powai", 19.128440, 72.918490], |
|||
["Prabhadevi", 19.022940, 72.835490], |
|||
["Reay Road E", 18.975350, 72.844310], |
|||
["Sahar", 19.103880, 72.874530], |
|||
["Saki Naka", 19.105680, 72.885920], |
|||
["Santacruz E", 19.087190, 72.858380], |
|||
["Santacruz W", 19.091830, 72.838590], |
|||
["Satrasta", 18.983860, 72.831960], |
|||
["Sewree", 19.992180, 72.853710], |
|||
["Shivaji Park", 19.028760, 72.840880], |
|||
["Sion E", 19.052570, 72.879220], |
|||
["Tardeo", 18.973070, 72.819820], |
|||
["Thane w", 19.195890, 72.964170], |
|||
["Upper Worli", 19.006180, 72.829630], |
|||
["Versova", 19.139260, 72.814090], |
|||
["Vidyavihar W", 19.085400, 72.893320], |
|||
["Vileparle E", 19.107680, 72.859240], |
|||
["Vileparle W", 19.113210, 72.840230], |
|||
["Walkeshwar", 18.955260, 72.806870], |
|||
["Warden Rd", 18.972200, 72.804950], |
|||
["Worli", 19.016680, 72.824030] |
|||
]; |
|||
return a; |
|||
} |
@ -0,0 +1,77 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
|
|||
<head> |
|||
<title>BestBus Mumbai - Show Stops</title> |
|||
|
|||
<meta name="viewport" content="user-scalable=no, width=device-width" > |
|||
<!-- |
|||
<link rel="stylesheet" type="text/css" href="css/mobile.css" media="only screen and (max-width: 480px)" > |
|||
<link rel="stylesheet" type="text/css" href="css/desktop.css" media="screen and (min-width: 481px)" > |
|||
--> |
|||
|
|||
<link rel="stylesheet" type="text/css" href="./css/common.css"> |
|||
<link rel="stylesheet" type="text/css" href="./lib/jquery/jquery.mobile.min.css"> |
|||
|
|||
<script type="text/javascript" src="./lib/jquery/jquery.min.js"></script> |
|||
<script type="text/javascript" src="init.js"></script> |
|||
|
|||
<script type="text/javascript" src="./lib/jquery/jquery.mobile.min.js"></script> |
|||
|
|||
<script type="text/javascript" src="libfns.js"></script> |
|||
<script type="text/javascript" src="cf.js"></script> |
|||
<script type="text/javascript"> |
|||
busno = gup('b'); |
|||
if(busno === "") |
|||
busno = getCookie('cBusNo'); |
|||
if(busno === "") { |
|||
alert('No Journey selected yet. Select one from the Find Bus tab or the Routes tab'); |
|||
window.location.href = "index.html"; |
|||
} |
|||
busno = busno.replace(/ /g, "").toLowerCase(); |
|||
jsfile = decodeURI("%3Cscript src='busroutes\/bcjs" + busno.substr(0,1) |
|||
+ ".js' type='text/javascript'%3E%3C/script%3E"); |
|||
|
|||
bfile = '<script> function getb() { return getb' + busno + '();}<\/script>'; |
|||
document.write(jsfile); |
|||
document.write(bfile); |
|||
</script> |
|||
</head> |
|||
<!-- <body onLoad='initjourney()> --> |
|||
<body> |
|||
|
|||
<div data-role="page" data-theme="a"> |
|||
<div data-role="header" data-theme="a"> |
|||
<div data-role="navbar"> |
|||
<!-- <div id="navigation"> --> |
|||
<ul> |
|||
<li><a href="index.html" rel="external">Find</a></li> |
|||
<li><a href="busesfound.html" rel="external">Routes</a></li> |
|||
<!-- <li><a href="busroute.html" rel="external">Routes</a></li> --> |
|||
<li><a href="journey.html" rel="external" class="ui-btn-active">Journey</a></li> |
|||
</ul> |
|||
</div><!-- /navbar --> |
|||
</div> <!-- /header --> |
|||
<div data-role="content" data-theme="b"> |
|||
<div style="align:center;" class='hilite' id="routeTitle"></div> |
|||
<div id="dispRoute"></div> |
|||
<div id="location"></div> |
|||
<div id="pastB4"></div> |
|||
<div class="hilite"> |
|||
<div id="nearStop">No location fix as yet</div> |
|||
<div id="locAccuracy" style="font-size: 14px;"></div> |
|||
</div> |
|||
<div id="routeStops"></div> |
|||
<!-- <div id="remainingJourney" style="font-size: 16px;"></div> |
|||
<div id="journey"></div> --> |
|||
<div style='width:98%;line-height:8px;' data-role="collapsible" data-theme="a"> |
|||
<h5><span id="font-size:14px;">Recent Journeys</h5> |
|||
<div id="recentJourneys" class="tbl_color"></div> |
|||
</div> <!-- /collapsible --> |
|||
|
|||
</div> <!-- /content --> |
|||
</div> <!-- /page --> |
|||
|
|||
</body> |
|||
<script type="text/javascript" src="journey.js"></script> |
|||
</html> |
@ -0,0 +1,528 @@ |
|||
// Shows a bus route with the stops
|
|||
// Parameters: b - busno (eg. 301 or 2 L), s - start stopno (eg. 2 or 0 for start),
|
|||
// d - dest stopno (e.g. 25 or 0 for last stop)
|
|||
|
|||
/* global $, document, gup */ |
|||
|
|||
var dBugLvl = 3; |
|||
var stopBusLines = ''; |
|||
var called_times = 0; |
|||
|
|||
var STOPNO = 0; |
|||
var SEARCHSTR = 1; |
|||
var NXTDIST = 2; |
|||
var NXTTIME = 3; |
|||
var LAT = 4; |
|||
var LON = 5; |
|||
var MAXROUTEDIST = 50; |
|||
var MAXSTOPDIST = 2; |
|||
var MAXRECENTJOURNEYS = 7; |
|||
var geoPos; |
|||
var gStartStop = {}; |
|||
var gDestStop = {}; |
|||
var gStartStopNo; |
|||
var gStartSearchStr; |
|||
var gDestStopNo; |
|||
var gDestSearchStr; |
|||
var total_dist = 0; |
|||
var total_time = 0; |
|||
|
|||
var firstStop = 0; |
|||
var lastStop = 0; |
|||
var arBusStops = []; |
|||
var colStart = ''; |
|||
var colEnd = '<br>'; |
|||
|
|||
var dispSize; |
|||
var wdth; |
|||
var busNo, firstStop, lastStop; |
|||
var addJourney = true; |
|||
var trackJourney = true; |
|||
// var bDir = 'u';
|
|||
var sDir = 'u'; |
|||
|
|||
$(document).ready(function () { |
|||
|
|||
var dispSize, wdth, s, d, startStop, destStop; |
|||
dispSize = getWinDim(); |
|||
wdth = dispSize.wd * 0.98; |
|||
if (dispSize.wd > 240) { // Screen too small to display columns
|
|||
colStart = '<td>'; |
|||
colEnd = '</td>'; |
|||
} |
|||
busNo = gup('b'); // get URL params
|
|||
s = gup('s'); |
|||
d = gup('d'); |
|||
sDir = gup('dir'); |
|||
|
|||
if (s === "" && d === "") { |
|||
busNo = getCookie('cBusNo'); |
|||
s = getCookie('cStartStopNo'); |
|||
d = getCookie('cDestStopNo'); |
|||
} |
|||
if(busNo === "") { |
|||
alert('No Journey selected yet. Select one from the Find Bus tab or the Routes tab'); |
|||
window.location.href = "index.html"; |
|||
return; |
|||
} |
|||
|
|||
startStop = parseInt(s, 10); |
|||
destStop = parseInt(d, 10); |
|||
if(startStop > 0 && destStop > 0) { |
|||
if(startStop > destStop) |
|||
sDir = 'd'; |
|||
else |
|||
sDir = 'u'; |
|||
} |
|||
if(startStop === 0 && destStop === 0) |
|||
trackJourney = false; // User is just browsing a route
|
|||
|
|||
// dBug('', 'b=' + busNo + ' s = ' + s + ', d = ' + d, 5);
|
|||
// showBBCookies();
|
|||
|
|||
startStop = startStop > 0 ? startStop : 1; |
|||
if (startStop === "" && destStop === "") { |
|||
document.write('Cannot find a valid start or destination'); |
|||
return false; |
|||
} |
|||
gStartStop.stopno = startStop; |
|||
gStartStop.searchstr = ''; |
|||
gDestStop.stopno = destStop; |
|||
gDestStop.searchstr = ''; |
|||
firstStop = startStop > 0 ? startStop : 0; |
|||
lastStop = destStop > 0 ? destStop : 0; |
|||
|
|||
dBug('ready: ', 'busno= ' + busNo + ', s ' + startStop + ', d=' + destStop, 5); |
|||
document.getElementById("routeTitle").innerHTML = "Bus no.: " + busNo; |
|||
// readRouteStopFile(busNo, startStop, destStop);
|
|||
arBusStops = getb(); |
|||
dBug('arBusStops: ', arBusStops.length, 5); |
|||
|
|||
// <tr><th>Stop no.</th><th>[Area] Stop name </th><th>Next Stop<br>Dist. (Time)</th></tr>';
|
|||
|
|||
var ht = showRouteStops(arBusStops, 0, startStop, destStop); |
|||
|
|||
gStartStopNo = startStop; |
|||
gDestStopNo = destStop; |
|||
if(addJourney) { |
|||
addRecentJourney({'busNo':busNo, 'firstStop':firstStop, 'firstStopName':gStartStop.searchstr, |
|||
'lastStop':lastStop, 'lastStopName':gDestStop.searchstr}); |
|||
addJourney = false; |
|||
} |
|||
|
|||
getLocation(); |
|||
|
|||
// document.getElementById("journey").innerHTML = "Total distance: " + distFormat(total_dist, MAXROUTEDIST) + " (" + total_time + " mins)";
|
|||
document.getElementById("routeStops").innerHTML = ht; |
|||
return; |
|||
}); |
|||
|
|||
function initmodule() { |
|||
var x; |
|||
a = getb(); |
|||
for (x=0;x<a.length;x++) |
|||
document.write( '<br>' + a[x][0] + ", " + a[x][1] + ", " + a[x][2]); |
|||
|
|||
} |
|||
|
|||
// Show route stops in table
|
|||
function showRouteStops(stops, hlstop, sS, dS) { |
|||
var sStop, dStop; |
|||
sStop = parseInt(sS); |
|||
dStop = parseInt(dS); |
|||
|
|||
var dir = 1; |
|||
|
|||
if(sDir === 'd') |
|||
dir = -1; |
|||
/* |
|||
if(sStop > dStop && dStop) { |
|||
bDir = 'd'; |
|||
dir = -1; |
|||
} |
|||
*/ |
|||
if (sStop) |
|||
sStop -=1; |
|||
if(dStop) |
|||
dStop -=1; |
|||
|
|||
if((dStop == 0 || dStop == -1) && dir != -1) { |
|||
dStop = stops.length - 1; |
|||
lastStop = dStop; |
|||
} |
|||
stopsHtml = ""; |
|||
if(hlstop > 0) |
|||
hlStyle = 'style="background-color:cyan; color:red;"'; |
|||
else |
|||
hlStyle = ''; |
|||
var x = sStop; |
|||
total_dist = 0; total_time = 0; |
|||
if(sStop > dStop) { |
|||
firstStop = dStop + 1; |
|||
lastStop = sStop + 1; |
|||
} else { |
|||
firstStop = sStop + 1; |
|||
lastStop = dStop + 1; |
|||
} |
|||
|
|||
while(true) { // for(var x=0; x < stops.length; x++) {
|
|||
|
|||
if(stops[x] != "") { |
|||
ar = stops[x]; |
|||
if(x == hlstop && hlstop != 0) |
|||
stopsHtml = stopsHtml + '<tr ' + hlStyle + ' >'; |
|||
else |
|||
stopsHtml = stopsHtml + '<tr>'; |
|||
|
|||
if(x+1 == gStartStop.stopno) |
|||
gStartStop.searchstr = ar[SEARCHSTR]; |
|||
if(x == dStop) |
|||
gDestStop.searchstr = ar[SEARCHSTR]; |
|||
|
|||
mins = ""; |
|||
// stopsHtml = stopsHtml + colStart + ar[STOPNO] + colEnd;
|
|||
stopsHtml = stopsHtml + colStart + ar[SEARCHSTR] + colEnd; |
|||
met = typeof(ar[NXTDIST]) != "undefined" ? distFormat(parseInt(ar[NXTDIST]), MAXSTOPDIST) : ""; |
|||
var missingLoc = true; |
|||
if(typeof(ar[NXTTIME]) != "undefined" && ar[NXTDIST] < 2000) { |
|||
missingLoc = false; |
|||
mins = " (" + ar[NXTTIME] + " mins)"; |
|||
} |
|||
stopsHtml = stopsHtml + colStart + met + colEnd; |
|||
stopsHtml = stopsHtml + colStart + mins + " "; |
|||
stopsHtml = stopsHtml + "</td></tr>"; |
|||
if(missingLoc) { // if no info, take average distance as 500 m and average time as 3 mins
|
|||
total_dist += 500; |
|||
total_time += 3; |
|||
} else { |
|||
total_dist += typeof(ar[NXTDIST]) != "undefined" ? parseInt(ar[NXTDIST]) : 0; |
|||
total_time += typeof(ar[NXTTIME]) != "undefined" ? parseInt(ar[NXTTIME]) : 0; |
|||
} |
|||
} |
|||
x += dir; |
|||
if(x < 0 || x > stops.length) |
|||
break; |
|||
if(dir < 0 && x < dStop) |
|||
break; |
|||
if(dir > 0 && x > dStop) |
|||
break; |
|||
|
|||
} |
|||
if(gDestStop.stopno == 0) { |
|||
gDestStop.stopno = x-2; |
|||
gDestStop.searchstr = ar[SEARCHSTR]; |
|||
} |
|||
var hdrHtml = '<table class="tbl_color" style="width: ' + wdth + 'px;">' |
|||
hdrHtml = hdrHtml + '<tr><th>[Area] Stop name </th><th>Dist. to Next Stop</th><th>Time to Next Stop</th></tr>'; |
|||
|
|||
stopsHtml = hdrHtml + stopsHtml + "</table>"; |
|||
|
|||
|
|||
|
|||
return stopsHtml; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
/* |
|||
// Read the route from server and write to file
|
|||
function openBusRouteFile(busNo) { |
|||
var xmlhttp; |
|||
xmlhttp=new XMLHttpRequest(); |
|||
xmlhttp.open("POST","init/busstoplist.php",false); |
|||
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); |
|||
xmlhttp.send("busno=" + busNo + "&s=0&d=0"); |
|||
return xmlhttp.responseText.split("\n"); |
|||
} |
|||
*/ |
|||
|
|||
// Shows the current location and hilites the stop in the stop list
|
|||
function showLocation(pos) { |
|||
dBug('showLocation: ', 'lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude, 5); |
|||
// send location to server to identify bus route
|
|||
called_times++; |
|||
var curStopNo = 0; |
|||
|
|||
// var bDir = 'd';
|
|||
var idxnearstop = -1; |
|||
if(arBusStops.length == 0 || pos == undefined) { |
|||
document.getElementById("nearStop").innerHTML = 'N/A';; |
|||
return; |
|||
} |
|||
|
|||
nearStop = ""; |
|||
locHtml = ""; |
|||
prvdi = -1; |
|||
for(var x=0; x < arBusStops.length; x++) { |
|||
if(arBusStops[x] != "") { |
|||
ar = arBusStops[x]; |
|||
if(x == 1) { |
|||
firstStop = ar[STOPNO]; |
|||
firstStopName = ar[SEARCHSTR]; |
|||
document.getElementById("nearStop").innerHTML = 'First Stop: ' + firstStop; |
|||
} |
|||
} |
|||
// dBug('Stop: ' + x + ' of ' + stopLines.length + ' - ' + ar[SEARCHSTR]);
|
|||
} |
|||
// document.getElementById("myLoc").innerHTML = 'First Stop: ' + firstStop;
|
|||
|
|||
lastStop = lastStop > 0 ? lastStop :ar[STOPNO]; |
|||
// document.getElementById("myLoc").innerHTML = 'Last Stop: ' + lastStop;
|
|||
// dBug('first: ' + firstStop + ', last: ' + lastStop);
|
|||
if(pos == undefined) |
|||
return; |
|||
|
|||
diTillNearStop = 0; |
|||
timeTillNearStop = 0; |
|||
|
|||
// Get nearest stop
|
|||
for(var x=0; x < arBusStops.length; x++) { |
|||
// document.getElementById("myLoc").innerHTML = '';
|
|||
if(arBusStops[x] == "") |
|||
continue; |
|||
ar = arBusStops[x]; |
|||
// document.getElementById("myLoc").innerHTML = 'Stop: ' + x + ' of '
|
|||
// + arBusStops.length + ' - ' + ar[SEARCHSTR];
|
|||
|
|||
dLat = ar[LAT]; |
|||
dLon = ar[LON]; |
|||
if(dLat !== 0 && dLon !== 0) { |
|||
diNearStop = Math.abs(distanceLatLon(dLat, dLon, pos.coords.latitude, pos.coords.longitude)); |
|||
if(diNearStop < prvdi || prvdi == -1) { |
|||
prvdi = diNearStop; |
|||
idxnearstop = x; |
|||
arNearStop = ar; |
|||
} |
|||
diTillNearStop += typeof(ar[NXTDIST]) != "undefined" ? parseInt(ar[NXTDIST]) : 0; |
|||
timeTillNearStop += typeof(ar[NXTTIME]) != "undefined" ? parseInt(ar[NXTTIME]) : 0; |
|||
} |
|||
} |
|||
diNearStop = prvdi; |
|||
var maxStop = firstStop; |
|||
var minStop = lastStop; |
|||
|
|||
var locationFound = true; |
|||
var nowMs = new Date(); |
|||
var fixTime = new Date(pos.timestamp); |
|||
var fixAge = nowMs - fixTime; |
|||
// dBug('fixms' + pos.timestamp + ', time:' + fixTime + ' Now:' + nowMs);
|
|||
if ( typeof showLocation.called_times == 'undefined' ) { |
|||
// first time, define static vars lat and lon
|
|||
called_times = 0; |
|||
dLat = 0; |
|||
dLon = 0; |
|||
// return;
|
|||
} |
|||
|
|||
if(firstStop < lastStop) { |
|||
// bDir = 'u';
|
|||
minStop = firstStop; |
|||
maxStop = lastStop; |
|||
} |
|||
var pastDestination = false; |
|||
var beforeStart = false; |
|||
var beforeMsg = "<span id='before'>Journey hasn't started</span>"; |
|||
var pastMsg = "<span id='past'>You have passed your destination, please get down when bus stops</span>"; |
|||
var atMsg = "<span id='at' Reached. Please alight when bus stops<div></span>"; |
|||
var myLoc = ''; |
|||
|
|||
var htmLocInfo = "<tr>" + colStart + |
|||
"(Location Accuracy - " + distFormat(pos.coords.accuracy, MAXROUTEDIST) + ", at " + |
|||
timeStr(fixTime) + ") " + colEnd + "</tr>"; |
|||
|
|||
if(prvdi != -1) { |
|||
// document.getElementById("myLoc").innerHTML = 'Found location ....';
|
|||
try { |
|||
// document.getElementById("myLoc").innerHTML = 'Processing location ....';
|
|||
if(sDir == 'u') { |
|||
if(arNearStop[STOPNO] < minStop || diNearStop > 2000) // proably far away 2 km from any stop
|
|||
beforeStart = true; |
|||
if(arNearStop[STOPNO] > maxStop) |
|||
pastDestination = true; |
|||
} else { |
|||
if(arNearStop[STOPNO] < minStop) |
|||
pastDestination = true; |
|||
if(arNearStop[STOPNO] > maxStop) |
|||
beforeStart = true; |
|||
} |
|||
sDiNearStop = diNearStop != undefined ? distFormat(diNearStop, 5) : "N/A"; |
|||
var elm = "Nearest stop: " + arNearStop[STOPNO] + ". " + arNearStop[SEARCHSTR] + " (" + |
|||
sDiNearStop + ") " ; |
|||
|
|||
myLoc = myLoc + elm; |
|||
myLoc = '<table style="width: ' + wdth + 'px;">' + myLoc + htmLocInfo + '</table>'; |
|||
|
|||
myLoc = myLoc + colEnd + '</tr>'; |
|||
|
|||
var stops_remaining = Math.abs(lastStop - arNearStop[STOPNO]); |
|||
var bc = ''; // background color for remaining stops\
|
|||
var almostthere = ''; |
|||
if(stops_remaining <= 2) { |
|||
bc = "id='neardest'" |
|||
if(stops_remaining < 1 ) { |
|||
almostthere = '<span id="at">Please Alight</span>'; |
|||
myLoc = atMsg + myLoc; |
|||
} else { |
|||
almostthere = '<span>(Almost There)</span>'; |
|||
} |
|||
} |
|||
|
|||
var d = Math.abs(total_dist - diTillNearStop); |
|||
remJourney = ''; |
|||
rem_time = Math.abs(total_time - timeTillNearStop); |
|||
nearStop = myLoc; |
|||
if(pastDestination) { |
|||
myLoc = pastMsg + myLoc; |
|||
pastB4 = pastMsg; |
|||
} |
|||
else if(beforeStart) { |
|||
myLoc = beforeMsg + myLoc; |
|||
pastB4 = beforeMsg; |
|||
} |
|||
else |
|||
if(stops_remaining > 0) { |
|||
myLoc = myLoc + '<tr ' + bc + '>' + colStart + 'Remaining ' + almostthere + |
|||
colEnd + colStart + stops_remaining + ' Stops, ' |
|||
+ distFormat(d, MAXROUTEDIST) + ", " + rem_time |
|||
+ ' min. ' + colEnd + '</tr>'; |
|||
remJourney = 'Remaining ' + almostthere + stops_remaining + ' Stops, ' |
|||
+ distFormat(d, MAXROUTEDIST) + ", " + rem_time |
|||
+ ' min. '; |
|||
} |
|||
} catch(e) { |
|||
$("location").innerHTML = myLoc; |
|||
return; |
|||
} |
|||
myLoc = '<div id="loc"><table style="width: ' + wdth + 'px;">' + myLoc + '</table></div>' |
|||
// document.getElementById("myLoc").innerHTML = myLoc;
|
|||
} |
|||
|
|||
ht = showRouteStops(arBusStops, idxnearstop, gStartStopNo, gDestStopNo); |
|||
document.getElementById("routeStops").innerHTML = ht; |
|||
|
|||
locAccur = "(Location Accuracy - " + distFormat(pos.coords.accuracy, MAXROUTEDIST) + |
|||
", at " + timeStr(fixTime) + ") " + colEnd + "</tr>"; |
|||
nearStop = elm; |
|||
// $('#pastB4').html(pastB4);
|
|||
$('#nearStop').html(nearStop); |
|||
$('#locAccuracy').html(locAccur); |
|||
// $('#remainingJourney').html(remJourney);
|
|||
|
|||
/* + |
|||
distFormat(pos.coords.accuracy, MAXROUTEDIST) + ", at " + |
|||
timeStr(fixTime) + ") " + colEnd + "</tr>"; |
|||
*/ |
|||
// send location to server to identify bus route
|
|||
if(trackJourney) |
|||
sendBusInfo(busNo, pos, arNearStop, sDir); |
|||
|
|||
return; |
|||
|
|||
// dBug('In showLocation');
|
|||
// showPosDetails(pos);
|
|||
} // eofn: showLocation(pos)
|
|||
|
|||
|
|||
function setGeoPos(pos) { |
|||
geoPos = pos; |
|||
} |
|||
|
|||
function include(arquivo){ |
|||
//By Fabr�cio Magri e Micox
|
|||
//http://elmicox.blogspot.com/2006/12/include-em-javascript.html
|
|||
var novo = document.createElement('script'); |
|||
novo.setAttribute('type', 'text/javascript'); |
|||
novo.setAttribute('src', arquivo); |
|||
document.getElementsByTagName('head')[0].appendChild(novo); |
|||
//apos a linha acima o navegador inicia o carregamento do arquivo
|
|||
//portanto aguarde um pouco at� o navegador baix�-lo. :)
|
|||
} |
|||
|
|||
function showStopsMap() { |
|||
loc = "http://mesn.org/bestbus/showstopsmap.php?busno=" + busNo + "&s=" + firstStop |
|||
+ "&d=" + lastStop; |
|||
window.location.href = loc; |
|||
return true; |
|||
|
|||
} |
|||
|
|||
// Send the location and bus info to server
|
|||
function sendBusInfo(busno, pos, arNearBus, dir) |
|||
{ |
|||
var xmlhttp=new XMLHttpRequest(); |
|||
|
|||
xmlhttp.onreadystatechange=function() |
|||
{ |
|||
if (xmlhttp.readyState==4 && xmlhttp.status==200) |
|||
{ |
|||
// document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
|
|||
} |
|||
} |
|||
url = "http://mesn.org/bestbus/svr/sendbusinfo.php?b=" + busno + "&lat=" |
|||
+ pos.coords.latitude + "&lon=" + pos.coords.longitude |
|||
+ '&a=' + pos.coords.accuracy + '&s=' + arNearBus[STOPNO] |
|||
+ '&sn=' + arNearBus[SEARCHSTR] + '&d=' + dir; |
|||
xmlhttp.open("GET", url, true); |
|||
xmlhttp.send(); |
|||
} |
|||
|
|||
|
|||
// Add to the list of recent journeys
|
|||
function addRecentJourney(oJourney) { |
|||
var rs = localStorage['recentJourneys']; |
|||
|
|||
var recentJourneysPrv; |
|||
if(rs != null) |
|||
recentJourneysPrv = JSON.parse(rs); |
|||
recentJourneys = null; |
|||
var recentJourneys = new Array; |
|||
recentJourneys[0] = oJourney; |
|||
if(recentJourneysPrv !== null && recentJourneysPrv != undefined) { |
|||
for(var i = 0; i < recentJourneysPrv.length; i++) { |
|||
if(recentJourneysPrv[i] === undefined || recentJourneysPrv[i] === null) |
|||
continue; |
|||
// check if already in array, else add
|
|||
alreadyThere = false; |
|||
for(var j = 0; j < recentJourneys.length; j++) { |
|||
if(recentJourneys[j].busNo === recentJourneysPrv[i].busNo && |
|||
recentJourneys[j].firstStop === recentJourneysPrv[i].firstStop && |
|||
recentJourneys[j].lastStop === recentJourneysPrv[i].lastStop) { |
|||
alreadyThere = true; |
|||
break; |
|||
} |
|||
} |
|||
if(!alreadyThere) |
|||
recentJourneys[recentJourneys.length] = recentJourneysPrv[i]; |
|||
} |
|||
} |
|||
localStorage['recentJourneys']=JSON.stringify(recentJourneys); |
|||
showRecentJourneys(); |
|||
} |
|||
|
|||
function showRecentJourneys() { |
|||
if(localStorage['recentJourneys'] === undefined || localStorage['recentJourneys'] === null) |
|||
return; |
|||
var recentJourneys = JSON.parse(localStorage['recentJourneys']); |
|||
recentJourneysStr = '<table id="recentJourneys" class="tbl_color">'; |
|||
if(recentJourneys === null) |
|||
return; |
|||
if(recentJourneys.length) { |
|||
// recentJourneysStr = '<table id="recentJourneys">';
|
|||
for(var i = 0; i < recentJourneys.length && i < MAXRECENTJOURNEYS; i++) { |
|||
if(recentJourneys[i] !== null && recentJourneys[i] !== undefined |
|||
&& typeof(recentJourneys[i]) === 'object') { |
|||
elm = '<tr><td><a rel="external" href="journey.html?b=' + recentJourneys[i].busNo + |
|||
'&s=' + recentJourneys[i].firstStop + '&d=' + recentJourneys[i].lastStop + '">' + |
|||
recentJourneys[i].busNo + '</td><td>' + recentJourneys[i].firstStopName + '</td><td>' + |
|||
recentJourneys[i].lastStopName + "</a></td></tr>"; |
|||
recentJourneysStr = recentJourneysStr + elm; |
|||
} |
|||
} |
|||
recentJourneysStr = recentJourneysStr + '</table>'; |
|||
document.getElementById("recentJourneys").innerHTML = recentJourneysStr; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
@ -0,0 +1,11 @@ |
|||
/* |
|||
* jQuery UI CSS Framework @VERSION |
|||
* |
|||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) |
|||
* Dual licensed under the MIT or GPL Version 2 licenses. |
|||
* http://jquery.org/license |
|||
* |
|||
* http://docs.jquery.com/UI/Theming |
|||
*/ |
|||
@import "jquery.ui.base.css"; |
|||
@import "jquery.ui.theme.css"; |
@ -0,0 +1,27 @@ |
|||
.ui-collapsible-heading a span.ui-btn { |
|||
position: absolute; |
|||
right: 6px; |
|||
top: 50%; |
|||
margin: -12px 0 0 0; |
|||
width: 20px; |
|||
height: 20px; |
|||
padding: 1px 0px 1px 2px; |
|||
text-indent: -9999px; |
|||
} |
|||
|
|||
.ui-btn-inner { |
|||
display: none; |
|||
overflow: hidden; |
|||
padding: 0.6em 25px; |
|||
position: relative; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.ui-btn { |
|||
cursor: pointer; |
|||
display: none; |
|||
margin: 0.5em 5px; |
|||
padding: 0; |
|||
position: relative; |
|||
text-align: center; |
|||
} |
@ -0,0 +1,93 @@ |
|||
// Copyright 2007, Google Inc.
|
|||
//
|
|||
// Redistribution and use in source and binary forms, with or without
|
|||
// modification, are permitted provided that the following conditions are met:
|
|||
//
|
|||
// 1. Redistributions of source code must retain the above copyright notice,
|
|||
// this list of conditions and the following disclaimer.
|
|||
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
|||
// this list of conditions and the following disclaimer in the documentation
|
|||
// and/or other materials provided with the distribution.
|
|||
// 3. Neither the name of Google Inc. nor the names of its contributors may be
|
|||
// used to endorse or promote products derived from this software without
|
|||
// specific prior written permission.
|
|||
//
|
|||
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|||
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|||
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|||
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|||
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|||
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|||
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
//
|
|||
// Sets up google.gears.*, which is *the only* supported way to access Gears.
|
|||
//
|
|||
// Circumvent this file at your own risk!
|
|||
//
|
|||
// In the future, Gears may automatically define google.gears.* without this
|
|||
// file. Gears may use these objects to transparently fix bugs and compatibility
|
|||
// issues. Applications that use the code below will continue to work seamlessly
|
|||
// when that happens.
|
|||
|
|||
(function() { |
|||
// We are already defined. Hooray!
|
|||
if (window.google && google.gears) { |
|||
return; |
|||
} |
|||
|
|||
var factory = null; |
|||
|
|||
// Firefox
|
|||
if (typeof GearsFactory != 'undefined') { |
|||
factory = new GearsFactory(); |
|||
} else { |
|||
// IE
|
|||
try { |
|||
factory = new ActiveXObject('Gears.Factory'); |
|||
// privateSetGlobalObject is only required and supported on IE Mobile on
|
|||
// WinCE.
|
|||
if (factory.getBuildInfo().indexOf('ie_mobile') != -1) { |
|||
factory.privateSetGlobalObject(this); |
|||
} |
|||
} catch (e) { |
|||
// Safari
|
|||
if ((typeof navigator.mimeTypes != 'undefined') |
|||
&& navigator.mimeTypes["application/x-googlegears"]) { |
|||
factory = document.createElement("object"); |
|||
factory.style.display = "none"; |
|||
factory.width = 0; |
|||
factory.height = 0; |
|||
factory.type = "application/x-googlegears"; |
|||
document.documentElement.appendChild(factory); |
|||
if(factory && (typeof factory.create == 'undefined')) { |
|||
// If NP_Initialize() returns an error, factory will still be created.
|
|||
// We need to make sure this case doesn't cause Gears to appear to
|
|||
// have been initialized.
|
|||
factory = null; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// *Do not* define any objects if Gears is not installed. This mimics the
|
|||
// behavior of Gears defining the objects in the future.
|
|||
if (!factory) { |
|||
return; |
|||
} |
|||
|
|||
// Now set up the objects, being careful not to overwrite anything.
|
|||
//
|
|||
// Note: In Internet Explorer for Windows Mobile, you can't add properties to
|
|||
// the window object. However, global objects are automatically added as
|
|||
// properties of the window object in all browsers.
|
|||
if (!window.google) { |
|||
google = {}; |
|||
} |
|||
|
|||
if (!google.gears) { |
|||
google.gears = {factory: factory}; |
|||
} |
|||
})(); |
After Width: | Height: | Size: 503 B |
After Width: | Height: | Size: 503 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 260 B |
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 180 B |
After Width: | Height: | Size: 178 B |
After Width: | Height: | Size: 178 B |
After Width: | Height: | Size: 104 B |
After Width: | Height: | Size: 125 B |
After Width: | Height: | Size: 120 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 111 B |
After Width: | Height: | Size: 110 B |
After Width: | Height: | Size: 119 B |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 90 B |
After Width: | Height: | Size: 101 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |