
$.ajaxSetup({"traditional":true});function activatePageMenu(activateItems)
{$(function(){$("div#pagemenu li").hover(function(){$("ul",this).fadeIn("fast");},function(){$("ul",this).fadeOut("fast");}).find("ul").hide();});if(activateItems)activateItems();}
function post_menu_link(obj,data,callback,confirm_qn)
{if(!data)data={};if(typeof data=="function")data=data(obj);if(!callback)callback=reload_page;obj.click(function(e){if(!confirm_qn||confirm(confirm_qn)){post_indicator($(this)[0].href,data,callback,"text");}
e.stopPropagation();return false;});}
function reload_page(data){location.reload();}
function redirect_to_post_result(data){location.href=data;}
function init_select_all(select_all_id,checkbox_name)
{$("#"+select_all_id).click(function()
{var checked_status=this.checked;$("input[name="+checkbox_name+"]").each(function()
{this.checked=checked_status;});});}
function set_checkbox_checked(jquery_selector,checked)
{jquery_selector.each(function(){this.checked=checked;});}
function build_selector(table,checkbox_name,options,extra_click_fn)
{var checkbox_names=checkbox_name.split(',');var checkbox_selectors="";for(var i=0;i<checkbox_names.length;i++)
checkbox_selectors+=(i==0?"":",")+"input[name="+checkbox_names[i]+"]";var defaults={select_all:{text:"All",rule:function(){$("#select_all_pages").slideDown();set_checkbox_checked($(checkbox_selectors),true);}},select_none:{text:"None",rule:function(){}}};var settings=$.extend(true,{},defaults,options);var selectors=$('<div>Select: </div>');var first=true;for(var i in settings){if(!first)selectors.append(', ');first=false;selectors.append($('<a href="#">'+settings[i].text+'</a>').click(extra_click_fn||function(){}).click(function(){set_checkbox_checked($(checkbox_selectors),false);return false;}).click(settings[i].rule));}
selectors.append('.');$(table).before(selectors);}
function build_all_pages_selector(tableID,text,value)
{$(tableID).before($('<div id="select_all_pages"><input id="id_selectAll" type="checkbox" name="selectAll" value="'+value+'"> <label for="id_selectAll">'+text+'</label> (this will override any selections below.)</div>').hide());}
function post_indicator(url,data,ret,type,message)
{function myRet(data){ret(data);$("#loading_indicator").hide();}
$("#loading_indicator").text(message||"Loading...").show();$.post(url,data,myRet,type);}
function add_check_selected_validation(buttons,checkboxNames,selectallCheckboxID,entity,single)
{if(!entity)entity="logs";var checkbox_selector="";var checkbox_names=checkboxNames.split(",");for(var i=0;i<checkbox_names.length;i++)
checkbox_selector+=(i==0?"":",")+"input[name="+checkbox_names[i]+"]:checked";$(buttons).click(function()
{var ticked=$(checkbox_selector+(selectallCheckboxID?",#"+selectallCheckboxID+":checked":""));if(ticked.length)
return true;else
alert("Please select "+(single?"a ":"one or more ")+entity+" first.");return false;});}
if($.tablesorter){$.tablesorter.addParser({id:'duration',is:function(s){return false;},format:function(s){if(!s)return 0.0;s=s.replace(/^\s+/,"").replace(/\s+$/,"");if(s.length==0)return 0.0;var days=s.split("d ");if(days.length>1){s=days[1];days=parseInt(days[0],10);}else{days=0;}
var hrs=s.split(":");if(hrs.length==3){hrs=parseInt(hrs[0],10)+parseInt(hrs[1],10)/60.0+parseInt(hrs[2],10)/3600.0;}else if(hrs.length==2){hrs=parseInt(hrs[0],10)+parseInt(hrs[1],10)/60.0;}else{hrs=0;}
return 24.0*days+hrs;},type:'numeric'});$.tablesorter.addParser({id:'dist',is:function(s){return false;},format:function(s){if(!s)return 0.0;s=s.replace(/^\s+/,"").replace(/\s+$/,"");if(s.length==0)return 0.0;var s=s.split(" ")[0];return parseFloat(s.replace(",",""));},type:'numeric'});}
function setEditable(obj,empty_display,text_to_input,text_to_display,get_post_url,text_to_post)
{if(obj.text().length==0)
obj.text(empty_display).addClass("empty").click(function(){$(this).text("").removeClass("empty");});return obj.click(function(){var original_value=$(this).text();$(this).before($(text_to_input(original_value))).before($('<input type="button" value="Save">').click(function(){var save_button=$(this),new_value=save_button.siblings(0).val();post_indicator(get_post_url(save_button),text_to_post(new_value),function(data){save_button.parent().empty().append(setEditable($(text_to_display(new_value)),empty_display,text_to_input,text_to_display,get_post_url,text_to_post));},"text");})).before($('<input type="button" value="Cancel">').click(function(){$(this).parent().empty().append(setEditable($(text_to_display(original_value)),empty_display,text_to_input,text_to_display,get_post_url,text_to_post));}));$(this).parent().children().get(0).focus();$(this).remove();});}
function showLogNotesIconPopup()
{$("#logNotesPopup").remove();var offset=$(this).offset();var x=offset.left-200+8,y=offset.top-50-8;$('<div id="logNotesPopup">loading...</div>').css({display:'none',top:(y>0?y:10),height:50,left:(x>0?x:10),width:200}).appendTo("body").fadeIn(200).click(function(){$(this).fadeOut();}).load($(this)[0].href);return false;}
function showLogPreviewPopup()
{$("#logPreviewPopup").remove();var offset=$(this).offset(),url=$(this)[0].href+"/html?preview";$('<div id="logPreviewPopup">loading...</div>').css({display:'none',top:offset.top-200-8,height:400,left:offset.left+64+8,width:300}).appendTo("body").fadeIn(200).load(url);return false;}
function deg_to_heading(deg){var d=Math.floor((deg+22.5)/45.0)%8;return["N","NE","E","SE","S","SW","W","NW"][d];}
var quickfind_data=null;var date_search=new RegExp("^\\d{4}[-/]\\d{1,2}([-/]\\d{1,2})?$");function do_quickfind(text){var cols=$.map(quickfind_data,function(col){return quickfind_col(col,text);});var tbl="";for(var i=0;i<cols.length;i+=3){tbl+='<tr>'+(cols[i]?cols[i]:'<td></td>')+(cols[i+1]?cols[i+1]:'<td></td>')+(cols[i+2]?cols[i+2]:'<td></td>')+'</tr>';}
if(text.length>0){tbl='<tr><td>'
+'<form method="get" action="/search/">'
+'<input type="hidden" name="q" value="'+escape(text)+'"/>'
+'<input type="submit" name="" value="Search activity notes for &quot;'+escape(text)+'&quot;"/>'
+'</form>'
+'</td><td></td><td></td></tr>'
+tbl;}
$("#qf_popup div.inner").empty().append($('<table><tbody>'+tbl+'</tbody></table>'));if(date_search.test(text)){$("#qfset_calendar ul").append($('<li><a href="/date/'+text.replace(/-/g,'/')+'">Go to '+text+'</a></li>'));}}
function quickfind_items(items,text){if(text){return $.grep(items,function(item){return(item.keywords.indexOf(text)!=-1);});}else{return items;}}
function quickfind_col(col,text){var icon=col.icon?'<img src="'+col.icon+'" width="24" height="24">':'';var matches=quickfind_items(col.items,text);var display=matches.slice(0,text?8:5);var more=matches.length>display.length?'<a class="more" href="'+col.url+(text?'?filter='+escape(text):'')+'">more...</a>':'';return'<td class="col" id="'+col.id+'"><h4'+(matches.length?'':' class="empty"')+'><a href="'+col.url+'">'+icon+col.title+'</a></h4><ul>'+$.map(display,function(item){return quickfind_item(item);}).join("")+'</ul>'+more+'</td>';}
function quickfind_item(item){var icon=item.icon?'<img src="'+item.icon+'">':'';var rank=item.rank?'<div class="rank" style="width:'+item.rank+'px;"></div>':'';return'<li'+(item.favourite?' class="fav"':'')+'><a href="'+item.url+'">'+icon+item.title+rank+'</a></li>';}
function createCookie(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}
else var expires="";document.cookie=name+"="+value+expires+"; path=/";}
function readCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length);}
return null;}
function eraseCookie(name){createCookie(name,"",-1);}
function lookupAddress(lat,lng,place_name_input)
{$(place_name_input).val("Looking up address...").attr("disabled","true").after('<img src="/media/img/ajax_loader.gif">');geocoder.getLocations(new GLatLng(lat,lng),function(addresses){$(place_name_input).val(addresses.Status.code==200?addresses.Placemark[0].address:"");$(place_name_input).each(function(){$(this).parent().find("img").hide();$(this).removeAttr("disabled");});});}
function lookupTimezone(lat,lng,place_tz_input)
{$(place_tz_input).attr("disabled","true").prepend('<option value="">Looking up timezone...</option>');$(place_tz_input).val("").trigger('liszt:updated');$(place_tz_input).after('<img src="/media/img/ajax_loader.gif">');$.getJSON("http://ws.geonames.org/timezoneJSON?lat="+lat+"&lng="+lng+"&username=gpsloglabs&callback=?",function(json){if(json.timezoneId){$(place_tz_input).val(json.timezoneId).trigger('liszt:updated');}
$(place_tz_input).each(function(){$(this).parent().find("img").hide();$(this).children().eq(0).remove();$(this).trigger('liszt:updated');$(this).removeAttr("disabled");});});}
function radius_to_km(r){return(r/gUnits.m.factor)/1000.0;}
var showLogPreview_last_line=null;function showLogPreview($div,first)
{if($div.length){if(!first&&$div.hasClass("preview")){window.location=$div.find("a")[0].href;}
$("table.activity div.log").removeClass("preview").find("img.arrow").remove();$div.addClass("preview").append('<img class="arrow" src="/media/img/activity_right_arrow.png">');var logUrl=$div.find("a")[0].href;$("#previewMore a")[0].href=logUrl;if(logUrl[logUrl.length-1]!="/"){logUrl+="/";}
GEvent.clearListeners(map,"addoverlay");GEvent.addListener(map,"addoverlay",function(o){if(o.setStrokeStyle)showLogPreview_last_line=o;});if(showLogPreview_last_line){showLogPreview_last_line.setStrokeStyle({color:"#666",opacity:0.6,weight:4});showLogPreview_last_line=null;}
map.marker_mgr.clearMarkers();render_json_log_map(logUrl+"json?preview_map",map,new GLatLngBounds(),"");$("#previewDetails").load(logUrl+"html?preview_details");}}
function bindActivityTable()
{$("table.activity div.log").hover(function(){$(this).addClass("hover");},function(){$(this).removeClass("hover");}).click(function(e){e.stopPropagation();showLogPreview($(this));return false;});showLogPreview($("table.activity div.log.preview"),true);$("#activity_table .loadfragment").click(function(){$("#activity_table").load($(this).attr("href"),bindActivityTable);return false;});}
function paginateTabs()
{function split_ul($ul1,count,not_first){var items="li:not(.more)";var n=$ul1.find(items).length;if(n>(count+2)){var fudge=(!not_first&&(n%count<=2))?n%count:0;var $ul2=$("<ul class=\"tabs\">").append($ul1.find(items).slice(count+fudge).remove());var ul2_titles="Show more tabs: "+$.map($ul2.find(items),function(li){return $(li).text();}).join(", ");$ul1.append($("<li class=\"more\">more &gt;&gt;</li>").attr("title",ul2_titles).click(function(){$(this).closest("ul").hide().next("ul").show("slide",{direction:"right"},"fast");}));var ul1_titles="Show more tabs: "+$.map($ul1.find(items),function(li){return $(li).text();}).join(", ");$ul2.prepend($("<li class=\"more\">&lt;&lt; more</li>").attr("title",ul1_titles).click(function(){$(this).closest("ul").hide().prev("ul").show("slide",{direction:"left"},"fast");}));if($ul1.find("li.active").length==0){$ul1.hide();}
if($ul2.find("li.active").length==0){$ul2.hide();}
$ul1.after($ul2);split_ul($ul2,count,true);}}
$(function(){if($("ul.tabs li:first").offset().top!=$("ul.tabs li:last").offset().top){split_ul($("ul.tabs"),6);}});}
function add_fullscreen_lightbox(div_id,resize){var $div=$(div_id);var $div_before=$div.prev();var original={height:$div.height(),width:$div.width()};var $link=$("<div class=\"fullscreen\">").append($("<span>View full-screen</span>").click(function(){var $lightbox=$('<div id="lightbox">');$('body').append($lightbox);$lightbox.append($('<span class="close">Close full-screen view</span>').click(function(){$(window).unbind('resize');$div.height(original.height);$div.width(original.width);$div_before.after($(div_id).detach());resize();$lightbox.remove();}));$lightbox.append($div.detach());$(window).resize(function(){$(div_id).width($lightbox.width()-40).height($lightbox.height()-50);resize();}).resize();}));$div.after($link);return $link;}
