if(Garmin==undefined)var Garmin={};Garmin.DeviceDisplay=function(){};Garmin.DeviceDisplay=Class.create(); Garmin.DeviceDisplay.prototype={initialize:function(a,b){this.mainElement=typeof a=="string"?$(a):a;if(this.mainElement!=null){this.options=null;this.setOptions(b);this.garminRemoteTransfer=this.garminController=null;this.activities=[];this.devices=[];this.currentActivity=this.activityMatcher=this.uploadData=this.numQueuedActivities=this.activityQueue=this.activityDirectory=this.waypoints=this.tracks=this.factory=null;this.finishedFirstActivity=false;this.xhr=null;this.advancedUploadMode=true;this.error= null;this._generateElements();this.options.unlockOnPageLoad&&this.getController(true);!this.error&&this.options.autoFindDevices&&this.startFindDevices()}},_generateElements:function(){if(BrowserSupport.isBrowserSupported()||!this.options.hideIfBrowserNotSupported){this._generateStatusElement();this.options.showFindDevicesElement&&this._generateFindDevicesElement();this.options.showReadDataElement&&this._generateReadDataElement();this.options.showActivityDirectoryElement&&this._generateActivityDirectoryElement(); this.options.showWriteDataElement&&this._generateWriteDataElement();this.options.showSendDataElement&&this._generateSendDataElement();this.options.showAboutElement&&this._generateAboutElement();this.resetUI()}},resetUI:function(){this.hideProgressBar();var a=this.garminController?this.getController().numDevices==0:true;if(this.options.showFindDevicesElement){if(this.findDevicesButton)this.findDevicesButton.disabled=false;if(this.deviceSelectInput)this.deviceSelectInput.disabled=a;if(this.cancelFindDevicesButton)this.cancelFindDevicesButton.disabled= true;if(this.readDataTypesSelect)this.readDataTypesSelect.disabled=false}if(this.options.showReadDataElement){if(this.readDataButton)this.readDataButton.disabled=a;if(this.cancelReadDataButton)this.cancelReadDataButton.disabled=true;this.loadingContentElement&&this.loadingContentElement.hide()}if(this.options.showWriteDataElement){if(this.writeDataButton)this.writeDataButton.disabled=a;if(this.cancelWriteDataButton)this.cancelWriteDataButton.disabled=true}},_generateStatusElement:function(){this.statusElement= document.createElement("div");Element.extend(this.statusElement);this.statusElement.id=this.options.statusElementId;this.statusElement.addClassName(this.options.elementClassName);this.mainElement.appendChild(this.statusElement);this.statusText=document.createElement("div");Element.extend(this.statusText);this.statusText.id=this.options.statusTextId;this.statusElement.appendChild(this.statusText);this._generateProgressBars()},_generateProgressBars:function(){this.progressBar=document.createElement("div"); Element.extend(this.progressBar);this.progressBar.id=this.options.progressBarId;this.progressBar.className=this.options.progressBarClass;this.progressBarBack=document.createElement("div");Element.extend(this.progressBarBack);this.progressBarBack.id=this.options.progressBarBackId;this.progressBarBack.addClassName(this.options.progressBarBackClass);this.progressBarBack.innerHTML="<span/>";this.progressBar.appendChild(this.progressBarBack);this.progressBarDisplay=document.createElement("div");Element.extend(this.progressBarDisplay); this.progressBarDisplay.id=this.options.progressBarDisplayId;this.progressBarDisplay.addClassName(this.options.progressBarDisplayClass);this.progressBarDisplay.innerHTML="<span/>";this.progressBar.appendChild(this.progressBarDisplay);this.progressBar.hide();this.statusElement.appendChild(this.progressBar);this.progressBarText=document.createElement("div");Element.extend(this.progressBarText);this.progressBarText.id=this.options.progressBarTextId;this.progressBarText.className=this.options.progressBarTextClass; this.progressBar.appendChild(this.progressBarText);this.uploadProgressBar=document.createElement("div");Element.extend(this.uploadProgressBar);this.uploadProgressBar.id=this.options.uploadProgressBarId;this.uploadProgressBar.className=this.options.uploadProgressBarClass;this.uploadProgressBarBack=document.createElement("div");Element.extend(this.uploadProgressBarBack);this.uploadProgressBarBack.id=this.options.uploadProgressBarBackId;this.uploadProgressBarBack.addClassName(this.options.uploadProgressBarBackClass); this.uploadProgressBarBack.innerHTML="<span/>";this.uploadProgressBar.appendChild(this.uploadProgressBarBack);this.uploadProgressBarDisplay=document.createElement("div");Element.extend(this.uploadProgressBarDisplay);this.uploadProgressBarDisplay.id=this.options.uploadProgressBarDisplayId;this.uploadProgressBarDisplay.addClassName(this.options.uploadProgressBarDisplayClass);this.uploadProgressBarDisplay.innerHTML="<span/>";this.uploadProgressBar.appendChild(this.uploadProgressBarDisplay);this.uploadProgressBar.hide(); this.statusElement.appendChild(this.uploadProgressBar);this.uploadProgressBarText=document.createElement("div");Element.extend(this.uploadProgressBarText);this.uploadProgressBarText.id=this.options.uploadProgressBarTextId;this.uploadProgressBarText.className=this.options.uploadProgressBarTextClass;this.uploadProgressBar.appendChild(this.uploadProgressBarText);this.cancelUploadButton=new Element(this.options.useLinks?"div":"input",{id:this.options.cancelUploadButtonId,className:this.options.cancelUploadButtonClass}); if(this.options.useLinks)this.cancelUploadButton.update('<a href="#">'+this.options.cancelUploadButtonText+"</a>");else{this.cancelUploadButton.type="button";this.cancelUploadButton.value=this.options.cancelUploadButtonText}this.cancelUploadButton.onclick=function(){this.resetUI();this.hideProgressBar();this.garminRemoteTransfer.abortRequest();try{this.options.afterFinishSendData.call(this,this.xhr,this.currentActivity?$(this.currentActivity.replace(/Checkbox/,"Status")):null,this)}catch(a){this.handleException(a)}this.activityQueue= null;this.getController()._broadcaster.dispatch("onFinishUploads",{display:this})}.bind(this);this.uploadProgressBar.insert(this.cancelUploadButton)},_createElement:function(a,b,c,e){var d=document.createElement(c);Element.extend(d);if(c=="a"){d.href=location;d.innerHTML=b}else if(c=="button"){d.type=c;d.value=b}d.id=a;e.appendChild(d);return d},generateDeviceBrowserElement:function(){if(this.deviceBrowserElement!=null)throw new Error("Unable to generate device browser because an instance already exists."); this.deviceBrowserElement=new Element("div",{id:this.options.deviceBrowserElementId,className:this.options.deviceBrowserElementClass});this.deviceBrowserLabel=(new Element("div",{id:this.options.deviceBrowserLabelId,className:this.options.deviceBrowserLabelClass})).update(this.options.deviceBrowserLabel);this.deviceBrowserElement.insert(this.deviceBrowserLabel);this.deviceBrowserList=document.createElement("ul");Element.extend(this.deviceBrowserList);this.deviceBrowserList.id=this.options.deviceBrowserListId; this.deviceBrowserElement.appendChild(this.deviceBrowserList);this.deviceBrowserElement.hide();this.mainElement.appendChild(this.deviceBrowserElement);this._populateDeviceList(this.deviceBrowserList,this.options.afterSelectDevice?this.options.afterSelectDevice:function(){this.options.readDataTypes!=null&&this.readFromDevice(this.options.readDataTypes)});if(this.options.uploadSelectedActivities&&this.options.showBrowseComputer){this._generateBrowseComputerElement();var a,b;b=document.createElement("li"); Element.extend(b);b.className="unselected";a=document.createElement("a");Element.extend(a);a.href="#";a.innerHTML=this.options.browseComputerLabel;a.onclick=function(c){this._displayBrowseComputer(c)}.bind(this,this.deviceBrowserList);b.appendChild(a);this.deviceBrowserList.appendChild(b)}},_displayBrowseComputer:function(a){a.childNodes[this.devices.length].className="selected";this.getController()&&this.isUnlocked()&&this.getController().cancelReadFromDevice();if(this.devices!=null)for(var b=0;b< this.devices.length;b++)a.childNodes[b].className="unselected";this.activityDirectoryElement.hide();this.statusElement.hide();this.browseComputerElement.show()},_generateBrowseComputerElement:function(){this.browseComputerElement=document.createElement("div");Element.extend(this.browseComputerElement);this.browseComputerElement.id=this.options.browseComputerElementId;this.browseComputerElement.className=this.options.browseComputerElementClass;var a=document.createElement("div");a.id="manualUploadTitle"; a.innerHTML=this.options.browseComputerLabel;this.browseComputerElement.appendChild(a);a=document.createElement("iframe");Element.extend(a);a.id=a.name=this.options.browseComputerElementId+"Contents";a.src=this.options.browseComputerContentUrl;this.browseComputerElement.appendChild(a);this.browseComputerElement.hide();this.mainElement.appendChild(this.browseComputerElement);a.setAttribute("frameborder","0");a.setAttribute("allowtransparency","true")},_generateLoadingContent:function(a){if(this.loadingContentElement!= null)throw new Error("Unable to generate loading screen because an instance already exists.");this.loadingContentElement=document.createElement("div");Element.extend(this.loadingContentElement);this.loadingContentElement.className="shortStatus";this.loadingContentElement.innerHTML=this.evaluateTemplate(this.options.loadingContentText,{deviceName:this.getShortDeviceName(this.getCurrentDevice())});a.appendChild(this.loadingContentElement);this.showProgressBar()},_updateLoadingContent:function(a){if(this.loadingContentElement!= null){this.loadingContentElement.update(a);this.loadingContentElement.show()}},_generateFindDevicesElement:function(){this.findDevicesElement=document.createElement("div");Element.extend(this.findDevicesElement);this.findDevicesElement.id=this.options.findDevicesElementId;this.findDevicesElement.addClassName(this.options.elementClassName);this.mainElement.appendChild(this.findDevicesElement);if(this.options.showFindDevicesButton){this.findDevicesButton=document.createElement(this.options.useLinks? "div":"input");Element.extend(this.findDevicesButton);if(this.options.useLinks)this.findDevicesButton.innerHTML='<a href="#">'+this.options.findDevicesButtonText+"</a>";else{this.findDevicesButton.type="button";this.findDevicesButton.value=this.options.findDevicesButtonText}this.findDevicesButton.id=this.options.findDevicesButtonId;this.findDevicesButton.addClassName(this.options.actionButtonClassName);this.findDevicesElement.appendChild(this.findDevicesButton);this.findDevicesButton.onclick=function(){this.startFindDevices()}.bind(this)}this.options.showFindDevicesElementOnLoad|| this.findDevicesElement&&Element.hide(this.findDevicesElement);if(this.options.showCancelFindDevicesButton){this.cancelFindDevicesButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.cancelFindDevicesButton);if(this.options.useLinks)this.cancelFindDevicesButton.innerHTML='<a href="#">'+this.options.cancelFindDevicesButtonText+"</a>";else{this.cancelFindDevicesButton.type="button";this.cancelFindDevicesButton.value=this.options.cancelFindDevicesButtonText}this.cancelFindDevicesButton.id= this.options.cancelFindDevicesButtonId;this.cancelFindDevicesButton.addClassName(this.options.actionButtonClassName);this.cancelFindDevicesButton.disabled=true;this.cancelFindDevicesButton.onclick=function(){this.cancelFindDevices()}.bind(this);this.findDevicesElement.appendChild(this.cancelFindDevicesButton)}if(!this.options.showDeviceButtonsOnLoad){this.findDevicesButton&&Element.hide(this.findDevicesButton);this.cancelFindDevicesButton&&Element.hide(this.cancelFindDevicesButton)}this.deviceSelectElement= document.createElement("div");Element.extend(this.deviceSelectElement);this.deviceSelectElement.id=this.options.deviceSelectElementId;this.deviceSelectElement.innerHTML='<div id="'+this.options.deviceSelectLabelId+'">'+this.options.deviceSelectLabel+"</div>";this.findDevicesElement.appendChild(this.deviceSelectElement);this.deviceSelectInput=document.createElement(this.options.useDeviceSelectList?"ul":"select");Element.extend(this.deviceSelectInput);this.deviceSelectInput.id=this.options.deviceSelectId; this.deviceSelectInput.disabled=true;if(!this.options.showDeviceSelectOnLoad||!this.options.showDeviceSelectOnSingle||this.options.autoSelectFirstDevice)Element.hide(this.deviceSelectElement);this.browseComputerButton=new Element(this.options.useLinks?"div":"input",{id:this.options.browseComputerButtonId,className:this.options.browseComputerButtonClass});this.browseComputerButton.onclick=function(){this.deviceBrowserList==null&&this.generateDeviceBrowserElement(this.devices);this.findDevicesElement.hide(); this.readDataElement.hide();this.deviceBrowserElement.show();this._displayBrowseComputer(this.deviceBrowserList)}.bind(this);if(this.options.useLinks)this.browseComputerButton.innerHTML='<a href="#">'+this.options.browseComputerButtonText+"</a>";else{this.browseComputerButton.type="button";this.browseComputerButton.value=this.options.browseComputerButtonText}if(!this.options.uploadSelectedActivities||!this.options.showBrowseComputer)this.browseComputerButton.hide();this.findDevicesElement.appendChild(this.browseComputerButton)}, _generateSendDataElement:function(){this.sendDataElement=document.createElement("div");Element.extend(this.sendDataElement);this.sendDataElement.id=this.options.sendDataElementId;this.sendDataElement.addClassName(this.options.elementClassName);this.mainElement.appendChild(this.sendDataElement);this.sendDataButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.sendDataButton);if(this.options.useLinks)this.sendDataButton.innerHTML='<a href="#">'+this.options.sendDataButtonText+ "</a>";else{this.sendDataButton.type="button";this.sendDataButton.value=this.options.sendDataButtonText}this.sendDataButton.id=this.options.sendDataButtonId;this.sendDataButton.addClassName(this.options.actionButtonClassName);this.sendDataButton.onclick=function(){this.setStatus(this.evaluateTemplate(this.options.sendingDataToServer,{deviceName:this.getShortDeviceName(this.getCurrentDevice())}));Element.hide(this.findDevicesElement);Element.hide(this.sendDataElement);this.showProgressBar();setTimeout(function(){this.postToServer()}.bind(this), 1E3);return false}.bind(this);this.sendDataElement.appendChild(this.sendDataButton);this.options.showSendDataElementOnDeviceFound&&Element.hide(this.sendDataElement)},postToServer:function(a){var b;if(this.options.sendDataOptions!=null)if(this.options.getSendOptions!=null)this.options.sendDataOptions=this.options.getSendOptions.call(this,this.options.sendDataOptions,this.garminController.getCurrentDeviceXml(),this.readDataString);this.options.sendDataOptions.onSuccess=function(c){this.xhr=c;if(this.options.afterFinishSendData!= null)try{this.options.afterFinishSendData.call(this,this.xhr,this.currentActivity?$(this.currentActivity.replace(/Checkbox/,"Status")):null,this.activityDirectory,this)}catch(e){this.handleException(e)}a.call(this)}.bind(this);this.options.sendDataOptions.onComplete=function(c){if(c==null){b=new Error(Garmin.RemoteTransfer.MESSAGES.generalException);b.name="RemoteTransferException";this.handleException(b);throw new Error(Garmin.RemoteTransfer.MESSAGES.noResponseException);}}.bind(this);this.options.sendDataOptions.onFailure= function(c){b=new Error(c.statusText);b.name="RemoteTransferException";this.handleException(b)}.bind(this);this.apiResponse=this.garminRemoteTransfer.openRequest(this.options.sendDataUrl,this.options.sendDataOptions)},_generateReadDataElement:function(){this.readDataElement=document.createElement("div");Element.extend(this.readDataElement);this.readDataElement.id=this.options.readDataElementId;this.readDataElement.addClassName(this.options.elementClassName);this.mainElement.appendChild(this.readDataElement); this.readDataButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.readDataButton);if(this.options.useLinks)this.readDataButton.innerHTML='<a href="#">'+this.options.readDataButtonText+"</a>";else{this.readDataButton.type="button";this.readDataButton.value=this.options.readDataButtonText}this.readDataButton.id=this.options.readDataButtonId;this.readDataButton.addClassName(this.options.actionButtonClassName);this.readDataButton.disabled=true;this.readDataButton.onclick= function(){var a=true;if(this.options.restrictByDevice.length>0)a=this._restrictByDevice();if(a){if(this.options.autoHideUnusedElements){this.findDevicesElement&&Element.hide(this.findDevicesElement);this.readDataElement&&Element.hide(this.readDataElement);this.deviceSelectElement&&Element.hide(this.deviceSelectElement);this.activityDirectoryElement&&Element.hide(this.activityDirectoryElement)}this.readDataButton.disabled=true;this.cancelReadDataButton.disabled=false;this.showProgressBar();if(this.options.showReadDataTypesSelect)this.readSpecificTypeFromDevice(this.readDataTypesSelect.value); else this.options.readDataTypes!=null?this.readFromDevice(this.options.readDataTypes):this.readFromDevice(new Array(this.options.readDataType))}}.bind(this);this.readDataElement.appendChild(this.readDataButton);this.options.showReadDataButton||Element.hide(this.readDataButton);this.cancelReadDataButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.cancelReadDataButton);if(this.options.useLinks)this.cancelReadDataButton.innerHTML='<a href="#">'+this.options.cancelReadDataButtonText+ "</a>";else{this.cancelReadDataButton.type="button";this.cancelReadDataButton.value=this.options.cancelReadDataButtonText}this.cancelReadDataButton.id=this.options.cancelReadDataButtonId;this.cancelReadDataButton.addClassName(this.options.actionButtonClassName);this.cancelReadDataButton.disabled=true;this.cancelReadDataButton.onclick=function(){this.resetUI();this.hideProgressBar();this.getController().cancelReadFromDevice()}.bind(this);this.readDataElement.appendChild(this.cancelReadDataButton); this.options.showCancelReadDataButton||Element.hide(this.cancelReadDataButton);this.uploadNewButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.uploadNewButton);if(this.options.useLinks)this.uploadNewButton.innerHTML='<a href="#">'+this.options.uploadNewButtonText+"</a>";else{this.uploadNewButton.type="button";this.uploadNewButton.value=this.options.uploadNewButtonText}this.uploadNewButton.id=this.options.uploadNewButtonId;this.uploadNewButton.addClassName(this.options.actionButtonClassName); this.uploadNewButton.onclick=function(){var a=true;if(this.options.restrictByDevice.length>0)a=this._restrictByDevice();if(a){if(this.options.autoHideUnusedElements){this.advancedUploadMode=false;this.readDataElement.hide();this.browseComputerButton.hide();this.uploadProgressBar.hide();this.changeDeviceElement!=null&&this.changeDeviceElement.hide();this.connectedDevices!=null&&this.connectedDevices.hide();this.deviceSelectInput!=null&&this.deviceSelectInput.hide();if(this.loadingContentElement==null){this._generateLoadingContent(this.statusElement); this.loadingContentElement.className="longStatus";this.progressBar.className="longProgressBar";this.progressBarText.className="longProgressText"}}this.readDataButton.disabled=true;this.cancelReadDataButton.disabled=false;if(this.options.showReadDataTypesSelect)this.readSpecificTypeFromDevice(this.readDataTypesSelect.value);else this.options.readDataTypes!=null?this.readFromDevice(this.options.readDataTypes):this.readFromDevice(new Array(this.options.readDataType))}}.bind(this);this.readDataElement.appendChild(this.uploadNewButton); this.options.showUploadNewButton||Element.hide(this.uploadNewButton);if(this.options.showReadDataTypesSelect){this.readDataTypesSelect=document.createElement("select");Element.extend(this.readDataTypesSelect);this.readDataTypesSelect.id=this.options.readDataTypeSelectId;this.readDataTypesSelect.disabled=true;this.readDataElement.appendChild(this.readDataTypesSelect);this.readDataTypesSelect.options[0]=new Option(this.options.gpsData,Garmin.DeviceControl.FILE_TYPES.gpx);this.readDataTypesSelect.options[1]= new Option(this.options.trainingData,Garmin.DeviceControl.FILE_TYPES.tcx)}if(this.options.showReadRoutesSelect){this.readRoutesElement=document.createElement("div");Element.extend(this.readRoutesElement);this.readRoutesElement.id=this.options.readRoutesElementId;this.readRoutesElement.addClassName(this.options.readResultsElementClass);this.readRoutesElement.innerHTML='<span id="'+this.options.readRoutesSelectLabelId+'">'+this.options.readRoutesSelectLabel+"</span>";this.readRoutesSelect=document.createElement("select"); Element.extend(this.readRoutesSelect);this.readRoutesSelect.id=this.options.readRoutesSelectId;this.readRoutesSelect.addClassName(this.options.readResultsSelectClass);this.readRoutesSelect.disabled=true;this.readRoutesSelect.onchange=function(){this.displayTrack(this._seriesFromSelect(this.readRoutesSelect))}.bind(this);this.readRoutesElement.appendChild(this.readRoutesSelect);this.readDataElement.appendChild(this.readRoutesElement);this.options.showReadResultsSelectOnLoad||Element.hide(this.readRoutesElement)}if(this.options.showReadTracksSelect){this.readTracksElement= document.createElement("div");Element.extend(this.readTracksElement);this.readTracksElement.id=this.options.readTracksElementId;this.readTracksElement.addClassName(this.options.readResultsElementClass);this.readTracksElement.innerHTML='<span id="'+this.options.readTracksSelectLabelId+'">'+this.options.readTracksSelectLabel+"</span>";this.readTracksSelect=document.createElement("select");Element.extend(this.readTracksSelect);this.readTracksSelect.id=this.options.readTracksSelectId;this.readTracksSelect.addClassName(this.options.readResultsSelectClass); this.readTracksSelect.disabled=true;this.readTracksSelect.onchange=function(){this.displayTrack(this._seriesFromSelect(this.readTracksSelect))}.bind(this);this.readTracksElement.appendChild(this.readTracksSelect);this.readDataElement.appendChild(this.readTracksElement);this.options.showReadResultsSelectOnLoad||Element.hide(this.readTracksElement)}if(this.options.showReadWaypointsSelect){this.readWaypointsElement=document.createElement("div");Element.extend(this.readWaypointsElement);this.readWaypointsElement.id= this.options.readWaypointsElementId;this.readWaypointsElement.addClassName(this.options.readResultsElementClass);this.readWaypointsElement.innerHTML='<span id="'+this.options.readWaypointsSelectLabelId+'">'+this.options.readWaypointsSelectLabel+"</span>";this.readWaypointsSelect=document.createElement("select");Element.extend(this.readWaypointsSelect);this.readWaypointsSelect.id=this.options.readWaypointsSelectId;this.readWaypointsSelect.addClassName(this.options.readResultsSelectClass);this.readWaypointsSelect.disabled= true;this.readWaypointsSelect.onchange=function(){this.displayWaypoint(this._seriesFromSelect(this.readWaypointsSelect))}.bind(this);this.readWaypointsElement.appendChild(this.readWaypointsSelect);this.readDataElement.appendChild(this.readWaypointsElement);this.options.showReadResultsSelectOnLoad||Element.hide(this.readWaypointsElement)}if(this.options.showReadGoogleMap){this.readGoogleMap=document.createElement("div");Element.extend(this.readGoogleMap);this.readGoogleMap.id=this.options.readGoogleMapId; this.readGoogleMap.addClassName(this.options.readResultsElementClass);this.readDataElement.appendChild(this.readGoogleMap);this.readMapController=new Garmin.MapController(this.options.readGoogleMapId)}this.options.showReadDataElementOnDeviceFound&&Element.hide(this.readDataElement)},_generateActivityDirectoryElement:function(){if(this.activityDirectoryElement!=null)throw new Error("Unable to generate activity directory because an instance already exists.");this.activityDirectoryElement=document.createElement("div"); Element.extend(this.activityDirectoryElement);this.activityDirectoryElement.id=this.options.activityDirectoryElementId;this.activityDirectoryElement.addClassName(this.options.activityDirectoryClass);this.activityDirectoryElement.hide();this.mainElement.appendChild(this.activityDirectoryElement)},_generateActivityTableElement:function(){if(this.activityTable!=null)throw new Error("Unable to generate activity table with id "+this.options.activityTableId+" because an instance already exists.");this.activities= null;this._generateActivityTableHeader();this.activityDirectoryData=document.createElement("div");Element.extend(this.activityDirectoryData);this.activityDirectoryData.id=this.options.activityDirectoryDataId;this.activityDirectoryElement.appendChild(this.activityDirectoryData);this.activityTable=document.createElement("table");Element.extend(this.activityTable);this.activityTable.id=this.options.activityTableId;this.activityTable.setAttribute("cellspacing","0");this.activityTable.setAttribute("cellpadding", "0");this.activityDirectoryData.appendChild(this.activityTable);this.readSelectedButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.readSelectedButton);if(this.options.useLinks)this.readSelectedButton.innerHTML='<a href="#">'+this.options.readSelectedButtonText+"</a>";else{this.readSelectedButton.type="button";this.readSelectedButton.value=this.options.readSelectedButtonText}this.readSelectedButton.id=this.options.readSelectedButtonId;this.readSelectedButton.addClassName(this.options.actionButtonClassName); this.readSelectedButton.disabled=false;this.readSelectedButton.onclick=function(){this.readFilteredActivities()}.bind(this);this.activityDirectoryElement.appendChild(this.readSelectedButton)},_generateActivityTableHeader:function(){if(this.activityTableHeader!=null)throw new Error("Unable to generate activity table header: Instance of the activity table header already exists.");this.activityTableHeader=document.createElement("table");Element.extend(this.activityTableHeader);this.activityTableHeader.id= this.options.activityTableHeaderId;this.activityTableHeader.setAttribute("cellspacing","0");this.activityTableHeader.setAttribute("cellpadding","0");this.activityDirectoryElement.appendChild(this.activityTableHeader)},_generateWriteDataElement:function(){this.writeDataElement=document.createElement("div");Element.extend(this.writeDataElement);this.writeDataElement.id=this.options.writeDataElementId;this.writeDataElement.addClassName(this.options.elementClassName);this.mainElement.appendChild(this.writeDataElement); if(!this.options.getWriteData&&!this.options.getGpiWriteDescription&&!this.options.getBinaryWriteDescription)throw new Error("Can't write data because getWriteData() function nor getGpiWriteDescription() is defined");this.writeDataButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.writeDataButton);if(this.options.useLinks)this.writeDataButton.innerHTML='<a href="#">'+this.options.writeDataButtonText+"</a>";else{this.writeDataButton.type="button";this.writeDataButton.value= this.options.writeDataButtonText}this.writeDataButton.id=this.options.writeDataButtonId;this.writeDataButton.addClassName(this.options.actionButtonClassName);this.writeDataButton.disabled=true;this.writeDataButton.onclick=function(){var a=true;if(this.options.restrictByDevice.length>0)a=this._restrictByDevice();if(a){this.writeDataButton.disabled=true;this.cancelWriteDataButton.disabled=false;if(this.options.autoHideUnusedElements){this.findDevicesElement&&this.findDevicesElement.hide();this.writeDataElement&& this.writeDataElement.hide()}this.showProgressBar();this.writeToDevice()}}.bind(this);this.writeDataElement.appendChild(this.writeDataButton);this.cancelWriteDataButton=document.createElement(this.options.useLinks?"div":"input");Element.extend(this.cancelWriteDataButton);if(this.options.useLinks)this.cancelWriteDataButton.innerHTML='<a href="#">'+this.options.cancelWriteDataButtonText+"</a>";else{this.cancelWriteDataButton.type="button";this.cancelWriteDataButton.value=this.options.cancelWriteDataButtonText}this.cancelWriteDataButton.id= this.options.cancelWriteDataButtonId;this.cancelWriteDataButton.addClassName(this.options.actionButtonClassName);this.cancelWriteDataButton.disabled=false;this.cancelWriteDataButton.onclick=function(){this.resetUI();this.hideProgressBar();this.getController().cancelWriteToDevice()}.bind(this);this.writeDataElement.appendChild(this.cancelWriteDataButton);this.options.showCancelWriteDataButton||Element.hide(this.cancelWriteDataButton);this.options.showWriteDataElementOnDeviceFound&&Element.hide(this.writeDataElement)}, _generateAboutElement:function(){this.aboutElement=document.createElement("div");Element.extend(this.aboutElement);this.aboutElement.id="aboutElement";this.aboutElement.addClassName(this.options.elementClassName);this.mainElement.appendChild(this.aboutElement);this.copyrightText=document.createElement("span");this.copyrightText.innerHTML=this.options.poweredByGarmin;this.aboutElement.appendChild(this.copyrightText)},_restrictByDevice:function(){for(var a=this.getController().getDevices()[this.deviceSelectInput.value].getPartNumber(), b=false,c=0;c<this.options.restrictByDevice.length;c++)if(a==this.options.restrictByDevice[c])b=true;if(!b){error=new Error(this.options.unsupportedDevice);error.name="UnsupportedDeviceException";this.handleException(error)}return b},startFindDevices:function(){this.getController(true);if(this.options.autoHideUnusedElements){this.findDevicesButton&&this.findDevicesButton.hide();this.browseComputerButton&&this.browseComputerButton.hide()}if(this.findDevicesButton)this.findDevicesButton.disabled=true; if(this.cancelFindDevicesButton)this.cancelFindDevicesButton.disabled=!this.isUnlocked();this.isUnlocked()&&this.getController().findDevices()},cancelFindDevices:function(){this.resetUI();this.getController().cancelFindDevices()},onStartFindDevices:function(){this.setStatus(this.options.lookingForDevices)},onFinishFindDevices:function(a){this.resetUI();if(a.controller.numDevices>0){this.devices=a.controller.getDevices();var b=this.devices.length==1?this.options.foundDevice:this.options.foundDevices; a={deviceName:this.getShortDeviceName(this.devices[0]),deviceCount:a.controller.numDevices};this.setStatus(this.evaluateTemplate(b,a));if(this.options.showFindDevicesElement){Element.show(this.findDevicesElement);if(this.options.showDeviceButtonsOnFound){this.findDevicesButton&&this.options.showFindDevicesButton&&Element.show(this.findDevicesButton);this.cancelFindDevicesButton&&Element.show(this.cancelFindDevicesButton)}else{this.findDevicesButton&&Element.hide(this.findDevicesButton);this.cancelFindDevicesButton&& Element.hide(this.cancelFindDevicesButton)}this.devices.length<2&&!this.options.showDeviceSelectOnSingle||this.options.autoSelectFirstDevice?Element.hide(this.deviceSelectElement):Element.show(this.deviceSelectElement);this.options.useDeviceSelectList?this._generateDeviceListView():this._populateDeviceSelectDropDown()}this.options.showReadDataElementOnDeviceFound&&Element.show(this.readDataElement);this.options.showSendDataElementOnDeviceFound&&Element.show(this.sendDataElement);this.options.showWriteDataElementOnDeviceFound&& Element.show(this.writeDataElement);if(this.options.autoHideUnusedElements){this.activityDirectoryElement&&Element.hide(this.activityDirectoryElement);this.readDataElement&&Element.show(this.readDataElement);this.options.showBrowseComputer&&this.browseComputerButton&&this.browseComputerButton.show()}if(this.options.autoReadData){this.showProgressBar();if(this.options.showReadDataTypesSelect)this.readSpecificTypeFromDevice(this.readDataTypesSelect.value);else this.options.readDataType!=null?this.readSpecificTypeFromDevice(this.options.readDataType): this.readFromDevice()}if(this.options.autoWriteData){this.showProgressBar();this.writeToDevice()}}else{if((this.options.autoReadData||this.options.autoWriteData)&&!this.options.showStatusElement)alert(this.options.noDeviceDetectedStatusText);this.setStatus(this.options.noDeviceDetectedStatusText);this.findDevicesButton&&this.findDevicesButton.show();this.options.uploadSelectedActivities&&this.browseComputerButton.show();if(this.options.showFindDevicesElement){this.options.showCancelFindDevicesButton&& Element.show(this.cancelFindDevicesButton);this.options.showDeviceSelectNoDevice&&!this.options.autoSelectFirstDevice&&Element.show(this.deviceSelectElement)}}this.options.afterFinishFindDevices&&this.options.afterFinishFindDevices.call(this,this.devices)},onCancelFindDevices:function(){this.setStatus(this.options.findCancelled);this.resetUI()},_populateDeviceSelectDropDown:function(){this.deviceSelectElement.appendChild(this.deviceSelectInput);this._clearHtmlSelect(this.deviceSelectInput);if(this.options.showFindDevicesElement){for(var a= 0;a<this.devices.length;a++){this.deviceSelectInput.options[a]=new Option(this.getShortDeviceName(this.devices[a]),this.devices[a].getNumber());if(this.devices[a].getNumber()==this.getController().deviceNumber){this.deviceSelectInput.selectedIndex=a;this.options.afterSelectDevice!=null&&this.options.afterSelectDevice.call(this,this.getController().deviceNumber,this.devices,this.garminController.getCurrentDeviceXml())}}this.deviceSelectInput.onchange=function(){this.setStatus(this.evaluateTemplate(this.options.usingDevice, {deviceName:this.getShortDeviceName(this.getController().getDevices()[this.deviceSelectInput.value])}));this.getController().setDeviceNumber(this.deviceSelectInput.value);this.options.afterSelectDevice!=null&&this.options.afterSelectDevice.call(this,this.getController().deviceNumber,this.devices,this.garminController.getCurrentDeviceXml())}.bind(this);this.deviceSelectInput.disabled=false}},_generateAndDisplayDeviceBrowser:function(){if(this.options.useDeviceBrowser){this.deviceBrowserElement==null&& this.generateDeviceBrowserElement(this.devices);if(this.advancedUploadMode){this.deviceBrowserElement.show();this.activityDirectoryElement.show()}else{this.devicePreviewElement.show();this.progressBar.hide()}this.statusText.hide();this.showProgressBar();this.loadingContentElement==null?this._generateLoadingContent(this.statusElement):this._updateLoadingContent(this.evaluateTemplate(this.options.loadingContentText,{deviceName:this.getShortDeviceName(this.getCurrentDevice())}))}},_generateDeviceListView:function(){var a; this._clearHtmlSelect(this.deviceSelectInput);a=document.createElement("div");Element.extend(a);a.className=this.options.deviceSelectClass;if(this.devices.length>1){this.changeDeviceElement=document.createElement("div");Element.extend(this.changeDeviceElement);this.changeDeviceElement.id=this.options.changeDeviceElementId;this.changeDeviceElement.className=this.options.changeDeviceClass;this.changeDeviceElement.innerHTML='<a href="#">'+this.options.changeDeviceButtonText+"</a>";this.changeDeviceElement.onclick= function(){this.devicePreviewElement.toggle();this.connectedDevices.toggle();this.deviceSelectInput.toggle()}.bind(this);this.deviceSelectElement.appendChild(this.changeDeviceElement)}this.devicePreviewElement=document.createElement("div");Element.extend(this.devicePreviewElement);this.devicePreviewElement.id=this.options.previewDeviceElementId;this.devicePreviewElement.innerHTML="<p>"+this.getShortDeviceName(this.getCurrentDevice())+"</p>";a.appendChild(this.devicePreviewElement);this.deviceSelectElement.appendChild(a); if(this.options.showFindDevicesElement){this.connectedDevices=new Element("div",{className:this.options.connectedDevicesClass});this.connectedDevices.update('<img src="'+this.options.connectedDevicesImg+'" />'+this.options.connectedDevicesLabel);this.connectedDevices.hide();a.appendChild(this.connectedDevices);this._populateDeviceList(this.deviceSelectInput,this._updateDevicePreview);a.appendChild(this.deviceSelectInput);this.deviceSelectElement.appendChild(a);this.deviceSelectInput.hide();this.deviceSelectInput.disabled= false}},getCurrentDevice:function(){return this.devices[this.getController().deviceNumber]},_populateDeviceList:function(a,b){for(var c,e,d=0;d<this.devices.length;d++){e=document.createElement("li");Element.extend(e);e.className=d==this.getController().deviceNumber?"selected":"unselected";c=document.createElement("a");Element.extend(c);c.href="#";c.innerHTML=this.getShortDeviceName(this.devices[d]);c.onclick=function(f,h,g,i){this.getController().cancelReadFromDevice();if(this.browseComputerElement!= null){this.browseComputerElement.hide();f.childNodes[this.devices.length].className="unselected"}this.statusElement.show();this.getController().setDeviceNumber(h);for(g=0;g<this.devices.length;g++)f.childNodes[g].className=g==this.getController().deviceNumber?"selected":"unselected";i.call(this,h,this.devices,this.getController().getCurrentDeviceXml())}.bind(this,a,d,this.devices,b);e.appendChild(c);a.appendChild(e)}this.options.autoSelectFirstDevice&&this.options.afterSelectDevice.call(this,this.getController().deviceNumber, this.devices,this.garminController.getCurrentDeviceXml())},getShortDeviceName:function(a){a=a.getDisplayName();if(a.length>this.options.deviceLabelMaxSize)a=a.substring(0,this.options.deviceLabelMaxSize)+"...";return a},_updateDevicePreview:function(a){this.devicePreviewElement.innerHTML="<p>"+this.getShortDeviceName(this.devices[a])+"</p>";this.devicePreviewElement.show();this.deviceSelectInput&&this.deviceSelectInput.hide();this.connectedDevices&&this.connectedDevices.hide()},readFromDevice:function(a){this.getController(); this.getController().getDevices();if(this.options.readDataType!=null){a=[];a[0]=this.options.readDataType}for(var b=null,c=0;c<a.length;c++){var e=a[c];if(b==null&&this.getController().checkDeviceReadSupport(e)){b=e;if(this.options.uploadSelectedActivities)switch(e){case Garmin.DeviceControl.FILE_TYPES.gpxDir:case Garmin.DeviceControl.FILE_TYPES.tcxDir:case Garmin.DeviceControl.FILE_TYPES.fitDir:this.activityTable==null?this._generateActivityTableElement():this._clearActivityTable();this._generateAndDisplayDeviceBrowser()}this.getController().readDataFromDevice(e)}}if(b== null){a=new Error(this.options.unsupportedDevice);a.name="UnsupportedDataTypeException";this.handleException(a)}},readFilteredActivities:function(){if(this._directoryHasSelected()==false)if(this.advancedUploadMode)alert(this.options.errorActivitySelect);else{this.numQueuedActivities=0;this.setStatus(this.options.noFilteredActivities);this.options.uploadSelectedActivities&&this.getController()._broadcaster.dispatch("onFinishUploads",{display:this})}else{this.activities=null;this.readTracksSelect.length= 0;this.readSelectedButton.disabled=true;this.options.useLinks&&this.readSelectedButton.hide();if(this.checkAllBox!=null)this.checkAllBox.disabled=false;this.options.useDeviceBrowser&&this.advancedUploadMode?this.statusElement.hide():this.showProgressBar();this._populateActivityQueue();if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.tcxDir){this.fileTypeRead=Garmin.DeviceControl.FILE_TYPES.tcxDetail;this._readNextSelected()}else if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.fitDir){this.fileTypeRead= Garmin.DeviceControl.FILE_TYPES.fit;this._readNextSelected()}else if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.gpxDir){for(this.fileTypeRead=Garmin.DeviceControl.FILE_TYPES.gpxDetail;this.activityQueue.size()!=0;){this._displayProcessingForCurrentActivity(this.activityQueue.last());this.activityQueue.pop()}this.garminController.readDataFromDevice(this.fileTypeRead)}}},readSpecificTypeFromDevice:function(a){if(this.getController().checkDeviceReadSupport(a)==false){a=new Error(this.evaluateTemplate(this.options.unsupportedReadDataType, {dataType:a}));a.name="UnsupportedDataTypeException";this.handleException(a)}else{this.getController();this.getController().getDevices();switch(a){case Garmin.DeviceControl.FILE_TYPES.tcxDir:case Garmin.DeviceControl.FILE_TYPES.fitDir:this.activityTable==null?this._generateActivityTableElement():this._clearActivityTable();this._generateAndDisplayDeviceBrowser();case Garmin.DeviceControl.FILE_TYPES.gpx:case Garmin.DeviceControl.FILE_TYPES.gpxDir:case Garmin.DeviceControl.FILE_TYPES.tcx:case Garmin.DeviceControl.FILE_TYPES.crs:case Garmin.DeviceControl.FILE_TYPES.wkt:case Garmin.DeviceControl.FILE_TYPES.tcxProfile:case Garmin.DeviceControl.FILE_TYPES.crsDir:this.getController().readDataFromDevice(a); break;case Garmin.DeviceControl.FILE_TYPES.deviceXml:this.getController().readDataFromDevice(a);break;default:a=new Error(Garmin.DeviceControl.MESSAGES.invalidFileType+a);a.name="InvalidTypeException";this.handleException(a)}}},onProgressReadFromDevice:function(a){if(this.options.showProgressBar){this.updateProgressBar(this.progressBarDisplay,a.progress.getPercentage());this.updateProgressBarText(this.progressBarText,this.options.showDetailedStatus?a.progress.text[0]+a.progress.text[1]:a.progress.text[1])}else this.setStatus(a.progress)}, onCancelReadFromDevice:function(){this.setStatus(this.options.cancelReadStatusText);this.resetUI()},onFinishReadFromDevice:function(a){this.fileTypeRead=a.controller.gpsDataType;this.readDataDoc=a.controller.gpsData;this.readDataString=a.controller.gpsDataString;this.setStatus(this.options.dataReadProcessing);this.resetUI();this.clearMapDisplay();switch(this.fileTypeRead){case Garmin.DeviceControl.FILE_TYPES.tcx:case Garmin.DeviceControl.FILE_TYPES.tcxDir:case Garmin.DeviceControl.FILE_TYPES.tcxDetail:this.factory= Garmin.TcxActivityFactory;break;case Garmin.DeviceControl.FILE_TYPES.gpx:case Garmin.DeviceControl.FILE_TYPES.gpxDir:case Garmin.DeviceControl.FILE_TYPES.gpxDetail:this.factory=Garmin.GpxActivityFactory;break;case Garmin.DeviceControl.FILE_TYPES.fitDir:this.factory=Garmin.DirectoryFactory;break;case Garmin.DeviceControl.FILE_TYPES.fit:case Garmin.DeviceControl.FILE_TYPES.binary:if(this.options.uploadSelectedActivities){if(this.options.uploadCompressedData)this.readDataString=a.controller.gpsDataStringCompressed; this._postDataUpdateDisplay(this.readDataString)}this._finishReadProcessing(a);break;default:var b=new Error(+this.fileTypeRead);b.name="InvalidTypeException";this.handleException(b)}if(this.factory!=null){if(this.activities==null)this.activities=[];switch(this.fileTypeRead){case Garmin.DeviceControl.FILE_TYPES.gpxDir:case Garmin.DeviceControl.FILE_TYPES.tcxDir:case Garmin.DeviceControl.FILE_TYPES.fitDir:if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.tcxDir){this.activities=this.factory.parseDocument(this.readDataDoc); this._createActivityDirectory(Garmin.DeviceControl.FILE_TYPES.tcxDir,this.activities)}else if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.fitDir){b=this.factory.parseDocument(this.readDataDoc);b=Garmin.DirectoryFactory.getActivityFiles(b);this._createActivityDirectory(Garmin.DeviceControl.FILE_TYPES.fitDir,b)}else if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.gpxDir){this.activities=this.factory.parseDocumentByType(this.readDataDoc,Garmin.GpxActivityFactory.GPX_TYPE.tracks);this.options.uploadSelectedActivities&& this._createActivityDirectory(Garmin.DeviceControl.FILE_TYPES.gpxDir,this.activities)}if(this.options.detectNewActivities&&this.options.uploadSelectedActivities)if(this.activityDirectory.size()==0)this.advancedUploadMode?this._updateLoadingContent(this.options.noActivitiesOnDevice):this.getController()._broadcaster.dispatch("onFinishUploads",{display:this});else{this.activityMatcher=new Garmin.ActivityMatcher(this.garminController.getCurrentDeviceXml(),this.activityDirectory.getIds(),this.options.syncDataUrl, this.options.syncDataOptions,function(){this._finishReadProcessing(a)}.bind(this));this.activityMatcher.run()}else this._finishReadProcessing(a);break;case Garmin.DeviceControl.FILE_TYPES.gpxDetail:this.options.uploadSelectedActivities&&this._postDataUpdateDisplay(this.readDataString);break;case Garmin.DeviceControl.FILE_TYPES.tcxDetail:this.activities=this.activities.concat(this.factory.parseDocument(this.readDataDoc));if(this.options.uploadSelectedActivities){if(this.options.uploadCompressedData)this.readDataString= a.controller.gpsDataStringCompressed;this._postDataUpdateDisplay(this.readDataString)}this._finishReadProcessing(a);break;default:this.activities=this.factory.parseDocument(this.readDataDoc);this._applyDataFilters();this._finishReadProcessing(a);break}}},_postDataUpdateDisplay:function(a){if(this.loadingContentElement!=null){this.loadingContentElement.innerHTML=this.options.uploadingStatusText;this.loadingContentElement.show()}this._postActivityToServer(a)},_applyDataFilters:function(){var a=this.options.dataFilters; if(a!=null)for(var b=0;b<a.length;b++)a[b].run!=null&&a[b].run(this.activities,garminFilterQueue)},_finishReadProcessing:function(a){if(garminFilterQueue!=null&&garminFilterQueue.length>0)setTimeout(function(){this._finishReadProcessing(a)}.bind(this),500);else{if(this.activityQueue==null||this.activityQueue.length==0){if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.fitDir){var b=this._listDirectory(this.activityDirectory);this.setStatus(this.evaluateTemplate(this.options.dataFound,b))}if(this.activities!= null&&this.activities.length>0){b=this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.tcxDir||this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.gpxDir?this._listDirectory(this.activityDirectory):this._listActivities(this.activities);this.setStatus(this.evaluateTemplate(this.options.dataFound,b))}if(this.options.uploadSelectedActivities)switch(this.fileTypeRead){case Garmin.DeviceControl.FILE_TYPES.gpx:case Garmin.DeviceControl.FILE_TYPES.gpxDir:case Garmin.DeviceControl.FILE_TYPES.tcx:case Garmin.DeviceControl.FILE_TYPES.crs:case Garmin.DeviceControl.FILE_TYPES.tcxDir:case Garmin.DeviceControl.FILE_TYPES.crsDir:case Garmin.DeviceControl.FILE_TYPES.fitDir:this.deviceSelectInput.disabled= true;if(this.advancedUploadMode)this.loadingContentElement!=null&&this.loadingContentElement.hide();else{this.progressBar.hide();this.uploadProgressBar.show();this.readFilteredActivities()}break;case Garmin.DeviceControl.FILE_TYPES.gpxDetail:case Garmin.DeviceControl.FILE_TYPES.tcxDetail:case Garmin.DeviceControl.FILE_TYPES.crsDetail:case Garmin.DeviceControl.FILE_TYPES.fit:case Garmin.DeviceControl.FILE_TYPES.binary:this.readSelectedButton.disabled=false;this.options.useLinks&&this.readSelectedButton.show(); this.readSelectedButton.disabled=false;if(this.checkAllBox!=null)this.checkAllBox.disabled=false;break}}if(this.options.afterFinishReadFromDevice){b=this.factory!=null?this.factory.produceString(this.activities):a.controller.gpsDataString;var c=this.factory!=null?Garmin.XmlConverter.toDocument(b):a.controller.gpsData;this.options.afterFinishReadFromDevice(b,c,a.controller.gpsDataType,this.activities,this)}}},onProgressUpload:function(a){if(this.options.showProgressBar){this.updateProgressBar(this.uploadProgressBarDisplay, a.progress.percentage);this.updateProgressBarText(this.uploadProgressBarText,a.progress.text)}else this.setStatus(a.progress)},getUploadProgressJson:function(){var a,b,c;if(this.numQueuedActivities==null||this.activityQueue==null||this.activityQueue.length==0)c=b=a=0;else{a=this.numQueuedActivities-this.activityQueue.length;b=this.numQueuedActivities;c=a/b*100}return{progress:{current:a,total:b,percentage:c,text:this.evaluateTemplate(this.options.uploadProgressStatusText,{currentUpload:a,totalUploads:b})}, display:this}},_readNextSelected:function(){this._displayProcessingForCurrentActivity(this.activityQueue.last());this.setStatus(this.options.uploadingActivities);var a=$(this.currentActivity).value;if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.tcxDetail)this.garminController.readDetailFromDevice(this.fileTypeRead,a);else this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.fit&&this.garminController.getBinaryFile(this.getCurrentDevice().getNumber(),this.activityDirectory.getEntry(a).path)}, _displayProcessingForCurrentActivity:function(a){this.currentActivity=a;$(this.currentActivity.replace(/Checkbox/,"Status")).innerHTML=this.options.statusCellProcessingImg},stopQueuedUploads:function(){this.clearActivityQueue();this.getController()._broadcaster.dispatch("onFinishUploads",{display:this})},_postActivityToServer:function(a){if(this.options.sendDataUrl==null&&this.options.postActivityHandler==null)throw new Error("Need to define either sendDataUrl or the postActivityHandler in display options, depending on desired behavior."); else{var b=function(){this.activityQueue.pop();this.getController()._broadcaster.dispatch("onProgressUpload",this.getUploadProgressJson());this.activityQueue.length>0?this._readNextSelected():this.getController()._broadcaster.dispatch("onFinishUploads",{display:this})}.bind(this);if(this.options.sendDataUrl!=null)this.postToServer(b);else if(this.options.postActivityHandler!=null){this.options.postActivityHandler(a,this);b()}}},onFinishUploads:function(){if(this.numQueuedActivities>0)this.loadingContentElement.hide(); else if(!this.advancedUploadMode){this.loadingContentElement.className="shortStatus";this.activityTable.hide();this._updateLoadingContent("No new activities to upload.")}this.activityDirectoryElement.show();this.uploadProgressBar.hide();this.findDevicesElement.hide();this.readSelectedButton.hide();this.deviceBrowserElement.hide();this.options.afterFinishUploads&&this.options.afterFinishUploads.call(this,this)},_clearActivityTable:function(){for(;this.activityTableHeader.rows.length>0;)this.activityTableHeader.deleteRow(0); for(;this.activityTable.rows.length>0;)this.activityTable.deleteRow(0)},_createActivityDirectory:function(a,b){this.advancedUploadMode&&this.activityDirectoryElement.show();this.activityQueue=[];this.activityDirectory=new Garmin.ActivityDirectory;for(var c=0;c<b.length;c++){var e,d,f;if(a==Garmin.DeviceControl.FILE_TYPES.tcxDir){f=b[c];e=f.getAttribute(Garmin.Activity.ATTRIBUTE_KEYS.activityName);d=f.getSummaryValue(Garmin.Activity.SUMMARY_KEYS.startTime).getValue().getTimeString();f=f.getStartTime().getDurationTo(f.getEndTime()); this.activityDirectory.addEntry(e,d,f,null)}else if(a==Garmin.DeviceControl.FILE_TYPES.fitDir){f=b[c];e=f.getIdValue(Garmin.FileId.KEYS.id);d=f.getAttribute(Garmin.File.ATTRIBUTE_KEYS.creationTime).getTimeString();this.activityDirectory.addEntry(e,d,null,null);this.activityDirectory.getEntry(e).path=f.getAttribute(Garmin.File.ATTRIBUTE_KEYS.path)}else if(a==Garmin.DeviceControl.FILE_TYPES.gpxDir){f=b[c];e=f.getSummaryValue(Garmin.Activity.SUMMARY_KEYS.startTime);d=f.getAttribute(Garmin.Activity.ATTRIBUTE_KEYS.activityName); if(e!=null&&d!=null){e=e.getValue().getXsdString();d=d;this.activityDirectory.addEntry(e,d,null,null)}}}},_populateActivityQueue:function(){for(var a=0;a<this.activityDirectory.size();a++){var b="activityItemCheckbox"+a;$(b).checked==true&&this.activityQueue.push(b);this.activityDirectory.getEntry(this.activityDirectory.getIds()[a]).displayElementId=b}this.activityQueue.reverse();this.numQueuedActivities=this.activityQueue.length},clearActivityQueue:function(){for(var a=0;a<this.activityQueue.length;a++)this.activityQueue.pop()}, _addToActivityTable:function(a,b){var c=0,e=b.id,d=this.activityTable.insertRow(this.activityTable.rows.length);(a+2)%2!=0&&d.setAttribute("bgcolor","#f3f3f3");var f=d.insertCell(c++);f.width="40";f.align="right";var h=document.createElement("input");Element.extend(h);h.id="activityItemCheckbox"+a;h.type="checkbox";h.value=e;h.observe("click",this.onActivitySelect.bind(this,h.id,this.activityDirectory.getIds()));f.appendChild(h);f=d.insertCell(c++);f.width="220";if(b.duration!=null){var g=d.insertCell(c++); g.width="210"}c=d.insertCell(c++);c.id="activityItemStatus"+a;if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.tcxDir||this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.fitDir||this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.gpxDir){f.innerHTML=b.name;if(g!=null)g.innerHTML=b.duration}else if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.crsDir)f.innerHTML=e;this.options.afterTableInsert&&this.options.afterTableInsert.call(this,a,b,c,h,d,this.activityMatcher)},_addToActivityTableHeader:function(a){var b= 0,c=this.activityTableHeader.insertRow(0),e=c.insertCell(b++);e.id="selectAllHeader";e.width="40";e.align="left";var d=c.insertCell(b++);d.id="nameHeader";d.width="220";d.align="left";d.innerHTML=this.options.getActivityDirectoryHeaderIdLabel.call(this);if(a.getFirstEntry().duration!=null){a=c.insertCell(b++);a.id="durationHeader";a.width="210";a.align="left";a.innerHTML=this.options.activityDirectoryHeaderDuration}c.insertCell(b++).innerHTML=this.options.activityDirectoryHeaderStatus;if(this.options.uploadMaximum< 1){this.checkAllBox=document.createElement("input");Element.extend(this.checkAllBox);this.checkAllBox.id="checkAllBox";this.checkAllBox.type="checkbox";this.options.uploadMaximum==0&&this.checkAllBox.hide();e.appendChild(this.checkAllBox);this.checkAllBox.onclick=function(){this._checkAllDirectory()}.bind(this)}},onActivitySelect:function(a,b){for(var c=0,e=0;e<b.length;e++)$("activityItemCheckbox"+e).checked==true&&c++;if(this.options.uploadMaximum>0)if(c>this.options.uploadMaximum){$(a).checked= false;alert(this.evaluateTemplate(this.options.uploadMaximumReached,{activities:this.options.uploadMaximum}))}},_checkAllDirectory:function(){for(var a=0;a<this.activityDirectory.size();a++)$("activityItemCheckbox"+a).checked=this.checkAllBox.checked},_directoryHasSelected:function(){for(var a=0;a<this.activityDirectory.size();a++)if($("activityItemCheckbox"+a).checked==true)return true;return false},_listDirectory:function(a){this._clearHtmlSelect(this.readTracksSelect);this._addToActivityTableHeader(a); for(var b=a.getEntries(),c=0;c<a.size();c++){var e=b[c];if(this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.tcxDir||this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.crsDir||this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.fitDir||this.fileTypeRead==Garmin.DeviceControl.FILE_TYPES.gpxDir)this._addToActivityTable(c,e)}return{tracks:a.size()}},_listActivities:function(a){var b=0,c=0,e=0;this._clearHtmlSelect(this.readRoutesSelect);this._clearHtmlSelect(this.readTracksSelect);this._clearHtmlSelect(this.readWaypointsSelect); for(var d=0;d<a.length;d++)for(var f=a[d],h=f.getSeries(),g=0;g<h.length;g++){var i=h[g];if(i.getSeriesType()==Garmin.Series.TYPES.history){this._listTrack(f,i,d,g);c++}else if(i.getSeriesType()==Garmin.Series.TYPES.route){this._listRoute(f,i,d,g);b++}else if(i.getSeriesType()==Garmin.Series.TYPES.waypoint){this._listWaypoint(f,i,d,g);e++}}if(this.options.showReadRoutesSelect)if(b>0){Element.show(this.readRoutesElement);this.readRoutesSelect.disabled=false;this.displayTrack(this._seriesFromSelect(this.readRoutesSelect))}else{Element.hide(this.readRoutesElement); this.readRoutesSelect.disabled=true}if(this.options.showReadTracksSelect)if(c>0){Element.show(this.readTracksElement);this.readTracksSelect.disabled=false;this.displayTrack(this._seriesFromSelect(this.readTracksSelect))}else{Element.hide(this.readTracksElement);this.readTracksSelect.disabled=true}if(this.options.showReadWaypointsSelect)if(e>0){Element.show(this.readWaypointsElement);this.readWaypointsSelect.disabled=false;this.displayWaypoint(this._seriesFromSelect(this.readWaypointsSelect))}else{Element.hide(this.readWaypointsElement); this.readWaypointsSelect.disabled=true}return{routes:b,tracks:c,waypoints:e}},_listRoute:function(a,b,c,e){if(this.readRoutesSelect){a=a.getAttribute(Garmin.Activity.ATTRIBUTE_KEYS.activityName);this.readRoutesSelect.options[this.readRoutesSelect.length]=new Option(a,c+","+e)}},_listTrack:function(a,b,c,e){if(this.readTracksSelect){b=a.getSummaryValue(Garmin.Activity.SUMMARY_KEYS.startTime).getValue();a=a.getSummaryValue(Garmin.Activity.SUMMARY_KEYS.endTime).getValue();a=this.evaluateTemplate(this.options.trackListing, {date:b.getDateString(),duration:b.getDurationTo(a)});this.readTracksSelect.options[this.readTracksSelect.length]=new Option(a,c+","+e)}},_listWaypoint:function(a,b,c,e){if(this.readWaypointsSelect){a=a.getAttribute(Garmin.Activity.ATTRIBUTE_KEYS.activityName);this.readWaypointsSelect.options[this.readWaypointsSelect.length]=new Option(a,c+","+e)}},_seriesFromSelect:function(a){a=a.options[a.selectedIndex].value.split(",",2);return this.activities[parseInt(a[0])].getSeries()[parseInt(a[1])]},displayTrack:function(a){if(this.options.showReadGoogleMap){this.readMapController.map.clearOverlays(); this.readMapController.drawTrack(a)}},displayWaypoint:function(a){if(this.options.showReadGoogleMap){this.readMapController.map.clearOverlays();this.readMapController.drawWaypoint(a)}},clearMapDisplay:function(){this.options.showReadGoogleMap&&this.readMapController.map.clearOverlays()},writeToDevice:function(){var a=null,b=null;if(this.options.writeDataType!=null){this.options.writeDataTypes=[];this.options.writeDataTypes[0]=this.options.writeDataType}for(var c=0;c<this.options.writeDataTypes.length;c++){a= this.options.writeDataTypes[c];var e=this.getController().checkDeviceWriteSupport(a);if(b==null&&e==true){b=a;switch(a){case Garmin.DeviceControl.FILE_TYPES.goals:case Garmin.DeviceControl.FILE_TYPES.gpx:case Garmin.DeviceControl.FILE_TYPES.crs:case Garmin.DeviceControl.FILE_TYPES.wkt:case Garmin.DeviceControl.FILE_TYPES.tcxProfile:case Garmin.DeviceControl.FILE_TYPES.nlf:var d=this.options.getWriteData(),f=this.options.getWriteDataFileName();this.getController().writeDataToDevice(a,d,f);break;case Garmin.DeviceControl.FILE_TYPES.gpi:d= Garmin.GpiUtil.buildMultipleDeviceDownloadsXML(this.options.getGpiWriteDescription());this.getController().downloadToDevice(d);break;case Garmin.DeviceControl.FILE_TYPES.fitSettings:case Garmin.DeviceControl.FILE_TYPES.fitSport:case Garmin.DeviceControl.FILE_TYPES.fitCourse:case Garmin.DeviceControl.FILE_TYPES.binary:d=Garmin.GpiUtil.buildMultipleDeviceDownloadsXML(this.options.getBinaryWriteDescription());this.getController().downloadToDevice(d);break;default:d=new Error(Garmin.DeviceControl.MESSAGES.invalidFileType+ a);d.name="InvalidTypeException";this.handleException(d)}}}if(e==false){d=new Error(this.evaluateTemplate(this.options.unsupportedWriteDataType,{dataType:a}));d.name="UnsupportedDataTypeException";this.handleException(d)}},onStartWriteToDevice:function(){this.setStatus(this.options.writingToDevice)},onCancelWriteToDevice:function(){this.setStatus(this.options.writingCancelled)},onWaitingWriteToDevice:function(a){if(confirm(a.message.getText())){this.setStatus(this.options.overwritingFile);a.controller.respondToMessageBox(true)}else{this.setStatus(this.options.notOverwritingFile); a.controller.respondToMessageBox(false)}},onProgressWriteToDevice:function(a){this.options.showProgressBar&&this.updateProgressBar(this.progressBarDisplay,a.progress.getPercentage());this.setStatus(a.progress.percentage==100?this.options.dataDownloadProcessing:a.progress)},onFinishWriteToDevice:function(a){this.setStatus(this.options.writtenToDevice);this.resetUI();this.options.afterFinishWriteToDevice&&this.options.afterFinishWriteToDevice.call(this,a.success)},getController:function(a){if(!this.garminController)try{this.garminController= new Garmin.DeviceControl;this.garminController.register(this);this.garminController.setPluginRequiredVersion(this.options.pluginRequiredVersion);this.garminController.setPluginLatestVersion(this.options.pluginLatestVersion);this.garminController.validatePlugin()}catch(b){this.handleException(b);return null}if(!this.error&&a&&!this.isUnlocked()){this.garminController.unlock(this.options.pathKeyPairsArray)?this.setStatus(this.options.pluginUnlocked):this.setStatus(this.options.pluginNotUnlocked);this.garminRemoteTransfer= new Garmin.RemoteTransfer}return this.garminController},isUnlocked:function(){return this.garminController&&this.garminController.isUnlocked()},setOptions:function(a){for(key in a||{})if(!(key in Garmin.DeviceDisplayDefaultOptions)){a=new Error(key+" is not a valid option name, see Garmin.DeviceDisplayDefaultOptions");a.name="InvalidOptionException";throw a;}this.options=Object.extend(Garmin.DeviceDisplayDefaultOptions,a||{})},_clearHtmlSelect:function(a){if(a)a.length=0},setStatus:function(a){if(a== null)a="";if(this.options.showStatusElement){var b;if(this.options.showDetailedStatus)b=this._buildDescriptiveStatusString(a);else if(a.getText){var c=a.getText();if(c instanceof Array)b=c.length==0?"":a.getText()[0]}else b=a;this.statusText.innerHTML=b}},_buildDescriptiveStatusString:function(a){if(a==null)a="";var b=a;if(a.getTitle)b=a.getTitle()+"<br />";if(a.getText)b+=a.getText();return b},evaluateTemplate:function(a,b){return(new Template(a)).evaluate(b)},showProgressBar:function(){this.options.showStatusElement&& this.options.showProgressBar&&Element.show(this.progressBar)},hideProgressBar:function(){this.options.showStatusElement&&this.options.showProgressBar&&Element.hide(this.progressBar)},updateProgressBar:function(a,b){if(this.options.showStatusElement&&this.options.showProgressBar&&b)a.style.width=(0<b&&b<=100?b:100)+"%"},updateProgressBarText:function(a,b){if(this.options.showStatusElement&&this.options.showProgressBar&&b)a.innerHTML=b},onException:function(a){this.handleException(a.msg)},handleException:function(a){this.error= true;this.options.customExceptionHandler?this.options.customExceptionHandler.call(this,a):this.defaultExceptionHandler(a)},defaultExceptionHandler:function(a){var b,c=false;if(a.name=="BrowserNotSupportedException"){b=a.message;if(this.options.hideIfBrowserNotSupported)c=true}else if(a.name=="PluginNotInstalledException"||a.name=="OutOfDatePluginException"){b=a.message;b+=' <a href="'+Garmin.DeviceDisplay.LINKS.pluginDownload+'" target="_blank">'+this.options.downloadAndInstall+"</a>"}else b=Garmin.PluginUtils.isDeviceErrorXml(a)? Garmin.PluginUtils.getDeviceErrorMessage(a):a.name=="UnsupportedDeviceException"||a.name=="UnsupportedDataTypeException"||a.name=="RemoteTransferException"?a.message:a.name+": "+a.message;this.setStatus(b);this.resetUI();if(!this.options.showStatusElement&&!c)if(a.name=="PluginNotInstalledException"||a.name=="OutOfDatePluginException")window.confirm(a.message+"\n"+this.options.installNow)&&window.open(Garmin.DeviceDisplay.LINKS.pluginDownload,"_blank");else alert(b)}}; Garmin.DeviceDisplay.LINKS={pluginDownload:"http://www.garmin.com/products/communicator/",pluginDownloadDetectOs:function(){return"http://www.garmin.com/products/communicator/"}};var garminFilterQueue=[]; Garmin.DeviceDisplayDefaultOptions={unlockOnPageLoad:true,pathKeyPairsArray:["file:///C:/dev/","bd04dc1f5e97a6ff1ea76c564d133b7e"],elementClassName:"pluginElement",useLinks:false,hideIfBrowserNotSupported:false,customExceptionHandler:null,actionButtonClassName:"actionButton",autoHideUnusedReadElements:false,autoHideUnusedElements:false,showAboutElement:true,restrictByDevice:[],pluginRequiredVersion:[2,2,0,1],pluginLatestVersion:[2,5,2,0],showStatusElement:true,showDetailedStatus:false,statusElementId:"statusBox", statusTextId:"statusText",showProgressBar:true,progressTextId:"progressText",progressTextClass:"progressTextClass",progressBarClass:"progressBarClass",progressBarBackClass:"progressBarBackClass",progressBarDisplayClass:"progressBarDisplayClass",progressBarId:"progressBar",progressBarBackId:"progressBarBack",progressBarDisplayId:"progressBarDisplay",progressBarTextClass:"progressBarTextClass",progressBarTextId:"progressBarText",uploadProgressTextId:"uploadProgressText",uploadProgressTextClass:"uploadProgressTextClass", uploadProgressBarClass:"uploadProgressBarClass",uploadProgressBarBackClass:"uploadProgressBarBackClass",uploadProgressBarDisplayClass:"uploadProgressBarDisplayClass",uploadProgressBarId:"uploadProgressBar",uploadProgressBarBackId:"uploadProgressBarBack",uploadProgressBarDisplayId:"uploadProgressBarDisplay",uploadProgressBarTextClass:"uploadProgressBarTextClass",uploadProgressBarTextId:"uploadProgressBarText",uploadingStatusText:"Uploading activities...",uploadProgressStatusText:"#{currentUpload} of #{totalUploads} completed.", showFindDevicesElement:true,showFindDevicesElementOnLoad:true,autoFindDevices:false,showDeviceButtonsOnFound:true,showDeviceButtonsOnLoad:true,showFindDevicesButton:true,findDevicesElementId:"deviceBox",findDevicesButtonId:"findDevicesButton",findDevicesButtonText:"Find Devices",showCancelFindDevicesButton:false,cancelFindDevicesButtonId:"cancelFindDevicesButton",cancelFindDevicesButtonText:"Cancel Find Devices",showDeviceSelectOnSingle:false,showDeviceSelectNoDevice:false,showDeviceSelectOnLoad:true, autoSelectFirstDevice:false,deviceSelectElementId:"deviceSelectBox",deviceSelectLabel:"Devices: ",deviceSelectLabelId:"deviceSelectLabel",deviceSelectClass:"deviceSelectClass",deviceSelectId:"deviceSelect",deviceSelectedElementId:"deviceSelected",deviceSelectedLabel:"Previewing ",deviceSelectedLabelId:"deviceSelectedLabel",noDeviceDetectedStatusText:"No devices found.",singleDeviceDetectedStatusText:"Found ",afterFinishFindDevices:null,afterFinishUploads:null,autoReadData:false,showReadDataElement:true, showReadDataButton:true,showReadDataElementOnDeviceFound:false,readDataElementId:"readBox",readDataButtonId:"readDataButton",readDataButtonText:"Get Data",showCancelReadDataButton:true,cancelReadDataButtonId:"cancelReadDataButton",cancelReadDataButtonText:"Cancel Get Data",cancelReadStatusText:"Read cancelled",showReadResultsSelectOnLoad:false,readResultsSelectClass:"readResultsSelect",readResultsElementClass:"readResultsElement",showReadRoutesSelect:true,readRoutesElementId:"readRoutesElement",readRoutesSelectId:"readRoutesSelect", readRoutesSelectLabel:"Routes: ",readRoutesSelectLabelId:"readRoutesSelectLabel",readSelectedButtonId:"readSelectedButton",readSelectedButtonText:"Upload Selected",showReadTracksSelect:true,readTracksElementId:"readTracksElement",readTracksSelectId:"readTracksSelect",readTracksSelectLabel:"Tracks: ",readTracksSelectLabelId:"readTracksSelectLabel",readWaypointsElementId:"readWaypointsElement",showReadWaypointsSelect:true,readWaypointsSelectId:"readWaypointsSelect",readWaypointsSelectLabel:"Waypoints: ", readWaypointsSelectLabelId:"readWaypointsSelectLabel",showReadGoogleMap:false,readGoogleMapId:"readMap",readDataType:null,readDataTypes:["GPSData"],showReadDataTypesSelect:false,readDataTypesSelectId:"readDataTypesSelect",afterFinishReadFromDevice:null,loadTracksWithoutATimestamp:true,autoWriteData:false,showWriteDataElement:false,showWriteDataElementOnDeviceFound:false,writeDataElementId:"writeBox",writeDataButtonId:"writeDataButton",writeDataButtonText:"Write",showCancelWriteDataButton:true,cancelWriteDataButtonId:"cancelWriteDataButton", cancelWriteDataButtonText:"Cancel Write",afterFinishWriteToDevice:null,dataFilters:[],getWriteData:null,getWriteDataFileName:function(){return"myData.gpx"},getGpiWriteDescription:null,getBinaryWriteDescription:null,writeDataType:null,writeDataTypes:["GPSData"],showActivityDirectoryElement:true,activityDirectoryClass:"activityDirectoryClass",activityDirectoryDataId:"activityDirectoryData",activityDirectoryElementId:"activityDirectory",activityTableHeaderId:"activityTableHeader",activityTableId:"activityTable", afterTableInsert:null,cancelUploadButtonClass:"cancelUploadButtonClass",cancelUploadButtonId:"cancelUploadButton",cancelUploadButtonText:"(Cancel)",showUploadNewButton:false,uploadNewButtonId:"uploadNewButton",uploadNewButtonText:"Upload new activities",uploadSelectedActivities:false,uploadCompressedData:false,uploadMaximum:-1,postActivityHandler:null,showSendDataElement:false,showSendDataElementOnDeviceFound:false,getSendOptions:null,sendDataUrl:null,sendDataOptions:null,sendDataElementId:"sendBox", sendDataButtonId:"sendDataButton",sendDataButtonText:"Send Data",afterFinishSendData:null,afterSelectDevice:null,useDeviceBrowser:true,useDeviceSelectList:false,deviceBrowserElementClass:"deviceBrowserBoxClass",deviceBrowserElementId:"deviceBrowserBox",deviceBrowserLabelClass:"deviceBrowserLabelClass",deviceBrowserLabelId:"deviceBrowserLabel",deviceBrowserLabel:"Browse devices:",deviceBrowserListId:"deviceBrowserList",browseComputerButtonClass:"browseComputerButtonClass",browseComputerButtonId:"browseComputerButton", browseComputerButtonText:"Browse Computer",browseComputerElementClass:"browseComputerElementClass",browseComputerElementId:"browseComputerElement",browseComputerContentUrl:"about:blank",browseComputerLabel:"My Computer",loadingContentText:"Loading content from #{deviceName}, please wait...",changeDeviceButtonText:"(Change)",changeDeviceClass:"change",changeDeviceElementId:"changeDevice",connectedDevicesClass:"connectedDevicesClass",connectedDevicesImg:null,connectedDevicesLabel:"Connected devices:", previewDeviceClass:"preview",previewDeviceElementId:"previewDevice",previewDeviceDefaultImg:"../../../theme/upload/images/icon-edge.png",deviceLabelMaxSize:20,showBrowseComputer:false,detectNewActivities:false,syncDataUrl:null,syncDataOptions:null,pluginUnlocked:"Plug-in initialized. Find some devices to get started.",pluginNotUnlocked:"The plug-in was not unlocked successfully",gpsData:"GPS Data",trainingData:"Training Data",usingDevice:"Using #{deviceName}",trackListing:"#{date} (Duration: #{duration} )", dataFound:"#{routes} routes, #{tracks} tracks and #{waypoints} waypoints found",writingToDevice:"Writing data to the device",writtenToDevice:"Data written to the device",writingCancelled:"Writing cancelled",overwritingFile:"Overwriting file",notOverwritingFile:"Will not be overwriting file",lookingForDevices:"Looking for connected devices...",foundDevice:"Found #{deviceName} ",foundDevices:"Found #{deviceCount} devices",findCancelled:"Find cancelled",dataReadProcessing:"Data read from device. Processing...", dataDownloadProcessing:"Processing data to write... ",uploadsFinished:"Transfer Complete!",noParseSupportForType:"The plugin does not have parsing support for file type ",installNow:"Install now?",downloadAndInstall:"Download and install now",poweredByGarmin:"Powered by <a href='http://www.garmin.com/products/communicator/' target='_new'>Garmin Communicator</a>",unsupportedDevice:"Your device is not supported by this application.",errorActivitySelect:"No selected or new activities to upload.",activityDirectoryHeaderDate:"<b>Date</b>", getActivityDirectoryHeaderIdLabel:function(){return"<b>Date</b>"},activityDirectoryHeaderDuration:"<b>Duration</b>",activityDirectoryHeaderStatus:"<b>Status</b>",unsupportedReadDataType:"Your device does not support reading of the type #{dataType}.",unsupportedWriteDataType:"Your device does not support writing of the type #{dataType}.",uploadingActivities:"Uploading activities...",uploadMaximumReached:"Maximum upload selection of #{activities} activities reached.",statusCellProcessingImg:'<img src="style/processing-arrows.gif" width="15" height="15" />', sendingDataToServer:"Sending data from #{deviceName} to server...",errorHttpResponse:"Unable to get valid response from HTTP request object. Ensure that your options are set correctly and try again.",noFilteredActivities:"No new activities found on device.",noActivitiesOnDevice:"No activities found on selected device."}; var GarminDeviceDisplay={require:function(a){document.write('<script type="text/javascript" src="'+a+'"><\/script>')},load:function(){if(typeof Prototype=="undefined"||typeof Element=="undefined"||typeof Element.Methods=="undefined"||parseFloat(Prototype.Version.split(".")[0]+"."+Prototype.Version.split(".")[1])<1.5)throw"GarminDeviceDisplay requires the Prototype JavaScript framework >= 1.5.0";$A(document.getElementsByTagName("script")).findAll(function(a){return a.src&&a.src.match(/GarminDeviceDisplay\.js(\?.*)?$/)}).each(function(a){var b= a.src.replace(/GarminDeviceDisplay\.js(\?.*)?$/,"../../");a=a.src.match(/\?.*load=([a-z,]*)/);(a?a[1]:"garmin/device/GarminDeviceControl,garmin/device/GarminDevicePlugin,garmin/device/GarminGpsDataStructures,garmin/device/GoogleMapController,garmin/device/GarminDevice,garmin/device/GarminPluginUtils,garmin/api/GarminRemoteTransfer,garmin/util/Util-XmlConverter,garmin/util/Util-Broadcaster,garmin/util/Util-DateTimeFormat,garmin/util/Util-BrowserDetect,garmin/util/Util-PluginDetect,garmin/device/GarminObjectGenerator,garmin/activity/GarminMeasurement,garmin/activity/GarminSample,garmin/activity/GarminSeries,garmin/activity/GarminActivity,garmin/activity/GarminActivityDirectory,garmin/activity/GarminActivityFilter,garmin/activity/GarminActivityMatcher,garmin/activity/TcxActivityFactory,garmin/activity/GpxActivityFactory,garmin/directory/GarminDirectoryFactory,garmin/directory/GarminFile").split(",").each(function(c){GarminDeviceDisplay.require(b+ c+".js")})})}};GarminDeviceDisplay.load();
