var tr=new Object();tr.autoShowFirstResult=false;var COLORSTACK=["ff0000","00ff00","0000ff","ffa500","ff00ff"];var currentColorIdx=0;var trackSearchDT=null;var trackSearchDS=null;var viewedTracks=new Object();var contextMenu=null;var currentTrack=null;function getTrackSearchQueryString(){var B="?from="+parseTimestamp("tracksearchfrom")+"&to="+parseTimestamp("tracksearchto")+"&vehicle="+wo.getEl("vehicle").value;if(document.getElementById("userid")!=null){B+="&userid="+document.getElementById("userid").value}var A=document.getElementById("usemarkers");B+="&usemarkers="+A.checked;if(A.checked){B+="&fromlat="+fromMarker.getLatLng().lat()+"&fromlng="+fromMarker.getLatLng().lng();B+="&tolat="+toMarker.getLatLng().lat()+"&tolng="+toMarker.getLatLng().lng()}return B}function onPathRowClicked(B){trackSearchDT.onEventSelectRow(B);var A=showTrack(trackSearchDT.getRecord(trackSearchDT.getSelectedRows()[0]));trackSearchDT.getSelectedTrEls()[0].style.color="#"+A;trackSearchDT.unselectAllRows()}function durationFormatter(D,C,E,F){var A=Math.floor(F/3600);var B=Math.round((F%3600)/60);D.innerHTML=A+":"+(B<10?("0"+B):B)}function vehicleFormatter(C,B,D,E){var A=parseInt(E);C.innerHTML="<img src='res/icon"+A+".png'>"}function floatComparator(B,A,E){var D=parseFloat(B);var C=parseFloat(A);if(D<C){return E?1:-1}else{return E?-1:1}}function lengthSorter(B,A,C){return floatComparator(B.getData("Length"),A.getData("Length"),C)}function durationSorter(B,A,C){return floatComparator(B.getData("Duration"),A.getData("Duration"),C)}function speedAvgSorter(B,A,C){return floatComparator(B.getData("SpeedAvg"),A.getData("SpeedAvg"),C)}function startTimeSorter(B,A,C){return floatComparator(B.getData("StartTime"),A.getData("StartTime"),C)}function initTrackTable(){var B=[{key:"UserId",sortable:true,resizeable:false,label:"Owner",width:50},{key:"Vehicle",sortable:true,resizeable:false,label:"",formatter:vehicleFormatter,width:18},{key:"StartTime",sortable:true,sortOptions:{sortFunction:startTimeSorter},resizeable:false,label:"Start Time",formatter:preciseTimeStampFormatter,width:75},{key:"Length",sortable:true,sortOptions:{sortFunction:lengthSorter},resizeable:false,label:"Length<br>km",width:40},{key:"Duration",sortable:true,sortOptions:{sortFunction:durationSorter},resizeable:false,label:"Durat.<br>hours",formatter:durationFormatter,width:40},{key:"SpeedAvg",sortable:true,sortOptions:{sortFunction:speedAvgSorter},resizeable:false,label:"Spd.<br>km/h",width:40}];trackSearchDS=new YAHOO.util.DataSource("servicepages/searchTracks.jsp");trackSearchDS.responseType=YAHOO.util.DataSource.TYPE_XML;trackSearchDS.connXhrMode="queueRequests";trackSearchDS.responseSchema={resultNode:"Result",fields:["Id","UserId","StartTime","Length","Distance","Duration","SpeedMax","SpeedAvg","SpeedEff","Vehicle","AltitudeMin","AltitudeMax","AltitudeAvg","AltitudeDiffSum","IsPublic"]};YAHOO.widget.DataTable.MSG_EMPTY='This place is for the search results.<br><br>No tracks found yet - <a href="" onclick="basicSearch(1, wo.getEl(\'basicsearchsample\'));return false">Try the Basic search links</a> at the top!';var A={initialLoad:false,selectionMode:"single"};trackSearchDT=new YAHOO.widget.DataTable("tracks",B,trackSearchDS,A);trackSearchDT.subscribe("rowClickEvent",onPathRowClicked);trackSearchDT.subscribe("rowMouseoverEvent",trackSearchDT.onEventHighlightRow);trackSearchDT.subscribe("rowMouseoutEvent",trackSearchDT.onEventUnhighlightRow);trackSearchDT.subscribe("columnSortEvent",updateRowColors);contextMenu=new YAHOO.widget.Menu("trackdetailsmenu");contextMenu.addItem("Attach Picasa Image");contextMenu.addItem("Hide");contextMenu.addItem("Make PUBLIC");contextMenu.addItem("Make PRIVATE");contextMenu.addItem("Delete");contextMenu.addItem("Embed");contextMenu.addItem("Show in Google Maps");contextMenu.addItem("Save as KML");contextMenu.addItem("Attach image from URL");contextMenu.addItem("Mark");contextMenu.subscribe("beforeShow",trackSearchDTContextMenuBeforeShow,trackSearchDT);contextMenu.clickEvent.subscribe(trackSearchDTContextMenuClick,trackSearchDT);contextMenu.render(document.body);$("#trackactions").click(tr.openActionsMenu)}function trackSearchDTContextMenuClick(C,B,E){var A=B[1];if(A&&currentTrack!=null){var D=currentTrack.routeRecord;var F=null;switch(A.index){case 0:et.startAttachPicasaImage();break;case 1:hideTrack(D);break;case 2:setTrackPublicity(D,true,E);break;case 3:setTrackPublicity(D,false,E);break;case 4:deleteTrack(D);break;case 5:tr.openEmbedder();break;case 6:showTrackInGMaps(D);break;case 7:saveTrackKml(D);break;case 8:et.startAttachUrlImage();break;case 9:tr.markCurrent();break}}}function trackSearchDTContextMenuBeforeShow(C,B,F){if(currentTrack!=null){var E=currentTrack.routeRecord;var D=(E.getData("IsPublic")=="true");var A=(E.getData("UserId")==userId);contextMenu.getItem(2).cfg.setProperty("disabled",D||!A);contextMenu.getItem(3).cfg.setProperty("disabled",!D||!A);contextMenu.getItem(4).cfg.setProperty("disabled",!A)}contextMenu.render()}function trackMarkersShowedCB(){if(!trackMarkersVisible){hideTrackMarkers()}wo.endProgress()}function loadTrackMarkers(){var A="servicepages/showTrack.jsp?id="+currentTrack.id+"&maxTrackLinePoints=0";currentTrack.trackEGeoXml=new EGeoXml("currentTrack.trackEGeoXml",map,A,{iwwidth:300,nozoom:true});GEvent.addListener(currentTrack.trackEGeoXml,"parsed",trackMarkersShowedCB);currentTrack.trackEGeoXml.parse()}function trackLineShowedCB(){if(currentTrack.trackXml.loadedCorrectly()){viewedTracks[currentTrack.id]=currentTrack;currentTrack.trackXml.gotoDefaultViewport(map);updateRowColors()}else{alert("Sorry, we are unable to display this track!")}loadTrackMarkers()}function showTrack(D){var E=D.getData("Id");currentTrack=getVisibleTrack(E);if(currentTrack!=null){if(parseInt(D.getData("StartTime"))+parseInt(D.getData("Duration"))+60000>(new Date().getTime())/1000){hideTrack(D)}else{currentTrack.trackXml.gotoDefaultViewport(map);_showTrackDetails(currentTrack);return currentTrack.color}}wo.startProgress();wo.addNotification("Showing track - please wait");var B=COLORSTACK[(currentColorIdx++)%COLORSTACK.length];var C="9f"+B.substr(4,2)+B.substr(2,2)+B.substr(0,2);var A=baseUrl+"/servicepages/showTrack.jsp?id="+E+"&color="+C+"&authtoken="+authToken+"&showMedia=false";currentTrack=new Object();currentTrack.trackXml=new GGeoXml(A.replace(/https:/,"http:"),trackLineShowedCB);currentTrack.routeRecord=D;currentTrack.id=E;currentTrack.color=B;map.addOverlay(currentTrack.trackXml);_showTrackDetails(currentTrack);return B}function updateRowColors(){var A=trackSearchDT.getRecordSet().getRecords();if(A==null||A.length==0){return }for(rowIdx in A){var C=A[rowIdx].getData("Id");var B=trackSearchDT.getTrEl(parseInt(rowIdx));B.style.color="";$.each(viewedTracks,function(){if(C==this.routeRecord.getData("Id")){B.style.color="#"+this.color}})}}function _removeTrackFromDT(A){var C=A.getData("Id");var B=trackSearchDT.getRecordSet().getRecords();for(idx in B){if(C==B[idx].getData("Id")){trackSearchDT.deleteRow(parseInt(idx))}}}function hideTrack(B){var C=B.getData("Id");var A=viewedTracks[C];if(!A){return }map.removeOverlay(A.trackXml);if(currentTrack&&currentTrack.id==C){currentTrack=null;displayElmnt("trackdetails","none")}delete viewedTracks[C];updateRowColors()}function hideAllTracks(){hideTrackMarkers();$.each(viewedTracks,function(){if(this.trackXml){map.removeOverlay(this.trackXml)}});viewedTracks=new Array();currentTrack=null;displayElmnt("trackdetails","none")}function hideTrackMarkers(){$.each(viewedTracks,function(){$.each(this.trackEGeoXml.gmarkers,function(){map.removeOverlay(this)})})}function showTrackMarkers(){for(idx in viewedTracks){for(markeridx in viewedTracks[idx].trackEGeoXml.gmarkers){map.addOverlay(viewedTracks[idx].trackEGeoXml.gmarkers[markeridx])}}}function reloadTrackMarkers(){wo.startProgress();if(currentTrack==null){return }for(markeridx in currentTrack.trackEGeoXml.gmarkers){map.removeOverlay(currentTrack.trackEGeoXml.gmarkers[markeridx])}currentTrack.trackEGeoXml=null;loadTrackMarkers()}function getVisibleTrack(B){var A=viewedTracks[B];return A||null}function searchCallback(E,D,C){trackSearchDT.deleteRows(0,200);trackSearchDT.onDataReturnInitializeTable(E,D,C);var B=trackSearchDT.getRecordSet().getLength();var A=B?("Found "+B+" tracks."):("No tracks found");wo.addNotification(A);wo.getEl("trackstatus").innerHTML=A;if(B==1||tr.autoShowFirstResult){tr.autoShowFirstResult=false;showTrack(trackSearchDT.getRecord(0))}updateRowColors();wo.endProgress()}function startSearch(C){var B=getTrackSearchQueryString();var A={success:searchCallback,failure:searchCallback,scope:trackSearchDT};wo.startProgress();trackSearchDS.sendRequest(B,A);wo.clearEmph("[name=basicsearchlink]");YAHOO.widget.DataTable.MSG_EMPTY="No matches found.";return false}function basicSearch(C,E,A){wo.clearEmph("[name=basicsearchlink]");wo.addEmph(E);var F="?searchtype="+C;if(C==3){var D=map.getBounds();F+="&northeastlat="+D.getNorthEast().lat()+"&northeastlon="+D.getNorthEast().lng()+"&southwestlat="+D.getSouthWest().lat()+"&southwestlon="+D.getSouthWest().lng()}if(A){F+=A}var B={success:searchCallback,failure:searchCallback,scope:trackSearchDT};wo.startProgress();trackSearchDS.sendRequest(F,B);YAHOO.widget.DataTable.MSG_EMPTY="No matches found.";return false}function _showTrackStatistics(B){var A=B.routeRecord;var C=function(F){var D=wo.getEl("ts_"+F);if(D!=null){var E=A.getData(F);if(F=="Duration"){durationFormatter(D,A,0,E)}else{if(F=="StartTime"){D.innerHTML=prettyDate(E,true)}else{if(F=="Vehicle"){vehicleFormatter(D,A,0,E)}else{D.innerHTML=E}}}}};for(i in trackSearchDS.responseSchema.fields){C(trackSearchDS.responseSchema.fields[i])}wo.getEl("ts_Color").style.background="#"+B.color}function canEditTrack(A){return A.routeRecord.getData("UserId")==userId}function _showTrackDetails(A){_showTrackStatistics(A);displayElmnt("trackdetails","block");displayElmnt("trackeditworkspace",canEditTrack(A)?"inline":"none");et.cancelAttachImage();if(!A.details){$.getScript("api/track/"+A.routeRecord.getData("Id")+"/details?format=json&cb=tr.trackDetailsCB")}else{tr.trackDetailsCB(A.details)}showTrackCharts(A)}tr.trackDetailsCB=function(A){currentTrack.details=A;showTrackTags(currentTrack);showTrackDescription(currentTrack)};tr.trackTagCallback=function(A){currentTrack.details.tags=A;showTrackTags(currentTrack)};function manageTrackTags(B,C){var A="";if(B){A="&addtag="+encodeURIComponent(B)}if(C){A="&deletetag="+encodeURIComponent(C)}$.getScript("servicepages/manageTrackTags.jsp?trackid="+currentTrack.routeRecord.getData("Id")+A);$("#tracktags").html("Updating tags...");return false}function showTrackTags(A){var B=A.details.tags;var C="";$.each(B,function(){C+=' <a href="" onclick="return manageTrackTags(false, \''+unescapeHTML(this.tag)+"')\">"+this.tag+"</a>"});if(C==""){C="No tags yet"}$("#tracktags").html(C)}function addTagHandler(){var B=$("#newtag");var A=B.val();A=A.toLowerCase();if($.trim(A)==""){alert("<h3>Invalid tag.</h3><br>A tag is a word or more you use to describe the track. Please enter a word to add as a tag!");return }manageTrackTags(A);B.val("").focus()}tr.markCurrent=function(){wo.addNotification('Marking track with tag "marked"');$("#newtag").val("marked");addTagHandler()};function showTrackDescription(A){var B=A.details.description;if(!B){B="No description yet."}$("#trackdescription").html(B);editInPlace("trackdescription",canEditTrack(A)?descriptionEdited:null)}function descriptionEdited(C,B,A){if(A){$.post("api/track/"+currentTrack.id+"/description",{description:B},function(){wo.addNotification("Description saved.")})}}function saveTrackKml(A){if(!A){A=currentTrack.routeRecord}window.open(baseUrl+"/servicepages/showTrack.jsp?id="+A.getData("Id")+"&showMarkers=true");wo.addNotification("KML exporting started.")}function showTrackInGMaps(A){if(A.getData("IsPublic")!="true"){alert("Only Public tracks are visible in Google Maps. Please make the track public first!");return }window.open("http://maps.google.com?q="+encodeURIComponent((baseUrl.replace(/https:/,"http:"))+"/servicepages/showTrack.jsp?id="+A.getData("Id")+"&showMarkers=true&tz="+getProperty("tzguess")))}function setTrackPublicity(I,G,B){var H=function(J){wo.addNotification("This track is "+(G?"Public":"Private")+" now.");wo.endProgress()};var F=function(J){alert("Sorry, we are unable to change the status of that track.");wo.endProgress()};var A=baseUrl+"/servicepages/setTrackPrivilege.jsp?fleetid=-1&trackid="+I.getData("Id")+"&privilege=read&value="+G;var C={success:H,failure:F};var D=YAHOO.util.Connect.asyncRequest("GET",A,C);wo.startProgress();var E=new cloneObject(I);E.setData("IsPublic",""+G);B.getRecordSet().updateRecord(I,E);_showTrackDetails(currentTrack)}function deleteTrack(A){if(!confirm("Track delete: this action is permanent and not reversible.\nAre you Sure you want to delete this track?")){return }var F=A.getData("Id");var C=function(){wo.addNotification("Track deleted.");_removeTrackFromDT(A);hideAllTracks();wo.endProgress()};var E=function(){wo.endProgress();alert("Sorry, we are unable to delete that track.")};var B="servicepages/manageTracks.jsp?action=delete&trackid="+F;var D=YAHOO.util.Connect.asyncRequest("GET",B,{success:C,failure:E});wo.startProgress()}var trackMarkersVisible=false;function setTrackMarkers(A){trackMarkersVisible=A;mapMenu.getSubmenus()[2].getItemGroups()[1][1].cfg.setProperty("checked",trackMarkersVisible);trackMarkersVisible?showTrackMarkers():hideTrackMarkers();saveProperty("trackmarkers",trackMarkersVisible);wo.addNotification("Track media is "+(trackMarkersVisible?"visible":"hidden")+" now.")}tr.trackPointsLoaded=function(A){wo.endProgress();currentTrack.points=A;if(!!currentTrack.contAfterPointsLoaded){currentTrack.contAfterPointsLoaded()}currentTrack.contAfterPointsLoaded=null};function loadTrackPoints(B,A){if(B.points){A();return }currentTrack.contAfterPointsLoaded=A;$.getScript("api/track/"+B.routeRecord.getData("Id")+"/points?format=json&max=200&cb=tr.trackPointsLoaded");wo.startProgress()}function showTrackCharts(A){if(!A){A=currentTrack}loadTrackPoints(A,function(){var B=processTrackPoints(A.points,$("#trackchartsmooth").val());var C=[];$("#trackchartboxes").find("input:checked").each(function(){var D=$(this).attr("name");if(D&&B[D]){C.push(B[D])}});if(C.length>0){$.plot($("#trackchart"),C,{xaxis:{mode:"time"}})}})}function processTrackPoints(J,G){if(!G){G=1}var E=1-G;var D=new Array();var I=new Array();var H=new Array();if(J.length){var F=J[0].altitude;var C=J[0].speed;var B=J[0].trackLength;for(idx in J){var A=J[idx];F=G*A.altitude+E*F;D.push([A.timeStamp,F]);C=G*A.speed+E*C;I.push([A.timeStamp,C*3.6]);B=G*A.trackLength+E*B;H.push([A.timeStamp,B])}}return{alt:{label:"Elevation",data:D,color:1},speed:{label:"Speed (km/h)",data:I,color:2},length:{label:"Length",data:H,color:3}}}tr.startTagSearch=function(){if(typeof ($.fn.tagCloud)=="undefined"){$.getScript("js/jquery.tagcloud.js",tr.startTagSearch);return }tr.tagSearch=new tr.tagSearchWindow()};tr.tagSearchWindow=function(){this.privateClicked=function(D){saveProperty("tagsearch.mytagsonly",B.contents().filter("[name=privateonly]").attr("checked"));C()};var A=$("<div/>").width("500px");var B=$("<div/>").append(A).append("<br/>").append($('<input type="checkbox" name="privateonly" '+(getProperty("tagsearch.mytagsonly")=="true"?"checked":"")+"/>").click(this.privateClicked)).append(" Display my tags only");function C(){wo.addNotification("Loading tag cloud");A.slideUp();$.getScript("servicepages/manageTrackTags.jsp?callback=tr.tagSearch.updateTags&mytagsonly="+getProperty("tagsearch.mytagsonly"))}this.updateTags=function(D){A.tagCloud(D,{click:function(E){$(document).trigger("close.facebox");basicSearch(5,wo.getEl("basicsearchtag"),"&tag="+unescapeHTML(E))}}).slideDown()};C();$.facebox(B)};tr.openEmbedder=function(){wo.openDialog("embedHelper.jsp?trackid="+currentTrack.id)};tr.openTrackLink=function(){if(currentTrack.routeRecord.getData("IsPublic")!="true"){alert("Only public tracks are accessible through external links.<br>Please make the track public first!");return }var A=baseUrl+"/api/track/"+currentTrack.id;alert("You can link this track using the following url:<br><br>"+A)};tr.openActionsMenu=function(A){if(!!A){A.preventDefault();contextMenu.moveTo(A.pageX+10,A.pageY)}contextMenu.show()};