var map,mapzoom,panel_html;var bounds,points,gmarkers,htmls,polylines=[];var lms={};var hmarker,zmarker,lmarker;var i=0,zl=15;var vehicle=null;var header,footer="";var mapControl="";var refresh_id,timer_id,fetch_count=0;var cl,cc,du,su=null;var baseIcon,hoverIcon,crossIcon;$(document).ready(function(){$("#assets").css("max-height",document.body.clientHeight-450);$(window).resize(function(){$("ul#assets").css("max-height",document.body.clientHeight-450)});$("#gpspolice").click(function(){var E=$(this).children("a").attr("href");window.open(E);return false});$("#gpspolice").append("<em></em>");$("#gpspolice").hover(function(){$(this).find("em").animate({opacity:"show",top:"-140"},"slow");var E="Our vehicle tracking technology powers hundreds of fleets across the United States and Canada. Click to visit our web site and learn more.";$(this).find("em").text(E)},function(){$(this).find("em").animate({opacity:"hide",top:"-200"},"fast")});$("#vehicles").click(function(){$(this).toggleClass("active");if($("#vehicles").hasClass("active")){$("#panel").animate({width:"196px"});$("#mapzoom").slideToggle()}else{$("#panel").animate({width:"132px"});$("#mapzoom").slideToggle()}$(this).next("ul").slideToggle()});if(GBrowserIsCompatible()){baseIcon=new GIcon();baseIcon.image="http://www.google.com/mapfiles/marker.png";baseIcon.iconSize=new GSize(20,34);baseIcon.iconAnchor=new GPoint(10,34);baseIcon.infoWindowAnchor=new GPoint(10,0);baseIcon.infoShadowAnchor=new GPoint(18,25);hoverIcon=new GIcon();hoverIcon.iconSize=new GSize(30,30);hoverIcon.iconAnchor=new GPoint(15,15);hoverIcon.infoWindowAnchor=new GPoint(15,15);hoverIcon.image="/res/img/tracking/hover.png";crossIcon=new GIcon();crossIcon.iconSize=new GSize(40,40);crossIcon.iconAnchor=new GPoint(20,20);crossIcon.infoWindowAnchor=new GPoint(20,20);crossIcon.image="/res/img/tracking/crosshairs.png";if(google.loader.ClientLocation){cl=google.loader.ClientLocation;cc=cl.address.country}else{cc=null}switch(cc){default:su="kph";du="km";break;case"USA":su="mph";du="miles";break}map=new GMap2(document.getElementById("map"));map.setCenter(new GLatLng(51,-114),4);map.addMapType(G_PHYSICAL_MAP);map.setMapType(G_PHYSICAL_MAP);mapzoom=new GMap2(document.getElementById("mapzoom"));mapzoom.setCenter(new GLatLng(51,-114),13);mapzoom.setMapType(G_HYBRID_MAP);mapzoom.addControl(new GSmallZoomControl());zmarker=new GMarker(new GLatLng(0,0),crossIcon);mapzoom.addOverlay(zmarker);var D={opacity:0.2,border:"5px solid grey"};var C={buttonHTML:'<img src="/res/img/tracking/zoom.gif" />',buttonZoomingHTML:'<img src="/res/img/tracking/zoomin.gif" />',buttonStartingStyle:{width:"67px",height:"18px"}};mapControl=new GHierarchicalMapTypeControl();mapControl.addRelationship(G_SATELLITE_MAP,G_HYBRID_MAP,"Labels",false);map.addControl(mapControl);map.addControl(new GLargeMapControl());var A=new GControlPosition(G_ANCHOR_BOTTOM_LEFT,new GSize(90,0));A.apply(document.getElementById("gpspolice"));map.getContainer().appendChild(document.getElementById("gpspolice"));var B=new GControlPosition(G_ANCHOR_TOP_RIGHT,new GSize(8,45));B.apply(document.getElementById("panel"));map.getContainer().appendChild(document.getElementById("panel"));hmarker=new GMarker(new GLatLng(0,0),hoverIcon);map.addOverlay(hmarker);vehicle=new GIcon();vehicle.image="/res/img/tracking/markers/m1/c1.png";vehicle.shadow=null;vehicle.iconSize=new GSize(30,30);vehicle.iconAnchor=new GPoint(15,15);vehicle.infoWindowAnchor=new GPoint(15,1);get_markers(p_rule);GEvent.addListener(map,"infowindowclose",function(){$("#assets li a").removeClass("selected");lmarker=null});$("#panel").fadeIn(1000,function(){$("#vehicles").click();$("#panel ul").slideUp(1000);$("#gpspolice").slideDown(1000)})}});function get_markers(A){$("#loading").html('<img src="/res/img/tracking/loading.gif" alt="Loading..." />');clearTimeout(refresh_id);GDownloadUrl("/tracking_fetch.php?r="+A+"&k="+p_key,processor);if(document.getElementById("ar").checked){refresh_id=setTimeout("get_markers(p_rule)",20000)}else{clearTimeout(refresh_id)}}function createMarker(P,E,D,H,A,K,G,M,B,L,I){if(D==""){if(H==""){var O=A}else{var O=H}}else{var O=D}var N=new GIcon(baseIcon);opts={icon:N,clickable:true,draggable:false,labelText:'<div class="ml'+sc[G]+'">'+O+"<br /><i>"+sl[G]+"</i></div>",labelOffset:new GSize(0,-30)};N.image=icon_selector(G,M,B);var F=new LabeledMarker(P,opts);GEvent.addListener(F,"mouseover",function(){zmarker.setLatLng(F.getLatLng());hmarker.setLatLng(F.getLatLng());mapzoom.setCenter(F.getLatLng())});GEvent.addListener(F,"click",function(){F.openInfoWindowHtml(I);zmarker.setLatLng(F.getLatLng());hmarker.setLatLng(F.getLatLng());mapzoom.setCenter(F.getLatLng());$("#assets li a").removeClass("selected");$("#assets li a#a"+E).addClass("selected");lmarker=E});var J=(D=="")?"":A;var C=(H==D)?"":H;panel_html+='<li><a id="a'+E+'" rel="'+E+'">'+L+'<b class="ml'+sc[G]+'">'+O+"</b> "+J+" "+K+" <i>"+C+"</i></a></li>";gmarkers[E]=F;points[E]=P;htmls[E]=I;return F}function event(B,A){return'<h4 class="m'+sc[B]+'">'+sl[B]+"<br /><i>"+A+"</i></h4>"}function myclick(A){gmarkers[A].openInfoWindowHtml(htmls[A]);zmarker.setLatLng(gmarkers[A].getLatLng());hmarker.setLatLng(gmarkers[A].getLatLng());mapzoom.setCenter(gmarkers[A].getLatLng());lmarker=A}processor=function(doc){if(doc.length<1){var msg="This Publish rule no longer exists.";$("#msg").text(msg);$("#msg").animate({opacity:0.7},2000).fadeIn("slow").animate({opacity:0.7},3000).fadeOut("fast")}else{var json=eval("("+doc+")");if(lmarker==null){var savelast=null}else{var savelast=lmarker}map.clearOverlays();i=0;bounds=new GLatLngBounds();hmarker=new GMarker(new GLatLng(0,0),hoverIcon);map.addOverlay(hmarker);points=[];gmarkers=[];htmls=[];panel_html="";polylines=[];var listed=json.header.listed;var company=json.header.company;var description=json.header.description;$("#owner").html("<b>"+company+"</b><br />"+description);if(json.data.landmarks==null||json.data.landmarks==""){lms={}}else{lms=json.data.landmarks;for(var l in lms){var lpoints=[];lpoints.push(new GLatLng((lms[l].lat1),(lms[l].lng1)));lpoints.push(new GLatLng((lms[l].lat1),(lms[l].lng2)));lpoints.push(new GLatLng((lms[l].lat2),(lms[l].lng2)));lpoints.push(new GLatLng((lms[l].lat2),(lms[l].lng1)));lpoints.push(new GLatLng((lms[l].lat1),(lms[l].lng1)));polylines[l]=new GPolyline(lpoints,"#"+lc[lms[l].clr],5,0.7)}}if(json.data.drivers==null||json.data.drivers==""){drivers={}}else{drivers=json.data.drivers}if(json.data.assets==null||json.data.assets==""){var msg="No vehicles currently meet the publish criteria. Please try again later.";$("#msg").text(msg);$("#msg").animate({opacity:0.7},2000).fadeIn("slow").animate({opacity:0.7},4000).fadeOut("fast")}else{var assets=json.data.assets;for(var j in assets){var ml=assets[j].detail.ml;var sn=assets[j].detail.sn;var ln=assets[j].detail.ln;for(var h in assets[j].history){var hid=h;var sta=parseFloat(assets[j].history[h].sta);var ts=assets[j].history[h].ts;var lat=assets[j].history[h].lat;var lng=assets[j].history[h].lng;var spd=assets[j].history[h].spd;var hea=assets[j].history[h].hea;var met=assets[j].history[h].met;var sec=assets[j].history[h].sec;var str=assets[j].history[h].str;var city=assets[j].history[h].city;var prov=assets[j].history[h].prov;var post=assets[j].history[h].post;var lsd=(assets[j].history[h].lsd!="undefined"&&assets[j].history[h].lsd.length>0)?'<p class="lsd">'+assets[j].history[h].lsd+"</p>":"";var dr=(assets[j].history[h].dr)?assets[j].history[h].dr:0;break}var dn=(dr==0)?"":drivers[dr];var when=posterity(ts);var point=new GLatLng(lat,lng);if(lat>5&&lng<-5){bounds.extend(point)}switch(sta){default:var extra="";break;case 3:case 5:case 16:var extra="<p><b>"+speed(spd)+"</b><br />"+heading(hea,spd)+"</p>";break}var asset="<b>"+sn+"</b> "+ln;if(dn.length>0){asset+="<br /><i>"+dn+"</i>"}var ll='<p style=""><i class="ll">'+assets[j].history[h].lat+"&deg;, "+assets[j].history[h].lng+"&deg;</i></p>";var lm=inside(lat,lng);var addr="<p>"+str+"<br />"+city+", "+prov+" <i>"+post+"</i></p>";var icon='<img class="marker" src="'+icon_selector(sta,spd,hea)+'" />';var html='<div class="iw"><h1>'+asset+"</h1>"+event(sta,when)+icon+lsd+extra+addr+lm[0]+ll+'<div style="clear:both;height:0;font-size:0;"></div></div>';var marker=createMarker(point,j,ml,dn,sn,ln,sta,spd,hea,lm[1],html);map.addOverlay(marker);i++}if(fetch_count==0||document.getElementById("az").checked){zl=map.getBoundsZoomLevel(bounds);if(zl>13){zl=13}map.setZoom(zl);var clat=(bounds.getNorthEast().lat()+bounds.getSouthWest().lat())/2;var clng=(bounds.getNorthEast().lng()+bounds.getSouthWest().lng())/2;map.setCenter(new GLatLng(clat,clng));mapzoom.setCenter(new GLatLng(clat,clng))}$("#assets").html("<div>"+panel_html+"</div>");$("#assets li a").hover(function(){var i=$(this).attr("rel");zmarker.setLatLng(gmarkers[i].getLatLng());hmarker.setLatLng(gmarkers[i].getLatLng());mapzoom.setCenter(gmarkers[i].getLatLng())},function(){});$("#assets li a").click(function(){myclick($(this).attr("rel"));$("#assets li a").removeClass("selected");$(this).addClass("selected")});fetch_count++;if(savelast){lmarker=savelast;GEvent.trigger(gmarkers[savelast],"click")}}}if(json.data.landmarks==null||json.data.landmarks==""){}else{for(var p in polylines){map.addOverlay(polylines[p])}}$("#loading").html("")};function auto_refresh(){if(document.getElementById("ar").checked){get_markers(p_rule)}else{clearTimeout(refresh_id)}}function icon_selector(B,E,G){var F="";var D=String(B);switch(D){case"2":case"4":case"7":case"10":case"15":case"30":case"31":case"33":case"34":case"35":F="/res/img/tracking/markers/m"+sc[D]+"/c1.png";break;case"32":F="/res/img/tracking/markers/m7/c1.png";break;default:if(E>0){var A=Math.round((G/360)*(m_compass.length-1));var C=m_compass[A];F="/res/img/tracking/markers/m"+sc[D]+"/c1"+C+".png"}else{F="/res/img/tracking/markers/m"+sc[D]+"/c1.png"}break}return F}var sl=new Object();sl["0"]=" ";sl["1"]="Connected";sl["2"]="Engine on";sl["3"]="Driving";sl["4"]="Engine off";sl["5"]="Speeding";sl["6"]="Normal speed resumed";sl["7"]="Excessive idling";sl["8"]="Driving resumed";sl["9"]="Possible towing";sl["10"]="Immobilizer on";sl["11"]="Immobilizer off";sl["12"]="Battery disconnected";sl["13"]="Battery reconnected";sl["14"]="Idling ended";sl["15"]="Tow ended";sl["16"]="Go";sl["17"]="Stop";sl["20"]="Instant locate";sl["30"]="Reset";sl["31"]="Awake";sl["32"]="Check-in";sl["33"]="Powering-up";sl["34"]="Wiring Problem Detected";sl["35"]="Possible Antenna Tampering";sl["36"]="Power-saving Mode";sl["40"]="Aux input 1 off";sl["41"]="Aux input 1 on";sl["50"]="Aux input 2 off";sl["51"]="Aux input 2 on";sl["60"]="Aux input 3 off";sl["61"]="Aux input 3 on";sl["70"]="Seatbelt fastened";sl["71"]="Seatbelt unfastened";sl["72"]="Seatbelt violation ended";var sc=new Object();sc["0"]="0";sc["1"]="1";sc["2"]="2";sc["3"]="3";sc["4"]="4";sc["5"]="5";sc["6"]="6";sc["7"]="1";sc["8"]="1";sc["9"]="5";sc["10"]="7";sc["11"]="7";sc["12"]="5";sc["13"]="6";sc["14"]="1";sc["15"]="6";sc["16"]="16";sc["17"]="17";sc["20"]="7";sc["30"]="1";sc["31"]="1";sc["32"]="10";sc["33"]="1";sc["34"]="1";sc["35"]="1";sc["36"]="1";sc["40"]="9";sc["41"]="8";sc["50"]="9";sc["51"]="8";sc["60"]="9";sc["61"]="8";sc["70"]="6";sc["71"]="5";sc["72"]="6";weekdays=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");weekdays_abbr=new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");months_abbr=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");var compass=new Array("N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW","N");var r_compass=new Array("n","nne","ne","ene","e","ese","se","sse","s","ssw","sw","wsw","w","wnw","nw","nnw","n");var m_compass=new Array("n","ne","e","se","s","sw","w","nw","n");var lc=new Array();lc[0]="001932";lc[1]="FF283C";lc[2]="FF942E";lc[3]="F1D02D";lc[4]="8BD22A";lc[5]="0C8BD3";lc[6]="DF3B9A";lc[7]="828282";function nice_date_from_uts(C){var D=new Date();D.setTime(parseInt(C));var B=(D.getMonth())+1;var E=(D.getDate());var F=(D.getFullYear());var A=F+" "+B+" "+E;return A}function posterity(M){var P=new Date();var Q=parseInt(M)*1000;P.setTime(Q);var R=new Date();var J=Math.round(R.getTime());var N=(J-(3600*24*1000));var S=nice_date_from_uts(J);var F=nice_date_from_uts(N);var K=nice_date_from_uts(Q);var G=P.getHours();var L=P.getMinutes();if(G<12){var I="am"}else{var I="pm"}if(G==0){G=12}if(G>12){G=G-12}L=L+"";if(L.length==1){L="0"+L}var O=P.getDay();var C=P.getDate();var H=months_abbr[P.getMonth()];var E=P.getFullYear();var D=weekdays_abbr[O];if(K==S){var A=Math.round((R.getTime()-P)/1000);if(A<0){var B="0 seconds ago"}else{if(A<90){var B=A;B+=" second"+pluralize(B)+" ago"}else{if(A<4500){var B=Math.round(A/60);B+=" minute"+pluralize(B)+" ago"}else{if(A<172800){var B=Math.round(A/3600);B+=" hour"+pluralize(B)+" ago"}else{var B=Math.round(A/86400);B+=" day"+pluralize(B)+" ago"}}}}return B+" @ "+G+":"+L+" "+I}else{if(K==F){return"Yesterday @ "+G+":"+L+" "+I}else{return D+", "+H+" "+C+", "+E+" @ "+G+":"+L+" "+I}}}function pluralize(A){return(A==0)?"":"s "}function distance(A){switch(cc){default:var B=A/1000;return B.toFixed(1);break;case"USA":var B=A/1609.344;return B.toFixed(1);break}}function speed(A){switch(cc){default:var B=A*3.6;return B.toFixed(0)+" "+su;break;case"USA":var B=A*2.23693629;return B.toFixed(0)+" "+su;break}}function heading(C,B){if(B>0){var A=Math.round((C/360)*(compass.length-1));return"Heading <b>"+compass[A]+"</b>"}else{return""}}function inside(E,D){var C="";var F="";var B=[];for(var A in lms){if(lms[A].lat1<E&&lms[A].lat2>E&&lms[A].lng1>D&&lms[A].lng2<D){C+='<p class="lm'+lms[A].clr+'">'+lms[A].lbl+"</p>";F+='<div class="lm'+lms[A].clr+" lmb"+lms[A].clr+'">&nbsp;</div>'}}if(C.length>0){B[0]='<div class="lm">'+C+'<div style="clear:both;height:0;font-size:0;">&nbsp;</div></div>';B[1]='<div class="lm_sb">'+F+"</div>"}else{B[0]="";B[1]=""}return B}function LabeledMarker(B,A){this.latlng_=B;this.opts_=A;this.labelText_=A.labelText||"";this.labelClass_=A.labelClass||"LabeledMarker_markerLabel";this.labelOffset_=A.labelOffset||new GSize(0,0);this.clickable_=A.clickable||true;this.title_=A.title||"";this.labelVisibility_=true;if(A.draggable){A.draggable=false}GMarker.apply(this,arguments)}LabeledMarker.prototype=new GMarker(new GLatLng(0,0));LabeledMarker.prototype.initialize=function(D){GMarker.prototype.initialize.apply(this,arguments);this.map_=D;this.div_=document.createElement("div");this.div_.className=this.labelClass_;this.div_.innerHTML=this.labelText_;this.div_.style.position="absolute";this.div_.style.cursor="pointer";this.div_.title=this.title_;D.getPane(G_MAP_MARKER_PANE).appendChild(this.div_);if(this.clickable_){function A(G,F){return function(){GEvent.trigger(G,F)}}var E=["click","dblclick","mousedown","mouseup","mouseover","mouseout"];for(var C=0;C<E.length;C++){var B=E[C];GEvent.addDomListener(this.div_,B,A(this,B))}}};LabeledMarker.prototype.redraw=function(A){GMarker.prototype.redraw.apply(this,arguments);this.redrawLabel_()};LabeledMarker.prototype.redrawLabel_=function(){var A=this.map_.fromLatLngToDivPixel(this.latlng_);var B=GOverlay.getZIndex(this.latlng_.lat());this.div_.style.left=(A.x+this.labelOffset_.width)+"px";this.div_.style.top=(A.y+this.labelOffset_.height)+"px";this.div_.style.zIndex=B-10};LabeledMarker.prototype.remove=function(){GEvent.clearInstanceListeners(this.div_);if(this.div_.outerHTML){this.div_.outerHTML=""}if(this.div_.parentNode){this.div_.parentNode.removeChild(this.div_)}this.div_=null;GMarker.prototype.remove.apply(this,arguments)};LabeledMarker.prototype.copy=function(){return new LabeledMarker(this.latlng_,this.opts_)};LabeledMarker.prototype.show=function(){GMarker.prototype.show.apply(this,arguments);if(this.labelVisibility_){this.showLabel()}else{this.hideLabel()}};LabeledMarker.prototype.hide=function(){GMarker.prototype.hide.apply(this,arguments);this.hideLabel()};LabeledMarker.prototype.setLatLng=function(A){this.latlng_=A;GMarker.prototype.setLatLng.apply(this,arguments);this.redrawLabel_()};LabeledMarker.prototype.setLabelVisibility=function(A){this.labelVisibility_=A;if(!this.isHidden()){if(this.labelVisibility_){this.showLabel()}else{this.hideLabel()}}};LabeledMarker.prototype.getLabelVisibility=function(){return this.labelVisibility_};LabeledMarker.prototype.hideLabel=function(){this.div_.style.visibility="hidden"};LabeledMarker.prototype.showLabel=function(){this.div_.style.visibility="visible"};