function MyCookie(c){this.$name=c;var f=document.cookie;if(f==""){return}var g=f.split(";");var e=null;for(var d=0;d<g.length;d++){while(g[d].charAt(0)==" "){g[d]=g[d].substring(1,g[d].length)}if(g[d].substring(0,c.length+1)==(c+"=")){e=g[d];break}}if(e==null){return}var h=e.substring(c.length+1);var b=h.split("&");for(var d=0;d<b.length;d++){b[d]=b[d].split(":")}for(var d=0;d<b.length;d++){this[b[d][0]]=decodeURIComponent(b[d][1])}}MyCookie.prototype.store=function(f,d,a,e){var c="";for(var g in this){if((g.charAt(0)=="$")||((typeof this[g])=="function")){continue}if(c!=""){c+="&"}c+=g+":"+encodeURIComponent(this[g])}var b=this.$name+"="+c;if(a||a==0){b+=";max-age="+(a*24*60*60)}if(f){b+=";path="+f}if(d){b+=";domain="+d}if(e){b+=";secure"}document.cookie=b};MyCookie.prototype.remove=function(c,a,b){for(var d in this){if(d.charAt(0)!="$"&&typeof this[d]!="function"){delete this[d]}}this.store(0,c,a,b)};MyCookie.enabled=function(){if(navigator.cookieEnabled!=undefined){return navigator.cookieEnabled}if(MyCookie.enabled.cache!=undefined){return MyCookie.enabled.cache}document.cookie="testcookie=test; max-age=10000";var a=document.cookie;if(a.indexOf("testcookie=test")==-1){return MyCookie.enabled.cache=false}else{document.cookie="testcookie=test; max-age=0";return MyCookie.enabled.cache=true}};function showContactForm(){var a=document.getElementById("new_contact");a.style.display="block";var b=document.getElementById("contactButton");b.value="hide form";b.onclick=hideContactForm}function hideContactForm(){var a=document.getElementById("new_contact");a.style.display="none";var b=document.getElementById("contactButton");b.value="Add Contact";b.onclick=showContactForm}function showDetailsForm(){var a=document.getElementById("edit_details");a.style.display="block";var b=document.getElementById("detailsButton");b.value="hide form";b.onclick=hideDetailsForm}function hideDetailsForm(){var a=document.getElementById("edit_details");a.style.display="none";var b=document.getElementById("detailsButton");b.value="edit details";b.onclick=showDetailsForm}function selectAll(){for(i=0;i<document.getElementById("shareform").elements.length;i++){if(document.getElementById("shareform").elements[i].name=="contact[]"){document.getElementById("shareform").elements[i].checked=document.getElementById("shareform").shareall.checked}}}function hide(a){elementToHide=document.getElementById(a);elementToHide.style.display="none"}function reloadLogGraph(a){showGraphElement=document.getElementById("showtrend");if(showGraphElement.checked){var b="on"}else{var b="off"}graphElement=document.getElementById("logGraph");graphElement.src="/images/log_graph"+a+b+".gif"}function updateSearchable(b){var d=document.getElementById("searchable"+b);if(d.checked==true){var a="1"}else{var a="0"}var c=GXmlHttp.create();c.open("GET","/account/ajax_searchable/"+b+"/"+a,true);c.setRequestHeader("Connection","close");c.send(null)}function importGPS(){window.open("/account/import_gps","GPS_import","toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=570,height=300,left=340,top=212")}function exportGPS(a){window.open("/main/export_gps/"+a,"GPS_Export","toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=570,height=250,left=340,top=212")}function showSportSelect(){document.getElementById("sportSelectRadio").checked=true;document.getElementById("sport_popup").style.display="block"}function hideSportSelect(){document.getElementById("sportSelectRadio").checked=true;document.getElementById("sport_popup").style.display="none"}function sportSelect(){if(document.getElementById("sportSelectRadio").checked){document.getElementById("sport_popup").style.display="block"}else{document.getElementById("sport_popup").style.display="none"}}var tabledata=null;var table=null;var chartdata=null;var chart=null;var filteredData=new Array();var columnColours=new Array();var columnLookup=new Object();function initialiseActivityData(){tabledata=new google.visualization.DataTable();tabledata.addColumn("string",tableColumnHeadings[0]);tabledata.addColumn("date",tableColumnHeadings[1]);tabledata.addColumn("string",tableColumnHeadings[2]);tabledata.addColumn("number",tableColumnHeadings[3]);tabledata.addColumn("timeofday",tableColumnHeadings[4]);tabledata.addColumn("number",tableColumnHeadings[5]);table=new google.visualization.Table(document.getElementById("table_div"));google.visualization.events.addListener(table,"select",selectHandler);chart=new google.visualization.ColumnChart(document.getElementById("chart_div"));chartdata=new google.visualization.DataTable();updateActivitySelection()}function updateActivitySelection(){var d=$("#include_sport").val();var a=$("#include_route").val();filteredData.length=0;for(var b=0;b<activities.length;b++){if(activities[b][1]==d||d=="all"){if(activities[b][0]==a||a=="all"){if(inRange(activities[b][2])){filteredData.push(activities[b])}}}}setTableData();var c={headerRow:"table_header_tr",headerCell:"table_header_th",oddTableRow:"table_oddTableRow",tableRow:"table_tableRow",hoverTableRow:"table_hoverRow",selectedTableRow:"table_selectedRow"};table.draw(tabledata,{allowHtml:true,page:"enable",sort:"enable",sortAscending:false,sortColumn:0,width:505,cssClassNames:c});if($("#chart_tab").hasClass("selected")){$("#table_div").hide()}if(setChartData()){chart.draw(chartdata,{width:505,height:250,colors:columnColours})}else{alert("No data selected.\nTry selecting a longer time period,\nor including more sports or routes")}updateRecentActivities()}function selectHandler(){var a=table.getSelection();var b=a[0].row;if(confirm("Edit this activity?")){showActivityEditor(filteredData[b])}}function showActivityEditor(c){if(c){if(c[7]!=0){window.location="#page_top";$("#activityEditor h3").html('Edit activity &nbsp;&nbsp; <input id="_log_new_activity_button" type="button" value="Log new Activity" style="font-size:12pt;" onclick="hideActivityEditor();" />');$("#delete_activity_button").show()}else{$("#delete_activity_button").hide()}$("#activityEditor").css("background-color","#f8f8f8");$("#activityId").val(c[7]);$("#new_sports").val(c[1]);if(c[0]==0){$("#route_type").removeAttr("checked");$("#gym_type").attr("checked","checked");$("#route_select_tr").hide()}else{$("#gym_type").removeAttr("checked");$("#route_type").attr("checked","checked");$("#route_select_tr").show()}if(unit=="Miles"){var a=0.621367*c[4]/1000}else{var a=c[4]/1000}$("#distance").val(a.toFixed(2));$.ajax({url:"/account/ajax_getRoutes/"+encodeURIComponent(c[1]),dataType:"html",success:function(d){$("#new_routes").html(d);if(c[0]!=""){var e=function(){$("#new_routes").val(c[0])};setTimeout(e,50)}}});$("#new_date").datepicker("setDate",c[2]);var b=secsToTimeArray(c[5]);$("select[name='Time_Hour']").val(b[0].toString().padL(2,"0"));$("select[name='Time_Minute']").val(b[1].toString().padL(2,"0"));$("select[name='Time_Second']").val(b[2].toString().padL(2,"0"));$("#new_effort").val(c[6]);$("#comments").val(c[8])}}function hideActivityEditor(){showActivityEditor(["","all",todayString,"",0,0,5,0,""]);$("#activityEditor h3").text("Log new activity");$("#activityEditor").css("background-color","#ffffff");$("#gym_type").removeAttr("checked");$("#route_type").attr("checked","checked");$("#route_select_tr").show()}function updateRecentActivities(){var c="";for(var b=activities.length-1;b>activities.length-11&&b>=0;b--){var f="/images/sports/"+activities[b][1].replace(/ /,"_")+"_35.png";var d=secsToTimeArray(activities[b][5]);var a='<a href="#"  style="float:left;" onclick="if(confirm(\'Edit this activity?\')){ showActivityEditor([\''+activities[b][0]+"','"+activities[b][1]+"','"+activities[b][2]+"','"+activities[b][3]+"',"+activities[b][4]+","+activities[b][5]+","+activities[b][6]+","+activities[b][7]+",'"+safeHTML(activities[b][8])+"'])}; return false;\">";if(unit=="Miles"){var e=activities[b][4]/1609.344}else{var e=activities[b][4]/1000}c+='<div class="recent_activity"';if(b%2==0){colour="f0f0f0"}else{colour="e1e1e1"}if(b==0||b==activities.length-10){c+=' style="background:#'+colour+' url(/images/thin_grey_bottom.png) no-repeat left bottom;">'}else{c+=' style="background-color:#'+colour+'">'}c+=a+'<img style="margin:5px 5px 0 0;vertical-align:middle;border:0 solid;" src="'+f+'" width="35" height="35" alt="'+activities[b][1]+'" /></a>';c+='<div style="float:left;width:150px;margin-left:5px;line-height:110%;padding:4px 0;overflow:hidden;">'+a;c+=activities[b][2]+"<br />";c+=safeHTML(activities[b][3])+"<br />";c+=e.toFixed(2)+" "+unitText+" "+inText+" "+d[0]+":"+d[1].toString().padL(2,"0")+":"+d[2].toString().padL(2,"0");c+='</a></div><div class="clear"></div></div>'}$("#recent_activities").html(c)}function safeHTML(a){return a.replace(/'/g,"\\'").replace(/&#039;/g,"\\'").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\n/g,"\\n")}function setTableData(){if(tabledata.getNumberOfRows()>0){tabledata.removeRows(0,tabledata.getNumberOfRows())}for(var c=0;c<filteredData.length;c++){if(unit=="Miles"){var d=filteredData[c][4]/1609.344}else{var d=filteredData[c][4]/1000}var a=getDateObject(filteredData[c][2],date_format.visualization);tabledata.addRow([{v:filteredData[c][1],f:'<img width="35" height="35" title="'+filteredData[c][1]+'" alt="'+filteredData[c][1]+'" src="/images/sports/'+filteredData[c][1].replace(/ /,"_")+'_35.png"/>'},a,filteredData[c][3],{v:filteredData[c][4],f:d.toFixed(2)+" "+unit},secsToTimeArray(filteredData[c][5]),filteredData[c][6]])}var b=new google.visualization.DateFormat({pattern:date_format.visualization});b.format(tabledata,1)}function secsToTimeArray(d){var a=Math.floor((d/3600));var c=Math.floor((d%3600)/60);var b=d-(a*3600)-(c*60);return[a,c,b,0]}function setChartData(){var j={running:"#4dac27",walking:"#ff1b00",cycling:"#095ca6","mountain biking":"#650d4c",swimming:"#090c46",canoeing:"#239f97","downhill skiing":"#826a75","cross-country skiing":"#f23c9b","horse riding":"#5e2211"};if(chartdata.getNumberOfRows()>0){chartdata.removeRows(0,chartdata.getNumberOfRows())}if(chartdata.getNumberOfColumns()>0){chartdata.removeColumns(0,chartdata.getNumberOfColumns())}var a=getDateObject($("#date_range_start").val(),date_format.visualization);if(a==null){a=getDateObject(activities[0][2],date_format.visualization)}var b=getDateObject($("#date_range_end").val(),date_format.visualization);if(b==null){var d=new Date();b=new Date(d.getYear(),d.getMonth(),d.getDate(),12)}var l=$("#group_fn").val();var e=$("#group_attribute").val();var k="number";if(e=="time"){k="timeofday"}chartdata.addColumn("date","Date");var g=new Object();for(var h=0;h<filteredData.length;h++){g[filteredData[h][1]]=1}columnColours.length=0;for(var f in g){chartdata.addColumn(k,sportsText[f]);columnColours.push(j[f]);columnLookup[f]=chartdata.getNumberOfColumns()-1}if(chartdata.getNumberOfColumns()==1){chartdata.addColumn(k,"")}var c=false;if($("#dayRadio").attr("checked")==true){c=collateDay(a,b,l,e)}else{if($("#monthRadio").attr("checked")==true){c=collateMonth(a,b,l,e)}else{c=collateWeek(a,b,l,e)}}return c}function getDateString(a,c){var b="";switch(c){case"MM/dd/yyyy":b=(a.getMonth()+1).toString().padL(2,"0")+"/"+a.getDate().toString().padL(2,"0")+"/"+a.getFullYear();break;case"MM/yyyy":b=(a.getMonth()+1).toString().padL(2,"0")+"/"+a.getFullYear();break;default:b=a.getDate().toString().padL(2,"0")+"/"+(a.getMonth()+1).toString().padL(2,"0")+"/"+a.getFullYear()}return b}function getDateObject(c,d){var a=null;var b=c.split("/");if(b.length==3){switch(d){case"MM/dd/yyyy":a=new Date(b[2],b[0]-1,b[1],12);break;default:a=new Date(b[2],b[1]-1,b[0],12)}}return a}function collateDay(c,g,h,b){var a=false;var k=chartdata.getNumberOfColumns();var l=new Array(k);var f=0;for(f=1;f<k;f++){l[f]=null}var d=c;var o=new Object();while(d.getTime()<=(g.getTime()+3600*1000)){var m=getDateString(d,date_format.visualization);row=l.slice(0);row[0]=new Date(d.getTime());o[m]=row;d.setTime(d.getTime()+24*3600*1000)}for(f=0;f<filteredData.length;f++){if(!o[filteredData[f][2]][columnLookup[filteredData[f][1]]]){o[filteredData[f][2]][columnLookup[filteredData[f][1]]]=new Array()}o[filteredData[f][2]][columnLookup[filteredData[f][1]]].push(filteredData[f])}var e=0;for(row in o){for(f=1;f<o[row].length;f++){if(o[row][f]!=null){switch(h){case"total":o[row][f]=total(o[row][f],b);break;case"average":o[row][f]=average(o[row][f],b);break;case"maximum":o[row][f]=maximum(o[row][f],b);break;case"minimum":o[row][f]=minimum(o[row][f],b);break;default:o[row][f]=0}}else{if(b=="time"){o[row][f]=[0,0,0,0]}else{o[row][f]=0}}if(o[row][f]!=0){a=true}}chartdata.addRow(o[row])}var n=new google.visualization.DateFormat({pattern:date_format.visualization});n.format(chartdata,0);return a}function collateWeek(c,h,j,b){var a=false;var k=chartdata.getNumberOfColumns();var l=new Array(k);for(var g=1;g<k;g++){l[g]=null}var e=new Date(c.getTime()-c.getDay()*24*3600*1000);var o=new Object();while(e.getTime()<=(h.getTime()+3600*1000)){var m=getDateString(e,date_format.visualization);row=l.slice(0);row[0]=new Date(e.getTime());o[m]=row;e.setTime(e.getTime()+7*24*3600*1000)}for(var g=0;g<filteredData.length;g++){var e=getDateObject(filteredData[g][2],date_format.visualization);e.setTime(e.getTime());var f=new Date(e.getTime()-e.getDay()*24*3600*1000);var d=getDateString(f,date_format.visualization);if(!o[d][columnLookup[filteredData[g][1]]]){o[d][columnLookup[filteredData[g][1]]]=new Array()}o[d][columnLookup[filteredData[g][1]]].push(filteredData[g])}for(row in o){for(var g=1;g<o[row].length;g++){if(o[row][g]!=null){switch(j){case"total":o[row][g]=total(o[row][g],b);break;case"average":o[row][g]=average(o[row][g],b);break;case"maximum":o[row][g]=maximum(o[row][g],b);break;case"minimum":o[row][g]=minimum(o[row][g],b);break;default:o[row][g]=0}}else{if(b=="time"){o[row][g]=[0,0,0,0]}else{o[row][g]=0}}if(o[row][g]!=0){a=true}}chartdata.addRow(o[row])}var n=new google.visualization.DateFormat({pattern:date_format.visualization});n.format(chartdata,0);return a}function collateMonth(c,f,g,b){var a=false;var h=chartdata.getNumberOfColumns();var j=new Array(h);for(var e=1;e<h;e++){j[e]=null}var n=new Object();var d=c;while(d.getFullYear()<f.getFullYear()||(d.getFullYear()==f.getFullYear()&&d.getMonth()<=f.getMonth())){var m=getDateString(d,"MM/yyyy");row=j.slice(0);row[0]=new Date(d.getTime());n[m]=row;if(d.getMonth()<11){d.setMonth(d.getMonth()+1)}else{d.setMonth(0);d.setFullYear(d.getFullYear()+1)}}for(var e=0;e<filteredData.length;e++){var k=getDateString(getDateObject(filteredData[e][2],date_format.visualization),"MM/yyyy");if(!n[k][columnLookup[filteredData[e][1]]]){n[k][columnLookup[filteredData[e][1]]]=new Array()}n[k][columnLookup[filteredData[e][1]]].push(filteredData[e])}for(row in n){for(var e=1;e<n[row].length;e++){if(n[row][e]!=null){switch(g){case"total":n[row][e]=total(n[row][e],b);break;case"average":n[row][e]=average(n[row][e],b);break;case"maximum":n[row][e]=maximum(n[row][e],b);break;case"minimum":n[row][e]=minimum(n[row][e],b);break;default:n[row][e]=0}}else{if(b=="time"){n[row][e]=[0,0,0,0]}else{n[row][e]=0}}if(n[row][e]!=0){a=true}}chartdata.addRow(n[row])}var l=new google.visualization.DateFormat({pattern:"MM/yyyy"});l.format(chartdata,0);return a}function inRange(e){var c=getDateObject(e,date_format.visualization);var d=getDateObject($("#date_range_start").val(),date_format.visualization);var b=getDateObject($("#date_range_end").val(),date_format.visualization);var a=false;if(d&&b){a=isAfter(c,d)&&isAfter(b,c)}else{if(b){a=isAfter(b,c)}}return a}function isAfter(b,a){return b.getTime()>=a.getTime()}function total(d,c){var b=0;for(var a=0;a<d.length;a++){b+=getActivityAttrib(d[a],c)}return getFormatedValue(b,c)}function average(d,c){var b=0;for(var a=0;a<d.length;a++){b+=getActivityAttrib(d[a],c)}return getFormatedValue(b/d.length,c)}function maximum(e,d){var a=0;for(var b=0;b<e.length;b++){var c=getActivityAttrib(e[b],d);if(c>a){a=c}}return getFormatedValue(a,d)}function minimum(e,d){var b=99999999;for(var a=0;a<e.length;a++){var c=getActivityAttrib(e[a],d);if(c<b){b=c}}return getFormatedValue(b,d)}function getFormatedValue(e,d){switch(d){case"distance":var c=e.toFixed(2)+" "+unit;break;case"time":var b=secsToTimeArray(e);e=[b[0],b[1],Math.floor(b[2]),0];break;case"calories":var c=e.toFixed(0)+" "+energy_unit;break;case"speed":var c=e.toFixed(2)+" "+unit+"/Hour";break;case"pace":var a=Math.round((e-Math.floor(e))*60);a=(a<10?"0"+a:a);var c=Math.floor(e)+":"+a+" Mins/"+(unit=="Miles"?"Mile":"Km");break;case"effort":var c=e.toFixed(2).toString();break}if(c){return{v:e,f:c}}else{return e}}function getActivityAttrib(c,b){var a=0;switch(b){case"activities":a=1;break;case"distance":if(unit=="Miles"){a=c[4]/1609.344}else{a=c[4]/1000}break;case"time":a=c[5];break;case"calories":a=calcEnergy(c);break;case"speed":if(unit=="Miles"){a=(c[4]/1609.344)/(c[5]/3600)}else{a=(c[4]/1000)/(c[5]/3600)}break;case"pace":if(unit=="Miles"){a=(c[5]/60)/(c[4]/1609.344)}else{a=(c[5]/60)/(c[4]/1000)}break;case"effort":a=c[6];break;default:a=0}return a}function calcEnergy(c){var d={running:0.999,cycling:0.403,walking:0.699,"mountain biking":0.544,swimming:2.941,"horse riding":0.502,canoeing:0.765,"cross-country skiing":1.211,"downhill skiing":0.118};var b=d[c[1]];var a=b*user_weight*c[4]/1000;if(energy_unit=="joules"){a=a*4.184}return a}function updateActivityFunctions(d){var b=$("#group_fn").val();var a=null;var e=["total","average","maximum","minimum"];switch(d){case"activities":a=[1,0,0,0];break;case"distance":a=[1,1,1,1];break;case"time":a=[1,1,1,1];break;case"calories":a=[1,1,1,1];break;case"speed":a=[0,1,1,1];break;case"pace":a=[0,1,1,1];break;case"effort":a=[0,1,1,1];break;default:a=[1,1,1,1];break}for(var c=0;c<a.length;c++){if(a[c]==1){$("#group_fn option[value="+e[c]+"]").removeAttr("disabled")}else{$("#group_fn option[value="+e[c]+"]").attr("disabled","disabled")}}if($("#group_fn option[value="+b+"]").attr("disabled")==true){for(var c=0;c<a.length;c++){if(a[c]==1){$("#group_fn option:selected").removeAttr("selected");$("#group_fn option[value="+e[c]+"]").attr("selected","selected");break}}}}String.prototype.padL=function(a,c){if(!a||a<1){return this}if(!c){c=" "}var b=a-this.length;if(b<1){return this.substr(0,a)}return(String.repeat(c,b)+this).substr(0,a)};String.repeat=function(b,c){var d="";for(var a=0;a<c;a++){d+=b}return d};
