diff options
66 files changed, 9336 insertions, 1207 deletions
diff --git a/cgeo-calendar/src/cgeo/calendar/AddEntry.java b/cgeo-calendar/src/cgeo/calendar/AddEntry.java index 39092cb..b1f97b9 100644 --- a/cgeo-calendar/src/cgeo/calendar/AddEntry.java +++ b/cgeo-calendar/src/cgeo/calendar/AddEntry.java @@ -32,7 +32,7 @@ class AddEntry extends AbstractAddEntry { final ContentValues event = new ContentValues(); event.put("calendar_id", calendarId); if (entry.getStartTimeMinutes() >= 0) { - event.put("dtstart", eventDate.getTime() + entry.getStartTimeMinutes() * 60000); + event.put("dtstart", eventDate.getTime() + entry.getStartTimeMinutes() * 60000L); } else { event.put("dtstart", eventDate.getTime() + 43200000); // noon diff --git a/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java b/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java index 787be73..44453dd 100644 --- a/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java +++ b/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java @@ -35,7 +35,7 @@ class AddEntryLevel14 extends AbstractAddEntry { .putExtra("eventTimezone", "UTC") .putExtra("eventLocation", eventLocation); if (entry.getStartTimeMinutes() >= 0) { - intent.putExtra("beginTime", eventDate.getTime() + entry.getStartTimeMinutes() * 60000); + intent.putExtra("beginTime", eventDate.getTime() + entry.getStartTimeMinutes() * 60000L); } else { intent.putExtra("beginTime", eventDate.getTime() + 43200000); diff --git a/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java b/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java index 3e4de73..e31e054 100644 --- a/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java +++ b/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java @@ -2,6 +2,8 @@ package cgeo.calendar; import cgeo.geocaching.utils.Log; +import org.apache.commons.lang3.CharEncoding; + import android.net.Uri; import android.text.Html; import android.text.Spanned; @@ -48,7 +50,7 @@ class CalendarEntry { if (param == null) { return ""; } - return URLDecoder.decode(param, "UTF-8").trim(); + return URLDecoder.decode(param, CharEncoding.UTF_8).trim(); } catch (UnsupportedEncodingException e) { Log.e("CalendarEntry.getParameter", e); } @@ -56,7 +58,7 @@ class CalendarEntry { } public boolean isValid() { - return (getName().length() > 0 && getHiddenDate().length() > 0); + return getName().length() > 0 && getHiddenDate().length() > 0; } public String getHiddenDate() { diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index 40bf906..fac0be9 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -180,7 +180,7 @@ </intent-filter> </activity> <activity - android:name=".cgeotrackable" + android:name="cgeo.geocaching.TrackableActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" > <intent-filter> diff --git a/main/res/layout/cacheview.xml b/main/res/layout/cacheview.xml index b13fc95..89d7152 100644 --- a/main/res/layout/cacheview.xml +++ b/main/res/layout/cacheview.xml @@ -21,9 +21,9 @@ <ImageView
android:id="@+id/defaultNavigation"
style="@style/action_bar_action"
+ android:longClickable="true"
android:onClick="startDefaultNavigation"
- android:src="@drawable/actionbar_compass_dark"
- android:longClickable="true" />
+ android:src="@drawable/actionbar_compass_dark" />
<View style="@style/action_bar_separator" />
diff --git a/main/res/layout/trackable_activity.xml b/main/res/layout/trackable_activity.xml new file mode 100644 index 0000000..fe61409 --- /dev/null +++ b/main/res/layout/trackable_activity.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res/cgeo.geocaching"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="?background_color"
+ android:orientation="vertical" >
+
+ <LinearLayout style="@style/action_bar" >
+
+ <ImageView
+ style="@style/action_bar_action"
+ android:onClick="goHome" />
+
+ <View style="@style/action_bar_separator" />
+
+ <TextView style="@style/action_bar_title" />
+
+ <View style="@style/action_bar_separator" />
+
+ <ImageView
+ style="@style/action_bar_action"
+ android:onClick="goManual"
+ android:src="@drawable/actionbar_manual" />
+ </LinearLayout>
+
+ <android.support.v4.view.ViewPager
+ android:id="@+id/viewpager"
+ android:layout_width="fill_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <com.viewpagerindicator.TitlePageIndicator
+ android:id="@+id/pager_indicator"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/actionbar_background"
+ app:footerColor="#ff888888"
+ app:footerIndicatorHeight="3dp"
+ app:footerIndicatorStyle="underline"
+ app:textSize="16dp" />
+
+</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/trackable_detail.xml b/main/res/layout/trackable_detail.xml deleted file mode 100644 index 4fc34a5..0000000 --- a/main/res/layout/trackable_detail.xml +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:orientation="vertical" - android:background="?background_color" > - <LinearLayout style="@style/action_bar"> - <ImageView style="@style/action_bar_action" - android:onClick="goHome" /> - <View style="@style/action_bar_separator" /> - <TextView style="@style/action_bar_title" /> - <View style="@style/action_bar_separator" /> - <ImageView style="@style/action_bar_action" - android:src="@drawable/actionbar_manual" - android:onClick="goManual" /> - </LinearLayout> - <ScrollView android:id="@+id/details_list_box" - android:visibility="gone" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:padding="4dip" - android:orientation="vertical" > - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <LinearLayout android:id="@+id/details_list" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - </LinearLayout> - <LinearLayout android:id="@+id/goal_box" - android:visibility="gone" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/trackable_goal" /> - </RelativeLayout> - <TextView android:id="@+id/goal" - android:visibility="gone" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="10dip" - android:textSize="14dip" - android:textColor="?text_color" - android:linksClickable="true" - android:textColorLink="?text_color_link" /> - </LinearLayout> - <LinearLayout android:id="@+id/details_box" - android:visibility="gone" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/trackable_details" /> - </RelativeLayout> - <TextView android:id="@+id/details" - android:visibility="gone" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="10dip" - android:textSize="14dip" - android:textColor="?text_color" - android:linksClickable="true" - android:textColorLink="?text_color_link" /> - </LinearLayout> - <LinearLayout android:id="@+id/image_box" - android:visibility="gone" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/trackable_image" /> - </RelativeLayout> - <LinearLayout android:id="@+id/image" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_marginTop="24dip" - android:padding="3dip" - android:orientation="vertical" > - </LinearLayout> - </LinearLayout> - <LinearLayout android:id="@+id/log_box" - android:visibility="gone" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/cache_logs" /> - </RelativeLayout> - <LinearLayout android:id="@+id/log_list" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - </LinearLayout> - </LinearLayout> - </LinearLayout> - </ScrollView> -</LinearLayout> diff --git a/main/res/layout/trackable_details_view.xml b/main/res/layout/trackable_details_view.xml new file mode 100644 index 0000000..7213171 --- /dev/null +++ b/main/res/layout/trackable_details_view.xml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="4dip"> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > + + <LinearLayout + android:id="@+id/details_list" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > + </LinearLayout> + + <LinearLayout + android:id="@+id/goal_box" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:visibility="gone" > + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/trackable_goal" /> + </RelativeLayout> + + <TextView + android:id="@+id/goal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="10dip" + android:linksClickable="true" + android:textColor="?text_color" + android:textColorLink="?text_color_link" + android:textSize="14dip" + android:visibility="gone" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/details_box" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:visibility="gone" > + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/trackable_details" /> + </RelativeLayout> + + <TextView + android:id="@+id/details" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="10dip" + android:linksClickable="true" + android:textColor="?text_color" + android:textColorLink="?text_color_link" + android:textSize="14dip" + android:visibility="gone" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/image_box" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:visibility="gone" > + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/trackable_image" /> + </RelativeLayout> + + <LinearLayout + android:id="@+id/image" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dip" + android:orientation="vertical" + android:padding="3dip" > + </LinearLayout> + </LinearLayout> + </LinearLayout> + +</ScrollView>
\ No newline at end of file diff --git a/main/res/layout/trackable_logs_view.xml b/main/res/layout/trackable_logs_view.xml new file mode 100644 index 0000000..0f89c31 --- /dev/null +++ b/main/res/layout/trackable_logs_view.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<ListView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:cacheColorHint="?background_color" + android:divider="?background_color" + android:fastScrollEnabled="true" + android:focusable="false" + android:footerDividersEnabled="false" + android:headerDividersEnabled="false" + android:listSelector="?background_color" > + +</ListView>
\ No newline at end of file diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index bace8f4..d8b6222 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -75,6 +75,8 @@ <string name="log_needs_archived">Sollte archiviert werden</string> <string name="log_discovered">Gesehen</string> <string name="log_reviewer">Review(er)-Anmerkung</string> + <string name="log_retractlisting">Listing zurückgezogen</string> + <string name="log_marked_missing">Als verloren gemeldet</string> <string name="log_tb_nothing">Keine Aktion</string> <string name="log_tb_visit">Besucht</string> <string name="log_tb_drop">Ablegen</string> @@ -286,6 +288,7 @@ <string name="caches_drop_stored">Gespeicherte löschen</string> <string name="caches_drop_progress">Entferne Caches…</string> <string name="caches_drop_all_and_list">Alle und Liste löschen</string> + <string name="caches_delete_events">Vergangene Events löschen</string> <string name="caches_refresh_selected">Ausgewählte aktualisieren</string> <string name="caches_refresh_all">Alle aktualisieren</string> <string name="caches_move_selected">Ausgewählte verschieben</string> @@ -651,15 +654,15 @@ <string name="waypoint_save">Speichern</string> <string name="waypoint_loading">Lade Wegpunkt…</string> <string name="waypoint_unknown_coordinates">Koordinaten unbekannt</string> - <string name="waypoint_set_as_cache_coords">Als Cache-Koordinaten setzen</string> - <string name="waypoint_reset_cache_coords">Cache-Koordinaten zurücksetzen</string> + <string name="waypoint_set_as_cache_coords">Als Cache-Koordinaten lokal setzen</string> + <string name="waypoint_reset_cache_coords">Zurücksetzen</string> <string name="waypoint_reset_cache_coords_on_website">Cache-Koordinaten auf Webseite zurücksetzen</string> <string name="waypoint_coordinates_has_been_reset_on_website">Koordinaten auf Webseite zurückgesetzt</string> <string name="waypoint_coordinates_being_reset_on_website">Koordinaten werden zurückgesetzt</string> <string name="waypoint_reset_cache_coords_info">Rücksetz-Optionen</string> <string name="waypoint_reset">Zurücksetzen</string> <string name="waypoint_localy_reset_cache_coords">Koodinaten lokal zurücksetzen</string> - <string name="waypoint_modify_on_website">Koordinaten auf der Webseite zurücksetzen</string> + <string name="waypoint_modify_on_website">Als Cache-Koordinaten auf der Webseite setzen</string> <string name="waypoint_coordinates_couldnt_be_modified_on_website">Cache-Koordinaten auf der Webseite konnten nicht zurückgesetzt werden</string> <string name="waypoint_coordinates_upload_error">Fehler beim Hochladen der Koordinaten zur Webseite</string> <string name="waypoint_coordinates_uploading_to_website">Setze %s auf der Webseite</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 94c2139..3d2cb13 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -78,6 +78,7 @@ <string name="log_discovered">Discovered</string> <string name="log_reviewer">Reviewer Note</string> <string name="log_retractlisting">Retract Listing</string> + <string name="log_marked_missing">Marked Missing</string> <string name="log_tb_nothing">Do Nothing</string> <string name="log_tb_visit">Visited</string> <string name="log_tb_drop">Dropped Off</string> @@ -289,6 +290,7 @@ <string name="caches_drop_stored">Drop stored</string> <string name="caches_drop_progress">Removing caches</string> <string name="caches_drop_all_and_list">Drop all and remove list</string> + <string name="caches_delete_events">Delete past events</string> <string name="caches_refresh_selected">Refresh selected</string> <string name="caches_refresh_all">Refresh all</string> <string name="caches_move_selected">Move selected</string> diff --git a/main/res/values/strings_not_translatable.xml b/main/res/values/strings_not_translatable.xml index be7c1ec..d907563 100644 --- a/main/res/values/strings_not_translatable.xml +++ b/main/res/values/strings_not_translatable.xml @@ -84,6 +84,8 @@ · Edit cache type filter by clicking on filter bar\n
· Support for searching opencaching.nl caches\n
· Inverse sorting of cache lists (hit the same menu again)\n
+ · view pager in trackable activity\n
+ · menu item to delete past events\n
\n
<b>Bugfixing:</b>\n
· Final flag icon lost when updating cache with self defined final\n
diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java index 62cb5cb..4816dee 100644 --- a/main/src/cgeo/geocaching/AbstractLoggingActivity.java +++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java @@ -20,7 +20,7 @@ public abstract class AbstractLoggingActivity extends AbstractActivity { private static final int MENU_SIGNATURE = 1; private static final int MENU_SMILEY = 2; - public AbstractLoggingActivity(String helpTopic) { + protected AbstractLoggingActivity(String helpTopic) { super(helpTopic); } diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java index e3f7aeb..db9a04c 100644 --- a/main/src/cgeo/geocaching/AbstractPopupActivity.java +++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java @@ -73,7 +73,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { } }; - public AbstractPopupActivity(String helpTopic, int layout) { + protected AbstractPopupActivity(String helpTopic, int layout) { super(helpTopic); this.layout = layout; } @@ -186,10 +186,10 @@ public abstract class AbstractPopupActivity extends AbstractActivity { case MENU_SHOW_IN_BROWSER: showInBrowser(); return true; - } - - if (LoggingUI.onMenuItemSelected(item, this, cache)) { - return true; + default: + if (LoggingUI.onMenuItemSelected(item, this, cache)) { + return true; + } } return true; diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 512f11d..188f939 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -1,7 +1,7 @@ package cgeo.geocaching; import cgeo.calendar.ICalendar; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractViewPagerActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.GeneralAppsFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; @@ -19,6 +19,7 @@ import cgeo.geocaching.geopoint.Units; import cgeo.geocaching.network.HtmlImage; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.ui.AbstractCachingPageViewCreator; import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.ui.DecryptTextClickListener; import cgeo.geocaching.ui.EditorDialog; @@ -37,12 +38,11 @@ import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.TranslationUtils; import cgeo.geocaching.utils.UnknownTagsHandler; -import com.viewpagerindicator.TitlePageIndicator; -import com.viewpagerindicator.TitleProvider; - import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; import android.R.color; import android.app.Activity; @@ -62,10 +62,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.os.Parcelable; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.Editable; import android.text.Html; import android.text.Spannable; @@ -103,7 +99,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; -import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -116,7 +111,7 @@ import java.util.regex.Pattern; * * e.g. details, description, logs, waypoints, inventory... */ -public class CacheDetailActivity extends AbstractActivity { +public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> { private static final int MENU_FIELD_COPY = 1; private static final int MENU_FIELD_TRANSLATE = 2; @@ -175,33 +170,6 @@ public class CacheDetailActivity extends AbstractActivity { private int contextMenuWPIndex = -1; /** - * A {@link List} of all available pages. - * - * TODO Move to adapter - */ - private final List<Page> pageOrder = new ArrayList<Page>(); - - /** - * Instances of all {@link PageViewCreator}. - */ - private final Map<Page, PageViewCreator> viewCreators = new HashMap<Page, PageViewCreator>(); - - /** - * The {@link ViewPager} for this activity. - */ - private ViewPager viewPager; - - /** - * The {@link ViewPagerAdapter} for this activity. - */ - private ViewPagerAdapter viewPagerAdapter; - - /** - * The {@link TitlePageIndicator} for this activity. - */ - private TitlePageIndicator titleIndicator; - - /** * If another activity is called and can modify the data of this activity, we refresh it on resume. */ private boolean refreshOnResume = false; @@ -322,44 +290,21 @@ public class CacheDetailActivity extends AbstractActivity { } }); - // initialize ViewPager - viewPager = (ViewPager) findViewById(R.id.viewpager); - viewPagerAdapter = new ViewPagerAdapter(); - viewPager.setAdapter(viewPagerAdapter); + final int pageToOpen = Settings.isOpenLastDetailsPage() ? Settings.getLastDetailsPage() : 1; + createViewPager(pageToOpen, new OnPageSelectedListener() { - titleIndicator = (TitlePageIndicator) findViewById(R.id.pager_indicator); - titleIndicator.setViewPager(viewPager); - titleIndicator.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { if (Settings.isOpenLastDetailsPage()) { Settings.setLastDetailsPage(position); } // lazy loading of cache images - if (pageOrder.get(position) == Page.IMAGES) { + if (getPage(position) == Page.IMAGES) { loadCacheImages(); } } - - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } - - @Override - public void onPageScrollStateChanged(int state) { - } }); - // switch to entry page (last used or 2) - int entryPageIndex = Settings.isOpenLastDetailsPage() ? Settings.getLastDetailsPage() : 1; - if (viewPagerAdapter.getCount() < entryPageIndex) { - for (int i = 0; i <= entryPageIndex; i++) { - // we can't switch to a page that is out of bounds, so we add null-pages - pageOrder.add(null); - } - } - viewPager.setCurrentItem(entryPageIndex, false); - // Initialization done. Let's load the data with the given information. new LoadCacheThread(geocode, guid, loadCacheHandler).start(); } @@ -621,16 +566,17 @@ public class CacheDetailActivity extends AbstractActivity { return true; } return false; - } - if (NavigationAppFactory.onMenuItemSelected(item, this, cache)) { - return true; - } - if (GeneralAppsFactory.onMenuItemSelected(item, this, cache)) { - return true; - } - if (LoggingUI.onMenuItemSelected(item, this, cache)) { - refreshOnResume = true; - return true; + default: + if (NavigationAppFactory.onMenuItemSelected(item, this, cache)) { + return true; + } + if (GeneralAppsFactory.onMenuItemSelected(item, this, cache)) { + return true; + } + if (LoggingUI.onMenuItemSelected(item, this, cache)) { + refreshOnResume = true; + return true; + } } return true; @@ -693,12 +639,7 @@ public class CacheDetailActivity extends AbstractActivity { // allow cache to notify CacheDetailActivity when it changes so it can be reloaded cache.setChangeNotificationHandler(cacheChangeNotificationHandler); - // notify all creators that the data has changed - for (PageViewCreator creator : viewCreators.values()) { - creator.notifyDataSetChanged(); - } - - // action bar: title and icon (default: mystery icon) + // action bar: title and icon if (StringUtils.isNotBlank(cache.getName())) { setTitle(cache.getName() + " (" + cache.getGeocode() + ')'); } else { @@ -706,36 +647,7 @@ public class CacheDetailActivity extends AbstractActivity { } ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(cache.getType().markerId), null, null, null); - // add available pages (remove old pages first) - pageOrder.clear(); - - pageOrder.add(Page.WAYPOINTS); - pageOrder.add(Page.DETAILS); - final int detailsIndex = pageOrder.size() - 1; - pageOrder.add(Page.DESCRIPTION); - if (cache.getLogs().isNotEmpty()) { - pageOrder.add(Page.LOGS); - } - if (CollectionUtils.isNotEmpty(cache.getFriendsLogs())) { - pageOrder.add(Page.LOGSFRIENDS); - } - if (CollectionUtils.isNotEmpty(cache.getInventory())) { - pageOrder.add(Page.INVENTORY); - } - if (CollectionUtils.isNotEmpty(cache.getImages())) { - pageOrder.add(Page.IMAGES); - } - - // switch to details page, if we're out of bounds - if (viewPager.getCurrentItem() < 0 || viewPager.getCurrentItem() >= viewPagerAdapter.getCount()) { - viewPager.setCurrentItem(detailsIndex, false); - } - - // notify the adapter that the data has changed - viewPagerAdapter.notifyDataSetChanged(); - - // notify the indicator that the data has changed - titleIndicator.notifyDataSetChanged(); + reinitializeViewPager(); // rendering done! remove progress popup if any there progress.dismiss(); @@ -953,7 +865,7 @@ public class CacheDetailActivity extends AbstractActivity { if (imagesList != null) { return; } - PageViewCreator creator = viewCreators.get(Page.IMAGES); + PageViewCreator creator = getViewCreator(Page.IMAGES); if (creator == null) { return; } @@ -972,121 +884,6 @@ public class CacheDetailActivity extends AbstractActivity { } /** - * The ViewPagerAdapter for scrolling through pages of the CacheDetailActivity. - */ - private class ViewPagerAdapter extends PagerAdapter implements TitleProvider { - - @Override - public void destroyItem(View container, int position, Object object) { - ((ViewPager) container).removeView((View) object); - } - - @Override - public void finishUpdate(View container) { - } - - @Override - public int getCount() { - return pageOrder.size(); - } - - @Override - public Object instantiateItem(View container, int position) { - final Page page = pageOrder.get(position); - - PageViewCreator creator = viewCreators.get(page); - - if (null == creator && null != page) { - // The creator is not instantiated yet, let's do it. - switch (page) { - case DETAILS: - creator = new DetailsViewCreator(); - break; - - case DESCRIPTION: - creator = new DescriptionViewCreator(); - break; - - case LOGS: - creator = new LogsViewCreator(true); - break; - - case LOGSFRIENDS: - creator = new LogsViewCreator(false); - break; - - case WAYPOINTS: - creator = new WaypointsViewCreator(); - break; - - case INVENTORY: - creator = new InventoryViewCreator(); - break; - - case IMAGES: - creator = new ImagesViewCreator(); - break; - } - viewCreators.put(page, creator); - } - - View view = null; - - try { - if (null != creator) { - // Result from getView() is maybe cached, but it should be valid because the - // creator should be informed about data-changes with notifyDataSetChanged() - view = creator.getView(); - ((ViewPager) container).addView(view, 0); - } - } catch (Exception e) { - Log.e("ViewPagerAdapter.instantiateItem ", e); - } - - return view; - } - - @Override - public boolean isViewFromObject(View view, Object object) { - return view == object; - } - - @Override - public void restoreState(Parcelable arg0, ClassLoader arg1) { - } - - @Override - public Parcelable saveState() { - return null; - } - - @Override - public void startUpdate(View arg0) { - } - - @Override - public int getItemPosition(Object object) { - // We are doing the caching. So pretend that the view is gone. - // The ViewPager will get it back in instantiateItem() - return POSITION_NONE; - } - - @Override - public String getTitle(int position) { - final Page page = pageOrder.get(position); - if (null == page) { - return ""; - } - // show number of waypoints directly in waypoint title - if (page == Page.WAYPOINTS) { - final int waypointCount = cache.getWaypoints().size(); - return res.getQuantityString(R.plurals.waypoints, waypointCount, waypointCount); - } - return res.getString(page.titleStringId); - } - } - - /** * Enum of all possible pages with methods to get the view and a title. */ public enum Page { @@ -1291,36 +1088,10 @@ public class CacheDetailActivity extends AbstractActivity { } } - private interface PageViewCreator { - /** - * Returns a validated view. - * - * @return - */ - public View getDispatchedView(); - - /** - * Returns a (maybe cached) view. - * - * @return - */ - public View getView(); - - /** - * Handles changed data-sets. - */ - public void notifyDataSetChanged(); - } - /** * Creator for details-view. */ - private class DetailsViewCreator implements PageViewCreator { - /** - * The main view for this creator - */ - private ScrollView view; - + private class DetailsViewCreator extends AbstractCachingPageViewCreator<ScrollView> { /** * Reference to the details list, so that the helper-method can access it without an additional argument */ @@ -1332,22 +1103,7 @@ public class CacheDetailActivity extends AbstractActivity { private Thread watchlistThread; @Override - public void notifyDataSetChanged() { - // There is a lot of data in this view, let's update everything - view = null; - } - - @Override - public View getView() { - if (view == null) { - view = (ScrollView) getDispatchedView(); - } - - return view; - } - - @Override - public View getDispatchedView() { + public ScrollView getDispatchedView() { if (cache == null) { // something is really wrong return null; @@ -1866,38 +1622,26 @@ public class CacheDetailActivity extends AbstractActivity { return; } - final Bitmap bitmap = image.getBitmap(); - if (bitmap == null || bitmap.getWidth() <= 10) { - return; - } + try { + final Bitmap bitmap = image.getBitmap(); + if (bitmap == null || bitmap.getWidth() <= 10) { + return; + } - ((ImageView) view.findViewById(R.id.map_preview)).setImageDrawable(image); - view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE); + ((ImageView) view.findViewById(R.id.map_preview)).setImageDrawable(image); + view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE); + } catch (Exception e) { + Log.e("CacheDetailActivity.PreviewMapTask", e); + } } } } - private class DescriptionViewCreator implements PageViewCreator { - - private ScrollView view; - - @Override - public void notifyDataSetChanged() { - view = null; - } + private class DescriptionViewCreator extends AbstractCachingPageViewCreator<ScrollView> { @Override - public View getView() { - if (view == null) { - view = (ScrollView) getDispatchedView(); - } - - return view; - } - - @Override - public View getDispatchedView() { + public ScrollView getDispatchedView() { if (cache == null) { // something is really wrong return null; @@ -2140,30 +1884,15 @@ public class CacheDetailActivity extends AbstractActivity { } } - private class LogsViewCreator implements PageViewCreator { - private ListView view; - private boolean allLogs; + private class LogsViewCreator extends AbstractCachingPageViewCreator<ListView> { + private final boolean allLogs; LogsViewCreator(boolean allLogs) { this.allLogs = allLogs; } @Override - public void notifyDataSetChanged() { - view = null; - } - - @Override - public View getView() { - if (view == null) { - view = (ListView) getDispatchedView(); - } - - return view; - } - - @Override - public View getDispatchedView() { + public ListView getDispatchedView() { if (cache == null) { // something is really wrong return null; @@ -2310,26 +2039,10 @@ public class CacheDetailActivity extends AbstractActivity { } } - private class WaypointsViewCreator implements PageViewCreator { - - private ScrollView view; - - @Override - public void notifyDataSetChanged() { - view = null; - } - - @Override - public View getView() { - if (view == null) { - view = (ScrollView) getDispatchedView(); - } - - return view; - } + private class WaypointsViewCreator extends AbstractCachingPageViewCreator<ScrollView> { @Override - public View getDispatchedView() { + public ScrollView getDispatchedView() { if (cache == null) { // something is really wrong return null; @@ -2425,26 +2138,10 @@ public class CacheDetailActivity extends AbstractActivity { } } - private class InventoryViewCreator implements PageViewCreator { - - private ListView view; + private class InventoryViewCreator extends AbstractCachingPageViewCreator<ListView> { @Override - public void notifyDataSetChanged() { - view = null; - } - - @Override - public View getView() { - if (view == null) { - view = (ListView) getDispatchedView(); - } - - return view; - } - - @Override - public View getDispatchedView() { + public ListView getDispatchedView() { if (cache == null) { // something is really wrong return null; @@ -2461,7 +2158,7 @@ public class CacheDetailActivity extends AbstractActivity { Object selection = arg0.getItemAtPosition(arg2); if (selection instanceof cgTrackable) { cgTrackable trackable = (cgTrackable) selection; - cgeotrackable.startActivity(CacheDetailActivity.this, trackable.getGuid(), trackable.getGeocode(), trackable.getName()); + TrackableActivity.startActivity(CacheDetailActivity.this, trackable.getGuid(), trackable.getGeocode(), trackable.getName()); } } }); @@ -2470,23 +2167,7 @@ public class CacheDetailActivity extends AbstractActivity { } } - private class ImagesViewCreator implements PageViewCreator { - - private View view; - - @Override - public void notifyDataSetChanged() { - view = null; - } - - @Override - public View getView() { - if (view == null) { - view = getDispatchedView(); - } - - return view; - } + private class ImagesViewCreator extends AbstractCachingPageViewCreator<View> { @Override public View getDispatchedView() { @@ -2495,7 +2176,7 @@ public class CacheDetailActivity extends AbstractActivity { } view = getLayoutInflater().inflate(R.layout.caches_images, null); - if (imagesList == null && viewPager.getCurrentItem() == pageOrder.indexOf(Page.IMAGES)) { + if (imagesList == null && isCurrentPage(Page.IMAGES)) { loadCacheImages(); } return view; @@ -2643,4 +2324,66 @@ public class CacheDetailActivity extends AbstractActivity { } } } -} + + @Override + protected String getTitle(Page page) { + // show number of waypoints directly in waypoint title + if (page == Page.WAYPOINTS) { + final int waypointCount = cache.getWaypoints().size(); + return res.getQuantityString(R.plurals.waypoints, waypointCount, waypointCount); + } + return res.getString(page.titleStringId); + } + + @Override + protected Pair<List<? extends Page>, Integer> getOrderedPages() { + final ArrayList<Page> pages = new ArrayList<Page>(); + pages.add(Page.WAYPOINTS); + pages.add(Page.DETAILS); + final int detailsIndex = pages.size() - 1; + pages.add(Page.DESCRIPTION); + if (cache.getLogs().isNotEmpty()) { + pages.add(Page.LOGS); + } + if (CollectionUtils.isNotEmpty(cache.getFriendsLogs())) { + pages.add(Page.LOGSFRIENDS); + } + if (CollectionUtils.isNotEmpty(cache.getInventory())) { + pages.add(Page.INVENTORY); + } + if (CollectionUtils.isNotEmpty(cache.getImages())) { + pages.add(Page.IMAGES); + } + return new ImmutablePair<List<? extends Page>, Integer>(pages, detailsIndex); + } + + @Override + protected AbstractViewPagerActivity.PageViewCreator createViewCreator(Page page) { + switch (page) { + case DETAILS: + return new DetailsViewCreator(); + + case DESCRIPTION: + return new DescriptionViewCreator(); + + case LOGS: + return new LogsViewCreator(true); + + case LOGSFRIENDS: + return new LogsViewCreator(false); + + case WAYPOINTS: + return new WaypointsViewCreator(); + + case INVENTORY: + return new InventoryViewCreator(); + + case IMAGES: + return new ImagesViewCreator(); + + default: + throw new IllegalArgumentException(); + } + } + +}
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java index ea3a966..aa04a5a 100644 --- a/main/src/cgeo/geocaching/EditWaypointActivity.java +++ b/main/src/cgeo/geocaching/EditWaypointActivity.java @@ -310,7 +310,7 @@ public class EditWaypointActivity extends AbstractActivity { } } - private class changeWaypointType implements OnItemSelectedListener { + private static class changeWaypointType implements OnItemSelectedListener { private changeWaypointType(EditWaypointActivity wpView) { this.wpView = wpView; @@ -334,7 +334,7 @@ public class EditWaypointActivity extends AbstractActivity { } } - private class changeDistanceUnit implements OnItemSelectedListener { + private static class changeDistanceUnit implements OnItemSelectedListener { private changeDistanceUnit(EditWaypointActivity unitView) { this.unitView = unitView; @@ -442,7 +442,7 @@ public class EditWaypointActivity extends AbstractActivity { cache.setCoords(waypoint.getCoords()); cgData.saveChangedCache(cache); } - if (uploadCoordsToWebsiteCheckBox.isChecked() && waypoint != null && waypoint.getCoords() != null) { + if (uploadCoordsToWebsiteCheckBox.isChecked() && waypoint.getCoords() != null) { if (cache.supportsOwnCoordinates()) { final ProgressDialog progress = ProgressDialog.show(EditWaypointActivity.this, getString(R.string.cache), getString(R.string.waypoint_coordinates_uploading_to_website, waypoint.getCoords()), true); Handler finishHandler = new Handler() { diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 65003e2..4c9a230 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -119,7 +119,7 @@ public class SearchActivity extends AbstractActivity { // Check if the query is a TB code final String trackable = BaseUtils.getMatch(query, GCConstants.PATTERN_TB_CODE, true, 0, "", false); if (StringUtils.isNotBlank(trackable)) { - final Intent trackablesIntent = new Intent(this, cgeotrackable.class); + final Intent trackablesIntent = new Intent(this, TrackableActivity.class); trackablesIntent.putExtra("geocode", trackable.toUpperCase(Locale.US)); startActivity(trackablesIntent); return true; @@ -408,7 +408,7 @@ public class SearchActivity extends AbstractActivity { return; } - final Intent trackablesIntent = new Intent(this, cgeotrackable.class); + final Intent trackablesIntent = new Intent(this, TrackableActivity.class); trackablesIntent.putExtra("geocode", trackableText.toUpperCase(Locale.US)); startActivity(trackablesIntent); } diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java index d39066d..d1b1df6 100644 --- a/main/src/cgeo/geocaching/SearchResult.java +++ b/main/src/cgeo/geocaching/SearchResult.java @@ -169,7 +169,7 @@ public class SearchResult implements Parcelable { return; } - this.viewstates = viewstates; + System.arraycopy(viewstates, 0, this.viewstates, 0, viewstates.length); } public int getTotal() { diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 82fa46d..c0a7f47 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -10,7 +10,6 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -36,7 +35,6 @@ public class StaticMapsActivity extends AbstractActivity { private LayoutInflater inflater = null; private ProgressDialog waitDialog = null; private LinearLayout smapsView = null; - private BitmapFactory factory = null; private final Handler loadMapsHandler = new Handler() { @Override @@ -131,10 +129,6 @@ public class StaticMapsActivity extends AbstractActivity { @Override public void run() { try { - if (factory == null) { - factory = new BitmapFactory(); - } - // try downloading 2 times for (int trials = 0; trials < 2; trials++) { for (int level = 1; level <= 5; level++) { diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java new file mode 100644 index 0000000..b01942f --- /dev/null +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -0,0 +1,674 @@ +package cgeo.geocaching; + +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractViewPagerActivity; +import cgeo.geocaching.connector.gc.GCParser; +import cgeo.geocaching.enumerations.LogType; +import cgeo.geocaching.geopoint.Units; +import cgeo.geocaching.network.HtmlImage; +import cgeo.geocaching.network.Network; +import cgeo.geocaching.ui.AbstractCachingPageViewCreator; +import cgeo.geocaching.ui.CacheDetailsCreator; +import cgeo.geocaching.ui.Formatter; +import cgeo.geocaching.utils.BaseUtils; +import cgeo.geocaching.utils.Log; +import cgeo.geocaching.utils.UnknownTagsHandler; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Html; +import android.text.method.LinkMovementMethod; +import android.view.ContextMenu; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivity.Page> { + + public enum Page { + DETAILS(R.string.detail), + LOGS(R.string.cache_logs); + + protected final int resId; + + private Page(final int resId) { + this.resId = resId; + } + } + private static final int MENU_LOG_TOUCH = 1; + private static final int MENU_BROWSER_TRACKABLE = 2; + private cgTrackable trackable = null; + private String geocode = null; + private String name = null; + private String guid = null; + private String id = null; + private String contextMenuUser = null; + private LayoutInflater inflater = null; + private ProgressDialog waitDialog = null; + private Handler loadTrackableHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + if (trackable == null) { + if (waitDialog != null) { + waitDialog.dismiss(); + } + + if (StringUtils.isNotBlank(geocode)) { + showToast(res.getString(R.string.err_tb_find) + " " + geocode + "."); + } else { + showToast(res.getString(R.string.err_tb_find_that)); + } + + finish(); + return; + } + + try { + inflater = getLayoutInflater(); + geocode = trackable.getGeocode(); + + if (StringUtils.isNotBlank(trackable.getName())) { + setTitle(Html.fromHtml(trackable.getName()).toString()); + } else { + setTitle(trackable.getName()); + } + + reinitializeViewPager(); + + } catch (Exception e) { + Log.e("TrackableActivity.loadTrackableHandler: ", e); + } + + if (waitDialog != null) { + waitDialog.dismiss(); + } + } + }; + + public TrackableActivity() { + super("c:geo-trackable-details"); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setTheme(); + setContentView(R.layout.trackable_activity); + setTitle(res.getString(R.string.trackable)); + + // get parameters + Bundle extras = getIntent().getExtras(); + Uri uri = getIntent().getData(); + + // try to get data from extras + if (extras != null) { + geocode = extras.getString("geocode"); + name = extras.getString("name"); + guid = extras.getString("guid"); + id = extras.getString("id"); + } + + // try to get data from URI + if (geocode == null && guid == null && id == null && uri != null) { + String uriHost = uri.getHost().toLowerCase(Locale.US); + if (uriHost.contains("geocaching.com")) { + geocode = uri.getQueryParameter("tracker"); + guid = uri.getQueryParameter("guid"); + id = uri.getQueryParameter("id"); + + if (StringUtils.isNotBlank(geocode)) { + geocode = geocode.toUpperCase(Locale.US); + guid = null; + id = null; + } else if (StringUtils.isNotBlank(guid)) { + geocode = null; + guid = guid.toLowerCase(Locale.US); + id = null; + } else if (StringUtils.isNotBlank(id)) { + geocode = null; + guid = null; + id = id.toLowerCase(Locale.US); + } else { + showToast(res.getString(R.string.err_tb_details_open)); + finish(); + return; + } + } else if (uriHost.contains("coord.info")) { + String uriPath = uri.getPath().toLowerCase(Locale.US); + if (uriPath != null && uriPath.startsWith("/tb")) { + geocode = uriPath.substring(1).toUpperCase(Locale.US); + guid = null; + id = null; + } else { + showToast(res.getString(R.string.err_tb_details_open)); + finish(); + return; + } + } + } + + // no given data + if (geocode == null && guid == null && id == null) { + showToast(res.getString(R.string.err_tb_display)); + finish(); + return; + } + + String message; + if (StringUtils.isNotBlank(name)) { + message = Html.fromHtml(name).toString(); + } else if (StringUtils.isNotBlank(geocode)) { + message = geocode; + } else { + message = res.getString(R.string.trackable); + } + waitDialog = ProgressDialog.show(this, message, res.getString(R.string.trackable_details_loading), true, true); + + createViewPager(0, null); + LoadTrackableThread thread = new LoadTrackableThread(loadTrackableHandler, geocode, guid, id); + thread.start(); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { + super.onCreateContextMenu(menu, view, info); + final int viewId = view.getId(); + + if (viewId == R.id.author) { // Log item author + contextMenuUser = ((TextView) view).getText().toString(); + } else { // Trackable owner, and user holding trackable now + RelativeLayout itemLayout = (RelativeLayout) view.getParent(); + TextView itemName = (TextView) itemLayout.findViewById(R.id.name); + + String selectedName = itemName.getText().toString(); + if (selectedName.equals(res.getString(R.string.trackable_owner))) { + contextMenuUser = trackable.getOwner(); + } else if (selectedName.equals(res.getString(R.string.trackable_spotted))) { + contextMenuUser = trackable.getSpottedName(); + } + } + + menu.setHeaderTitle(res.getString(R.string.user_menu_title) + " " + contextMenuUser); + menu.add(viewId, 1, 0, res.getString(R.string.user_menu_view_hidden)); + menu.add(viewId, 2, 0, res.getString(R.string.user_menu_view_found)); + menu.add(viewId, 3, 0, res.getString(R.string.user_menu_open_browser)); + } + + @Override + public boolean onContextItemSelected(final MenuItem item) { + switch (item.getItemId()) { + case 1: + cgeocaches.startActivityOwner(this, contextMenuUser); + return true; + case 2: + cgeocaches.startActivityUserName(this, contextMenuUser); + return true; + case 3: + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + Network.encode(contextMenuUser)))); + return true; + default: + return false; + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(0, MENU_LOG_TOUCH, 0, res.getString(R.string.trackable_log_touch)).setIcon(R.drawable.ic_menu_agenda); // log touch + menu.add(0, MENU_BROWSER_TRACKABLE, 0, res.getString(R.string.trackable_browser_open)).setIcon(R.drawable.ic_menu_info_details); // browser + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case MENU_LOG_TOUCH: + LogTrackableActivity.startActivity(this, trackable); + return true; + case MENU_BROWSER_TRACKABLE: + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(trackable.getUrl()))); + return true; + default: + return false; + } + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(MENU_LOG_TOUCH).setEnabled(StringUtils.isNotBlank(geocode) && trackable.isLoggable()); + menu.findItem(MENU_BROWSER_TRACKABLE).setEnabled(StringUtils.isNotBlank(trackable.getUrl())); + return super.onPrepareOptionsMenu(menu); + } + + private class LoadTrackableThread extends Thread { + final private Handler handler; + final private String geocode; + final private String guid; + final private String id; + + public LoadTrackableThread(Handler handlerIn, String geocodeIn, String guidIn, String idIn) { + handler = handlerIn; + geocode = geocodeIn; + guid = guidIn; + id = idIn; + } + + @Override + public void run() { + trackable = cgData.loadTrackable(geocode); + + if ((trackable == null || trackable.isLoggable()) && !StringUtils.startsWithIgnoreCase(geocode, "GK")) { + trackable = GCParser.searchTrackable(geocode, guid, id); + } + handler.sendMessage(Message.obtain()); + } + } + + private class UserActionsListener implements View.OnClickListener { + + @Override + public void onClick(View view) { + if (view == null) { + return; + } + + try { + registerForContextMenu(view); + openContextMenu(view); + } catch (Exception e) { + Log.e("TrackableActivity.UserActionsListener.onClick ", e); + } + } + } + + private class TrackableIconThread extends Thread { + final private String url; + final private Handler handler; + + public TrackableIconThread(String urlIn, Handler handlerIn) { + url = urlIn; + handler = handlerIn; + } + + @Override + public void run() { + if (url == null || handler == null) { + return; + } + + try { + HtmlImage imgGetter = new HtmlImage(trackable.getGeocode(), false, 0, false); + + BitmapDrawable image = imgGetter.getDrawable(url); + Message message = handler.obtainMessage(0, image); + handler.sendMessage(message); + } catch (Exception e) { + Log.e("TrackableActivity.TrackableIconThread.run: ", e); + } + } + } + + private static class TrackableIconHandler extends Handler { + final private TextView view; + + public TrackableIconHandler(TextView viewIn) { + view = viewIn; + } + + @Override + public void handleMessage(Message message) { + final BitmapDrawable image = (BitmapDrawable) message.obj; + if (image != null && view != null) { + image.setBounds(0, 0, view.getHeight(), view.getHeight()); + view.setCompoundDrawables(image, null, null, null); + } + } + } + + public static void startActivity(final AbstractActivity fromContext, + final String guid, final String geocode, final String name) { + final Intent trackableIntent = new Intent(fromContext, TrackableActivity.class); + trackableIntent.putExtra("guid", guid); + trackableIntent.putExtra("geocode", geocode); + trackableIntent.putExtra("name", name); + fromContext.startActivity(trackableIntent); + } + + @Override + protected PageViewCreator createViewCreator(Page page) { + switch (page) { + case DETAILS: + return new DetailsViewCreator(); + case LOGS: + return new LogsViewCreator(); + default: + throw new IllegalArgumentException(); + } + } + + @Override + protected String getTitle(Page page) { + return res.getString(page.resId); + } + + @Override + protected Pair<List<? extends Page>, Integer> getOrderedPages() { + List<Page> pages = new ArrayList<TrackableActivity.Page>(); + pages.add(Page.DETAILS); + if (!trackable.getLogs().isEmpty()) { + pages.add(Page.LOGS); + } + return new ImmutablePair<List<? extends Page>, Integer>(pages, 0); + } + + public class LogsViewCreator extends AbstractCachingPageViewCreator<ListView> { + + private class LogViewHolder { + + private final TextView added; + private final TextView type; + private final TextView author; + private final TextView location; + private final TextView log; + private final ImageView marker; + private final LinearLayout logImages; + + public LogViewHolder(View rowView) { + added = ((TextView) rowView.findViewById(R.id.added)); + type = ((TextView) rowView.findViewById(R.id.type)); + author = ((TextView) rowView.findViewById(R.id.author)); + location = ((TextView) rowView.findViewById(R.id.location)); + log = (TextView) rowView.findViewById(R.id.log); + marker = (ImageView) rowView.findViewById(R.id.log_mark); + logImages = (LinearLayout) rowView.findViewById(R.id.log_layout); + } + } + + @Override + public ListView getDispatchedView() { + view = (ListView) getLayoutInflater().inflate(R.layout.trackable_logs_view, null); + + if (trackable != null && trackable.getLogs() != null) { + view.setAdapter(new ArrayAdapter<LogEntry>(TrackableActivity.this, R.layout.trackable_logs_item, trackable.getLogs()) { + @Override + public View getView(int position, View convertView, android.view.ViewGroup parent) { + View rowView = convertView; + if (null == rowView) { + rowView = getLayoutInflater().inflate(R.layout.trackable_logs_item, null); + } + LogViewHolder holder = (LogViewHolder) rowView.getTag(); + if (null == holder) { + holder = new LogViewHolder(rowView); + rowView.setTag(holder); + } + + final LogEntry log = getItem(position); + fillViewHolder(holder, log); + return rowView; + } + }); + } + return view; + } + + protected void fillViewHolder(LogViewHolder holder, LogEntry log) { + if (log.date > 0) { + holder.added.setText(Formatter.formatShortDate(log.date)); + } + + holder.type.setText(log.type.getL10n()); + holder.author.setText(Html.fromHtml(log.author), TextView.BufferType.SPANNABLE); + + if (StringUtils.isBlank(log.cacheName)) { + holder.location.setVisibility(View.GONE); + } else { + holder.location.setText(Html.fromHtml(log.cacheName)); + final String cacheGuid = log.cacheGuid; + final String cacheName = log.cacheName; + holder.location.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + CacheDetailActivity.startActivityGuid(TrackableActivity.this, cacheGuid, Html.fromHtml(cacheName).toString()); + } + }); + } + + TextView logView = holder.log; + logView.setMovementMethod(LinkMovementMethod.getInstance()); + + String logText = log.log; + if (BaseUtils.containsHtml(logText)) { + logText = log.getDisplayText(); + logView.setText(Html.fromHtml(logText, new HtmlImage(null, false, StoredList.TEMPORARY_LIST_ID, false), null), TextView.BufferType.SPANNABLE); + } + else { + logView.setText(logText); + } + + ImageView statusMarker = holder.marker; + // colored marker + int marker = log.type.markerId; + if (marker != 0) { + statusMarker.setVisibility(View.VISIBLE); + statusMarker.setImageResource(marker); + } + else { + statusMarker.setVisibility(View.GONE); + } + + // add LogImages + LinearLayout logLayout = holder.logImages; + + if (log.hasLogImages()) { + + final ArrayList<cgImage> logImages = new ArrayList<cgImage>(log.getLogImages()); + + final View.OnClickListener listener = new View.OnClickListener() { + @Override + public void onClick(View v) { + ImagesActivity.startActivityLogImages(TrackableActivity.this, trackable.getGeocode(), logImages); + } + }; + + LinearLayout log_imgView = (LinearLayout) getLayoutInflater().inflate(R.layout.trackable_logs_img, null); + TextView log_img_title = (TextView) log_imgView.findViewById(R.id.title); + log_img_title.setText(log.getImageTitles()); + log_img_title.setOnClickListener(listener); + logLayout.addView(log_imgView); + } + + holder.author.setOnClickListener(new UserActionsListener()); + } + + } + + public class DetailsViewCreator extends AbstractCachingPageViewCreator<ScrollView> { + + @Override + public ScrollView getDispatchedView() { + view = (ScrollView) getLayoutInflater().inflate(R.layout.trackable_details_view, null); + final CacheDetailsCreator details = new CacheDetailsCreator(TrackableActivity.this, (LinearLayout) view.findViewById(R.id.details_list)); + + // action bar icon + if (StringUtils.isNotBlank(trackable.getIconUrl())) { + final TrackableIconHandler iconHandler = new TrackableIconHandler(((TextView) findViewById(R.id.actionbar_title))); + final TrackableIconThread iconThread = new TrackableIconThread(trackable.getIconUrl(), iconHandler); + iconThread.start(); + } + + // trackable name + details.add(R.string.trackable_name, StringUtils.isNotBlank(trackable.getName()) ? Html.fromHtml(trackable.getName()).toString() : res.getString(R.string.trackable_unknown)); + + // trackable type + String tbType; + if (StringUtils.isNotBlank(trackable.getType())) { + tbType = Html.fromHtml(trackable.getType()).toString(); + } else { + tbType = res.getString(R.string.trackable_unknown); + } + details.add(R.string.trackable_type, tbType); + + // trackable geocode + details.add(R.string.trackable_code, trackable.getGeocode()); + + // trackable owner + TextView owner = details.add(R.string.trackable_owner, res.getString(R.string.trackable_unknown)); + if (StringUtils.isNotBlank(trackable.getOwner())) { + owner.setText(Html.fromHtml(trackable.getOwner()), TextView.BufferType.SPANNABLE); + owner.setOnClickListener(new UserActionsListener()); + } + + // trackable spotted + if (StringUtils.isNotBlank(trackable.getSpottedName()) || + trackable.getSpottedType() == cgTrackable.SPOTTED_UNKNOWN || + trackable.getSpottedType() == cgTrackable.SPOTTED_OWNER) { + boolean showTimeSpan = true; + StringBuilder text; + + if (trackable.getSpottedType() == cgTrackable.SPOTTED_CACHE) { + text = new StringBuilder(res.getString(R.string.trackable_spotted_in_cache) + ' ' + Html.fromHtml(trackable.getSpottedName()).toString()); + } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_USER) { + text = new StringBuilder(res.getString(R.string.trackable_spotted_at_user) + ' ' + Html.fromHtml(trackable.getSpottedName()).toString()); + } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_UNKNOWN) { + text = new StringBuilder(res.getString(R.string.trackable_spotted_unknown_location)); + } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_OWNER) { + text = new StringBuilder(res.getString(R.string.trackable_spotted_owner)); + } else { + text = new StringBuilder("N/A"); + showTimeSpan = false; + } + + // days since last spotting + if (showTimeSpan && trackable.getLogs() != null) { + for (LogEntry log : trackable.getLogs()) { + if (log.type == LogType.RETRIEVED_IT || log.type == LogType.GRABBED_IT || log.type == LogType.DISCOVERED_IT || log.type == LogType.PLACED_IT) { + final int days = log.daysSinceLog(); + text.append(" (").append(res.getQuantityString(R.plurals.days_ago, days, days)).append(')'); + break; + } + } + } + + final TextView spotted = details.add(R.string.trackable_spotted, text.toString()); + spotted.setClickable(true); + if (cgTrackable.SPOTTED_CACHE == trackable.getSpottedType()) { + spotted.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + CacheDetailActivity.startActivityGuid(TrackableActivity.this, trackable.getSpottedGuid(), trackable.getSpottedName()); + } + }); + } else if (cgTrackable.SPOTTED_USER == trackable.getSpottedType()) { + spotted.setOnClickListener(new UserActionsListener()); + } + } + + // trackable origin + if (StringUtils.isNotBlank(trackable.getOrigin())) { + TextView origin = details.add(R.string.trackable_origin, ""); + origin.setText(Html.fromHtml(trackable.getOrigin()), TextView.BufferType.SPANNABLE); + } + + // trackable released + if (trackable.getReleased() != null) { + details.add(R.string.trackable_released, Formatter.formatDate(trackable.getReleased().getTime())); + } + + // trackable distance + if (trackable.getDistance() >= 0) { + details.add(R.string.trackable_distance, Units.getDistanceFromKilometers(trackable.getDistance())); + } + + // trackable goal + if (StringUtils.isNotBlank(trackable.getGoal())) { + view.findViewById(R.id.goal_box).setVisibility(View.VISIBLE); + TextView descView = (TextView) view.findViewById(R.id.goal); + descView.setVisibility(View.VISIBLE); + descView.setText(Html.fromHtml(trackable.getGoal(), new HtmlImage(geocode, true, 0, false), null), TextView.BufferType.SPANNABLE); + descView.setMovementMethod(LinkMovementMethod.getInstance()); + } + + // trackable details + if (StringUtils.isNotBlank(trackable.getDetails())) { + view.findViewById(R.id.details_box).setVisibility(View.VISIBLE); + TextView descView = (TextView) view.findViewById(R.id.details); + descView.setVisibility(View.VISIBLE); + descView.setText(Html.fromHtml(trackable.getDetails(), new HtmlImage(geocode, true, 0, false), new UnknownTagsHandler()), TextView.BufferType.SPANNABLE); + descView.setMovementMethod(LinkMovementMethod.getInstance()); + } + + // trackable image + if (StringUtils.isNotBlank(trackable.getImage())) { + view.findViewById(R.id.image_box).setVisibility(View.VISIBLE); + LinearLayout imgView = (LinearLayout) view.findViewById(R.id.image); + + final ImageView trackableImage = (ImageView) inflater.inflate(R.layout.trackable_image, null); + + trackableImage.setImageResource(R.drawable.image_not_loaded); + trackableImage.setClickable(true); + trackableImage.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(trackable.getImage()))); + } + }); + + // try to load image + final Handler handler = new Handler() { + + @Override + public void handleMessage(Message message) { + BitmapDrawable image = (BitmapDrawable) message.obj; + if (image != null) { + trackableImage.setImageDrawable((BitmapDrawable) message.obj); + } + } + }; + + new Thread() { + + @Override + public void run() { + try { + HtmlImage imgGetter = new HtmlImage(geocode, true, 0, false); + + BitmapDrawable image = imgGetter.getDrawable(trackable.getImage()); + Message message = handler.obtainMessage(0, image); + handler.sendMessage(message); + } catch (Exception e) { + Log.e("cgeospoilers.onCreate.onClick.run: ", e); + } + } + }.start(); + + imgView.addView(trackableImage); + } + return view; + } + + } + +} diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java index 8f2c79a..a9d9147 100644 --- a/main/src/cgeo/geocaching/VisitCacheActivity.java +++ b/main/src/cgeo/geocaching/VisitCacheActivity.java @@ -127,7 +127,7 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD @Override public void onClick(View view) { - final Intent trackablesIntent = new Intent(VisitCacheActivity.this, cgeotrackable.class); + final Intent trackablesIntent = new Intent(VisitCacheActivity.this, TrackableActivity.class); trackablesIntent.putExtra(EXTRAS_GEOCODE, tbCode); startActivity(trackablesIntent); } diff --git a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java new file mode 100644 index 0000000..56431d4 --- /dev/null +++ b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java @@ -0,0 +1,272 @@ +package cgeo.geocaching.activity; + +import cgeo.geocaching.R; +import cgeo.geocaching.utils.Log; + +import com.viewpagerindicator.TitlePageIndicator; +import com.viewpagerindicator.TitleProvider; + +import org.apache.commons.lang3.tuple.Pair; + +import android.app.Activity; +import android.os.Parcelable; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v4.view.ViewPager.OnPageChangeListener; +import android.view.View; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Abstract activity with the ability to manage pages in a view pager. + * + * @param <Page> + * Enum listing all available pages of this activity. The pages available at a certain point of time are + * defined by overriding {@link #getOrderedPages()}. + */ +public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends AbstractActivity { + + protected AbstractViewPagerActivity(String helpTopic) { + super(helpTopic); + } + + /** + * A {@link List} of all available pages. + * + * TODO Move to adapter + */ + private final List<Page> pageOrder = new ArrayList<Page>(); + + /** + * Instances of all {@link PageViewCreator}. + */ + private final Map<Page, PageViewCreator> viewCreators = new HashMap<Page, PageViewCreator>(); + + /** + * The {@link ViewPager} for this activity. + */ + private ViewPager viewPager; + + /** + * The {@link ViewPagerAdapter} for this activity. + */ + private ViewPagerAdapter viewPagerAdapter; + + /** + * The {@link TitlePageIndicator} for this activity. + */ + private TitlePageIndicator titleIndicator; + + public interface PageViewCreator { + /** + * Returns a validated view. + * + * @return + */ + public View getDispatchedView(); + + /** + * Returns a (maybe cached) view. + * + * @return + */ + public View getView(); + + /** + * Handles changed data-sets. + */ + public void notifyDataSetChanged(); + } + + /** + * Page selection interface for the view pager. + * + */ + protected interface OnPageSelectedListener { + public void onPageSelected(int position); + } + + /** + * The ViewPagerAdapter for scrolling through pages of the CacheDetailActivity. + */ + private class ViewPagerAdapter extends PagerAdapter implements TitleProvider { + + @Override + public void destroyItem(View container, int position, Object object) { + ((ViewPager) container).removeView((View) object); + } + + @Override + public void finishUpdate(View container) { + } + + @Override + public int getCount() { + return pageOrder.size(); + } + + @Override + public Object instantiateItem(View container, int position) { + final Page page = pageOrder.get(position); + + PageViewCreator creator = viewCreators.get(page); + + if (null == creator && null != page) { + creator = AbstractViewPagerActivity.this.createViewCreator(page); + viewCreators.put(page, creator); + } + + View view = null; + + try { + if (null != creator) { + // Result from getView() is maybe cached, but it should be valid because the + // creator should be informed about data-changes with notifyDataSetChanged() + view = creator.getView(); + ((ViewPager) container).addView(view, 0); + } + } catch (Exception e) { + Log.e("ViewPagerAdapter.instantiateItem ", e); + } + + return view; + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public void restoreState(Parcelable arg0, ClassLoader arg1) { + } + + @Override + public Parcelable saveState() { + return null; + } + + @Override + public void startUpdate(View arg0) { + } + + @Override + public int getItemPosition(Object object) { + // We are doing the caching. So pretend that the view is gone. + // The ViewPager will get it back in instantiateItem() + return POSITION_NONE; + } + + @Override + public String getTitle(int position) { + final Page page = pageOrder.get(position); + if (null == page) { + return ""; + } + return AbstractViewPagerActivity.this.getTitle(page); + } + + } + + /** + * Create the view pager. Call this from the {@link Activity#onCreate} implementation. + * + * @param startPageIndex + * index of the page shown first + * @param pageSelectedListener + * page selection listener or <code>null</code> + */ + protected final void createViewPager(int startPageIndex, final OnPageSelectedListener pageSelectedListener) { + // initialize ViewPager + viewPager = (ViewPager) findViewById(R.id.viewpager); + viewPagerAdapter = new ViewPagerAdapter(); + viewPager.setAdapter(viewPagerAdapter); + + titleIndicator = (TitlePageIndicator) findViewById(R.id.pager_indicator); + titleIndicator.setViewPager(viewPager); + if (pageSelectedListener != null) { + titleIndicator.setOnPageChangeListener(new OnPageChangeListener() { + @Override + public void onPageSelected(int position) { + pageSelectedListener.onPageSelected(position); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + }); + } + + // switch to entry page (last used or 2) + if (viewPagerAdapter.getCount() < startPageIndex) { + for (int i = 0; i <= startPageIndex; i++) { + // we can't switch to a page that is out of bounds, so we add null-pages + pageOrder.add(null); + } + } + viewPager.setCurrentItem(startPageIndex, false); + } + + /** + * create the view creator for the given page + * + * @return new view creator + */ + protected abstract PageViewCreator createViewCreator(Page page); + + /** + * get the title for the given page + */ + protected abstract String getTitle(Page page); + + protected final void reinitializeViewPager() { + // notify all creators that the data has changed + for (PageViewCreator creator : viewCreators.values()) { + creator.notifyDataSetChanged(); + } + + pageOrder.clear(); + final Pair<List<? extends Page>, Integer> pagesAndIndex = getOrderedPages(); + pageOrder.addAll(pagesAndIndex.getLeft()); + + // switch to details page, if we're out of bounds + final int defaultPage = pagesAndIndex.getRight().intValue(); + if (viewPager.getCurrentItem() < 0 || viewPager.getCurrentItem() >= viewPagerAdapter.getCount()) { + viewPager.setCurrentItem(defaultPage, false); + } + + // notify the adapter that the data has changed + viewPagerAdapter.notifyDataSetChanged(); + + // notify the indicator that the data has changed + titleIndicator.notifyDataSetChanged(); + } + + /** + * @return the currently available list of ordered pages, together with the index of the default page + */ + protected abstract Pair<List<? extends Page>, Integer> getOrderedPages(); + + public final Page getPage(int position) { + return pageOrder.get(position); + } + + protected final int getPageIndex(Page page) { + return pageOrder.indexOf(page); + } + + protected final PageViewCreator getViewCreator(Page page) { + return viewCreators.get(page); + } + + protected final boolean isCurrentPage(Page page) { + return viewPager.getCurrentItem() == getPageIndex(page); + } +} diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java index f8521ad..85a4b93 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java @@ -15,7 +15,7 @@ import org.apache.commons.lang3.StringUtils; import android.app.Activity; abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigationApp, WaypointNavigationApp { - public AbstractStaticMapsApp(String name) { + protected AbstractStaticMapsApp(String name) { super(name, null); } diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java index e74eb89..f1616ad 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java @@ -12,7 +12,7 @@ abstract class GoogleNavigationApp extends AbstractPointNavigationApp { private final String mode; - GoogleNavigationApp(final int nameResourceId, final String mode) { + protected GoogleNavigationApp(final int nameResourceId, final String mode) { super(getString(nameResourceId), null); this.mode = mode; } diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/cgeo.java index c5a7e5b..b48789f 100644 --- a/main/src/cgeo/geocaching/cgeo.java +++ b/main/src/cgeo/geocaching/cgeo.java @@ -567,7 +567,7 @@ public class cgeo extends AbstractActivity { (new cleanDatabase()).start(); } - private void updateCacheCounter() { + void updateCacheCounter() { (new CountBubbleUpdateThread()).start(); } @@ -585,7 +585,6 @@ public class cgeo extends AbstractActivity { dialog.dismiss(); cgData.resetNewlyCreatedDatabase(); app.restoreDatabase(cgeo.this); - updateCacheCounter(); } }) .setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() { diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/cgeoapplication.java index 1371a00..f25701e 100644 --- a/main/src/cgeo/geocaching/cgeoapplication.java +++ b/main/src/cgeo/geocaching/cgeoapplication.java @@ -101,6 +101,9 @@ public class cgeoapplication extends Application { boolean restored = atomic.get(); String message = restored ? res.getString(R.string.init_restore_success) : res.getString(R.string.init_restore_failed); ActivityMixin.helpDialog(fromActivity, res.getString(R.string.init_backup_restore), message); + if (fromActivity instanceof cgeo) { + ((cgeo) fromActivity).updateCacheCounter(); + } } }; diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index a4c1ea9..901743c 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -30,6 +30,7 @@ import cgeo.geocaching.sorting.VisitComparator; import cgeo.geocaching.ui.CacheListAdapter; import cgeo.geocaching.ui.LoggingUI; import cgeo.geocaching.ui.WeakReferenceHandler; +import cgeo.geocaching.utils.DateUtils; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.RunnableWithArgument; @@ -62,6 +63,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -100,6 +102,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private static final int MENU_NAVIGATION = 69; private static final int MENU_STORE_CACHE = 73; private static final int MENU_FILTER = 74; + private static final int MENU_DELETE_EVENTS = 75; private static final int MSG_DONE = -1; private static final int MSG_RESTART_GEO_AND_DIR = -2; @@ -708,6 +711,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity subMenu.add(0, MENU_DROP_CACHES_AND_LIST, 0, res.getString(R.string.caches_drop_all_and_list)); subMenu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.cache_offline_refresh)); // download details for all caches subMenu.add(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list)); + subMenu.add(0, MENU_DELETE_EVENTS, 0, res.getString(R.string.caches_delete_events)); //TODO: add submenu/AlertDialog and use R.string.gpx_import_title subMenu.add(0, MENU_IMPORT_GPX, 0, res.getString(R.string.gpx_import_title)); @@ -770,6 +774,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity setVisible(menu, MENU_REFRESH_STORED, !isEmpty && (isConcrete || type != CacheListType.OFFLINE)); setVisible(menu, MENU_DROP_CACHES, !isEmpty); setVisible(menu, MENU_DROP_CACHES_AND_LIST, isConcrete && !isEmpty); + setVisible(menu, MENU_DELETE_EVENTS, isConcrete && !isEmpty && containsEvents()); setVisible(menu, MENU_MOVE_TO_LIST, !isEmpty); setVisible(menu, MENU_EXPORT, !isEmpty); setVisible(menu, MENU_REMOVE_FROM_HISTORY, !isEmpty); @@ -820,6 +825,15 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity return true; } + private boolean containsEvents() { + for (cgCache cache : adapter.getCheckedOrAllCaches()) { + if (cache.isEventCache()) { + return true; + } + } + return false; + } + private void setMenuItemLabel(final Menu menu, final int menuId, final int resIdSelection, final int resId) { final MenuItem menuItem = menu.findItem(menuId); if (menuItem == null) { @@ -905,9 +919,27 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity moveCachesToOtherList(); invalidateOptionsMenuCompatible(); return true; + case MENU_DELETE_EVENTS: + deletePastEvents(); + invalidateOptionsMenuCompatible(); + return true; + default: + return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, search); } + } - return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, search); + public void deletePastEvents() { + progress.show(this, null, res.getString(R.string.caches_drop_progress), true, dropDetailsHandler.obtainMessage(MSG_CANCEL)); + final List<cgCache> deletion = new ArrayList<cgCache>(); + for (cgCache cache : adapter.getCheckedOrAllCaches()) { + if (cache.isEventCache()) { + final Date eventDate = cache.getHiddenDate(); + if (DateUtils.daysSince(eventDate.getTime()) > 0) { + deletion.add(cache); + } + } + } + new DropDetailsThread(dropDetailsHandler, deletion).start(); } /** @@ -1294,7 +1326,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public void dropSelected() { progress.show(this, null, res.getString(R.string.caches_drop_progress), true, dropDetailsHandler.obtainMessage(MSG_CANCEL)); - new DropDetailsThread(dropDetailsHandler).start(); + new DropDetailsThread(dropDetailsHandler, adapter.getCheckedOrAllCaches()).start(); } private class LoadByOfflineThread extends Thread { @@ -1598,9 +1630,9 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity final private Handler handler; final private List<cgCache> selected; - public DropDetailsThread(Handler handlerIn) { + public DropDetailsThread(Handler handlerIn, List<cgCache> selectedIn) { handler = handlerIn; - selected = adapter.getCheckedOrAllCaches(); + selected = selectedIn; } @Override diff --git a/main/src/cgeo/geocaching/cgeocoords.java b/main/src/cgeo/geocaching/cgeocoords.java index 1cf9630..0c2ffbf 100644 --- a/main/src/cgeo/geocaching/cgeocoords.java +++ b/main/src/cgeo/geocaching/cgeocoords.java @@ -378,6 +378,8 @@ public class cgeocoords extends Dialog { break; case Plain: // This case has been handled above + default: + throw new IllegalArgumentException(); } return true; diff --git a/main/src/cgeo/geocaching/cgeopoint.java b/main/src/cgeo/geocaching/cgeopoint.java index d89d324..e399a97 100644 --- a/main/src/cgeo/geocaching/cgeopoint.java +++ b/main/src/cgeo/geocaching/cgeopoint.java @@ -304,7 +304,7 @@ public class cgeopoint extends AbstractActivity { } } - private class changeDistanceUnit implements OnItemSelectedListener { + private static class changeDistanceUnit implements OnItemSelectedListener { private changeDistanceUnit(cgeopoint unitView) { this.unitView = unitView; diff --git a/main/src/cgeo/geocaching/cgeotrackable.java b/main/src/cgeo/geocaching/cgeotrackable.java deleted file mode 100644 index 80b9f01..0000000 --- a/main/src/cgeo/geocaching/cgeotrackable.java +++ /dev/null @@ -1,581 +0,0 @@ -package cgeo.geocaching; - -import cgeo.geocaching.activity.AbstractActivity; -import cgeo.geocaching.connector.gc.GCParser; -import cgeo.geocaching.enumerations.LogType; -import cgeo.geocaching.geopoint.Units; -import cgeo.geocaching.network.HtmlImage; -import cgeo.geocaching.network.Network; -import cgeo.geocaching.ui.CacheDetailsCreator; -import cgeo.geocaching.ui.Formatter; -import cgeo.geocaching.utils.BaseUtils; -import cgeo.geocaching.utils.Log; -import cgeo.geocaching.utils.UnknownTagsHandler; - -import org.apache.commons.lang3.StringUtils; - -import android.app.ProgressDialog; -import android.content.Intent; -import android.graphics.drawable.BitmapDrawable; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.Html; -import android.text.method.LinkMovementMethod; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Locale; - -public class cgeotrackable extends AbstractActivity { - private static final int MENU_LOG_TOUCH = 1; - private static final int MENU_BROWSER_TRACKABLE = 2; - private cgTrackable trackable = null; - private String geocode = null; - private String name = null; - private String guid = null; - private String id = null; - private String contextMenuUser = null; - private LayoutInflater inflater = null; - private ProgressDialog waitDialog = null; - private Handler loadTrackableHandler = new Handler() { - - @Override - public void handleMessage(Message msg) { - if (trackable == null) { - if (waitDialog != null) { - waitDialog.dismiss(); - } - - if (StringUtils.isNotBlank(geocode)) { - showToast(res.getString(R.string.err_tb_find) + " " + geocode + "."); - } else { - showToast(res.getString(R.string.err_tb_find_that)); - } - - finish(); - return; - } - - try { - inflater = getLayoutInflater(); - geocode = trackable.getGeocode(); - - if (StringUtils.isNotBlank(trackable.getName())) { - setTitle(Html.fromHtml(trackable.getName()).toString()); - } else { - setTitle(trackable.getName()); - } - - findViewById(R.id.details_list_box).setVisibility(View.VISIBLE); - final CacheDetailsCreator details = new CacheDetailsCreator(cgeotrackable.this, (LinearLayout) findViewById(R.id.details_list)); - - // action bar icon - if (StringUtils.isNotBlank(trackable.getIconUrl())) { - final TrackableIconHandler iconHandler = new TrackableIconHandler(((TextView) findViewById(R.id.actionbar_title))); - final TrackableIconThread iconThread = new TrackableIconThread(trackable.getIconUrl(), iconHandler); - iconThread.start(); - } - - // trackable name - details.add(R.string.trackable_name, StringUtils.isNotBlank(trackable.getName()) ? Html.fromHtml(trackable.getName()).toString() : res.getString(R.string.trackable_unknown)); - - // trackable type - String tbType; - if (StringUtils.isNotBlank(trackable.getType())) { - tbType = Html.fromHtml(trackable.getType()).toString(); - } else { - tbType = res.getString(R.string.trackable_unknown); - } - details.add(R.string.trackable_type, tbType); - - // trackable geocode - details.add(R.string.trackable_code, trackable.getGeocode()); - - // trackable owner - TextView owner = details.add(R.string.trackable_owner, res.getString(R.string.trackable_unknown)); - if (StringUtils.isNotBlank(trackable.getOwner())) { - owner.setText(Html.fromHtml(trackable.getOwner()), TextView.BufferType.SPANNABLE); - owner.setOnClickListener(new UserActionsListener()); - } - - // trackable spotted - if (StringUtils.isNotBlank(trackable.getSpottedName()) || - trackable.getSpottedType() == cgTrackable.SPOTTED_UNKNOWN || - trackable.getSpottedType() == cgTrackable.SPOTTED_OWNER - ) { - boolean showTimeSpan = true; - StringBuilder text; - - if (trackable.getSpottedType() == cgTrackable.SPOTTED_CACHE) { - text = new StringBuilder(res.getString(R.string.trackable_spotted_in_cache) + ' ' + Html.fromHtml(trackable.getSpottedName()).toString()); - } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_USER) { - text = new StringBuilder(res.getString(R.string.trackable_spotted_at_user) + ' ' + Html.fromHtml(trackable.getSpottedName()).toString()); - } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_UNKNOWN) { - text = new StringBuilder(res.getString(R.string.trackable_spotted_unknown_location)); - } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_OWNER) { - text = new StringBuilder(res.getString(R.string.trackable_spotted_owner)); - } else { - text = new StringBuilder("N/A"); - showTimeSpan = false; - } - - // days since last spotting - if (showTimeSpan && trackable.getLogs() != null) { - for (LogEntry log : trackable.getLogs()) { - if (log.type == LogType.RETRIEVED_IT || log.type == LogType.GRABBED_IT || log.type == LogType.DISCOVERED_IT || log.type == LogType.PLACED_IT) { - final int days = log.daysSinceLog(); - text.append(" (").append(res.getQuantityString(R.plurals.days_ago, days, days)).append(')'); - break; - } - } - } - - final TextView spotted = details.add(R.string.trackable_spotted, text.toString()); - spotted.setClickable(true); - if (cgTrackable.SPOTTED_CACHE == trackable.getSpottedType()) { - spotted.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View arg0) { - CacheDetailActivity.startActivityGuid(cgeotrackable.this, trackable.getSpottedGuid(), trackable.getSpottedName()); - } - }); - } else if (cgTrackable.SPOTTED_USER == trackable.getSpottedType()) { - spotted.setOnClickListener(new UserActionsListener()); - } - } - - // trackable origin - if (StringUtils.isNotBlank(trackable.getOrigin())) { - TextView origin = details.add(R.string.trackable_origin, ""); - origin.setText(Html.fromHtml(trackable.getOrigin()), TextView.BufferType.SPANNABLE); - } - - // trackable released - if (trackable.getReleased() != null) { - details.add(R.string.trackable_released, Formatter.formatDate(trackable.getReleased().getTime())); - } - - // trackable distance - if (trackable.getDistance() >= 0) { - details.add(R.string.trackable_distance, Units.getDistanceFromKilometers(trackable.getDistance())); - } - - // trackable goal - if (StringUtils.isNotBlank(trackable.getGoal())) { - findViewById(R.id.goal_box).setVisibility(View.VISIBLE); - TextView descView = (TextView) findViewById(R.id.goal); - descView.setVisibility(View.VISIBLE); - descView.setText(Html.fromHtml(trackable.getGoal(), new HtmlImage(geocode, true, 0, false), null), TextView.BufferType.SPANNABLE); - descView.setMovementMethod(LinkMovementMethod.getInstance()); - } - - // trackable details - if (StringUtils.isNotBlank(trackable.getDetails())) { - findViewById(R.id.details_box).setVisibility(View.VISIBLE); - TextView descView = (TextView) findViewById(R.id.details); - descView.setVisibility(View.VISIBLE); - descView.setText(Html.fromHtml(trackable.getDetails(), new HtmlImage(geocode, true, 0, false), new UnknownTagsHandler()), TextView.BufferType.SPANNABLE); - descView.setMovementMethod(LinkMovementMethod.getInstance()); - } - - // trackable image - if (StringUtils.isNotBlank(trackable.getImage())) { - findViewById(R.id.image_box).setVisibility(View.VISIBLE); - LinearLayout imgView = (LinearLayout) findViewById(R.id.image); - - final ImageView trackableImage = (ImageView) inflater.inflate(R.layout.trackable_image, null); - - trackableImage.setImageResource(R.drawable.image_not_loaded); - trackableImage.setClickable(true); - trackableImage.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View arg0) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(trackable.getImage()))); - } - }); - - // try to load image - final Handler handler = new Handler() { - - @Override - public void handleMessage(Message message) { - BitmapDrawable image = (BitmapDrawable) message.obj; - if (image != null) { - trackableImage.setImageDrawable((BitmapDrawable) message.obj); - } - } - }; - - new Thread() { - - @Override - public void run() { - try { - HtmlImage imgGetter = new HtmlImage(geocode, true, 0, false); - - BitmapDrawable image = imgGetter.getDrawable(trackable.getImage()); - Message message = handler.obtainMessage(0, image); - handler.sendMessage(message); - } catch (Exception e) { - Log.e("cgeospoilers.onCreate.onClick.run: " + e.toString()); - } - } - }.start(); - - imgView.addView(trackableImage); - } - } catch (Exception e) { - Log.e("cgeotrackable.loadTrackableHandler: " + e.toString() + Arrays.toString(e.getStackTrace())); - } - - displayLogs(); - - if (waitDialog != null) { - waitDialog.dismiss(); - } - } - }; - - public cgeotrackable() { - super("c:geo-trackable-details"); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.trackable_detail); - setTitle(res.getString(R.string.trackable)); - - // get parameters - Bundle extras = getIntent().getExtras(); - Uri uri = getIntent().getData(); - - // try to get data from extras - if (extras != null) { - geocode = extras.getString("geocode"); - name = extras.getString("name"); - guid = extras.getString("guid"); - id = extras.getString("id"); - } - - // try to get data from URI - if (geocode == null && guid == null && id == null && uri != null) { - String uriHost = uri.getHost().toLowerCase(Locale.US); - if (uriHost.contains("geocaching.com")) { - geocode = uri.getQueryParameter("tracker"); - guid = uri.getQueryParameter("guid"); - id = uri.getQueryParameter("id"); - - if (StringUtils.isNotBlank(geocode)) { - geocode = geocode.toUpperCase(Locale.US); - guid = null; - id = null; - } else if (StringUtils.isNotBlank(guid)) { - geocode = null; - guid = guid.toLowerCase(Locale.US); - id = null; - } else if (StringUtils.isNotBlank(id)) { - geocode = null; - guid = null; - id = id.toLowerCase(Locale.US); - } else { - showToast(res.getString(R.string.err_tb_details_open)); - finish(); - return; - } - } else if (uriHost.contains("coord.info")) { - String uriPath = uri.getPath().toLowerCase(Locale.US); - if (uriPath != null && uriPath.startsWith("/tb")) { - geocode = uriPath.substring(1).toUpperCase(Locale.US); - guid = null; - id = null; - } else { - showToast(res.getString(R.string.err_tb_details_open)); - finish(); - return; - } - } - } - - // no given data - if (geocode == null && guid == null && id == null) { - showToast(res.getString(R.string.err_tb_display)); - finish(); - return; - } - - String message; - if (StringUtils.isNotBlank(name)) { - message = Html.fromHtml(name).toString(); - } else if (StringUtils.isNotBlank(geocode)) { - message = geocode; - } else { - message = res.getString(R.string.trackable); - } - waitDialog = ProgressDialog.show(this, message, res.getString(R.string.trackable_details_loading), true, true); - - LoadTrackableThread thread = new LoadTrackableThread(loadTrackableHandler, geocode, guid, id); - thread.start(); - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { - super.onCreateContextMenu(menu, view, info); - final int viewId = view.getId(); - - if (viewId == R.id.author) { // Log item author - contextMenuUser = ((TextView) view).getText().toString(); - } else { // Trackable owner, and user holding trackable now - RelativeLayout itemLayout = (RelativeLayout) view.getParent(); - TextView itemName = (TextView) itemLayout.findViewById(R.id.name); - - String selectedName = itemName.getText().toString(); - if (selectedName.equals(res.getString(R.string.trackable_owner))) { - contextMenuUser = trackable.getOwner(); - } else if (selectedName.equals(res.getString(R.string.trackable_spotted))) { - contextMenuUser = trackable.getSpottedName(); - } - } - - menu.setHeaderTitle(res.getString(R.string.user_menu_title) + " " + contextMenuUser); - menu.add(viewId, 1, 0, res.getString(R.string.user_menu_view_hidden)); - menu.add(viewId, 2, 0, res.getString(R.string.user_menu_view_found)); - menu.add(viewId, 3, 0, res.getString(R.string.user_menu_open_browser)); - } - - @Override - public boolean onContextItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case 1: - cgeocaches.startActivityOwner(this, contextMenuUser); - return true; - case 2: - cgeocaches.startActivityUserName(this, contextMenuUser); - return true; - case 3: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + Network.encode(contextMenuUser)))); - return true; - default: - return false; - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENU_LOG_TOUCH, 0, res.getString(R.string.trackable_log_touch)).setIcon(R.drawable.ic_menu_agenda); // log touch - menu.add(0, MENU_BROWSER_TRACKABLE, 0, res.getString(R.string.trackable_browser_open)).setIcon(R.drawable.ic_menu_info_details); // browser - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case MENU_LOG_TOUCH: - LogTrackableActivity.startActivity(this, trackable); - return true; - case MENU_BROWSER_TRACKABLE: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(trackable.getUrl()))); - return true; - } - return false; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - menu.findItem(MENU_LOG_TOUCH).setEnabled(StringUtils.isNotBlank(geocode) && trackable.isLoggable()); - menu.findItem(MENU_BROWSER_TRACKABLE).setEnabled(StringUtils.isNotBlank(trackable.getUrl())); - return super.onPrepareOptionsMenu(menu); - } - - private class LoadTrackableThread extends Thread { - final private Handler handler; - final private String geocode; - final private String guid; - final private String id; - - public LoadTrackableThread(Handler handlerIn, String geocodeIn, String guidIn, String idIn) { - handler = handlerIn; - geocode = geocodeIn; - guid = guidIn; - id = idIn; - } - - @Override - public void run() { - trackable = cgData.loadTrackable(geocode); - - if ((trackable == null || trackable.isLoggable()) && !StringUtils.startsWithIgnoreCase(geocode, "GK")) { - trackable = GCParser.searchTrackable(geocode, guid, id); - } - handler.sendMessage(Message.obtain()); - } - } - - private void displayLogs() { - // trackable logs - LinearLayout listView = (LinearLayout) findViewById(R.id.log_list); - listView.removeAllViews(); - - if (trackable != null && trackable.getLogs() != null) { - for (LogEntry log : trackable.getLogs()) { - RelativeLayout rowView = (RelativeLayout) inflater.inflate(R.layout.trackable_logs_item, null); - - if (log.date > 0) { - ((TextView) rowView.findViewById(R.id.added)).setText(Formatter.formatShortDate(log.date)); - } - - ((TextView) rowView.findViewById(R.id.type)).setText(log.type.getL10n()); - ((TextView) rowView.findViewById(R.id.author)).setText(Html.fromHtml(log.author), TextView.BufferType.SPANNABLE); - - if (StringUtils.isBlank(log.cacheName)) { - rowView.findViewById(R.id.location).setVisibility(View.GONE); - } else { - ((TextView) rowView.findViewById(R.id.location)).setText(Html.fromHtml(log.cacheName)); - final String cacheGuid = log.cacheGuid; - final String cacheName = log.cacheName; - rowView.findViewById(R.id.location).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View arg0) { - CacheDetailActivity.startActivityGuid(cgeotrackable.this, cacheGuid, Html.fromHtml(cacheName).toString()); - } - }); - } - - TextView logView = (TextView) rowView.findViewById(R.id.log); - logView.setMovementMethod(LinkMovementMethod.getInstance()); - - String logText = log.log; - if (BaseUtils.containsHtml(logText)) { - logText = log.getDisplayText(); - logView.setText(Html.fromHtml(logText, new HtmlImage(null, false, StoredList.TEMPORARY_LIST_ID, false), null), TextView.BufferType.SPANNABLE); - } - else { - logView.setText(logText); - } - - ImageView statusMarker = (ImageView) rowView.findViewById(R.id.log_mark); - // colored marker - int marker = log.type.markerId; - if (marker != 0) { - statusMarker.setVisibility(View.VISIBLE); - statusMarker.setImageResource(marker); - } - else { - statusMarker.setVisibility(View.GONE); - } - - // add LogImages - LinearLayout logLayout = (LinearLayout) rowView.findViewById(R.id.log_layout); - - if (log.hasLogImages()) { - - final ArrayList<cgImage> logImages = new ArrayList<cgImage>(log.getLogImages()); - - final View.OnClickListener listener = new View.OnClickListener() { - @Override - public void onClick(View v) { - ImagesActivity.startActivityLogImages(cgeotrackable.this, trackable.getGeocode(), logImages); - } - }; - - LinearLayout log_imgView = (LinearLayout) getLayoutInflater().inflate(R.layout.trackable_logs_img, null); - TextView log_img_title = (TextView) log_imgView.findViewById(R.id.title); - log_img_title.setText(log.getImageTitles()); - log_img_title.setOnClickListener(listener); - logLayout.addView(log_imgView); - } - - rowView.findViewById(R.id.author).setOnClickListener(new UserActionsListener()); - listView.addView(rowView); - } - - if (!trackable.getLogs().isEmpty()) { - findViewById(R.id.log_box).setVisibility(View.VISIBLE); - } - } - } - - private class UserActionsListener implements View.OnClickListener { - - @Override - public void onClick(View view) { - if (view == null) { - return; - } - - try { - registerForContextMenu(view); - openContextMenu(view); - } catch (Exception e) { - Log.e("cgeotrackable.UserActionsListener.onClick ", e); - } - } - } - - private class TrackableIconThread extends Thread { - final private String url; - final private Handler handler; - - public TrackableIconThread(String urlIn, Handler handlerIn) { - url = urlIn; - handler = handlerIn; - } - - @Override - public void run() { - if (url == null || handler == null) { - return; - } - - try { - HtmlImage imgGetter = new HtmlImage(trackable.getGeocode(), false, 0, false); - - BitmapDrawable image = imgGetter.getDrawable(url); - Message message = handler.obtainMessage(0, image); - handler.sendMessage(message); - } catch (Exception e) { - Log.e("cgeotrackable.TrackableIconThread.run: " + e.toString()); - } - } - } - - private static class TrackableIconHandler extends Handler { - final private TextView view; - - public TrackableIconHandler(TextView viewIn) { - view = viewIn; - } - - @Override - public void handleMessage(Message message) { - final BitmapDrawable image = (BitmapDrawable) message.obj; - if (image != null && view != null) { - image.setBounds(0, 0, view.getHeight(), view.getHeight()); - view.setCompoundDrawables(image, null, null, null); - } - } - } - - public static void startActivity(final AbstractActivity fromContext, - final String guid, final String geocode, final String name) { - final Intent trackableIntent = new Intent(fromContext, cgeotrackable.class); - trackableIntent.putExtra("guid", guid); - trackableIntent.putExtra("geocode", geocode); - trackableIntent.putExtra("name", name); - fromContext.startActivity(trackableIntent); - } -} diff --git a/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java b/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java index d0e45f6..f19064d 100644 --- a/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java +++ b/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java @@ -12,7 +12,7 @@ abstract public class AbstractSearchThread extends Thread { private final Handler handler; private static AbstractSearchThread currentInstance; - public AbstractSearchThread(final Handler handler) { + protected AbstractSearchThread(final Handler handler) { this.handler = handler; } diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 8eed4bf..5de170b 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -21,18 +21,21 @@ import java.util.regex.Pattern; public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter { private static final String HTTP_COORD_INFO = "http://coord.info/"; - private static GCConnector instance; private static final Pattern gpxZipFilePattern = Pattern.compile("\\d{7,}(_.+)?\\.zip", Pattern.CASE_INSENSITIVE); private GCConnector() { // singleton } + /** + * initialization on demand holder pattern + */ + private static class Holder { + private static final GCConnector INSTANCE = new GCConnector(); + } + public static GCConnector getInstance() { - if (instance == null) { - instance = new GCConnector(); - } - return instance; + return Holder.INSTANCE; } @Override diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index de6a4d8..a474e70 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -60,7 +60,7 @@ public final class GCConstants { public final static Pattern PATTERN_SPOILER_IMAGE = Pattern.compile("<a href=\"(http://img\\.geocaching\\.com/cache/[^.]+\\.jpe?g)\"[^>]+><img[^>]+><span>([^<]+)</span></a>(?:<br />([^<]+)<br /><br />)?"); public final static Pattern PATTERN_INVENTORY = Pattern.compile("<span id=\"ctl00_ContentBody_uxTravelBugList_uxInventoryLabel\">\\W*Inventory[^<]*</span>[^<]*</h3>[^<]*<div class=\"WidgetBody\">([^<]*<ul>(([^<]*<li>[^<]*<a href=\"[^\"]+\"[^>]*>[^<]*<img src=\"[^\"]+\"[^>]*>[^<]*<span>[^<]+<\\/span>[^<]*<\\/a>[^<]*<\\/li>)+)[^<]*<\\/ul>)?"); public final static Pattern PATTERN_INVENTORYINSIDE = Pattern.compile("[^<]*<li>[^<]*<a href=\"[a-z0-9\\-\\_\\.\\?\\/\\:\\@]*\\/track\\/details\\.aspx\\?guid=([0-9a-z\\-]+)[^\"]*\"[^>]*>[^<]*<img src=\"[^\"]+\"[^>]*>[^<]*<span>([^<]+)<\\/span>[^<]*<\\/a>[^<]*<\\/li>"); - public final static Pattern PATTERN_WATCHLIST = Pattern.compile("icon_stop_watchlist.gif"); + public final static Pattern PATTERN_WATCHLIST = Pattern.compile(Pattern.quote("watchlist.aspx") + ".{1,50}" + Pattern.quote("action=rem")); // Info box top-right public static final Pattern PATTERN_LOGIN_NAME = Pattern.compile("\"SignedInProfileLink\">([^<]+)</a>"); @@ -165,8 +165,9 @@ public final class GCConstants { public final static String STRING_PREMIUMONLY_2 = "Sorry, the owner of this listing has made it viewable to Premium Members only."; public final static String STRING_PREMIUMONLY_1 = "has chosen to make this cache listing visible to Premium Members only."; - public final static String STRING_UNPUBLISHED_OWNER = "Cache is Unpublished"; + public final static String STRING_UNPUBLISHED_OWNER = "cache has not been published yet"; public final static String STRING_UNPUBLISHED_OTHER = "you cannot view this cache listing until it has been published"; + public final static String STRING_UNPUBLISHED_FROM_SEARCH = "UnpublishedCacheSearchWidget"; public final static String STRING_UNKNOWN_ERROR = "An Error Has Occurred"; public final static String STRING_DISABLED = "<li>This cache is temporarily unavailable."; public final static String STRING_ARCHIVED = "<li>This cache has been archived,"; diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 588ca1b..c40d470 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -334,7 +334,7 @@ public abstract class GCParser { final SearchResult searchResult = new SearchResult(); - if (page.contains(GCConstants.STRING_UNPUBLISHED_OTHER) || page.contains(GCConstants.STRING_UNPUBLISHED_OWNER)) { + if (page.contains(GCConstants.STRING_UNPUBLISHED_OTHER) || page.contains(GCConstants.STRING_UNPUBLISHED_OWNER) || page.contains(GCConstants.STRING_UNPUBLISHED_FROM_SEARCH)) { searchResult.setError(StatusCode.UNPUBLISHED_CACHE); return searchResult; } @@ -1249,8 +1249,6 @@ public abstract class GCParser { * * @param page * the HTML page to parse, already processed through {@link BaseUtils#replaceWhitespace} - * @param app - * if not null, the application to use to save the trackable * @return the parsed trackable, or null if none could be parsed */ static cgTrackable parseTrackable(final String page, final String possibleTrackingcode) { @@ -1397,7 +1395,8 @@ public abstract class GCParser { } // Apply the pattern for images in a trackable log entry against each full log (group(0)) - final Matcher matcherLogImages = GCConstants.PATTERN_TRACKABLE_LOG_IMAGES.matcher(matcherLogs.group(0)); + final String logEntry = matcherLogs.group(0); + final Matcher matcherLogImages = GCConstants.PATTERN_TRACKABLE_LOG_IMAGES.matcher(logEntry); /* * 1. Image URL * 2. Image title @@ -1713,8 +1712,7 @@ public abstract class GCParser { } } catch (JSONException e) { - Log.e("Unknown exception with json wrap code"); - e.printStackTrace(); + Log.e("Unknown exception with json wrap code", e); } Log.e("GCParser.deleteModifiedCoordinates - cannot delete modified coords"); return false; diff --git a/main/src/cgeo/geocaching/enumerations/LogType.java b/main/src/cgeo/geocaching/enumerations/LogType.java index f72b8f6..5918fe1 100644 --- a/main/src/cgeo/geocaching/enumerations/LogType.java +++ b/main/src/cgeo/geocaching/enumerations/LogType.java @@ -40,6 +40,7 @@ public enum LogType { MOVE_COLLECTION(69, "69", "unused_collection", R.string.log_movecollection), MOVE_INVENTORY(70, "70", "unused_inventory", R.string.log_moveinventory), RETRACT(25, "25", "retract listing", R.string.log_retractlisting), + MARKED_MISSING(16, "16", "marked missing", R.string.log_marked_missing, R.drawable.mark_red), UNKNOWN(0, "unknown", "", R.string.err_unknown, R.drawable.mark_red); // LogType not init. yet public final int id; diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java index 6d0364e..65dc291 100644 --- a/main/src/cgeo/geocaching/export/FieldnoteExport.java +++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java @@ -12,7 +12,9 @@ import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.Log; +import org.apache.commons.lang3.CharEncoding; import org.apache.commons.lang3.StringUtils; +import org.mapsforge.core.IOUtils; import android.app.Activity; import android.app.AlertDialog; @@ -154,32 +156,25 @@ class FieldnoteExport extends AbstractExport { fieldNoteBuffer.append('\n'); - if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - exportLocation.mkdirs(); + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + return false; + } - SimpleDateFormat fileNameDateFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); - exportFile = new File(exportLocation.toString() + '/' + fileNameDateFormat.format(new Date()) + ".txt"); + exportLocation.mkdirs(); - Writer fw = null; - try { - OutputStream os = new FileOutputStream(exportFile); - fw = new OutputStreamWriter(os, "UTF-16"); - fw.write(fieldNoteBuffer.toString()); - } catch (IOException e) { - Log.e("FieldnoteExport.ExportTask export", e); - return false; - } finally { - if (fw != null) { - try { - fw.close(); - } catch (IOException e) { - Log.e("FieldnoteExport.ExportTask export", e); - return false; - } - } - } - } else { + SimpleDateFormat fileNameDateFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); + exportFile = new File(exportLocation.toString() + '/' + fileNameDateFormat.format(new Date()) + ".txt"); + + Writer fw = null; + try { + OutputStream os = new FileOutputStream(exportFile); + fw = new OutputStreamWriter(os, CharEncoding.UTF_16); + fw.write(fieldNoteBuffer.toString()); + } catch (IOException e) { + Log.e("FieldnoteExport.ExportTask export", e); return false; + } finally { + IOUtils.closeQuietly(fw); } if (upload) { diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java index b1834b9..3aec114 100644 --- a/main/src/cgeo/geocaching/export/GpxExport.java +++ b/main/src/cgeo/geocaching/export/GpxExport.java @@ -51,7 +51,7 @@ class GpxExport extends AbstractExport { if (null == activity) { // No activity given, so no user interaction possible. // Start export with default parameters. - new ExportTask(caches, activity).execute((Void) null); + new ExportTask(caches, null).execute((Void) null); } else { // Show configuration dialog diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java index 1c6f1af..750d5e0 100644 --- a/main/src/cgeo/geocaching/files/GPXImporter.java +++ b/main/src/cgeo/geocaching/files/GPXImporter.java @@ -124,7 +124,7 @@ public class GPXImporter { final Handler importStepHandler;
final CancellableHandler progressHandler;
- public ImportThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
+ protected ImportThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
this.listId = listId;
this.importStepHandler = importStepHandler;
this.progressHandler = progressHandler;
@@ -204,7 +204,7 @@ public class GPXImporter { static abstract class ImportGpxThread extends ImportThread {
- public ImportGpxThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
+ protected ImportGpxThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
super(listId, importStepHandler, progressHandler);
}
@@ -274,7 +274,7 @@ public class GPXImporter { static abstract class ImportGpxZipThread extends ImportGpxThread {
- public ImportGpxZipThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
+ protected ImportGpxZipThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
super(listId, importStepHandler, progressHandler);
}
diff --git a/main/src/cgeo/geocaching/filter/AbstractFilter.java b/main/src/cgeo/geocaching/filter/AbstractFilter.java index 44d6d3f..f78a218 100644 --- a/main/src/cgeo/geocaching/filter/AbstractFilter.java +++ b/main/src/cgeo/geocaching/filter/AbstractFilter.java @@ -8,7 +8,7 @@ import java.util.List; abstract class AbstractFilter implements IFilter { private final String name; - public AbstractFilter(String name) { + protected AbstractFilter(String name) { this.name = name; } diff --git a/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java b/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java index 829a1d9..e84174a 100644 --- a/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java +++ b/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java @@ -8,7 +8,7 @@ abstract class AbstractRangeFilter extends AbstractFilter { protected final float rangeMin; protected final float rangeMax; - public AbstractRangeFilter(int ressourceId, int range) { + protected AbstractRangeFilter(int ressourceId, int range) { super(cgeoapplication.getInstance().getResources().getString(ressourceId) + ' ' + (range == 5 ? '5' : range + " + " + String.format("%.1f", range + 0.5))); this.rangeMin = range; rangeMax = rangeMin + 1f; diff --git a/main/src/cgeo/geocaching/geopoint/Geopoint.java b/main/src/cgeo/geocaching/geopoint/Geopoint.java index fb21a0c..0dfdbcb 100644 --- a/main/src/cgeo/geocaching/geopoint/Geopoint.java +++ b/main/src/cgeo/geocaching/geopoint/Geopoint.java @@ -102,7 +102,7 @@ public final class Geopoint implements ICoordinates, Parcelable { * @param lonDegFrac */ public Geopoint(final String latDir, final String latDeg, final String latDegFrac, - final String lonDir, final String lonDeg, final String lonDegFrac) { + final String lonDir, final String lonDeg, final String lonDegFrac) { latitude = Double.parseDouble(latDeg + "." + addZeros(Integer.parseInt(latDegFrac), 5)) * getLatSign(latDir); longitude = Double.parseDouble(lonDeg + "." + addZeros(Integer.parseInt(lonDegFrac), 5)) * @@ -122,7 +122,7 @@ public final class Geopoint implements ICoordinates, Parcelable { * @param lonMinFrac */ public Geopoint(final String latDir, final String latDeg, final String latMin, final String latMinFrac, - final String lonDir, final String lonDeg, final String lonMin, final String lonMinFrac) { + final String lonDir, final String lonDeg, final String lonMin, final String lonMinFrac) { latitude = (Double.parseDouble(latDeg) + Double.parseDouble(latMin + "." + addZeros(Integer.parseInt(latMinFrac), 3)) / 60) * (getLatSign(latDir)); longitude = (Double.parseDouble(lonDeg) + Double.parseDouble(lonMin + "." + addZeros(Integer.parseInt(lonMinFrac), 3)) / 60) * @@ -144,7 +144,7 @@ public final class Geopoint implements ICoordinates, Parcelable { * @param lonSecFrac */ public Geopoint(final String latDir, final String latDeg, final String latMin, final String latSec, final String latSecFrac, - final String lonDir, final String lonDeg, final String lonMin, final String lonSec, final String lonSecFrac) { + final String lonDir, final String lonDeg, final String lonMin, final String lonSec, final String lonSecFrac) { latitude = (Double.parseDouble(latDeg) + Double.parseDouble(latMin) / 60 + Double.parseDouble(latSec + "." + addZeros(Integer.parseInt(latSecFrac), 3)) / 3600) * (getLatSign(latDir)); longitude = (Double.parseDouble(lonDeg) + Double.parseDouble(lonMin) / 60 + Double.parseDouble(lonSec + "." + addZeros(Integer.parseInt(lonSecFrac), 3)) / 3600) * @@ -280,8 +280,7 @@ public final class Geopoint implements ICoordinates, Parcelable { * tolerance in km * @return true if similar, false otherwise */ - public boolean isEqualTo(Geopoint gp, double tolerance) - { + public boolean isEqualTo(Geopoint gp, double tolerance) { return null != gp && distanceTo(gp) <= tolerance; } @@ -293,42 +292,35 @@ public final class Geopoint implements ICoordinates, Parcelable { * @see GeopointFormatter * @return formatted coordinates */ - public String format(GeopointFormatter.Format format) - { + public String format(GeopointFormatter.Format format) { return GeopointFormatter.format(format, this); } /** * Returns formatted coordinates with default format. * Default format is decimalminutes, e.g. N 52° 36.123 E 010° 03.456 - * + * * @return formatted coordinates */ @Override - public String toString() - { + public String toString() { return format(GeopointFormatter.Format.LAT_LON_DECMINUTE); } - abstract public static class GeopointException - extends RuntimeException - { + abstract public static class GeopointException extends NumberFormatException { private static final long serialVersionUID = 1L; - public GeopointException(String msg) + protected GeopointException(String msg) { super(msg); } } - public static class ParseException - extends GeopointException - { + public static class ParseException extends GeopointException { private static final long serialVersionUID = 1L; public final int resource; - public ParseException(final String msg, final GeopointParser.LatLon faulty) - { + public ParseException(final String msg, final GeopointParser.LatLon faulty) { super(msg); resource = faulty == GeopointParser.LatLon.LAT ? R.string.err_parse_lat : R.string.err_parse_lon; } diff --git a/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java b/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java index 356feae..0e676ce 100644 --- a/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java +++ b/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java @@ -96,10 +96,9 @@ public class GeopointFormatter case LON_DECMINUTE_RAW: return String.format(Locale.getDefault(), "%c %03d %06.3f", gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); + default: + throw new IllegalArgumentException(); } - - // Keep the compiler happy even though it cannot happen - return null; } } diff --git a/main/src/cgeo/geocaching/maps/AbstractMapSource.java b/main/src/cgeo/geocaching/maps/AbstractMapSource.java index 90a61d2..1d219d3 100644 --- a/main/src/cgeo/geocaching/maps/AbstractMapSource.java +++ b/main/src/cgeo/geocaching/maps/AbstractMapSource.java @@ -9,7 +9,7 @@ public abstract class AbstractMapSource implements MapSource { private final MapProvider mapProvider; private final String id; - public AbstractMapSource(final String id, final MapProvider mapProvider, final String name) { + protected AbstractMapSource(final String id, final MapProvider mapProvider, final String name) { this.id = id; this.mapProvider = mapProvider; this.name = name; diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 92018ea..32814c4 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -1336,7 +1336,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto final protected Viewport viewport; - public DoRunnable(final Viewport viewport) { + protected DoRunnable(final Viewport viewport) { this.viewport = viewport; } diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java index dbe41d6..1fa38ad 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java @@ -16,7 +16,6 @@ public final class GoogleMapProvider extends AbstractMapProvider { public static final String GOOGLE_MAP_ID = "GOOGLE_MAP"; public static final String GOOGLE_SATELLITE_ID = "GOOGLE_SATELLITE"; - private static GoogleMapProvider instance; private final MapItemFactory mapItemFactory; @@ -29,11 +28,12 @@ public final class GoogleMapProvider extends AbstractMapProvider { mapItemFactory = new GoogleMapItemFactory(); } + private static class Holder { + private static final GoogleMapProvider INSTANCE = new GoogleMapProvider(); + } + public static GoogleMapProvider getInstance() { - if (instance == null) { - instance = new GoogleMapProvider(); - } - return instance; + return Holder.INSTANCE; } public static boolean isSatelliteSource(final MapSource mapSource) { @@ -67,7 +67,7 @@ public final class GoogleMapProvider extends AbstractMapProvider { private static abstract class AbstractGoogleMapSource extends AbstractMapSource { - public AbstractGoogleMapSource(final String id, final MapProvider mapProvider, final String name) { + protected AbstractGoogleMapSource(final String id, final MapProvider mapProvider, final String name) { super(id, mapProvider, name); } diff --git a/main/src/cgeo/geocaching/maps/google/GoogleOverlay.java b/main/src/cgeo/geocaching/maps/google/GoogleOverlay.java index d86eafe..773f9ff 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleOverlay.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleOverlay.java @@ -27,6 +27,9 @@ public class GoogleOverlay extends Overlay implements OverlayImpl { break; case ScaleOverlay: overlayBase = new ScaleOverlay(activityIn, this); + break; + default: + throw new IllegalArgumentException(); } } diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java index 8eef130..294eb79 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java @@ -31,7 +31,6 @@ public final class MapsforgeMapProvider extends AbstractMapProvider { public static final String MAPSFORGE_MAPNIK_ID = "MAPSFORGE_MAPNIK"; private boolean oldMap = false; private MapItemFactory mapItemFactory = new MapsforgeMapItemFactory(); - private static MapsforgeMapProvider instance; private MapsforgeMapProvider() { final Resources resources = cgeoapplication.getInstance().getResources(); @@ -42,11 +41,12 @@ public final class MapsforgeMapProvider extends AbstractMapProvider { updateOfflineMaps(); } + private static final class Holder { + private static final MapsforgeMapProvider INSTANCE = new MapsforgeMapProvider(); + } + public static MapsforgeMapProvider getInstance() { - if (instance == null) { - instance = new MapsforgeMapProvider(); - } - return instance; + return Holder.INSTANCE; } public static List<String> getOfflineMaps() { diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeOverlay.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeOverlay.java index b6e31a2..dd7fb75 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeOverlay.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeOverlay.java @@ -29,6 +29,9 @@ public class MapsforgeOverlay extends Overlay implements OverlayImpl { break; case ScaleOverlay: overlayBase = new ScaleOverlay(activityIn, this); + break; + default: + throw new IllegalArgumentException(); } } diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java index 67964e3..c3265fe 100644 --- a/main/src/cgeo/geocaching/network/Network.java +++ b/main/src/cgeo/geocaching/network/Network.java @@ -62,7 +62,7 @@ public abstract class Network { private final static HttpParams clientParams = new BasicHttpParams(); static { - Network.clientParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8"); + Network.clientParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, CharEncoding.UTF_8); Network.clientParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000); Network.clientParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000); Network.clientParams.setParameter(ClientPNames.HANDLE_REDIRECTS, true); @@ -230,7 +230,7 @@ public abstract class Network { request = new HttpPost(uri); if (params != null) { try { - ((HttpPost) request).setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + ((HttpPost) request).setEntity(new UrlEncodedFormEntity(params, CharEncoding.UTF_8)); } catch (final UnsupportedEncodingException e) { Log.e("request", e); return null; @@ -401,7 +401,7 @@ public abstract class Network { private static String getResponseDataNoError(final HttpResponse response, boolean replaceWhitespace) { try { - String data = EntityUtils.toString(response.getEntity(), "UTF-8"); + String data = EntityUtils.toString(response.getEntity(), CharEncoding.UTF_8); return replaceWhitespace ? BaseUtils.replaceWhitespace(data) : data; } catch (Exception e) { Log.e("getResponseData", e); diff --git a/main/src/cgeo/geocaching/network/Parameters.java b/main/src/cgeo/geocaching/network/Parameters.java index 3957d38..74f5531 100644 --- a/main/src/cgeo/geocaching/network/Parameters.java +++ b/main/src/cgeo/geocaching/network/Parameters.java @@ -4,6 +4,8 @@ import ch.boye.httpclientandroidlib.NameValuePair; import ch.boye.httpclientandroidlib.client.utils.URLEncodedUtils; import ch.boye.httpclientandroidlib.message.BasicNameValuePair; +import org.apache.commons.lang3.CharEncoding; + import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Collections; @@ -65,7 +67,7 @@ public class Parameters extends ArrayList<NameValuePair> { @Override public String toString() { - return URLEncodedUtils.format(this, "UTF-8"); + return URLEncodedUtils.format(this, CharEncoding.UTF_8); } /** diff --git a/main/src/cgeo/geocaching/ui/AbstractCachingPageViewCreator.java b/main/src/cgeo/geocaching/ui/AbstractCachingPageViewCreator.java new file mode 100644 index 0000000..333ef11 --- /dev/null +++ b/main/src/cgeo/geocaching/ui/AbstractCachingPageViewCreator.java @@ -0,0 +1,32 @@ +package cgeo.geocaching.ui; + +import cgeo.geocaching.activity.AbstractViewPagerActivity.PageViewCreator; + +import android.view.View; + +/** + * View creator which destroys the created view on every {@link #notifyDataSetChanged()}. + * + * @param <ViewClass> + */ +public abstract class AbstractCachingPageViewCreator<ViewClass extends View> implements PageViewCreator { + + public ViewClass view; + + @Override + public final void notifyDataSetChanged() { + view = null; + } + + @Override + public final View getView() { + if (view == null) { + view = getDispatchedView(); + } + + return view; + } + + @Override + public abstract ViewClass getDispatchedView(); +} diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java index 746b50d..eaa25ef 100644 --- a/main/src/cgeo/geocaching/ui/LoggingUI.java +++ b/main/src/cgeo/geocaching/ui/LoggingUI.java @@ -124,6 +124,7 @@ public class LoggingUI extends AbstractUIFactory { case CLEAR_LOG: cgData.clearLogOffline(cache.getGeocode()); + break; } } else { cache.logOffline(activity, logTypeEntry.logType); diff --git a/main/src/cgeo/geocaching/utils/PeriodicHandler.java b/main/src/cgeo/geocaching/utils/PeriodicHandler.java index 3f6c345..ac6b22a 100644 --- a/main/src/cgeo/geocaching/utils/PeriodicHandler.java +++ b/main/src/cgeo/geocaching/utils/PeriodicHandler.java @@ -26,7 +26,7 @@ abstract public class PeriodicHandler extends Handler { * @param period * The period in milliseconds. */ - public PeriodicHandler(final long period) { + protected PeriodicHandler(final long period) { this.period = period; } diff --git a/tests/libs/docs/robotium-solo-3.6-javadoc.jar b/tests/libs/docs/robotium-solo-3.6-javadoc.jar Binary files differnew file mode 100644 index 0000000..db4e75b --- /dev/null +++ b/tests/libs/docs/robotium-solo-3.6-javadoc.jar diff --git a/tests/libs/robotium-solo-3.6.jar.properties b/tests/libs/robotium-solo-3.6.jar.properties new file mode 100644 index 0000000..10e60fa --- /dev/null +++ b/tests/libs/robotium-solo-3.6.jar.properties @@ -0,0 +1 @@ +doc=./docs/robotium-solo-3.6-javadoc.jar
\ No newline at end of file diff --git a/tests/res/raw/gc430fm_published.html b/tests/res/raw/gc430fm_published.html new file mode 100644 index 0000000..6d7d728 --- /dev/null +++ b/tests/res/raw/gc430fm_published.html @@ -0,0 +1,2245 @@ +
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head id="ctl00_Head1"><meta charset="utf-8" />
+ <!--[if IE]><![endif]-->
+ <title>
+ GC430FM Cache is Unpublished (Unknown Cache) in California, United States created by The North Star
+</title><meta name="DC.title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta name="author" content="Groundspeak, Inc." /><meta name="DC.creator" content="Groundspeak, Inc." /><meta name="Copyright" content="Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved." /><!-- Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved. --><meta name="description" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world." /><meta name="DC.subject" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world." /><meta http-equiv="imagetoolbar" content="no" /><meta name="distribution" content="global" /><meta name="MSSmartTagsPreventParsing" content="true" /><meta name="rating" content="general" /><meta name="revisit-after" content="1 days" /><meta name="robots" content="all" /><meta http-equiv="X-UA-Compatible" content="IE=8" /><link rel="icon" href="/favicon.ico" /><link rel="shortcut icon" href="/favicon.ico" /><link rel="apple-touch-icon" href="/apple-touch-icon.png" /><link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/src/reset.css" /><link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/src/typography.css" /><link rel="stylesheet" type="text/css" media="screen,projection" href="../css/blueprint/src/grid.css" />
+ <!--[if lt IE 8]>
+ <link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/ie.css" />
+ <![endif]-->
+ <link id="uxCssMaster" rel="stylesheet" type="text/css" media="screen,projection" href="../css/tlnMasterScreen.css?r=1" /><link id="uxCssMain" rel="stylesheet" type="text/css" media="all" href="../css/tlnMain.css?r=1" /><link rel="Stylesheet" type="text/css" media="all" href="../css/jqueryui1810/jquery-ui-1.8.10.custom.css" /><link rel="stylesheet" type="text/css" media="all" href="/js/jquery_plugins/jquery.jgrowl.css" /><link rel="stylesheet" type="text/css" media="print" href="../css/tlnMasterPrint.css" />
+ <script type="text/javascript" src="/js/modernizr-1.7.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="/js/jquery.truncate.min.js"></script>
+
+
+
+ <link href="/css/fancybox/jquery.fancybox.css" rel="stylesheet" type="text/css" />
+ <link href="/js/jquery_plugins/icalendar/jquery.icalendar.css" rel="stylesheet" type="text/css" />
+ <link href="/js/jquery_plugins/tipTip/tipTip.css" rel="stylesheet" type="text/css" />
+ <link href="/js/jquery_plugins/qtip/jquery.qtip.css" rel="stylesheet" type="text/css" />
+ <!--[if lte IE 8]>
+ <style type="text/css" media="all">
+ legend{
+ position: absolute;
+ top: -.6em;
+ left: 1em;
+ line-height: 1.3;
+ }
+ fieldset p{
+ margin-top:1em;
+ }
+ img.CacheNoteHelpImg{
+ top:-.2em;
+ }
+ </style>
+ <![endif]-->
+ <style type="text/css" media="screen,projection">
+ #otherSearchOptions li
+ {
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ }
+ .ff
+ {
+ font-family: "Andale Mono" , "Courier New" ,Courier,monospace;
+ }
+ .fr
+ {
+ margin-top: 1.5em;
+ float: right;
+ }
+ .fl
+ {
+ float: left;
+ }
+ .clsCell
+ {
+ border: 1px solid #c0cee3;
+ font-size: 80%;
+ background-color: #fff;
+ }
+ .clsResultTitle, .clsResultTitleNoBold
+ {
+ color: #0000de;
+ }
+ .clsResultDescription
+ {
+ color: #333;
+ }
+ .clsURL
+ {
+ color: #999;
+ }
+ a.title:link, a.title:visited, a.title:hover, a.title:active
+ {
+ color: #000;
+ text-decoration: underline;
+ }
+ a.title
+ {
+ text-align: right;
+ font-size: 10px;
+ font-family: arial,sans-serif;
+ padding: 0 1px 0 0;
+ }
+ #mapSizePager a:hover
+ {
+ font-weight: bold;
+ }
+ #mapSizePager ul
+ {
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+ #mapSizePager li
+ {
+ float: left;
+ list-style: none;
+ }
+ #mapSizePager li a
+ {
+ font-family: verdana,sans-serif;
+ font-size: x-small;
+ display: block;
+ margin: 0 2px 0 0;
+ padding: 4px;
+ text-decoration: none;
+ border: solid 1px #c0c0c0;
+ height: 10px;
+ min-width: 10px;
+ cursor: pointer;
+ }
+ #mapPrintingNotes
+ {
+ width: 280px;
+ text-align: left;
+ overflow: auto;
+ }
+ .inplace_field {
+ width:100%;
+ resize: none;
+ }
+ legend.note{
+ background:url('../images/icons/16/user_note.png') no-repeat 0 0;
+ padding-left:18px;
+ }
+ legend.warning{
+ background:url('../images/icons/16/take_note.png') no-repeat 0 0;
+ padding-left:18px;
+ }
+ fieldset.CacheNote{
+ border-color: #e9a24c !important;
+ background-color:#ffffde;
+ position:relative;
+ }
+ .CacheNoteHelpImg{
+ position:relative;
+ cursor:pointer;
+ top:-1em;
+ right:-.75em;
+ float:right;
+ }
+ .InformationWidget h3{
+ margin-bottom:.5em;
+ }
+ .InformationWidget .AlignRight{
+ font-size:.8em;
+ }
+ #tiptip_content{
+ *background-color:#000;
+ box-shadow:none;
+ }
+ .maxed{
+ color:#992a2a;
+ }
+
+
+ span.ccu-parseverify-distance img{
+ text-align:center !important;
+ vertical-align:text-bottom !important;
+ }
+ .edit-cache-coordinates{
+ text-decoration: none;
+ color: #000 !important;
+ background: url(/images/icons/16/edit.png) no-repeat right 0;
+ padding:2px 20px 2px 0px;
+ margin-right:4px;
+ }
+ .ccc-coord{
+ cursor: text;
+ font-family: Courier New, Sans-Serif;
+ }
+ .ccu-update dl {
+ margin-bottom:.25em;
+ }
+ .ccu-update dt{
+ float:left;
+ min-width:90px;
+ }
+ .ccu-update .ui-button-text-only .ui-button-text{
+ padding:.3em .75em;
+ }
+ .ccu-parseverify-coords{
+ font-style:italic;
+ margin-right:.25em;
+ }
+ .ccu-parseverify-accept, .ccu-parseverify-cancel{
+ margin-top:-5px;
+ }
+ .ui-tooltip-widget .ui-tooltip-content{
+ border-width:1px;
+ background-color:#fff;
+ border-color:#c0cee3;
+ color:#594a42;
+ padding:1em;
+ width:420px;
+ }
+ .myLatLon {
+ border-bottom:2px solid #c0cee3;
+ font-style:italic;
+ }
+ .leaflet-control-attribution{
+ padding:3px !important;
+ }
+ .leaflet-control-attribution img{
+ vertical-align:middle;
+ }
+ </style>
+ <link rel="Stylesheet" type="text/css" media="screen" href="/hide/css/CSPScreen.css" />
+ <link rel="stylesheet" type="text/css" media="all" href="/js/leaflet/v5/leaflet.css" />
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" media="all" href="/js/leaflet/v5/leaflet.ie.css" />
+ <![endif]-->
+ <script type="text/javascript" language="javascript" src="/js/leaflet/v5/leaflet.js"></script>
+ <script type="text/javascript" src="/js/jquery.pagemethods.js"></script>
+ <script type="text/javascript" src="/js/geometa.js"></script>
+ <script type="text/javascript">
+ var userToken = null,
+ urlParams = {},
+ mapLatLng = null,
+ cmapAdditionalWaypoints = [],
+ initalLogs = null, totalLogs = 0, includeAvatars = false;
+
+ (function () {
+ var e,
+ d = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); },
+ q = window.location.search.substring(1),
+ r = /([^&=]+)=?([^&]*)/g;
+
+ while (e = r.exec(q)) {
+ urlParams[d(e[1])] = d(e[2]);
+ }
+ })();
+ </script>
+<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?guid=af38aaf9-5386-40bb-92f0-025ebc7700a7" property="og:url" /><meta name="og:description" content="Solve the mystery and then use a smartphone or GPS device to navigate to the solution coordinates. Look for a micro hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 1.5 and difficulty is 4 (out of 5)." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/8.png" property="og:image" /><meta name="og:title" content="Cache is Unpublished" property="og:title" /><meta name="description" content="Cache is Unpublished (GC430FM) was created by The North Star on 12/19/2012. It's a Micro size geocache, with difficulty of 4, terrain of 1.5. It's located in California, United States. The cache is not at the posted coordinates but is less than 2 miles awayI obtained a Geocache waypoint (GC#) on 02/12/12 for a cache that was not published." /></head>
+<body >
+ <form name="aspnetForm" method="post" action="cache_details.aspx?guid=af38aaf9-5386-40bb-92f0-025ebc7700a7" onsubmit="javascript:return WebForm_OnSubmit();" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_btnSignIn')" id="aspnetForm">
+<div>
+<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
+<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
+<input type="hidden" name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT" value="2" />
+<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc1MjcwNzgxNg8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzMzNzI4MjIWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhoPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIbDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCIA8WAh4HVmlzaWJsZWhkAgEPZBYSAgUPFgIfAWRkAgcPFgIfA2cWAgIdDw8WAh4LUG9zdEJhY2tVcmwFfmh0dHBzOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2xvZ2luL2RlZmF1bHQuYXNweD9yZWRpcj0lMmZzZWVrJTJmY2FjaGVfZGV0YWlscy5hc3B4JTNmZ3VpZCUzZGFmMzhhYWY5LTUzODYtNDBiYi05MmYwLTAyNWViYzc3MDBhN2RkAggPZBYCAgUPDxYCHgtOYXZpZ2F0ZVVybAWlAWh0dHBzOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2xvZ2luL2RlZmF1bHQuYXNweD9SRVNFVD1ZJnJlZGlyPWh0dHAlM2ElMmYlMmZ3d3cuZ2VvY2FjaGluZy5jb20lMmZzZWVrJTJmY2FjaGVfZGV0YWlscy5hc3B4JTNmZ3VpZCUzZGFmMzhhYWY5LTUzODYtNDBiYi05MmYwLTAyNWViYzc3MDBhN2RkAgwPFgIfA2dkAiwPZBYEAgMPFgIfAQUHRW5nbGlzaGQCBQ8WAh4LXyFJdGVtQ291bnQCEBYgZg9kFgICAQ8PFggeD0NvbW1hbmRBcmd1bWVudAUFZW4tVVMeC0NvbW1hbmROYW1lBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2geEENhdXNlc1ZhbGlkYXRpb25oZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCA9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCCQ9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCCg9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAILD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCDA9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg0PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCDg9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIPD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCLg9kFgICAw8WAh8DaGQCLw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBYuAgEPZBYCZg9kFgICAQ8PFgIfAQUHR0M0MzBGTWRkAgIPFgIfAQWeATxhIGhyZWY9Ii9hYm91dC9jYWNoZV90eXBlcy5hc3B4IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkFib3V0IENhY2hlIFR5cGVzIj48aW1nIHNyYz0iL2ltYWdlcy9XcHRUeXBlcy84LmdpZiIgYWx0PSJVbmtub3duIENhY2hlIiB0aXRsZT0iVW5rbm93biBDYWNoZSIgLz48L2E+ZAIGD2QWBAIBDxYCHwNnZAIGDxYCHwNoZAIHDxYCHwEFHEluIENhbGlmb3JuaWEsIFVuaXRlZCBTdGF0ZXNkAgsPFgIfA2hkAgwPFgIfA2dkAg0PDxYCHwNoZGQCEA8WAh8DaBYCAgEPFgIfAQWXAllvdSBtdXN0IGJlIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2xvZ2luLz9SRVNFVD1ZJnJlZGlyPWh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay9jYWNoZV9kZXRhaWxzLmFzcHg/Z3VpZD1hZjM4YWFmOS01Mzg2LTQwYmItOTJmMC0wMjVlYmM3NzAwYTciIHRpdGxlPSJMb2cgSW4iPmxvZ2dlZCBpbjwvYT4gd2l0aCBhIEdlb2NhY2hpbmcuY29tIGFjY291bnQgdG8gdmlldyB0aGUgc3BlY2lmaWMgbG9jYXRpb24gb2YgdGhpcyBnZW9jYWNoZS4gSXQncyBmcmVlIWQCEQ8WAh8DaGQCEg8WAh8DaBYOAgMPFgIeBXN0eWxlBQ1kaXNwbGF5Om5vbmU7FgICAQ8WAh8BZWQCDQ8PFgQfBQUzY2RwZi5hc3B4P2d1aWQ9YWYzOGFhZjktNTM4Ni00MGJiLTkyZjAtMDI1ZWJjNzcwMGE3HwNoZGQCDw8PFgIfBQU4Y2RwZi5hc3B4P2d1aWQ9YWYzOGFhZjktNTM4Ni00MGJiLTkyZjAtMDI1ZWJjNzcwMGE3JmxjPTVkZAIRDw8WAh8FBTljZHBmLmFzcHg/Z3VpZD1hZjM4YWFmOS01Mzg2LTQwYmItOTJmMC0wMjVlYmM3NzAwYTcmbGM9MTBkZAITDw8WBh8FBV5odHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1kJmhsPWVuJnNhZGRyPSZkYWRkcj0zNy4zOTgzMzMsLTEyMS45MTY2NjcoQ2FjaGUraXMrVW5wdWJsaXNoZWQpHgZUYXJnZXQFBl9ibGFuax8DaGRkAhUPFgIfA2hkAhsPFgIfA2gWBAIBDw8WBh4JRm9yZUNvbG9yCk4eB0VuYWJsZWRoHgRfIVNCAgRkZAIDDw8WBh8NCk4fDmgfDwIEZGQCFw9kFghmDxYCHwNoZAIBDw8WAh8DaGRkAgIPDxYCHwNoZGQCAw8WAh8DaGQCGA9kFgICAw8PFgIfAQUHRGVjcnlwdGRkAhkPFgIfAQWiAVF2cSBsYmggeGFiaiBndW5nIGxiaCBwbmEgc3ZhcSBuIHl2ZmcgYnMgPGI+RXJwcmFneWwgSXZyanJxIFBucHVyZjwvYj4gaGFxcmUgPGI+TGJoZSBDZWJzdnlyPC9iPj8g4oCcSXZyaiBOeXnigJ0gZ2IgZnJyIGd1ciB5bmZnIDUwIHBucHVyZiBndW5nIGxiaCB1bmlyIGl2cmpyceKApmQCHA8WAh8DaGQCHQ8PFgIfA2hkZAIfDxYCHwNoZAIiD2QWAgIBD2QWBAIBDw8WAh8BBf8DPGlmcmFtZSB0eXBlPSJpZnJhbWUiIHNyYz0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9R2V0JlNpdGVJRD0xJlg9JzE2NTQ0OTU2NDhjOTRjNGI5ZDE1YzUxNTUyYzU3MTBhJyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyNDAiIE1hcmdpbndpZHRoPSIwIiBNYXJnaW5oZWlnaHQ9IjAiIEhzcGFjZT0iMCIgVnNwYWNlPSIwIiBGcmFtZWJvcmRlcj0iMCIgU2Nyb2xsaW5nPSJubyIgc3R5bGU9IndpZHRoOjEyMHB4O0hlaWdodDoyNDBweDsiPjxhIGhyZWY9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUNsaWNrJjtNb2RlPUhUTUwmU2l0ZUlEPTEiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9R2V0Jk1vZGU9SFRNTCZTaXRlSUQ9MSIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyNDAiIGJvcmRlcj0iMCIgYWx0PSIiIC8+PC9hPjwvaWZyYW1lPmRkAgMPFgIeCWlubmVyaHRtbAUTQWR2ZXJ0aXNpbmcgd2l0aCBVc2QCJg9kFgQCBQ8PFgIfA2dkZAIJDw8WAh8FBTx+L3RyYWNrL3NlYXJjaC5hc3B4P3dpZD1hZjM4YWFmOS01Mzg2LTQwYmItOTJmMC0wMjVlYmM3NzAwYTdkZAInDw8WAh8DZ2QWAmYPFgIfBgIBFgICAQ9kFgRmDxUDAFdodHRw" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="Oi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD05ZmQzOWZiOC05NTAyLTQ3YjQtYWUwOC04NmNlMjM2ZmM2NjEbZm1vcmFlcyYjMzk7IHNvbHZlZCBidXQgZmFyZAICDxUCTGh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD00NDBjZjYxYi1kY2YzLTQyMjAtYTg3Ny1jZTMxMmYxMDM5MjEHZm1vcmFlc2QCKQ9kFhQCAQ8PFgIfA2hkZAIHDw8WAh8DaGRkAhEPDxYCHwUFIy9zZWVrL25lYXJlc3QuYXNweD91PVRoZStOb3J0aCtTdGFyZGQCFQ8PFgIfBQUkL3NlZWsvbmVhcmVzdC5hc3B4P3VsPVRoZStOb3J0aCtTdGFyZGQCGQ8WAh8DaBYKAgMPDxYCHwUFWC9zZWVrL25lYXJlc3QuYXNweD90eD00MDg2MTgyMS0xODM1LTRlMTEtYjY2Ni04ZDQxMDY0ZDAzZmUmbGF0PTM3LjM5ODMzMyZsbmc9LTEyMS45MTY2NjdkZAIFDw8WAh8FBVwvc2Vlay9uZWFyZXN0LmFzcHg/dHg9NDA4NjE4MjEtMTgzNS00ZTExLWI2NjYtOGQ0MTA2NGQwM2ZlJmxhdD0zNy4zOTgzMzMmbG5nPS0xMjEuOTE2NjY3JmY9MWRkAgkPDxYCHwUFMC9zZWVrL25lYXJlc3QuYXNweD9sYXQ9MzcuMzk4MzMzJmxuZz0tMTIxLjkxNjY2N2RkAgsPDxYCHwUFNC9zZWVrL25lYXJlc3QuYXNweD9sYXQ9MzcuMzk4MzMzJmxuZz0tMTIxLjkxNjY2NyZmPTFkZAIPDw8WAh8FBUpodHRwOi8vd3d3LndheW1hcmtpbmcuY29tL2RpcmVjdG9yeS5hc3B4P2Y9MSZsYXQ9MzcuMzk4MzMzJmxvbj0tMTIxLjkxNjY2N2RkAhsPFgIfA2hkAh8PDxYCHwUFIS9yZXZpZXdzL2hvdGVscy1pbi1NaWxwaXRhcyxDQSxVU2RkAiEPDxYCHwNoZGQCIw8PFgIfA2hkZAInD2QWCAIBDxYCHwEFDzcgTG9nZ2VkIFZpc2l0c2QCBw8PFgIfBQVDfi9zZWVrL2NhY2hlX2xvZ2Jvb2suYXNweD9ndWlkPWFmMzhhYWY5LTUzODYtNDBiYi05MmYwLTAyNWViYzc3MDBhN2RkAggPFgIfA2hkAgkPDxYCHwNoZGQCKg8WAh8BBQVmYWxzZWQCKw8WAh8BBR5sYXQ9bnVsbDtsbmc9bnVsbDtndWlkPW51bGw7DQpkAiwPFgIfAQV1dHJ5IHsgX2dhcS5wdXNoKFsnX3RyYWNrRXZlbnQnLCAnR2VvY2FjaGluZycsICdDYWNoZURldGFpbHNNZW1iZXJUeXBlJywgJ05vdFNpZ25lZEluJywgbnVsbCwgdHJ1ZV0pOyB9IGNhdGNoKGVycikgeyB9ZAIwDxYCHwNoZAIxD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIfBgIQFiBmD2QWAgIBDw8WCB8HBQVlbi1VUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2gfCWhkZAIBD2QWAgIBDw8WCB8HBQVkZS1ERR8IBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCWhkZAICD2QWAgIBDw8WCB8HBQVmci1GUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8JaGRkAgMPZBYCAgEPDxYIHwcFBXB0LVBUHwgFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8JaGRkAgQPZBYCAgEPDxYIHwcFBWNzLUNaHwgFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwloZGQCBQ9kFgICAQ8PFggfBwUFc3YtU0UfCAUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwloZGQCBg9kFgICAQ8PFggfBwUFZXMtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8JaGRkAgcPZBYCAgEPDxYIHwcFBWl0LUlUHwgFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCWhkZAIID2QWAgIBDw8WCB8HBQVubC1OTB8IBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCWhkZAIJD2QWAgIBDw8WCB8HBQVjYS1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCWhkZAIKD2QWAgIBDw8WCB8HBQVwbC1QTB8IBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8JaGRkAgsPZBYCAgEPDxYIHwcFBWV0LUVFHwgFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCWhkZAIMD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDQ9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIOD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAg8PZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAIDDxYCHwEFK1NlcnZlcjogV0VCMDM7IEJ1aWxkOiBXZWIuSG90Rml4XzIwMTIxMjExLjFkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBRJjdGwwMCRjYlJlbWVtYmVyTWUTsUNZ99o/ZMkVlQ0TmeDu4Dizww==" />
+</div>
+
+<script type="text/javascript">
+//<![CDATA[
+var theForm = document.forms['aspnetForm'];
+if (!theForm) {
+ theForm = document.aspnetForm;
+}
+function __doPostBack(eventTarget, eventArgument) {
+ if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
+ theForm.__EVENTTARGET.value = eventTarget;
+ theForm.__EVENTARGUMENT.value = eventArgument;
+ theForm.submit();
+ }
+}
+//]]>
+</script>
+
+
+<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634449413070371108" type="text/javascript"></script>
+
+
+<script src="/ScriptResource.axd?d=8q09cuy9-PZDS8eZx6HLVXd3YZywgUmuoy8VVtGr3vaISS8ybaBLyQLFlq93nr2dlYP0QJWcJvooQKkloTdALTrS571k1UcPpD2pbXbpthIOf2Mn8gCnpyvfv-ZudWTMi0y39YZC0-Q0yjjxQ82yTlKdhBw1&t=6df0ad7a" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=2610f696" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=2610f696" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=l5IqBBbOFPRmpVAJwxQpHQyZ16ITBnk7fYRIeFc1JaDh64igpOv-k92v3DpzWBikWWvRdoxgNXda9cdmIFt2Ryy2gD2Tv71tVdwVNB4i-d1_vwLdJifCsG55PNiibmPX-x1Vspbf6jGBVWDKxT4kuLr2vWh-XRcY7PiryWks0UgjSCXEHO05VytTmCI6A-IhnCg2kD_i3YytsXr36qf0k6q0vQ41" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=mw8CUwVrYP9IGhC7WIGT8qdlVInGzqviii3RV8GrEEiOV2Nqjk57cAorEy9ACR1-rU7I3CZphWXcx81x-LDKIItu7BGPceT7Q61MOAXhSyJyW2DF3crLIX0Xef7vI1s2RLsp2bf8Aazkh-w4559ltQCi1H8uzBcnORltR9bo05Oe5VlRs1WnFqxyOK9aLEH4pBXNx8Bhb2-oIOLExj6kkCQgF06_A6ksiNnQXuGaKfXh1LjjCyujVv1xsxL_muSivN4bS4R4JR4M2Z3WmsBSnQXzJkIKkQB7kOS3JYimpNQ7sw1_qOYPZVB0xYbSCGD-xptYnX3Q4DLGiBNW4mP5R1Xv0QiVlwA9uiMAy_mQKBalvK4YjYdSbW9T9WZdtn39cD799HNy--sDKm1hhlBWb8Dz1jgxR2B9glqCYkqQmk3DSoPhPx9eWxB5q9VFjw1Q4u3d0Rgu8lF3NszOnHmJ19E6XZOdbRPyOjljcqTy1MWgNSwFAV-E3kWUGiJ0QNel49k3VkdjBUTKhIqIdQ9wve0zAcvWgxHEaFuvXv92aYmJwFYFDbNPvkYfBRLakBbpHIzGs9e0xu5sbTAVijArOHlzTSMNx2jK2mdt8VSjThXQAkMSV5W0jY2I6tuqFunlegJeA9zrFE9HdfbBtj9gOSe3LQQNMG7NaUShNTYUbJ5eZbQ8g7O5gjKFbDylaSZqv0aXQu0Lgrn7EdKV3B0BMhNeG3pR32zEBX1T3hEAnDKiYVOX0" type="text/javascript"></script>
+<script src="js/cachedetails.js" type="text/javascript"></script>
+<script src="../js/latlng.js" type="text/javascript"></script>
+<script src="/WebResource.axd?d=Np8DmZmh2tcIkgE9SU7mE6n1BWbJ0opng-rHikqBjFQo0nbLYSeBBVhJhCHcmx1ihKnAnQv_ZhnItUUjENzIzc1uoXk1&t=634449413070371108" type="text/javascript"></script>
+<script type="text/javascript">
+//<![CDATA[
+function WebForm_OnSubmit() {
+if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
+return true;
+}
+//]]>
+</script>
+
+<div>
+
+ <input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="Q3QLAIGc3fycf1xcmR0oeYDSmxzti-0045OC6NZQvsE42Tm2u2QIX8zoZDBQxLovJ-hK6GtvJtlghgEFizixxK5opmWjeHAxzOpw_rZ8ZR8kHZBX0" />
+</div>
+ <script type="text/javascript">
+//<![CDATA[
+Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00');
+//]]>
+</script>
+
+ <div id="Top" class="SkipLinks">
+
+ <a id="ctl00_hlSkipLinksNavigation" accesskey="n" title="Skip to Navigation" href="#Navigation">Skip to Navigation</a>
+ <a id="ctl00_hlSkipLinksContent" accesskey="c" title="Skip to Content" href="#Content">Skip to Content</a>
+
+ </div>
+
+ <!--[if lte IE 6]>
+ <div class="WarningMessage PhaseOut">
+
+ <p>Groundspeak is phasing out support for older browsers. Visit the <a href="http://support.groundspeak.com/index.php?pg=kb.page&id=215" title="Browser Support Information">Help Center</a> for more information.</p>
+
+ </div>
+ <![endif]-->
+
+
+
+ <div class="PrintOnly">
+
+ <p>
+ <img src="/images/logo_print_bw.png" alt="Geocaching.com" /></p>
+ <hr />
+
+ </div>
+
+ <header>
+
+ <div class="container">
+
+ <h1 class="Logo span-16">
+ <a href="../" id="ctl00_HDHomeLink" title="Geocaching" accesskey="h">Geocaching</a></h1>
+ <div class="ProfileWidget span-8 last">
+
+ <div id="ctl00_divNotSignedIn" class="FloatContainer">
+
+ <p class="NotSignedInText"><strong>Welcome, Visitor!</strong><br /></p>
+ <p class="LoginWithFacebook">
+ <a id="ctl00_uxSignIn" title="Login with Facebook" class="btnFacebookLogin NoWrap" href="javascript:__doPostBack('ctl00$uxSignIn','')"><span>Login with Facebook</span></a></p>
+ <p class="NotSignedInLinks clear">
+ <a id="hlSignIn" accesskey="s" title="Sign In" class="SignInLink" href="/login/">Sign In</a> | <a id="ctl00_hlRegister" accesskey="r" title="Sign Up" href="../membership/register.aspx?type=basic">Sign Up</a></p>
+ <div id="SignInWidget">
+
+ <h3>Sign In with Geocaching</h3>
+ <div id="ctl00_vsSignInWidgetForm" class="FormSummaryWidget FormErrorWidget InputWidth" style="color:Red;display:none;">
+
+</div>
+ <p>
+ <label for="ctl00_tbUsername" id="ctl00_lblUsername" title="Geocaching Username">Geocaching Username:</label><br />
+ <input name="ctl00$tbUsername" type="text" id="ctl00_tbUsername" class="text" autocomplete="off" />
+ <span id="ctl00_rfvUsername" title="Username is a required field; please enter a valid username." style="color:Red;display:none;"><span class="FormIcon FormValidationIcon">*</span></span>
+ </p>
+ <p>
+ <label for="ctl00_tbPassword" id="ctl00_lblPassword" title="Geocaching Password">Geocaching Password:</label><br />
+ <input name="ctl00$tbPassword" type="password" id="ctl00_tbPassword" class="text" autocomplete="off" />
+ <span id="ctl00_rfvPassword" title="Password is a required field; please enter a valid password." style="color:Red;display:none;"><span class="FormIcon FormValidationIcon">*</span></span>
+ </p>
+ <p>
+ <span class="Checkbox" title="Keep Me Signed In" autocomplete="off"><input id="ctl00_cbRememberMe" type="checkbox" name="ctl00$cbRememberMe" /><label for="ctl00_cbRememberMe">Keep Me Signed In</label></span><br />
+ <small>
+ Uncheck if on a shared computer.</small>
+ </p>
+ <p>
+ <input type="submit" name="ctl00$btnSignIn" value="Sign In" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$btnSignIn", "", true, "SignInForm", "https://www.geocaching.com/login/default.aspx?redir=%2fseek%2fcache_details.aspx%3fguid%3daf38aaf9-5386-40bb-92f0-025ebc7700a7", false, false))" id="ctl00_btnSignIn" title="Sign In" />
+ or
+ <a id="ctl00_hlSignInClose" title="Close this Window" class="SignInCloseLink" href="javascript:void(0);">Close</a></p>
+ <p>
+ <small>
+ <a id="ctl00_hlForgot" title="Forgot your username or password?" href="../login/password.aspx">Forgot your username or password?</a></small></p>
+
+ </div>
+
+
+ </div>
+
+
+
+
+ </div>
+
+ <div class="NavContainer span-24 last">
+ <nav id="Navigation">
+
+ <ul class="Menu">
+ <li>
+ <a id="ctl00_hlNavLearn" accesskey="1" title="Learn" href="../guide/">Learn ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavGeocaching101" accesskey="i" title="Geocaching 101" href="../guide/">Geocaching 101</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGeocaching2Minutes" title="Geocaching in 2 Minutes" href="../videos/#cat=cat:newbies&vid=-4VFeYZTTYs">Geocaching in 2 Minutes</a></li>
+ </ul>
+ </li>
+ <li id="ctl00_liNavJoin">
+ <a id="ctl00_hlNavJoin" accesskey="2" title="Join" href="../membership/register.aspx?type=basic">Join</a></li>
+
+ <li>
+ <a id="ctl00_hlNavPlay" accesskey="3" title="Play" href="./">Play ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavHide" accesskey="d" title="Hide & Seek a Cache" href="./">Hide & Seek a Cache</a></li>
+ <li>
+ </li>
+ <li><a id="ctl00_hlSubNavMap" accesskey="/" title="View Geocache Map" href="../map/">View Geocache Map</a></li>
+ <li>
+ <a id="ctl00_hlSubNavTrackables" accesskey="e" title="Find Trackables" href="../track/">Find Trackables</a></li>
+ <li>
+ <a id="ctl00_hlSubNavHelpCenter" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavCommunity" accesskey="6" title="Community" href="../forums/">Community ▼</a>
+ <ul class="SubMenu">
+
+ <li>
+ <a id="ctl00_hlSubNavTellaFriend" accesskey="-" title="Tell a Friend" href="../account/SendReferral.aspx">Tell a Friend</a></li>
+
+ <li><a id="ctl00_hlSubNavVolunteers" accesskey="+" title="Volunteers" href="../volunteers/">Volunteers</a></li>
+ <li>
+ <a id="ctl00_hlSubNavLocal" accesskey="z" title="Local Organizations" href="../organizations/">Local Organizations</a></li>
+ <li>
+ <a id="ctl00_hlSubNavDiscussionForums" accesskey="f" title="Discussion Forums" href="../forums/">Discussion Forums</a></li>
+ <li>
+ <a id="ctl00_hlSubNavBlog" accesskey="b" title="Blog" rel="external" href="http://blog.geocaching.com/">Blog</a></li>
+ <li>
+ <a id="ctl00_hlSubNavEvents" accesskey="v" title="Events" href="../calendar/">Events</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavShop" accesskey="4" title="Shop" href="http://shop.geocaching.com/">Shop ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavShop" accesskey="j" title="Shop Geocaching" rel="external" href="http://shop.geocaching.com/">Shop Geocaching</a></li>
+ <li>
+ <a id="ctl00_hlSubNavIntlRetailers" title="International Retailers" rel="external" href="http://shop.geocaching.com/default/international-retailers/">International Retailers</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGPSReviews" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGPSGuide" accesskey="k" title="Guide to Buying a GPS Device" href="../about/buying.aspx">Guide to Buying a GPS Device</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavPartnering" accesskey="5" title="Partnering" href="../travel/">Partnering ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavTravel" title="Travel and GeoTourism" href="../travel/">Travel and GeoTourism</a></li>
+ <li>
+ <a id="ctl00_hlSubNavBrandedPromotions" title="Branded Promotions" href="../brandedpromotions/">Branded Promotions</a></li>
+ <li>
+ <a id="ctl00_hlSubNavEducation" title="Geocaching and Education" href="../education/">Geocaching and Education</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAdvertisingWithUs" title="Advertising with Us" href="../about/advertising.aspx">Advertising with Us</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAPIProgram" title="API Program" href="../live/apidevelopers/">API Program</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavVideos" accesskey="7" title="Videos" href="../videos/">Videos</a></li>
+ <li>
+ <a id="ctl00_hlNavFollowUs" title="Follow Us" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Follow Us ▼</a>
+ <ul class="SubMenu NavSocialMedia">
+ <li>
+ <a id="ctl00_hlSubNavFacebook" title="Facebook" class="SubNavFacebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Facebook</a></li>
+ <li>
+ <a id="ctl00_hlSubNavTwitter" title="Twitter" class="SubNavTwitter" href="http://twitter.com/GoGeocaching">Twitter</a></li>
+ <li>
+ <a id="ctl00_hlSubNavFlickr" title="Flickr" class="SubNavFlickr" href="http://www.flickr.com/photos/geocaching_com/">Flickr</a></li>
+ <li>
+ <a id="ctl00_hlSubNavYouTube" title="YouTube" class="SubNavYouTube" href="http://www.youtube.com/user/GoGeocaching">YouTube</a></li>
+ </ul>
+ </li>
+ </ul>
+
+ </nav>
+ <div class="LanguageSelector">
+
+
+<div class="LocaleText">
+
+ <strong>Choose Your Language:</strong>
+
+</div>
+<div class="LocaleList">
+
+ <div class="selected-language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul class="language-list">
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+ jQuery(".selected-language a").click(function (e) {
+ e.preventDefault();
+ var $loc = jQuery(this).parent().next();
+ jQuery($loc).show().position({
+ of: $loc.parent(),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 0",
+ collision: "fit fit"
+ });
+ jQuery(this).addClass("Expanded");
+ jQuery(document).click(function () {
+ jQuery(".language-list").fadeOut("fast");
+ jQuery(".selected-language a").removeClass("Expanded");
+ });
+ return false;
+ });
+ });
+</script>
+ </div>
+ </div>
+
+
+ </div>
+
+
+ </header>
+ <section id="Content">
+
+
+ <div class="container">
+
+ <div id="ctl00_divBreadcrumbs" class="BreadcrumbWidget span-24 last">
+
+ <p>
+ <span id="ctl00_Breadcrumbs"><span><a title="Geocaching - The Official Global GPS Cache Hunt Site" href="/">Geocaching</a></span><span> > </span><span><a title="Hide and Seek A Geocache" href="/seek/default.aspx">Hide and Seek A Geocache</a></span><span> > </span><span>Geocache Details</span></span>
+ </p>
+
+
+ </div>
+
+ <div id="ctl00_divContentMain" class="span-24 last">
+
+
+
+
+ <div id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoLinkPanel" class="CoordInfoLinkWidget">
+
+ <p>
+ <a href="#" class="CoordInfoLink">
+ <span id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode" class="CoordInfoCode">GC430FM</span>
+ <span class="arrow">▼</span> </a>
+ </p>
+
+</div>
+<div id="dlgClipboard">
+ <input type="text" class="TextFormat" />
+ <a href="#" onclick="$('#dlgClipboard').hide();return false;" title="Close" class="Close">
+ x</a>
+</div>
+<script type="text/javascript">
+ $("a.CoordInfoLink").click(function (e) {
+ e.preventDefault();
+
+ $("#dlgClipboard")
+ .show()
+ .position({
+ of: $("a.CoordInfoLink"),
+ my: "right top",
+ at: "right bottom",
+ offset: "0 5"
+ })
+ .find("input")
+ .val('http://coord.info/' + $('.CoordInfoCode').text())
+ .focus()
+ .select();
+
+ $(document).mouseup(function (e) {
+ if ($(e.target).parent("div#dlgClipboard").length == 0) {
+ $(this).unbind(e);
+ $("div#dlgClipboard").hide();
+ }
+ });
+
+ return false;
+ });
+
+
+</script>
+
+ <div class="span-17">
+
+ <div class="span-17 last BottomSpacing" id="cacheDetails">
+ <p class="cacheImage">
+ <a href="/about/cache_types.aspx" target="_blank" title="About Cache Types"><img src="/images/WptTypes/8.gif" alt="Unknown Cache" title="Unknown Cache" /></a>
+ </p>
+
+ <h2 class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_CacheName">Cache is Unpublished</span></h2>
+ <div class="minorCacheDetails Clear">
+ <div id="ctl00_ContentBody_mcd1">
+ A cache by <a href="http://www.geocaching.com/profile/?guid=f3d7b7c8-8698-4e21-a6ad-24e148f5c6a5&wid=af38aaf9-5386-40bb-92f0-025ebc7700a7&ds=2">The North Star</a></div>
+ <div id="ctl00_ContentBody_mcd2">
+ Hidden:
+ 12/19/2012
+
+ </div>
+ <div>In California, United States</div>
+ </div>
+ </div>
+ <div id="ctl00_ContentBody_diffTerr" class="CacheStarLabels span-3 BottomSpacing">
+
+ Difficulty:
+ <br />
+ Terrain:
+
+ </div>
+
+ <div id="ctl00_ContentBody_diffTerrStars" class="CacheStarImgs span-2">
+
+ <span id="ctl00_ContentBody_uxLegendScale" title="(1 is easiest, 5 is hardest)"><img src="http://www.geocaching.com/images/stars/stars4.gif" alt="4 out of 5" /></span>
+ <span id="ctl00_ContentBody_Localize12" title="(1 is easiest, 5 is hardest)"><img src="http://www.geocaching.com/images/stars/stars1_5.gif" alt="1.5 out of 5" /></span>
+
+ </div>
+
+ <div id="ctl00_ContentBody_size" class="CacheSize span-9">
+
+ <p style="text-align: center;">
+ Size: <span class="minorCacheDetails"><img src="/images/icons/container/micro.gif" alt="Size: micro" title="Size: micro" /> <small>(micro)</small></span></p>
+
+ </div>
+
+
+
+ <div class="span-3 right last">
+
+
+
+ </div>
+
+
+ <div id="lus_container" class="lus-container Clear">
+ <div class="lus-header">
+ <span>
+ Join now to view geocache location details. It's free!
+ </span>
+ <span class="lus-signup">
+ <a id="ctl00_ContentBody_locdSignUpLink" title="Sign up" href="/membership/register.aspx?type=basic">Sign up</a><a id="hlFBLogin" title="Log in with Facebook" class="btnFacebookLogin" href="/api/beginfacebook"><span id="ctl00_ContentBody_locFBLogin">Login</span></a>
+ </span>
+ </div>
+ <div style="position: relative;height:257px;">
+ <div class="lus-video">
+ <div class="lus-textblock">
+ <div class="play-control AlignCenter"><a id="ctl00_ContentBody_hlPlayArrow" title="Play Video">▶</a></div>
+ <h4>
+ Watch
+ </h4>
+ How Geocaching Works
+ </div>
+ </div>
+ <div class="lus-image">
+ <img src="/images/seek/locdp_cityscape.jpg" width="380" height="257" />
+ </div>
+ </div>
+ <div class="lus-footer">
+ <span class="AlignRight">
+ <span>Looking for a different adventure?</span>
+ </span>
+ <span class="lus-findacache NoWrap">
+ <input type="submit" name="ctl00$ContentBody$findacache" value="Find a Cache Near Me" id="findacache" title="Find a Cache Near Me" />
+ </span>
+ </div>
+ </div>
+ <script type="text/javascript">
+
+ $("#lus_container")
+ .on("click", "div.lus-video", function () {
+ var $this = $(this),
+ h = $this.height(),
+ w = $this.width();
+
+ $("div.lus-image").hide('slide', { direction: 'right' }, 500, function () {
+ var vhtml = ["<iframe width=\"" + w + "\" height=\"" + h + "\" src=\"http://www.youtube.com/embed/-4VFeYZTTYs?rel=0&autoplay=1\" frameborder=\"0\" allowfullscreen></iframe>"].join('');
+ $this.replaceWith(vhtml);
+ });
+ return false;
+ });
+
+ $("#findacache").click(function (e) {
+ e.preventDefault();
+ $("#txtFindCache").text("Searching...");
+
+ navigator.geolocation.getCurrentPosition(
+ function (position) { // Browser success
+ $(window.location).attr('href', '/seek/nearest.aspx?origin_lat=' + position.coords.latitude + '&origin_long=' + position.coords.longitude + '&dist=100');
+ }, function (error) { // Browser failure, fallback to geocode.
+ $.ajax({
+ url: '/api/geocode?cmd=whoami',
+ dataType: 'json',
+ async: false,
+ success: function (response) {
+ if (response.status == 'success') { // Geocode success
+ $(window.location).attr('href', '/seek/nearest.aspx?origin_lat=' + response.data.lat + '&origin_long=' + response.data.lng + '&dist=100');
+ } else { // Total failure, just go to the search page.
+ $(window.location).attr('href', '/seek/nearest.aspx');
+ }
+ }
+ });
+ },
+ {
+ timeout: 3000 // Wait on the browser for a max of 3 seconds.
+ });
+ return false;
+ });
+
+ // Geolocation emulator
+ (function (geolocation) {
+
+ if (geolocation) return;
+
+ var cache;
+
+ geolocation = window.navigator.geolocation = {};
+ geolocation.getCurrentPosition = function (callback) {
+
+ if (cache) callback(cache);
+
+ $.getScript('//www.google.com/jsapi', function () {
+
+ cache = {
+ coords: {
+ "latitude": google.loader.ClientLocation.latitude,
+ "longitude": google.loader.ClientLocation.longitude
+ }
+ };
+
+ callback(cache);
+ });
+
+ };
+
+ geolocation.watchPosition = geolocation.getCurrentPosition;
+ })(navigator.geolocation);
+
+
+ </script>
+
+ <p class="Clear">
+ </p>
+
+
+
+
+
+
+ <fieldset class="DisclaimerWidget">
+ <legend class="warning">
+ Please note
+ </legend>
+ <p class="NoBottomSpacing">
+ Use of geocaching.com services is subject to the terms and conditions <a href="/about/disclaimer.aspx" title="Read Our Disclaimer">in our disclaimer</a>.
+ </p>
+ </fieldset>
+
+
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_ShortDescription">
+</span>
+
+ </div>
+
+ <br />
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_LongDescription"><div class="Section1">
+<p><span style="font-size:10.0pt;font-family:Verdana;mso-bidi-font-family:Arial;color:red;">The cache is not at the posted coordinates but is less than 2 miles away</span></p>
+<p><span style="font-size:10.0pt;font-family:Verdana;mso-bidi-font-family:Arial;color:#333333;">I obtained a Geocache waypoint (GC#) on 02/12/12 for a cache that was not published. Find the name of the unpublished cache and you will find the coordinates for this cache.<br />
+<br />
+The waypoint starts with GC3C and contains 2 additional letters and 1 additional number. Per GC.com Base 31 implementation, the letters ILOSU (US OIL or LOUIS) are not used.<br />
+<br />
+I’m not sure if this is a bug or a feature of <b>Recently Viewed Caches</b>, so it’s entirely possible that this puzzle will be unsolvable or not as easily solved in the future. So solve it and grab it while you can!<br />
+<br />
+Thanks to <a href="http://www.geocaching.com/profile/?u=Chrysalides" target="_blank" rel="nofollow">Chrysalides</a> for planting the seed ;)<br />
+<br />
+There is room for very small trade and signature items. Don't forget to bring your pen.<br />
+<br />
+Enjoy!<br />
+<br />
+You can validate your puzzle solution with <a href="http://certitude.comxa.com/certitude.php?wp=GC430FM">certitude</a> or see <a href="http://certitude.comxa.com/certified.php?wp=GC430FM">who solved</a> this puzzle.<br />
+<br />
+Congratulations to <a href="http://www.geocaching.com/profile/?u=TeamOttlet" target="_blank" rel="nofollow">TeamOttlet</a> on FTS and FTF.</span></p>
+</div></span>
+
+ </div>
+
+ <p>
+
+
+ </p>
+ <p id="ctl00_ContentBody_hints">
+ <strong>
+ Additional Hints</strong>
+ (<a id="ctl00_ContentBody_lnkDH" onclick="dht(this);return false;" title="Decrypt" href="#">Decrypt</a>)</p>
+ <div id="div_hint" class="span-8 WrapFix">
+ Qvq lbh xabj gung lbh pna svaq n yvfg bs <b>Erpragyl Ivrjrq Pnpurf</b> haqre <b>Lbhe Cebsvyr</b>? “Ivrj Nyy” gb frr gur ynfg 50 pnpurf gung lbh unir ivrjrq…</div>
+ <div id='dk' style="display: block;" class="span-9 last">
+ <span id="ctl00_ContentBody_EncryptionKey" class="right"><div class="DecryptionKeyWidget"> <p class="WidgetHeader">Decryption Key</p> <p class="WidgetBody">A|B|C|D|E|F|G|H|I|J|K|L|M<br /> -------------------------<br /> N|O|P|Q|R|S|T|U|V|W|X|Y|Z</p> <p class="WidgetFooter">(letter above equals below, and vice versa)</p></div></span>
+ </div>
+ <div class="Clear">
+ </div>
+
+ </div>
+
+
+ <div class="span-6 prepend-1 last">
+
+
+<div class="CacheDetailNavigationWidget NoPrint">
+
+ <h3 class="WidgetHeader">
+ Navigation
+ </h3>
+ <div class="WidgetBody">
+
+ <ul class="CacheDetailsNavLinks">
+ <li><a href="https://www.geocaching.com/login/?RESET=Y&redir=%2fseek%2flog.aspx%3fID%3d3372822" class="lnk"><img src="/images/icons/16/write_log_locked.png" /> <span>Log in to log your visit</span></a></li>
+<li><a href="https://www.geocaching.com/login/?RESET=Y&redir=%2fmy%2fwatchlist.aspx%3fw%3d3372822" class="lnk"><img src="/images/icons/16/watch_locked.png" /> <span>Log in to watch this listing</span></a></li>
+
+ </ul>
+
+ </div>
+
+
+</div>
+
+
+
+
+
+
+
+ <div id="ctl00_ContentBody_detailWidget" class="CacheDetailNavigationWidget TopSpacing BottomSpacing">
+
+ <h3 class="WidgetHeader">
+ Attributes</h3>
+ <div class="WidgetBody">
+ <img src="/images/attributes/available-yes.gif" alt="available 24-7" title="available 24-7" width="30" height="30" /> <img src="/images/attributes/stealth-yes.gif" alt="stealth required" title="stealth required" width="30" height="30" /> <img src="/images/attributes/bicycles-yes.gif" alt="bikes allowed" title="bikes allowed" width="30" height="30" /> <img src="/images/attributes/parkngrab-yes.gif" alt="park and grab" title="park and grab" width="30" height="30" /> <img src="/images/attributes/onehour-yes.gif" alt="takes less than 1 hour" title="takes less than 1 hour" width="30" height="30" /> <img src="/images/attributes/attribute-blank.gif" alt="blank" title="blank" width="30" height="30" /> <p class="NoBottomSpacing"><small><a href="/about/icons.aspx" title="What are Attributes?">What are Attributes?</a></small></p>
+ </div>
+
+ </div>
+
+
+ <div id="ctl00_ContentBody_uxBanManWidget" class="CacheDetailPageAds clear">
+
+ <div id="ctl00_ContentBody_divContentSide">
+
+ <p class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_ADModules_09"><iframe type="iframe" src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&SiteID=1&X='1654495648c94c4b9d15c51552c5710a'" width="120" height="240" Marginwidth="0" Marginheight="0" Hspace="0" Vspace="0" Frameborder="0" Scrolling="no" style="width:120px;Height:240px;"><a href="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Click&;Mode=HTML&SiteID=1" target="_blank"><img src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&Mode=HTML&SiteID=1" width="120" height="240" border="0" alt="" /></a></iframe></span>
+ </p>
+ <p class="AlignCenter">
+ <small><a href="../about/advertising.aspx" id="ctl00_ContentBody_advertisingWithUs" title="Advertising with Us">Advertising with Us</a></small></p>
+
+ </div>
+
+</div>
+
+
+
+ <div class="GoogleAds AlignCenter BottomSpacing">
+ </div>
+ <div class="clear">
+ </div>
+
+ <span id="ctl00_ContentBody_lnkTravelBugs"></span>
+
+
+<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">
+ <span id="ctl00_ContentBody_uxTravelBugList_uxInventoryLabel">Inventory</span>
+ </h3>
+ <div class="WidgetBody">
+
+
+ <div id="ctl00_ContentBody_uxTravelBugList_uxNoTrackableItems">
+
+ <p class="NoBottomSpacing"><span id="ctl00_ContentBody_uxTravelBugList_uxNoTrackableItemsLabel">There are no Trackables in this cache.</span></p>
+
+</div>
+ <div class="TopSpacing">
+
+ <p class="NoBottomSpacing"><a id="ctl00_ContentBody_uxTravelBugList_uxTrackableItemsHistory" href="../track/search.aspx?wid=af38aaf9-5386-40bb-92f0-025ebc7700a7">View past Trackables</a></p>
+ <p class="NoBottomSpacing"><a id="ctl00_ContentBody_uxTravelBugList_uxWhatAreTrackables" title="What are Trackable Items?" href="../track/default.aspx">What are Trackable Items?</a></p>
+ </div>
+
+
+ </div>
+
+
+</div>
+
+
+<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">Bookmark Lists</h3>
+ <div class="WidgetBody">
+
+
+ <ul>
+
+ <li style='padding: .5em;' class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=9fd39fb8-9502-47b4-ae08-86ce236fc661">
+ fmoraes' solved but far</a><br />
+ <small><em>
+ by
+ <a href="http://www.geocaching.com/profile/?guid=440cf61b-dcf3-4220-a877-ce312f103921">
+ fmoraes</a> </em></small>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+ <a href="/bookmarks/default.aspx?guid=af38aaf9-5386-40bb-92f0-025ebc7700a7&WptTypeID=8" title="View all bookmark lists...">View all bookmark lists...</a>
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
+
+
+ </div>
+
+
+ <div id="ctl00_ContentBody_bottomSection" class="span-24 last">
+
+ <p>
+
+ <br />
+
+
+ </p>
+
+
+
+ <p class="NoPrint">
+ <span id="ctl00_ContentBody_uxFindLinksHeader" style="font-weight:bold;">Find...</span>
+ <br />
+ <span id="ctl00_ContentBody_FindText"></span>
+ </p>
+ <ul class="NoPrint">
+ <li>
+ ...other caches
+ <a id="ctl00_ContentBody_uxFindLinksHiddenByThisUser" href="/seek/nearest.aspx?u=The+North+Star">hidden</a>
+ or
+ <a id="ctl00_ContentBody_uxFindLinksFoundByThisUser" href="/seek/nearest.aspx?ul=The+North+Star">found</a>
+ by this user
+ </li>
+
+
+ <li>
+ ...nearby <a id="ctl00_ContentBody_uxFindLinksHotels" href="/reviews/hotels-in-Milpitas,CA,US">Hotels</a>
+ </li>
+ </ul>
+ <p class="NoPrint">
+
+ </p>
+ <span class="NoPrint">
+
+ </span>
+ <p class="NoPrint">
+
+ </p>
+
+ <div class="InformationWidget Clear">
+ <h3>
+ 7 Logged Visits</h3>
+ <div class="EncryptDecrypt">
+ <a href="#" class="decrypt-link">
+ Decrypt
+ </a>
+ </div>
+ <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 4 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 2 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 1 </p></span>
+ <p class="HalfLeft">
+ <a id="ctl00_ContentBody_uxLogbookLink" href="cache_logbook.aspx?guid=af38aaf9-5386-40bb-92f0-025ebc7700a7">View Logbook</a>
+ </p>
+ <p class="NoBottomSpacing AlignRight">
+ <span class="Warning">**Warning!</span> <a href="/about/glossary.aspx#spoiler" title="Spoilers">Spoilers</a> may be included in the descriptions or links.
+ </p>
+ </div>
+
+ <div id="cache_logs_container">
+ <table id="cache_logs_table" class="LogsTable NoBottomSpacing">
+ <tbody>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="AlignCenter">
+ <div id="pnlLazyLoad" style="display: none;">
+ <img src="/images/loading2.gif" class="StatusIcon" alt="Loading" />
+ Loading Cache Logs...
+ </div>
+ <div id="pnlButtonLoad" style="display: none;">
+ <a class="MobileButton">
+ Load More Logs...</a>
+ </div>
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+ </div>
+ <p>
+ <small>
+ Current Time: <time datetime="2012-12-21T10:49:48Z">12/21/2012 10:49:48 AM (UTC-08:00) Pacific Time (US & Canada) (6:49 PM GMT)</time><br/>Last Updated: <time class="timeago" datetime="2012-12-21T11:06:00Z">2012-12-21T11:06:00Z</time> on 12/21/2012 3:06:00 AM (UTC-08:00) Pacific Time (US & Canada) (11:06 AM GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
+ </small>
+ </p>
+
+
+ </div>
+ <script id="tmpl_CacheLogRow" type="text/x-jquery-tmpl">
+ <tr class="log-row" data-encoded="${IsEncoded}" >
+ <td>
+ <div class="FloatLeft LogDisplayLeft" >
+ <p class="logOwnerProfileName">
+ <strong><a id="143568283" href="/profile/?guid=${AccountGuid}">${UserName}</a></strong></p>
+ <p class="logOwnerBadge">
+ <img title="${creator.GroupTitle}" src="${creator.GroupImageUrl}">${creator.GroupTitle}
+ </p>
+ <p class="logOwnerAvatar">
+ <a href="/profile/?guid=${AccountGuid}">
+ {{if includeAvatars && AvatarImage}}
+ <img width="48" height="48" src="http://img.geocaching.com/user/avatar/${AvatarImage}">
+ {{else includeAvatars }}
+ <img width="48" height="48" src="/images/default_avatar.jpg">
+ {{/if}}
+ </a></p>
+ <p class="logOwnerStats">
+
+ {{if GeocacheFindCount > 0 }}
+ <img title="Caches Found" src="/images/icons/icon_smile.png"> ${GeocacheFindCount}
+ {{/if}}
+
+ </p>
+ </div>
+ <div class="FloatLeft LogDisplayRight">
+ <div class="HalfLeft LogType">
+ <strong>
+ <img title="${LogType}" alt="${LogType}" src="/images/logtypes/${LogTypeImage}"> ${LogType}</strong></div>
+ <div class="HalfRight AlignRight">
+ <span class="minorDetails LogDate">${Visited}</span></div>
+ <div class="Clear LogContent">
+ {{if LatLonString.length > 0}}
+ <strong>${LatLonString}</strong>
+ {{/if}}
+ <p class="LogText">{{html LogText}}</p>
+ {{if Images.length > 0}}
+ <table cellspacing="0" cellpadding="3" class="LogImagesTable">
+ {{tmpl(Images) "tmplCacheLogImages"}}
+ </table>
+ {{/if}}
+
+ <div class="AlignRight">
+ <small><a title="View Log" href="log.aspx?LUID=${LogGuid}" target="_blank">
+ {{if (userInfo.ID==AccountID)}}
+ View / Edit Log / Images
+ {{else}}
+ View Log
+ {{/if}}
+ </a></small>
+ {{if (userInfo.ID==AccountID)}}
+ <small><a title="Upload Image" href="upload.aspx?LID=${LogID}" target="_blank">Upload Image</a></small>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ </script>
+ <script id="tmpl_CacheLogImages" type="text/x-jquery-tmpl">
+ <tr>
+ <td>
+ <a class="tb_images lnk" rel="tb_images[grp${LogID}]" href="http://img.geocaching.com/cache/log/large/${FileName}" data-title="{{tmpl "tmplCacheLogImagesTitle"}}">
+ <img title="Photo" alt="Photo" src="/images/icons/16/photo.png">
+ <span>${ $('<div />').text($('<div />').html($item.data.Name).text()).html() }</span>
+ </a>
+ </td>
+ </tr>
+ </script>
+ <script id="tmpl_CacheLogImagesTitle" type="text/x-jquery-tmpl">
+ <span class="LogImgTitle"> ${ $('<div />').text($('<div />').text($('<div />').html($item.data.Name).text()).html()).html() } </span><span class="LogImgLink">
+
+ <a target="_blank" href="log.aspx?LUID=${$item.parent.parent.data.LogGuid}&IID=${ImageGuid}">View Log</a>
+
+ <a href="http://img.geocaching.com/cache/log/large/${FileName}">Print Picture</a></span>
+
+ {{if (Descr && Descr.length > 0) }}
+ <br /><p class="LogImgDescription">${ $('<div />').text($('<div />').text($('<div />').html($item.data.Descr).text()).html()).html() }</p>
+ {{/if}}
+ </script>
+ <script id="tmpl_CacheCoordinateUpdate" type="text/x-jquery-tmpl">
+ <div class="ccu-update" data-lat="${ll[0]}" data-lng="${ll[1]}">
+ <h4 class="BottomSpacing">Corrected Coordinates (hidden from others)</h4>
+ <dl>
+ <dt>Original:</dt>
+ <dd>${ll_formatted} <a href="#" class="ccu-restore">Restore</a></dd>
+ </dl>
+ <dl class="ccu-parse">
+ <dt>Change To:</dt>
+ <dd>
+ <input type="text" max="40" size="35" class="cc-parse-text">
+ <button class="ccu-button ccu-parse">Submit</button>
+ </dd>
+ </dl>
+ <dl class="ccu-parseverify" style="display:none;">
+ <dt>Change To:</dt>
+ <dd>
+ <span class="ccu-parseverify-coords">N 32°38.880′, W 097°23.755′</span>
+
+ <button class="ccu-button ccu-parseverify-accept">Accept</button> <button class="ccu-button ccu-parseverify-cancel">Cancel</button>
+ </dd>
+ </dl>
+ </div>
+ <div class="Clear"></div>
+
+ </script>
+
+ <script type="text/javascript">
+ <!--
+ var dh, lat, lng, guid;
+
+ dh = 'false';
+
+ lat=null;lng=null;guid=null;
+
+
+ function s2gps(guid) {
+ var w = window.open('sendtogps.aspx?guid=' + guid, 's2gps', config='width=450,height=450,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no');
+ w.focus();
+ }
+
+ function s2phone(wpid) {
+ window.location.href='sendtophone.aspx?gc=' + wpid;
+ }
+
+ function pl(lc) {
+ document.location.href='cache_details_print.aspx?guid=' + guid + '&numlogs=' + lc +'&pt=full<=letter&decrypt='+ ((dh)?'y':'n');
+ }
+ function setNotification(id) {
+ //new Effect.Highlight(id, {startcolor:'#ffffff', endcolor:'#ffff99', restorecolor:'#ffff99', duration:3.0, queue:'front'});
+ //new Effect.Highlight(id, {startcolor:'#ffff99', endcolor:'#ffffff', restorecolor:'#ffffff', duration:5.0, queue:'end'});
+ }
+ function cmo(id) {
+ //new Effect.Fade(id);
+ Cookie.set('sn', true);
+ }
+ function pp(img) {
+ var w = window.open(img);
+ w.focus();
+ }
+
+ //-->
+ </script>
+ <script language="javascript" type="text/javascript">
+ var map, bounds;
+ var canUpdateFavoriteStatus = true;
+ var decryptLogs = (urlParams["decrypt"] && urlParams["decrypt"] == "y") ? true : false;
+ var logInitialLoaded = false;
+ var $tfoot = $("#cache_logs_table").find("tfoot");
+ var currentPageIdx = 1, totalPages = 1, pageSize = 10;
+ var isBusy = false;
+
+ var locString = {
+ decrypt: 'Decrypt',
+ encrypt: 'Encrypt'
+ };
+
+ $("#tmpl_CacheLogImagesTitle").template("tmplCacheLogImagesTitle");
+ $("#tmpl_CacheLogImages").template("tmplCacheLogImages");
+ $("#tmpl_CacheLogRow").template("tmplCacheLogRow");
+
+ $(".EncryptDecrypt")
+ .button({ icons: { secondary: 'ui-icon-arrowreturnthick-1-w'} })
+ .click(function (e) {
+ e.preventDefault();
+ $("tr.log-row").each(function (i, obj) {
+ var $obj = $(obj);
+ if ($obj.data("encoded") == true) {
+ var lt = $obj.find("p.LogText");
+ //var ltDecoded = $('<div />').html(lt.html()).text();
+ lt.html(convertROTStringWithBrackets(lt.html()));
+ }
+ });
+
+ decryptLogs = !decryptLogs;
+
+ $("a.decrypt-link").html(decryptLogs ? locString.encrypt : locString.decrypt);
+
+ return false;
+ });
+
+ function appendNewLogs(obj) {
+
+ totalPages = obj.pageInfo.totalPages;
+
+ var $newBody = $(document.createElement("TBODY"));
+
+ $("#tmpl_CacheLogRow").tmpl(obj.data,{ includeAvatars: includeAvatars }).appendTo($newBody);
+
+ $newBody.find("a.tb_images").each(function()
+ {
+ var $this = $(this);
+ $this.fancybox({
+ 'type': 'image',
+ 'titlePosition': 'inside',
+ 'padding': 10,
+ titleFormat: function() { return $this.data('title'); }
+ });
+ });
+
+ $("#cache_logs_table")
+ .append($newBody.children());
+
+ currentPageIdx = obj.pageInfo.idx + 1;
+ pageSize = obj.pageInfo.size;
+ }
+
+ function callLogLoad(hideFooter) {
+ $.getJSON("/seek/geocache.logbook", { tkn: userToken, idx: currentPageIdx, num: pageSize, decrypt: decryptLogs },
+ function (response) {
+ if (response.status == "success") {
+ appendNewLogs(response);
+ if( hideFooter || (totalPages < currentPageIdx) ) {
+ $tfoot.hide();
+ }
+ } else if (response.status == "error" && response.value == "1") {
+ // reload the page since the data had expired.
+ window.location.reload();
+ }
+ isBusy = false;
+ });
+ }
+
+ $("#add_to_favorites").click(function () {
+
+ if (canUpdateFavoriteStatus) {
+ canUpdateFavoriteStatus = false;
+
+ var fv = parseInt($(".favorite-value").text());
+ fv++;
+ $(".favorite-value").text(fv);
+
+ var fr = parseInt($(".favorite-rank").text());
+ fr--;
+ $(".favorite-rank").text(fr);
+
+ $("#pnlNonfavoriteCache").fadeOut("fast", function () {
+ $("#pnlFavoriteCache").fadeIn("fast");
+ });
+
+ $.ajax({
+ type: "POST",
+ cache: false,
+ url: '/datastore/favorites.svc/update?u=' + userToken + '&f=true',
+ success: function () {
+ canUpdateFavoriteStatus = true;
+ gotScore = false;
+ showFavoriteScore();
+ }
+ });
+
+ return false;
+ }
+ });
+
+ $("#remove_from_favorites").click(function () {
+
+ if (canUpdateFavoriteStatus) {
+ canUpdateFavoriteStatus = false;
+
+ var fv = parseInt($(".favorite-value").text());
+ fv--;
+ $(".favorite-value").text(fv);
+
+ var fr = parseInt($(".favorite-rank").text());
+ fr++;
+ $(".favorite-rank").text(fr);
+
+ $("#pnlFavoriteCache").fadeOut("fast", function () {
+ $("#pnlNonfavoriteCache").fadeIn("fast");
+ });
+
+ $.ajax({
+ type: "POST",
+ cache: false,
+ url: '/datastore/favorites.svc/update?u=' + userToken + '&f=false',
+ success: function () {
+ canUpdateFavoriteStatus = true;
+ gotScore = false;
+ showFavoriteScore();
+ }
+ });
+
+ return false;
+ }
+ });
+
+ $(function () {
+
+ // CSP Section
+ if ($("#cspMessage").length) {
+
+ var editLink = $('a[href*="report.aspx"]').attr('href');
+
+ $("#cspMessage").prepend('<P>Please take a moment to check the listing and ensure it is ready to enable. Clicking "Submit for Review" will enable your cache page.</P>');
+ $("#cspMessage").prepend('<P>Once it is enabled, you will receive a confirmation email that it was successfully submitted. It is peak season for cache placement. Your volunteer reviewer will strive to begin the review process within the next 7 days.</P>');
+ $("#cspMessage").prepend('<P>Your cache page has not been reviewed yet. It will not appear in the review queue until you enable it.</P>');
+
+ $("#cspGoBack").click(function (e) {
+ e.preventDefault();
+ window.location = editLink;
+ return false;
+ });
+
+ $("#cspSubmit").click(function (e) {
+ e.preventDefault();
+ $.pageMethod("EnableCSPCache", JSON.stringify({ dto: { ut: userToken } }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.success == true) {
+ window.location = '/seek/cache_details.aspx?guid=' + r.guid;
+ } else {
+ alert("There was an error enabling your cache.");
+ }
+ });
+ return false;
+ });
+
+ $("#cspConfirm").change(function() {
+ if ($("#cspConfirm").is(":checked")) {
+ $("#cspSubmit").removeAttr('disabled');
+ $("#cspGoBack").attr('disabled', true);
+ } else {
+ $("#cspSubmit").attr('disabled', true);
+ $("#cspGoBack").removeAttr('disabled');
+ }
+ });
+ }
+
+
+ //override coords
+ if (typeof(userDefinedCoords) != "undefined") {
+ if (userDefinedCoords.status == "success" && userDefinedCoords.data.isUserDefined == true) {
+ mapLatLng = $.extend({}, mapLatLng, userDefinedCoords.data);
+ $("#uxLatLon")
+ .data("isOverridden", true)
+ .addClass("myLatLon");
+ } else if (userDefinedCoords.status == "success") {
+ mapLatLng = $.extend({}, mapLatLng, userDefinedCoords.data);
+ } else {
+ $("#uxLatLonLink").contents().unwrap();
+ }
+ } else {
+ $("#uxLatLonLink").contents().unwrap();
+ }
+
+
+ var cacheNoteText = {
+ DefaultText: 'Click to enter a note',
+ ErrorInSaving: 'There was an error saving page. Please refresh the page and try again.',
+ SavingText: 'Please wait, saving your note...'
+ };
+
+
+
+ $("time.timeago").timeago();
+
+ $(".button").button();
+
+ var sn = Cookie.get('sn');
+
+ if ($('#trNotPM').length > 0) {
+ $('#trNotPM').toggle(!sn);
+ }
+
+ $("#cache_note").editInPlace({
+ callback: function (unused, enteredText) {
+ var me = $(this);
+
+ var et = $.trim(enteredText);
+ if (et.length > 500)
+ et = et.substr(0, 500);
+
+ $.pageMethod("SetUserCacheNote", JSON.stringify({ dto: { et: et, ut: userToken} }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.success == true) {
+ if ($.trim(r.note) == "") {
+ $("#cache_note").text(cacheNoteText.DefaultText);
+ } else {
+ $("#cache_note").text(r.note);
+ }
+
+ me.effect('highlight', { color: '#ffb84c' }, 'slow');
+ } else {
+ alert(cacheNoteText.ErrorInSaving);
+ $("#cache_note").text(cacheNoteText.DefaultText);
+ }
+
+ });
+
+ return cacheNoteText.SavingText;
+ }
+ , default_text: cacheNoteText.DefaultText
+ , field_type: "textarea"
+ , textarea_rows: "7"
+ , textarea_cols: "65"
+ , show_buttons: true
+ , bg_over: "#FDEBBB"
+ //, callback_skip_dom_reset: true
+
+ });
+
+ $("#lnk_slippyMap").click(function(e) {
+ e.preventDefault();
+ loadDynamicMap();
+ return false;
+ });
+
+ $(".inplace_field").live("focus", function () {
+ if ($(this).data("created") == null) {
+ $(this).data("created", true)
+ $(this).countable({
+ maxLength: 500
+ });
+ }
+ });
+
+ $("#pcn_help").tipTip({ activation: 'hover', content: 'Enter your own notes here. No other user will be able to access them.' });
+
+ $("a.decrypt-link").html(decryptLogs ? locString.encrypt : locString.decrypt);
+
+ if ($("#cache_logs_container").length > 0) {
+
+ appendNewLogs(initalLogs);
+
+ if (DetectMobileQuick()) {
+ $("#pnlButtonLoad")
+ .show()
+ .find("a.MobileButton")
+ .click(function (e) {
+ e.preventDefault();
+ callLogLoad(false);
+ return false;
+ })
+ .button();
+ if(!DetectTierTablet()){
+ $("a.MobileButton").addClass("Phone");
+ }
+ } else {
+ $("#pnlLazyLoad").show();
+
+ $(window).endlessScroll({
+ fireOnce: true,
+ fireDelay: 500,
+ bottomPixels: ($(document).height() - $("#cache_logs_container").offset().top) + 50,
+ ceaseFire: function(){
+ // stop the scrolling if the last page is reached.
+ return (isLoggedIn == false) || (totalPages < currentPageIdx);
+ },
+ callback: function() {
+ if (!isBusy) {
+
+ isBusy = true;
+ $tfoot.show();
+ callLogLoad(true);
+ }
+ }
+ });
+ }
+ }
+
+ if (!isLoggedIn) {
+ $("#cache_logs_table").find("tfoot").hide();
+ }
+
+ if (mapLatLng != null) {
+
+ $("#uxLatLonLink").qtip({
+ suppress:false,
+ content: buildCacheCoordMenu(),
+ position: {
+ my: 'left top',
+ at: 'right top',
+ adjust: {
+ x: 10, y: -10
+ }
+ },
+ show: {
+ ready: false,
+ event: "click",
+ solo: true
+ }, hide: {
+ event: 'unfocus'
+ },
+ style: {
+ tip: {
+ corner: false
+ },
+ classes: 'ui-tooltip-widget'
+ },
+ events: {
+ show: function () {
+ if ($("#uxLatLon").data("isOverridden")) {
+ $("a.ccu-restore").show();
+ } else {
+ $("a.ccu-restore").hide();
+ }
+
+ if (userDefinedCoords.status != "success") {
+ $("div.ccu-update").hide();
+ } else {
+ $("div.ccu-update").show();
+ }
+ }
+ }
+ }).click(function (e) {
+ e.preventDefault();
+ return false;
+ });
+
+ setStaticMaps();
+ //$("#staticMap").lazyload();
+ }
+ });
+
+ function setStaticMaps() {
+
+ var map = new L.Map('map_preview_canvas', {
+ center: new L.LatLng(mapLatLng.lat, mapLatLng.lng),
+ zoom: 10,
+ doubleClickZoom: false,
+ dragging: false,
+ touchZoom: false,
+ scrollWheelZoom: false,
+ attributionControl: false
+ })
+ .addControl(new L.Control.Attribution({ prefix: '<a href="/about/maps.aspx#leaflet" target="_blank">About our maps</a>' }));
+
+
+ var mapLarge = new L.Map('map_canvas', {
+ center: new L.LatLng(mapLatLng.lat, mapLatLng.lng),
+ zoom: 14,
+ doubleClickZoom: true,
+ dragging: true,
+ touchZoom: false,
+ scrollWheelZoom: false,
+ zoomControl: true,
+ attributionControl: false
+ })
+ .addControl(new L.Control.Attribution({ prefix: '<a href="/about/maps.aspx#leaflet" target="_blank">About our maps</a>' }))
+ .addControl(new L.Control.Scale());
+
+ var tileOptions = {
+ tileUrl: "http://otile{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg",
+ name: "mpqosm",
+ alt: "MapQuest",
+ //attribution: "Tiles Courtesy of <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png'>, Map and map data © 2012 <a href=\"http://www.openstreetmap.org\" target='_blank'>OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>. ",
+ subdomains: "1234",
+ tileSize: 256,
+ minZoom: 0,
+ maxZoom: 18
+ };
+
+ map.addLayer(new L.TileLayer(tileOptions.tileUrl, tileOptions));
+ mapLarge.addLayer(new L.TileLayer(tileOptions.tileUrl, tileOptions));
+
+ var pinIcon = L.Icon.extend({
+ iconSize: new L.Point(20, 23),
+ iconAnchor: new L.Point(10,23),
+ shadowUrl: null
+ });
+
+ var mkA = new L.Marker(new L.LatLng(mapLatLng.lat, mapLatLng.lng),
+ {
+ icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + mapLatLng.type + '.png', iconAnchor: new L.Point(10,23)}),
+ title: mapLatLng.name
+ })
+ .on("click", function () {
+ document.getElementById("uxlrgMap").scrollIntoView(true);
+ return false;
+ });
+
+ var mkA2 = new L.Marker(new L.LatLng(mapLatLng.lat, mapLatLng.lng), {
+ icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + mapLatLng.type + '.png', iconAnchor: new L.Point(10,23)}),
+ clickable: false, zIndexOffset:99, title: mapLatLng.name
+ });
+
+ map.addLayer(mkA);
+ mapLarge.addLayer(mkA2);
+
+ $("#ctl00_ContentBody_uxNotesAboutPrinting").fancybox({
+ overlayShow: false
+ });
+
+
+ if (cmapAdditionalWaypoints != null && cmapAdditionalWaypoints.length > 0) {
+ var llBounds = new L.LatLngBounds();
+
+ for (var x = 0, len = cmapAdditionalWaypoints.length; x < len; x++) {
+ var item = cmapAdditionalWaypoints[x],
+ ll = new L.LatLng(item.lat, item.lng),
+ marker = new L.Marker(ll, {
+ icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + item.type + '.png', iconAnchor: new L.Point(10,23)}),
+ title: item.name,
+ clickable:false
+ });
+
+ llBounds.extend(ll);
+ mapLarge.addLayer(marker);
+ }
+ var bz = mapLarge.getBoundsZoom(llBounds);
+
+ mapLarge.setView(new L.LatLng(mapLatLng.lat, mapLatLng.lng), bz);
+ }
+ }
+
+
+
+ function dht() {
+ try {
+ $('#div_hint').html(convertROTStringWithBrackets($('#div_hint').html()));
+ var linkText = (($('#ctl00_ContentBody_lnkDH').attr('title') == 'Decrypt') ? 'Encrypt' : 'Decrypt');
+ $('#ctl00_ContentBody_lnkDH').text(linkText);
+ $('#ctl00_ContentBody_lnkDH').attr('title', linkText);
+ } catch (e) {
+ alert(e);
+ return false;
+ }
+ return false;
+ }
+
+ function buildCacheCoordMenu() {
+ var curLatLng = new LatLon(mapLatLng.lat, mapLatLng.lng)
+ $.template( "tmplCacheCoordinateUpdate_CoordItem", "<tr><td nowrap='nowrap'>${t}</td><td class='ccc-coord' nowrap='nowrap' dataum='${k}'>${v}</td></tr>" );
+
+ var $menu = $("<div></div>");
+
+ $( "#tmpl_CacheCoordinateUpdate" ).tmpl( {
+ ll: [mapLatLng.lat, mapLatLng.lng],
+ ll_formatted: mapLatLng.oldLatLngDisplay
+ } ).appendTo( $menu );
+
+ $menu.find("button.ccu-button").button();
+
+ $menu.delegate("button.ccu-parse", "click", function (e) {
+ e.preventDefault();
+ var $this = $(e.target),
+ $parse =$this.closest('dd').find(".cc-parse-text"),
+ parseCoords = $.trim($parse.val());
+
+ if (parseCoords.length == 0) {
+ alert('Please provide valid coordinates.');
+ } else {
+ $.getJSON("/api/geocode", { parse: parseCoords}, function (response) {
+ if (response.status == "success") {
+ var newLatLng = new LatLon(response.data.lat, response.data.lng);
+
+ // update the displayed coords
+ var dist = curLatLng.rhumbDistanceTo(newLatLng);
+ var bearingTo = curLatLng.rhumbBearingTo(newLatLng);
+ var bearing = bearingTo >= 0 || bearingTo < 22.5 ? "N" : bearingTo >= 22.5 || bearingTo < 67.5 ? "NE" : bearingTo >= 67.5 || bearingTo < 112.5 ? "E" : bearingTo >= 112.5 || bearingTo < 157.5 ? "SE" : bearingTo >= 157.5 || bearingTo < 202.5 ? "S" : bearingTo >= 202.5 || bearingTo < 247.5 ? "SW" : bearingTo >= 247.5 || bearingTo < 292.5 ? "W" : bearingTo >= 292.5 || bearingTo < 337.5 ? "NW" : "N";
+
+ var formats = response.data.formats;
+ // all these finds, make me feel dirty
+ $menu
+ .find("span.ccu-parseverify-coords").text(formats.DM).end()
+ .find("dl.ccu-parse").hide().end()
+ .find("dl.ccu-parseverify").show().end()
+ .find("button.ccu-parseverify-accept")
+ .data("utm", '')
+ .data("dm", formats.DM)
+ .data("lat", response.data.lat)
+ .data("lng", response.data.lng)
+ .end();
+ } else {
+ alert("Sorry unable to parse the coordinates you entered.");
+ }
+ });
+ }
+
+ return false;
+ });
+
+ $menu.delegate("button.ccu-parseverify-accept", "click", function (e) {
+ e.preventDefault();
+ var $this = $(this);
+ // update to webmethod
+ $.pageMethod("SetUserCoordinate", JSON.stringify({ dto: { data: {lat: $this.data("lat"), lng: $this.data("lng") }, ut: userToken } }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.status == "success") {
+ window.location.reload();
+ } else {
+ $("#uxLatLonLink").qtip('hide');
+ }
+
+ });
+
+ return false;
+ });
+
+ $menu.delegate("button.ccu-parseverify-cancel", "click", function (e) {
+ e.preventDefault();
+ $menu
+ .find("input.cc-parse-text").val('').end()
+ .find("dl.ccu-parse").show().end()
+ .find("dl.ccu-parseverify").hide().end();
+ return false;
+ });
+
+ $menu.delegate("a.ccu-restore", "click", function (e) {
+ e.preventDefault();
+
+ $.pageMethod("ResetUserCoordinate", JSON.stringify({ dto: { ut: userToken } }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.status == "success") {
+ window.location.reload();
+ }
+ });
+
+ return false;
+ });
+
+ return $menu;
+ }
+
+ GSPK = window.GSPK || {};
+ GSPK.Selector = {};
+ GSPK.Selector.getSelected = function(){
+ var t = null;
+ if ( window.getSelection ){
+ t = window.getSelection();
+ }else if(document.getSelection){
+ t = document.getSelection();
+ }else if(document.selection){
+ t = document.selection.createRange().text;
+ }
+ return t;
+ }
+
+ try { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'NotSignedIn', null, true]); } catch(err) { }
+ </script>
+
+
+
+ </div>
+
+
+
+
+ </div>
+
+
+ </section>
+
+ <footer>
+
+ <div class="container">
+
+ <div class="span-24 last FooterTop">
+
+
+
+<div class="LocaleText">
+
+ <strong>Choose Your Language:</strong>
+
+</div>
+<div class="LocaleList">
+
+ <div class="selected-language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul class="language-list">
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+ jQuery(".selected-language a").click(function (e) {
+ e.preventDefault();
+ var $loc = jQuery(this).parent().next();
+ jQuery($loc).show().position({
+ of: $loc.parent(),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 0",
+ collision: "fit fit"
+ });
+ jQuery(this).addClass("Expanded");
+ jQuery(document).click(function () {
+ jQuery(".language-list").fadeOut("fast");
+ jQuery(".selected-language a").removeClass("Expanded");
+ });
+ return false;
+ });
+ });
+</script>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ About</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterGlossary" title="Glossary of Terms" href="../about/glossary.aspx">Glossary of Terms</a></li>
+ <li>
+ <a id="ctl00_hlFooterBrochures" title="Brochures" href="../tools/#Guide">Brochures</a></li>
+ <li>
+ <a id="ctl00_hlFooterAbout" title="About Groundspeak" href="../about/groundspeak.aspx">About Groundspeak</a></li>
+ <li>
+ <a id="ctl00_hlFooterVolunteers" title="About Our Volunteers" href="../volunteers/">About Our Volunteers</a></li>
+ <li>
+ <a id="ctl00_hlFooterHistory" title="History" href="../about/history.aspx">History</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ Press</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterNews" title="News Articles" href="../press/">News Articles</a></li>
+ <li>
+ <a id="ctl00_hlFooterMediaFAQs" title="Media FAQs" rel="document" href="../articles/Brochures/footer/FAQ_Media.pdf">Media FAQs</a></li>
+ <li>
+ <a id="ctl00_hlFooterMediaInquiries" title="Media Inquiries" rel="external" href="http://support.groundspeak.com/index.php?pg=request&xCategory=11">Media Inquiries</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-5">
+
+ <p class="FooterHeader">
+ <strong>
+ Questions & Suggestions</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterHelpCenterLink" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li>
+ <li>
+ <a id="ctl00_hlFooterDiscussionForums" accesskey="f" title="Discussion Forums" href="../forums/">Discussion Forums</a></li>
+ <li>
+ <a id="ctl00_hlFooterParksPoliceLink" title="Land Management and Law Enforcement" href="../parksandpolice/">Land Management and Law Enforcement</a></li>
+ <li>
+ <a id="ctl00_hlFooterContactUs" title="Contact Us" href="../contact/">Contact Us</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ Resources</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterTools" accesskey="o" title="Tools and Downloads" href="../tools/">Tools and Downloads</a></li>
+ <li>
+ <a id="ctl00_hlFooterAPIProgram" title="API Program" href="../live/">API Program</a></li>
+ <li>
+ <a id="ctl00_hlFooterBenchmarks" title="Find a Benchmark" href="../mark/">Find a Benchmark</a></li>
+ </ul>
+
+ </div>
+ <div class="span-4 append-3 last">
+
+ <p class="FooterHeader">
+ <strong>
+ Follow Us</strong></p>
+ <ul class="FooterLinks FollowUsLinks">
+ <li><a id="ctl00_hlFacebook" title="Facebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts"><img id="ctl00_imgFacebook" title="Facebook" src="../images/home/icon_facebook.png" alt="Facebook" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlTwitter" title="Twitter" href="http://twitter.com/GoGeocaching"><img id="ctl00_imgTwitter" title="Twitter" src="../images/twitter/twitter_icon_white_22.png" alt="Twitter" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlFlickr" title=" Flickr" href="http://www.flickr.com/photos/geocaching_com/"><img id="ctl00_imgFlickr" title="Flickr" src="../images/home/icon_flickr.png" alt="Flickr" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlYouTube" title="YouTube" href="http://www.youtube.com/user/GoGeocaching"><img id="ctl00_imgYouTube" title="YouTube" src="../images/home/icon_youtube.png" alt="YouTube" style="border-width:0px;" /></a></li>
+ </ul>
+
+ </div>
+
+ <p class="span-24 last FooterBottom">
+ Copyright
+ © 2000-2012
+ <a href="http://www.groundspeak.com/" title="Groundspeak, Inc." accesskey="g">Groundspeak, Inc.</a>
+ All Rights Reserved.<br />
+ <a id="ctl00_hlFooterTerms" accesskey="u" title="Groundspeak Terms of Use" href="../about/termsofuse.aspx">Groundspeak Terms of Use</a>
+ |
+ <a id="ctl00_hlFooterPrivacy" accesskey="x" title="Privacy Policy" href="../about/privacypolicy.aspx">Privacy Policy</a>
+ |
+ <a id="ctl00_hlFooterLogo" accesskey="l" title="Geocaching Logo Usage Guidelines" href="../about/logousage.aspx">Geocaching Logo Usage Guidelines</a>
+ |
+ <a id="ctl00_hlFooterAPI" accesskey="`" title="API License Agreement" href="../live/api_license_agreement.aspx">API License Agreement</a>
+ |
+ <a id="ctl00_HlFooterStatus" accesskey="`" title="Current Service Status" href="http://status.geocaching.com">Service Status</a></p>
+
+ </div>
+
+
+ </footer>
+ <div class="SkipLinks">
+
+ <a id="ctl00_hlSkipLinksTop" accesskey="t" title="Return to the Top of the Page" href="#Top">Return to the Top of the Page</a>
+
+ </div>
+
+
+
+<script type="text/javascript">
+//<![CDATA[
+var Page_ValidationSummaries = new Array(document.getElementById("ctl00_vsSignInWidgetForm"));
+var Page_Validators = new Array(document.getElementById("ctl00_rfvUsername"), document.getElementById("ctl00_rfvPassword"));
+//]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+var ctl00_vsSignInWidgetForm = document.all ? document.all["ctl00_vsSignInWidgetForm"] : document.getElementById("ctl00_vsSignInWidgetForm");
+ctl00_vsSignInWidgetForm.headertext = "<h4>Please correct the following issues:</h4>";
+ctl00_vsSignInWidgetForm.validationGroup = "SignInForm";
+var ctl00_rfvUsername = document.all ? document.all["ctl00_rfvUsername"] : document.getElementById("ctl00_rfvUsername");
+ctl00_rfvUsername.controltovalidate = "ctl00_tbUsername";
+ctl00_rfvUsername.errormessage = "Username is a required field; please enter a valid username.";
+ctl00_rfvUsername.display = "Dynamic";
+ctl00_rfvUsername.validationGroup = "SignInForm";
+ctl00_rfvUsername.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
+ctl00_rfvUsername.initialvalue = "";
+var ctl00_rfvPassword = document.all ? document.all["ctl00_rfvPassword"] : document.getElementById("ctl00_rfvPassword");
+ctl00_rfvPassword.controltovalidate = "ctl00_tbPassword";
+ctl00_rfvPassword.errormessage = "Password is a required field; please enter a valid password.";
+ctl00_rfvPassword.display = "Dynamic";
+ctl00_rfvPassword.validationGroup = "SignInForm";
+ctl00_rfvPassword.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
+ctl00_rfvPassword.initialvalue = "";
+//]]>
+</script>
+
+
+<script type="text/javascript">
+//<![CDATA[
+var isLoggedIn = false;
+var userDefinedCoords = {"status":"fail","data":{"isUserDefined":false,"oldLatLngDisplay":"N 37° 23.900' W 121° 55.000'"}};
+userInfo = {ID: 0};
+userToken = 'WQZID4ZFAYC6SULYQF74LYDA3S3BDCRFF42MHAMCQ2FV344K2FX57T5PR5HMIIEYY3CGMUR4ZCJLPZTNFNAGW2TB53PY5QWTMDL4AU4IKCSURNTR555XW5UR6GPGTI3L77XLHQYQRCXS6J3O3FRH3WHZ23TV7YTF2XZ3PYA';
+//]]>
+</script>
+<script type="text/javascript">setNotification('ctl00_ContentBody_trNotLoggedIn');</script>
+<script type="text/javascript">
+//<![CDATA[
+initalLogs = {"status":"success", "data": [{"LogID":284766538,"CacheID":3372822,"LogGuid":"73790d15-edbd-4e22-8906-fd78557699b4","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"No idea eventually became one idea that became another idea...which became a lot of work! <img src=\"/images/icons/icon_smile_shock.gif\" border=\"0\" align=\"middle\" /> In fact, I might still be busy-bee-ing my way through the puzzle if I hadn't received a timely offer that was too good to refuse. Turned out I had figured out enough to be getting close but had a loooooong way to go, so I was very grateful for the boost up from skillz I lack. From there, the solution was quickly within reach, and after digging around in my mind for another bit of inspiration, the cache was soon in reach as well. TNLNSL, TFTC!","Created":"12/21/2012","Visited":"12/20/2012","UserName":"thelins","MembershipLevel":3,"AccountID":2999428,"AccountGuid":"01cb03f6-290f-4720-8786-0c5ac17a6cc0","Email":"","AvatarImage":"0ee825d9-bc33-41f4-bf0e-a62bde392303.jpg","GeocacheFindCount":1424,"GeocacheHideCount":14,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284677706,"CacheID":3372822,"LogGuid":"7c7a396a-337e-4b48-b76b-db5c1c351126","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"21:56. Consecutive Day 3445.<br />Knew what I needed to do right away with this puzzle, as I had been considering how to incorporate this \"feature\" into one of my own puzzles, but I misread the date as 12/12/12, and so my attempt to solve this morning failed. Saw the new info this evening and worked out a trick to make it easier to find the needed info. The cache hint confused me, and it took me a long time to find the cache.<br />{3/1.5m-puz,n,h}<br /><br />This entry was edited by kablooey on Thursday, December 20, 2012 at 2:25:22 PM UTC.","Created":"12/19/2012","Visited":"12/19/2012","UserName":"kablooey","MembershipLevel":1,"AccountID":18898,"AccountGuid":"a3dd3925-32ae-4ab2-9063-b62919d412b7","Email":"","AvatarImage":"906a0d82-5f39-4925-830f-a505f38d15fb.jpg","GeocacheFindCount":14367,"GeocacheHideCount":135,"ChallengesCompleted":13,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":284677102,"CacheID":3372822,"LogGuid":"7bc5e006-4d3a-4b40-9c3d-50dcf348ef56","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"I saw this one this morning as I got ready to go out for my run. I was a little disappointed to see so much description of what was needed, since I knew what to do for once on a puzzle around here. The only clever part of what I did to solve this one was to narrow down the possibilities to essentially what the new extra information says. I underestimated how much time it was going to take to finish up once I got in to work, but it still went by relatively quickly. I don't think there's any way I could have made to be FTF, even though I did solve 8 minutes before TeamOttlet found it. Anyways, I stopped by on my way home, and despite the darkness, it was in the first place I checked, thanks to the certitude hint. Thanks for the puzzle.","Created":"12/19/2012","Visited":"12/19/2012","UserName":"payakoi","MembershipLevel":3,"AccountID":94859,"AccountGuid":"b20a5189-6852-49ba-951f-b3471d3198bf","Email":"","AvatarImage":"","GeocacheFindCount":5344,"GeocacheHideCount":7,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284659125,"CacheID":3372822,"LogGuid":"819ecce1-91db-48bc-899a-063e12512595","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"Updated the description to include some details about the waypoint.<br /><br />Thank Chrysalides for the US OIL tip <img src=\"/images/icons/icon_smile_approve.gif\" border=\"0\" align=\"middle\" />. kanchan suggested LOUIS <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" />.<font color=\"white\"><br /><br />This entry was edited by The North Star on Thursday, 20 December 2012 at 02:38:37 UTC.</font>","Created":"12/19/2012","Visited":"12/19/2012","UserName":"The North Star","MembershipLevel":3,"AccountID":669462,"AccountGuid":"f3d7b7c8-8698-4e21-a6ad-24e148f5c6a5","Email":"","AvatarImage":"1561481d-e045-481f-9c19-eccb025fcfea.jpg","GeocacheFindCount":1308,"GeocacheHideCount":40,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284645348,"CacheID":3372822,"LogGuid":"05e00972-1576-4c93-b595-93c095632984","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"FTF at 11:40am<br />I made this one a lot more tedious than it had to be, I ought to have read the description more carefully. I did find a slightly more efficient search method, but still pretty manual. TFTP<font color=\"white\"></font>","Created":"12/19/2012","Visited":"12/19/2012","UserName":"TeamOttlet","MembershipLevel":3,"AccountID":623076,"AccountGuid":"b9f2639c-5ed0-4625-82ed-f7723aad6a24","Email":"","AvatarImage":"b4d5c924-f0b3-4668-866d-0c7eafe6a6ad.jpg","GeocacheFindCount":7971,"GeocacheHideCount":11,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 5, "totalRows": 7, "rows": 7 } };
+
+document.getElementById('ctl00_vsSignInWidgetForm').dispose = function() {
+ Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_vsSignInWidgetForm'));
+}
+
+var Page_ValidationActive = false;
+if (typeof(ValidatorOnLoad) == "function") {
+ ValidatorOnLoad();
+}
+
+function ValidatorOnSubmit() {
+ if (Page_ValidationActive) {
+ return ValidatorCommonOnSubmit();
+ }
+ else {
+ return true;
+ }
+}
+ WebForm_AutoFocus('btnSignIn');
+document.getElementById('ctl00_rfvUsername').dispose = function() {
+ Array.remove(Page_Validators, document.getElementById('ctl00_rfvUsername'));
+}
+
+document.getElementById('ctl00_rfvPassword').dispose = function() {
+ Array.remove(Page_Validators, document.getElementById('ctl00_rfvPassword'));
+}
+//]]>
+</script>
+</form>
+ <script type="text/javascript">
+ var browserType = {
+ IE: !!(window.attachEvent && !window.opera),
+ Opera: !!window.opera,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ };
+
+ $(function () {
+ // Make the menu system play nice with all browsers:
+ $('ul.Menu li').hover(function () {
+ $(this).addClass('hover');
+ $('ul:first', this).css('visibility', 'visible');
+ }, function () {
+ $(this).removeClass('hover');
+ $('ul:first', this).css('visibility', 'hidden');
+ });
+ if (!isiOS()) {
+ // Constructing a Twitter-esque Login:
+ $(".SignInLink").click(function (e) {
+ e.preventDefault();
+ $("#SignInWidget").toggle();
+ $(".ProfileWidget").toggleClass("WidgetOpen");
+ $(this).blur();
+ $("#ctl00_tbUsername").focus();
+ });
+ $(".SignInCloseLink").click(function () {
+ $("#SignInWidget").toggle();
+ $(".ProfileWidget").toggleClass("WidgetOpen");
+ });
+ }
+ $('.SignedInProfileLink').truncate({
+ width: 120,
+ after: '&hellip;',
+ center: false,
+ addclass: false,
+ addtitle: false
+ });
+
+ // Hide the warning message if the user closed it already
+ if ($.cookie('hide_warning') != null) {
+ $(".WarningMessage").hide();
+ } else {
+ $("#warningCloseButton").click(function () {
+ $('.WarningMessage').hide('blind');
+ $.cookie('hide_warning', 'true', { expires: 1 });
+ });
+ }
+
+ function isiOS() {
+ return (
+ (navigator.userAgent.match(/(iPhone)|(iPod)|(iPad)/i))
+ );
+ }
+ });
+ </script>
+
+
+ <script id="loc_favPointsScoreDesc" type="text/html">
+ Favorites/Premium Logs
+ </script>
+ <script type="text/javascript" language="javascript">
+ <!--
+
+
+
+ var gotScore = false;
+ var favDropDown = $('.favorite-dropdown');
+ var favContainer = $('.favorite-container');
+
+ function showFavoriteScore() {
+ $('#imgFavoriteScore').attr('src', '/images/loading3.gif');
+
+ $('#uxFavoriteScore').parent().fadeTo(200, .001, function () {
+ $.ajax({
+ type: "POST",
+ cache: false,
+ url: '/datastore/favorites.svc/score?u=' + userToken,
+ success: function (scoreResult) {
+ gotScore = true;
+
+ var score = 0;
+
+ if(scoreResult)
+ score = scoreResult;
+
+ if(score > 100)
+ score = 100;
+
+ $('#imgFavoriteScore').attr('src', '/images/favorites/piecharts/' + score + '.png');
+ var pieDesc = (score < 1 ? "<1" : score) + '% ' + $("#loc_favPointsScoreDesc").text().trim();
+ $('#imgFavoriteScore').attr('alt', pieDesc);
+ $('#imgFavoriteScore').attr('title', pieDesc);
+
+ $('#uxFavoriteScore').parent().fadeTo(1000, 1);
+ $('#uxFavoriteScore').html('<strong>' + (score < 1 ? "<1" : score) + '%</strong> ' + $("#loc_favPointsScoreDesc").html());
+ }
+ });
+ });
+ }
+
+
+
+ $(document).bind('mouseup', function (e) {
+ var $clicked = $(e.target);
+
+
+ if (!$clicked.parents().hasClass("favorite-dropdown") && !$clicked.parents().hasClass("FavoriteWidget")) {
+ favDropDown.hide(1, function () {
+ favContainer.addClass('favorite-container');
+ favContainer.removeClass('favorite-container-open');
+ $('#imgFavoriteArrow').attr('src', '/images/arrow-down.png');
+ });
+ }
+ });
+
+ $('#uxFavContainerLink').click(function () {
+ if ($(favDropDown).is(':visible')) {
+ favDropDown.hide(1, function(){
+ favContainer.addClass('favorite-container');
+ favContainer.removeClass('favorite-container-open');
+ $('#imgFavoriteArrow').attr('src', '/images/arrow-down.png');
+ });
+ }
+ else {
+ if (!gotScore) {
+ showFavoriteScore();
+ }
+
+ favContainer.addClass('favorite-container-open');
+ favContainer.removeClass('favorite-container');
+ $('#imgFavoriteArrow').attr('src', '/images/arrow-up.png');
+ favDropDown.show(1);
+ }
+ });
+ // End -->
+ </script>
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2020240-1']);
+ _gaq.push(['_trackPageview']);
+ (function () {
+ var ga = document.createElement('script');
+ ga.src = ('https:' == document.location.protocol ?
+ 'https://ssl' : 'http://www') +
+ '.google-analytics.com/ga.js';
+ ga.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(ga);
+ })();
+ $(function () {
+ $("a.language").click(function (e) {
+ e.preventDefault();
+ window.location.replace(window.location.href + (window.location.search.indexOf("?") == -1 ? "?" : "&") + "lang=" + $(this).attr("lang"));
+ });
+ });
+ </script>
+
+
+ <!-- Quantcast Tag -->
+ <div id="Quantcast">
+ <script type="text/javascript">
+ var _qevents = _qevents || [];
+
+ (function () {
+ var elem = document.createElement('script');
+
+ elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";
+ elem.async = true;
+ elem.type = "text/javascript";
+ var scpt = document.getElementsByTagName('script')[0];
+ scpt.parentNode.insertBefore(elem, scpt);
+ })();
+ </script>
+ <script type="text/javascript">
+ _qevents.push({ qacct: "p-f6VPrfmR4cujU" });
+ </script>
+ <noscript>
+ <div style="display: none;">
+ <img src="http://pixel.quantserve.com/pixel/p-f6VPrfmR4cujU.gif" height="1" width="1"
+ alt="Quantcast" /></div>
+ </noscript>
+ </div>
+ <!-- End Quantcast tag -->
+
+ <!-- Server: WEB03; Build: Web.HotFix_20121211.1 -->
+</body>
+</html>
diff --git a/tests/res/raw/gc431f2_published.html b/tests/res/raw/gc431f2_published.html new file mode 100644 index 0000000..869c0f8 --- /dev/null +++ b/tests/res/raw/gc431f2_published.html @@ -0,0 +1,2248 @@ +
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head id="ctl00_Head1"><meta charset="utf-8" />
+ <!--[if IE]><![endif]-->
+ <title>
+ GC431F2 Needle in a Haystack (Unknown Cache) in California, United States created by The North Star
+</title><meta name="DC.title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta name="author" content="Groundspeak, Inc." /><meta name="DC.creator" content="Groundspeak, Inc." /><meta name="Copyright" content="Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved." /><!-- Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved. --><meta name="description" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world." /><meta name="DC.subject" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world." /><meta http-equiv="imagetoolbar" content="no" /><meta name="distribution" content="global" /><meta name="MSSmartTagsPreventParsing" content="true" /><meta name="rating" content="general" /><meta name="revisit-after" content="1 days" /><meta name="robots" content="all" /><meta http-equiv="X-UA-Compatible" content="IE=8" /><link rel="icon" href="/favicon.ico" /><link rel="shortcut icon" href="/favicon.ico" /><link rel="apple-touch-icon" href="/apple-touch-icon.png" /><link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/src/reset.css" /><link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/src/typography.css" /><link rel="stylesheet" type="text/css" media="screen,projection" href="../css/blueprint/src/grid.css" />
+ <!--[if lt IE 8]>
+ <link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/ie.css" />
+ <![endif]-->
+ <link id="uxCssMaster" rel="stylesheet" type="text/css" media="screen,projection" href="../css/tlnMasterScreen.css?r=1" /><link id="uxCssMain" rel="stylesheet" type="text/css" media="all" href="../css/tlnMain.css?r=1" /><link rel="Stylesheet" type="text/css" media="all" href="../css/jqueryui1810/jquery-ui-1.8.10.custom.css" /><link rel="stylesheet" type="text/css" media="all" href="/js/jquery_plugins/jquery.jgrowl.css" /><link rel="stylesheet" type="text/css" media="print" href="../css/tlnMasterPrint.css" />
+ <script type="text/javascript" src="/js/modernizr-1.7.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="/js/jquery.truncate.min.js"></script>
+
+
+
+ <link href="/css/fancybox/jquery.fancybox.css" rel="stylesheet" type="text/css" />
+ <link href="/js/jquery_plugins/icalendar/jquery.icalendar.css" rel="stylesheet" type="text/css" />
+ <link href="/js/jquery_plugins/tipTip/tipTip.css" rel="stylesheet" type="text/css" />
+ <link href="/js/jquery_plugins/qtip/jquery.qtip.css" rel="stylesheet" type="text/css" />
+ <!--[if lte IE 8]>
+ <style type="text/css" media="all">
+ legend{
+ position: absolute;
+ top: -.6em;
+ left: 1em;
+ line-height: 1.3;
+ }
+ fieldset p{
+ margin-top:1em;
+ }
+ img.CacheNoteHelpImg{
+ top:-.2em;
+ }
+ </style>
+ <![endif]-->
+ <style type="text/css" media="screen,projection">
+ #otherSearchOptions li
+ {
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ }
+ .ff
+ {
+ font-family: "Andale Mono" , "Courier New" ,Courier,monospace;
+ }
+ .fr
+ {
+ margin-top: 1.5em;
+ float: right;
+ }
+ .fl
+ {
+ float: left;
+ }
+ .clsCell
+ {
+ border: 1px solid #c0cee3;
+ font-size: 80%;
+ background-color: #fff;
+ }
+ .clsResultTitle, .clsResultTitleNoBold
+ {
+ color: #0000de;
+ }
+ .clsResultDescription
+ {
+ color: #333;
+ }
+ .clsURL
+ {
+ color: #999;
+ }
+ a.title:link, a.title:visited, a.title:hover, a.title:active
+ {
+ color: #000;
+ text-decoration: underline;
+ }
+ a.title
+ {
+ text-align: right;
+ font-size: 10px;
+ font-family: arial,sans-serif;
+ padding: 0 1px 0 0;
+ }
+ #mapSizePager a:hover
+ {
+ font-weight: bold;
+ }
+ #mapSizePager ul
+ {
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+ #mapSizePager li
+ {
+ float: left;
+ list-style: none;
+ }
+ #mapSizePager li a
+ {
+ font-family: verdana,sans-serif;
+ font-size: x-small;
+ display: block;
+ margin: 0 2px 0 0;
+ padding: 4px;
+ text-decoration: none;
+ border: solid 1px #c0c0c0;
+ height: 10px;
+ min-width: 10px;
+ cursor: pointer;
+ }
+ #mapPrintingNotes
+ {
+ width: 280px;
+ text-align: left;
+ overflow: auto;
+ }
+ .inplace_field {
+ width:100%;
+ resize: none;
+ }
+ legend.note{
+ background:url('../images/icons/16/user_note.png') no-repeat 0 0;
+ padding-left:18px;
+ }
+ legend.warning{
+ background:url('../images/icons/16/take_note.png') no-repeat 0 0;
+ padding-left:18px;
+ }
+ fieldset.CacheNote{
+ border-color: #e9a24c !important;
+ background-color:#ffffde;
+ position:relative;
+ }
+ .CacheNoteHelpImg{
+ position:relative;
+ cursor:pointer;
+ top:-1em;
+ right:-.75em;
+ float:right;
+ }
+ .InformationWidget h3{
+ margin-bottom:.5em;
+ }
+ .InformationWidget .AlignRight{
+ font-size:.8em;
+ }
+ #tiptip_content{
+ *background-color:#000;
+ box-shadow:none;
+ }
+ .maxed{
+ color:#992a2a;
+ }
+
+
+ span.ccu-parseverify-distance img{
+ text-align:center !important;
+ vertical-align:text-bottom !important;
+ }
+ .edit-cache-coordinates{
+ text-decoration: none;
+ color: #000 !important;
+ background: url(/images/icons/16/edit.png) no-repeat right 0;
+ padding:2px 20px 2px 0px;
+ margin-right:4px;
+ }
+ .ccc-coord{
+ cursor: text;
+ font-family: Courier New, Sans-Serif;
+ }
+ .ccu-update dl {
+ margin-bottom:.25em;
+ }
+ .ccu-update dt{
+ float:left;
+ min-width:90px;
+ }
+ .ccu-update .ui-button-text-only .ui-button-text{
+ padding:.3em .75em;
+ }
+ .ccu-parseverify-coords{
+ font-style:italic;
+ margin-right:.25em;
+ }
+ .ccu-parseverify-accept, .ccu-parseverify-cancel{
+ margin-top:-5px;
+ }
+ .ui-tooltip-widget .ui-tooltip-content{
+ border-width:1px;
+ background-color:#fff;
+ border-color:#c0cee3;
+ color:#594a42;
+ padding:1em;
+ width:420px;
+ }
+ .myLatLon {
+ border-bottom:2px solid #c0cee3;
+ font-style:italic;
+ }
+ .leaflet-control-attribution{
+ padding:3px !important;
+ }
+ .leaflet-control-attribution img{
+ vertical-align:middle;
+ }
+ </style>
+ <link rel="Stylesheet" type="text/css" media="screen" href="/hide/css/CSPScreen.css" />
+ <link rel="stylesheet" type="text/css" media="all" href="/js/leaflet/v5/leaflet.css" />
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" media="all" href="/js/leaflet/v5/leaflet.ie.css" />
+ <![endif]-->
+ <script type="text/javascript" language="javascript" src="/js/leaflet/v5/leaflet.js"></script>
+ <script type="text/javascript" src="/js/jquery.pagemethods.js"></script>
+ <script type="text/javascript" src="/js/geometa.js"></script>
+ <script type="text/javascript">
+ var userToken = null,
+ urlParams = {},
+ mapLatLng = null,
+ cmapAdditionalWaypoints = [],
+ initalLogs = null, totalLogs = 0, includeAvatars = false;
+
+ (function () {
+ var e,
+ d = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); },
+ q = window.location.search.substring(1),
+ r = /([^&=]+)=?([^&]*)/g;
+
+ while (e = r.exec(q)) {
+ urlParams[d(e[1])] = d(e[2]);
+ }
+ })();
+ </script>
+<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?wp=GC431F2&Submit6=Go" property="og:url" /><meta name="og:description" content="Solve the mystery and then use a smartphone or GPS device to navigate to the solution coordinates. Look for a other hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 1.5 and difficulty is 3 (out of 5)." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/8.png" property="og:image" /><meta name="og:title" content="Needle in a Haystack" property="og:title" /><meta name="description" content="Needle in a Haystack (GC431F2) was created by The North Star on 12/21/2012. It's a Other size geocache, with difficulty of 3, terrain of 1.5. It's located in California, United States. The cache is not at the posted coordinates but is less than 2 miles awayCache is Unpublished is a little like looking for a Needle in a Haystack. The “Needle” should be easier to find in this Haystack.Cache is "sign" only." /></head>
+<body background="http://outplacing.com/files/2010/05/needle-in-a-haystack.jpg" class="CacheDetailsPage">
+ <form name="aspnetForm" method="post" action="cache_details.aspx?wp=GC431F2&Submit6=Go" onsubmit="javascript:return WebForm_OnSubmit();" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_btnSignIn')" id="aspnetForm">
+<div>
+<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
+<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
+<input type="hidden" name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT" value="2" />
+<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc1MjcwNzgxNg8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzMzNzM3NjUWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhoPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIbDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCIA8WAh4HVmlzaWJsZWhkAgEPZBYSAgUPFgIfAWRkAgcPFgIfA2cWAgIdDw8WAh4LUG9zdEJhY2tVcmwFbmh0dHBzOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2xvZ2luL2RlZmF1bHQuYXNweD9yZWRpcj0lMmZzZWVrJTJmY2FjaGVfZGV0YWlscy5hc3B4JTNmd3AlM2RHQzQzMUYyJTI2U3VibWl0NiUzZEdvZGQCCA9kFgICBQ8PFgIeC05hdmlnYXRlVXJsBZUBaHR0cHM6Ly93d3cuZ2VvY2FjaGluZy5jb20vbG9naW4vZGVmYXVsdC5hc3B4P1JFU0VUPVkmcmVkaXI9aHR0cCUzYSUyZiUyZnd3dy5nZW9jYWNoaW5nLmNvbSUyZnNlZWslMmZjYWNoZV9kZXRhaWxzLmFzcHglM2Z3cCUzZEdDNDMxRjIlMjZTdWJtaXQ2JTNkR29kZAIMDxYCHwNnZAIsD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIeC18hSXRlbUNvdW50AhAWIGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAggPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8JaGRkAgkPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAgoPZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCCw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAgwPZBYCAgEPDxYIHwcFBW5iLU5PHwgFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfCWhkZAIND2QWAgIBDw8WCB8HBQVrby1LUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8JaGRkAg4PZBYCAgEPDxYIHwcFBWh1LUhVHwgFDVNldFRlbXBMb2NhbGUfAQUGTWFneWFyHwloZGQCDw9kFgICAQ8PFggfBwUFcm8tUk8fCAUNU2V0VGVtcExvY2FsZR8BBQhSb23Dom7Egx8JaGRkAi4PZBYCAgMPFgIfA2hkAi8PFgIeBWNsYXNzBQxzcGFuLTI0IGxhc3QWAgIBD2QWLgIBD2QWAmYPZBYCAgEPDxYCHwEFB0dDNDMxRjJkZAICDxYCHwEFngE8YSBocmVmPSIvYWJvdXQvY2FjaGVfdHlwZXMuYXNweCIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJBYm91dCBDYWNoZSBUeXBlcyI+PGltZyBzcmM9Ii9pbWFnZXMvV3B0VHlwZXMvOC5naWYiIGFsdD0iVW5rbm93biBDYWNoZSIgdGl0bGU9IlVua25vd24gQ2FjaGUiIC8+PC9hPmQCBg9kFgQCAQ8WAh8DZ2QCBg8WAh8DaGQCBw8WAh8BBRxJbiBDYWxpZm9ybmlhLCBVbml0ZWQgU3RhdGVzZAILDxYCHwNoZAIMDxYCHwNnZAINDw8WAh8DaGRkAhAPFgIfA2gWAgIBDxYCHwEFgwJZb3UgbXVzdCBiZSA8YSBocmVmPSJodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi8/UkVTRVQ9WSZyZWRpcj1odHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3NlZWsvY2FjaGVfZGV0YWlscy5hc3B4P3dwPUdDNDMxRjImU3VibWl0Nj1HbyIgdGl0bGU9IkxvZyBJbiI+bG9nZ2VkIGluPC9hPiB3aXRoIGEgR2VvY2FjaGluZy5jb20gYWNjb3VudCB0byB2aWV3IHRoZSBzcGVjaWZpYyBsb2NhdGlvbiBvZiB0aGlzIGdlb2NhY2hlLiBJdCdzIGZyZWUhZAIRDxYCHwNoZAISDxYCHwNoFg4CAw8WAh4Fc3R5bGUFDWRpc3BsYXk6bm9uZTsWAgIBDxYCHwFlZAINDw8WBB8FBTNjZHBmLmFzcHg/Z3VpZD05OGU2ZjVhOS1jZjJkLTQyZjgtOWNkZi1hM2Y1MzQzNmYzODQfA2hkZAIPDw8WAh8FBThjZHBmLmFzcHg/Z3VpZD05OGU2ZjVhOS1jZjJkLTQyZjgtOWNkZi1hM2Y1MzQzNmYzODQmbGM9NWRkAhEPDxYCHwUFOWNkcGYuYXNweD9ndWlkPTk4ZTZmNWE5LWNmMmQtNDJmOC05Y2RmLWEzZjUzNDM2ZjM4NCZsYz0xMGRkAhMPDxYGHwUFW2h0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9mPWQmaGw9ZW4mc2FkZHI9JmRhZGRyPTM3LjM1OSwtMTIyLjAzMjI4MyhOZWVkbGUraW4rYStIYXlzdGFjaykeBlRhcmdldAUGX2JsYW5rHwNoZGQCFQ8WAh8DaGQCGw8WAh8DaBYEAgEPDxYGHglGb3JlQ29sb3IKTh4HRW5hYmxlZGgeBF8hU0ICBGRkAgMPDxYGHw0KTh8OaB8PAgRkZAIXD2QWCGYPFgIfA2hkAgEPDxYCHwNoZGQCAg8PFgIfA2hkZAIDDxYCHwNoZAIYD2QWAgIDDw8WAh8BBRNObyBoaW50cyBhdmFpbGFibGUuFgIeB29uY2xpY2sFDXJldHVybiBmYWxzZTtkAhkPFgIfA2hkAhwPFgIfA2hkAh0PDxYCHwNoZGQCHw8WAh8DaGQCIg9kFgICAQ9kFgQCAQ8PFgIfAQX/AzxpZnJhbWUgdHlwZT0iaWZyYW1lIiBzcmM9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUdldCZTaXRlSUQ9MSZYPScwZDFlZTAyY2RiZjM0OTgyODRiMGI0NGVmN2Q3YWVlZiciIHdpZHRoPSIxMjAiIGhlaWdodD0iMjQwIiBNYXJnaW53aWR0aD0iMCIgTWFyZ2luaGVpZ2h0PSIwIiBIc3BhY2U9IjAiIFZzcGFjZT0iMCIgRnJhbWVib3JkZXI9IjAiIFNjcm9sbGluZz0ibm8iIHN0eWxlPSJ3aWR0aDoxMjBweDtIZWlnaHQ6MjQwcHg7Ij48YSBocmVmPSJodHRwOi8vYWRzLmdyb3VuZHNwZWFrLmNvbS9hLmFzcHg/Wm9uZUlEPTkmVGFzaz1DbGljayY7TW9kZT1IVE1MJlNpdGVJRD0xIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUdldCZNb2RlPUhUTUwmU2l0ZUlEPTEiIHdpZHRoPSIxMjAiIGhlaWdodD0iMjQwIiBib3JkZXI9IjAiIGFsdD0iIiAvPjwvYT48L2lmcmFtZT5kZAIDDxYCHglpbm5lcmh0bWwFE0FkdmVydGlzaW5nIHdpdGggVXNkAiYPZBYEAgUPDxYCHwNnZGQCCQ8PFgIfBQU8fi90cmFjay9zZWFyY2guYXNweD93aWQ9OThlNmY1YTktY2YyZC00MmY4LTljZGYtYTNmNTM0MzZmMzg0ZGQCJw8PFgIfA2dkFgJmDxYCHwYCAhYEAgEPZBYEZg8VAwBXaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9OWZkMzlmYjgtOTUwMi00N2I0LWFlMDgtODZjZTIzNmZjNjYxG2Ztb3JhZXMmIzM5OyBzb2x2ZWQgYnV0IGZhcmQCAg8VAkxodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9NDQwY2Y2MWItZGNmMy00MjIwLWE4Nzct" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="Y2UzMTJmMTAzOTIxB2Ztb3JhZXNkAgIPZBYEZg8VAw5BbHRlcm5hdGluZ1Jvd1dodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD1kYTE5ZjUwMy04ZGYyLTRhMzYtYWE5OC01ZDQxNzlmNTg1NTAOU29sdmVkIFB1enpsZXNkAgIPFQJMaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTM3MWQzMTJlLWU4MjgtNGRhOC04MDIxLTY1MTQyMmE0NDYyMQZ3MDBmZWxkAikPZBYUAgEPDxYCHwNoZGQCBw8PFgIfA2hkZAIRDw8WAh8FBSMvc2Vlay9uZWFyZXN0LmFzcHg/dT1UaGUrTm9ydGgrU3RhcmRkAhUPDxYCHwUFJC9zZWVrL25lYXJlc3QuYXNweD91bD1UaGUrTm9ydGgrU3RhcmRkAhkPFgIfA2gWCgIDDw8WAh8FBVgvc2Vlay9uZWFyZXN0LmFzcHg/dHg9NDA4NjE4MjEtMTgzNS00ZTExLWI2NjYtOGQ0MTA2NGQwM2ZlJmxhdD0zNy4zNTkwMDAmbG5nPS0xMjIuMDMyMjgzZGQCBQ8PFgIfBQVcL3NlZWsvbmVhcmVzdC5hc3B4P3R4PTQwODYxODIxLTE4MzUtNGUxMS1iNjY2LThkNDEwNjRkMDNmZSZsYXQ9MzcuMzU5MDAwJmxuZz0tMTIyLjAzMjI4MyZmPTFkZAIJDw8WAh8FBTAvc2Vlay9uZWFyZXN0LmFzcHg/bGF0PTM3LjM1OTAwMCZsbmc9LTEyMi4wMzIyODNkZAILDw8WAh8FBTQvc2Vlay9uZWFyZXN0LmFzcHg/bGF0PTM3LjM1OTAwMCZsbmc9LTEyMi4wMzIyODMmZj0xZGQCDw8PFgIfBQVKaHR0cDovL3d3dy53YXltYXJraW5nLmNvbS9kaXJlY3RvcnkuYXNweD9mPTEmbGF0PTM3LjM1OTAwMCZsb249LTEyMi4wMzIyODNkZAIbDxYCHwNoZAIfDw8WAh8FBSIvcmV2aWV3cy9ob3RlbHMtaW4tU3Vubnl2YWxlLENBLFVTZGQCIQ8PFgIfA2hkZAIjDw8WAh8DaGRkAicPZBYIAgEPFgIfAQUPMiBMb2dnZWQgVmlzaXRzZAIHDw8WAh8FBUN+L3NlZWsvY2FjaGVfbG9nYm9vay5hc3B4P2d1aWQ9OThlNmY1YTktY2YyZC00MmY4LTljZGYtYTNmNTM0MzZmMzg0ZGQCCA8WAh8DaGQCCQ8PFgIfA2hkZAIqDxYCHwEFBHRydWVkAisPFgIfAQUebGF0PW51bGw7bG5nPW51bGw7Z3VpZD1udWxsOw0KZAIsDxYCHwEFdXRyeSB7IF9nYXEucHVzaChbJ190cmFja0V2ZW50JywgJ0dlb2NhY2hpbmcnLCAnQ2FjaGVEZXRhaWxzTWVtYmVyVHlwZScsICdOb3RTaWduZWRJbicsIG51bGwsIHRydWVdKTsgfSBjYXRjaChlcnIpIHsgfWQCMA8WAh8DaGQCMQ9kFgQCAw8WAh8BBQdFbmdsaXNoZAIFDxYCHwYCEBYgZg9kFgICAQ8PFggfBwUFZW4tVVMfCAUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHwloZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCA9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCCQ9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCCg9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAILD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCDA9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg0PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCDg9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIPD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCAw8WAh8BBStTZXJ2ZXI6IFdFQjAzOyBCdWlsZDogV2ViLkhvdEZpeF8yMDEyMTIxMS4xZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUSY3RsMDAkY2JSZW1lbWJlck1l4bXr81thZG2PoWxIqVZjMOUf7tU=" />
+</div>
+
+<script type="text/javascript">
+//<![CDATA[
+var theForm = document.forms['aspnetForm'];
+if (!theForm) {
+ theForm = document.aspnetForm;
+}
+function __doPostBack(eventTarget, eventArgument) {
+ if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
+ theForm.__EVENTTARGET.value = eventTarget;
+ theForm.__EVENTARGUMENT.value = eventArgument;
+ theForm.submit();
+ }
+}
+//]]>
+</script>
+
+
+<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634449413070371108" type="text/javascript"></script>
+
+
+<script src="/ScriptResource.axd?d=8q09cuy9-PZDS8eZx6HLVXd3YZywgUmuoy8VVtGr3vaISS8ybaBLyQLFlq93nr2dlYP0QJWcJvooQKkloTdALTrS571k1UcPpD2pbXbpthIOf2Mn8gCnpyvfv-ZudWTMi0y39YZC0-Q0yjjxQ82yTlKdhBw1&t=6df0ad7a" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=2610f696" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=2610f696" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=l5IqBBbOFPRmpVAJwxQpHQyZ16ITBnk7fYRIeFc1JaDh64igpOv-k92v3DpzWBikWWvRdoxgNXda9cdmIFt2Ryy2gD2Tv71tVdwVNB4i-d1_vwLdJifCsG55PNiibmPX-x1Vspbf6jGBVWDKxT4kuLr2vWh-XRcY7PiryWks0UgjSCXEHO05VytTmCI6A-IhnCg2kD_i3YytsXr36qf0k6q0vQ41" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=mw8CUwVrYP9IGhC7WIGT8qdlVInGzqviii3RV8GrEEiOV2Nqjk57cAorEy9ACR1-rU7I3CZphWXcx81x-LDKIItu7BGPceT7Q61MOAXhSyJyW2DF3crLIX0Xef7vI1s2RLsp2bf8Aazkh-w4559ltQCi1H8uzBcnORltR9bo05Oe5VlRs1WnFqxyOK9aLEH4pBXNx8Bhb2-oIOLExj6kkCQgF06_A6ksiNnQXuGaKfXh1LjjCyujVv1xsxL_muSivN4bS4R4JR4M2Z3WmsBSnQXzJkIKkQB7kOS3JYimpNQ7sw1_qOYPZVB0xYbSCGD-xptYnX3Q4DLGiBNW4mP5R1Xv0QiVlwA9uiMAy_mQKBalvK4YjYdSbW9T9WZdtn39cD799HNy--sDKm1hhlBWb8Dz1jgxR2B9glqCYkqQmk3DSoPhPx9eWxB5q9VFjw1Q4u3d0Rgu8lF3NszOnHmJ19E6XZOdbRPyOjljcqTy1MWgNSwFAV-E3kWUGiJ0QNel49k3VkdjBUTKhIqIdQ9wve0zAcvWgxHEaFuvXv92aYmJwFYFDbNPvkYfBRLakBbpHIzGs9e0xu5sbTAVijArOHlzTSMNx2jK2mdt8VSjThXQAkMSV5W0jY2I6tuqFunlegJeA9zrFE9HdfbBtj9gOSe3LQQNMG7NaUShNTYUbJ5eZbQ8g7O5gjKFbDylaSZqv0aXQu0Lgrn7EdKV3B0BMhNeG3pR32zEBX1T3hEAnDKiYVOX0" type="text/javascript"></script>
+<script src="js/cachedetails.js" type="text/javascript"></script>
+<script src="../js/latlng.js" type="text/javascript"></script>
+<script src="/WebResource.axd?d=Np8DmZmh2tcIkgE9SU7mE6n1BWbJ0opng-rHikqBjFQo0nbLYSeBBVhJhCHcmx1ihKnAnQv_ZhnItUUjENzIzc1uoXk1&t=634449413070371108" type="text/javascript"></script>
+<script type="text/javascript">
+//<![CDATA[
+function WebForm_OnSubmit() {
+if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
+return true;
+}
+//]]>
+</script>
+
+<div>
+
+ <input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="Q3QLAIGc3fycf1xcmR0oeYDSmxzti-0045OC6NZQvsE42Tm2u2QIX8zoZDBQxLovJ-hK6GtvJtlghgEFizixxK5opmWjeHAxzOpw_rZ8ZR8kHZBX0" />
+</div>
+ <script type="text/javascript">
+//<![CDATA[
+Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00');
+//]]>
+</script>
+
+ <div id="Top" class="SkipLinks">
+
+ <a id="ctl00_hlSkipLinksNavigation" accesskey="n" title="Skip to Navigation" href="#Navigation">Skip to Navigation</a>
+ <a id="ctl00_hlSkipLinksContent" accesskey="c" title="Skip to Content" href="#Content">Skip to Content</a>
+
+ </div>
+
+ <!--[if lte IE 6]>
+ <div class="WarningMessage PhaseOut">
+
+ <p>Groundspeak is phasing out support for older browsers. Visit the <a href="http://support.groundspeak.com/index.php?pg=kb.page&id=215" title="Browser Support Information">Help Center</a> for more information.</p>
+
+ </div>
+ <![endif]-->
+
+
+
+ <div class="PrintOnly">
+
+ <p>
+ <img src="/images/logo_print_bw.png" alt="Geocaching.com" /></p>
+ <hr />
+
+ </div>
+
+ <header>
+
+ <div class="container">
+
+ <h1 class="Logo span-16">
+ <a href="../" id="ctl00_HDHomeLink" title="Geocaching" accesskey="h">Geocaching</a></h1>
+ <div class="ProfileWidget span-8 last">
+
+ <div id="ctl00_divNotSignedIn" class="FloatContainer">
+
+ <p class="NotSignedInText"><strong>Welcome, Visitor!</strong><br /></p>
+ <p class="LoginWithFacebook">
+ <a id="ctl00_uxSignIn" title="Login with Facebook" class="btnFacebookLogin NoWrap" href="javascript:__doPostBack('ctl00$uxSignIn','')"><span>Login with Facebook</span></a></p>
+ <p class="NotSignedInLinks clear">
+ <a id="hlSignIn" accesskey="s" title="Sign In" class="SignInLink" href="/login/">Sign In</a> | <a id="ctl00_hlRegister" accesskey="r" title="Sign Up" href="../membership/register.aspx?type=basic">Sign Up</a></p>
+ <div id="SignInWidget">
+
+ <h3>Sign In with Geocaching</h3>
+ <div id="ctl00_vsSignInWidgetForm" class="FormSummaryWidget FormErrorWidget InputWidth" style="color:Red;display:none;">
+
+</div>
+ <p>
+ <label for="ctl00_tbUsername" id="ctl00_lblUsername" title="Geocaching Username">Geocaching Username:</label><br />
+ <input name="ctl00$tbUsername" type="text" id="ctl00_tbUsername" class="text" autocomplete="off" />
+ <span id="ctl00_rfvUsername" title="Username is a required field; please enter a valid username." style="color:Red;display:none;"><span class="FormIcon FormValidationIcon">*</span></span>
+ </p>
+ <p>
+ <label for="ctl00_tbPassword" id="ctl00_lblPassword" title="Geocaching Password">Geocaching Password:</label><br />
+ <input name="ctl00$tbPassword" type="password" id="ctl00_tbPassword" class="text" autocomplete="off" />
+ <span id="ctl00_rfvPassword" title="Password is a required field; please enter a valid password." style="color:Red;display:none;"><span class="FormIcon FormValidationIcon">*</span></span>
+ </p>
+ <p>
+ <span class="Checkbox" title="Keep Me Signed In" autocomplete="off"><input id="ctl00_cbRememberMe" type="checkbox" name="ctl00$cbRememberMe" /><label for="ctl00_cbRememberMe">Keep Me Signed In</label></span><br />
+ <small>
+ Uncheck if on a shared computer.</small>
+ </p>
+ <p>
+ <input type="submit" name="ctl00$btnSignIn" value="Sign In" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$btnSignIn", "", true, "SignInForm", "https://www.geocaching.com/login/default.aspx?redir=%2fseek%2fcache_details.aspx%3fwp%3dGC431F2%26Submit6%3dGo", false, false))" id="ctl00_btnSignIn" title="Sign In" />
+ or
+ <a id="ctl00_hlSignInClose" title="Close this Window" class="SignInCloseLink" href="javascript:void(0);">Close</a></p>
+ <p>
+ <small>
+ <a id="ctl00_hlForgot" title="Forgot your username or password?" href="../login/password.aspx">Forgot your username or password?</a></small></p>
+
+ </div>
+
+
+ </div>
+
+
+
+
+ </div>
+
+ <div class="NavContainer span-24 last">
+ <nav id="Navigation">
+
+ <ul class="Menu">
+ <li>
+ <a id="ctl00_hlNavLearn" accesskey="1" title="Learn" href="../guide/">Learn ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavGeocaching101" accesskey="i" title="Geocaching 101" href="../guide/">Geocaching 101</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGeocaching2Minutes" title="Geocaching in 2 Minutes" href="../videos/#cat=cat:newbies&vid=-4VFeYZTTYs">Geocaching in 2 Minutes</a></li>
+ </ul>
+ </li>
+ <li id="ctl00_liNavJoin">
+ <a id="ctl00_hlNavJoin" accesskey="2" title="Join" href="../membership/register.aspx?type=basic">Join</a></li>
+
+ <li>
+ <a id="ctl00_hlNavPlay" accesskey="3" title="Play" href="./">Play ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavHide" accesskey="d" title="Hide & Seek a Cache" href="./">Hide & Seek a Cache</a></li>
+ <li>
+ </li>
+ <li><a id="ctl00_hlSubNavMap" accesskey="/" title="View Geocache Map" href="../map/">View Geocache Map</a></li>
+ <li>
+ <a id="ctl00_hlSubNavTrackables" accesskey="e" title="Find Trackables" href="../track/">Find Trackables</a></li>
+ <li>
+ <a id="ctl00_hlSubNavHelpCenter" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavCommunity" accesskey="6" title="Community" href="../forums/">Community ▼</a>
+ <ul class="SubMenu">
+
+ <li>
+ <a id="ctl00_hlSubNavTellaFriend" accesskey="-" title="Tell a Friend" href="../account/SendReferral.aspx">Tell a Friend</a></li>
+
+ <li><a id="ctl00_hlSubNavVolunteers" accesskey="+" title="Volunteers" href="../volunteers/">Volunteers</a></li>
+ <li>
+ <a id="ctl00_hlSubNavLocal" accesskey="z" title="Local Organizations" href="../organizations/">Local Organizations</a></li>
+ <li>
+ <a id="ctl00_hlSubNavDiscussionForums" accesskey="f" title="Discussion Forums" href="../forums/">Discussion Forums</a></li>
+ <li>
+ <a id="ctl00_hlSubNavBlog" accesskey="b" title="Blog" rel="external" href="http://blog.geocaching.com/">Blog</a></li>
+ <li>
+ <a id="ctl00_hlSubNavEvents" accesskey="v" title="Events" href="../calendar/">Events</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavShop" accesskey="4" title="Shop" href="http://shop.geocaching.com/">Shop ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavShop" accesskey="j" title="Shop Geocaching" rel="external" href="http://shop.geocaching.com/">Shop Geocaching</a></li>
+ <li>
+ <a id="ctl00_hlSubNavIntlRetailers" title="International Retailers" rel="external" href="http://shop.geocaching.com/default/international-retailers/">International Retailers</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGPSReviews" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGPSGuide" accesskey="k" title="Guide to Buying a GPS Device" href="../about/buying.aspx">Guide to Buying a GPS Device</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavPartnering" accesskey="5" title="Partnering" href="../travel/">Partnering ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavTravel" title="Travel and GeoTourism" href="../travel/">Travel and GeoTourism</a></li>
+ <li>
+ <a id="ctl00_hlSubNavBrandedPromotions" title="Branded Promotions" href="../brandedpromotions/">Branded Promotions</a></li>
+ <li>
+ <a id="ctl00_hlSubNavEducation" title="Geocaching and Education" href="../education/">Geocaching and Education</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAdvertisingWithUs" title="Advertising with Us" href="../about/advertising.aspx">Advertising with Us</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAPIProgram" title="API Program" href="../live/apidevelopers/">API Program</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavVideos" accesskey="7" title="Videos" href="../videos/">Videos</a></li>
+ <li>
+ <a id="ctl00_hlNavFollowUs" title="Follow Us" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Follow Us ▼</a>
+ <ul class="SubMenu NavSocialMedia">
+ <li>
+ <a id="ctl00_hlSubNavFacebook" title="Facebook" class="SubNavFacebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Facebook</a></li>
+ <li>
+ <a id="ctl00_hlSubNavTwitter" title="Twitter" class="SubNavTwitter" href="http://twitter.com/GoGeocaching">Twitter</a></li>
+ <li>
+ <a id="ctl00_hlSubNavFlickr" title="Flickr" class="SubNavFlickr" href="http://www.flickr.com/photos/geocaching_com/">Flickr</a></li>
+ <li>
+ <a id="ctl00_hlSubNavYouTube" title="YouTube" class="SubNavYouTube" href="http://www.youtube.com/user/GoGeocaching">YouTube</a></li>
+ </ul>
+ </li>
+ </ul>
+
+ </nav>
+ <div class="LanguageSelector">
+
+
+<div class="LocaleText">
+
+ <strong>Choose Your Language:</strong>
+
+</div>
+<div class="LocaleList">
+
+ <div class="selected-language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul class="language-list">
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+ jQuery(".selected-language a").click(function (e) {
+ e.preventDefault();
+ var $loc = jQuery(this).parent().next();
+ jQuery($loc).show().position({
+ of: $loc.parent(),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 0",
+ collision: "fit fit"
+ });
+ jQuery(this).addClass("Expanded");
+ jQuery(document).click(function () {
+ jQuery(".language-list").fadeOut("fast");
+ jQuery(".selected-language a").removeClass("Expanded");
+ });
+ return false;
+ });
+ });
+</script>
+ </div>
+ </div>
+
+
+ </div>
+
+
+ </header>
+ <section id="Content">
+
+
+ <div class="container">
+
+ <div id="ctl00_divBreadcrumbs" class="BreadcrumbWidget span-24 last">
+
+ <p>
+ <span id="ctl00_Breadcrumbs"><span><a title="Geocaching - The Official Global GPS Cache Hunt Site" href="/">Geocaching</a></span><span> > </span><span><a title="Hide and Seek A Geocache" href="/seek/default.aspx">Hide and Seek A Geocache</a></span><span> > </span><span>Geocache Details</span></span>
+ </p>
+
+
+ </div>
+
+ <div id="ctl00_divContentMain" class="span-24 last">
+
+
+
+
+ <div id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoLinkPanel" class="CoordInfoLinkWidget">
+
+ <p>
+ <a href="#" class="CoordInfoLink">
+ <span id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode" class="CoordInfoCode">GC431F2</span>
+ <span class="arrow">▼</span> </a>
+ </p>
+
+</div>
+<div id="dlgClipboard">
+ <input type="text" class="TextFormat" />
+ <a href="#" onclick="$('#dlgClipboard').hide();return false;" title="Close" class="Close">
+ x</a>
+</div>
+<script type="text/javascript">
+ $("a.CoordInfoLink").click(function (e) {
+ e.preventDefault();
+
+ $("#dlgClipboard")
+ .show()
+ .position({
+ of: $("a.CoordInfoLink"),
+ my: "right top",
+ at: "right bottom",
+ offset: "0 5"
+ })
+ .find("input")
+ .val('http://coord.info/' + $('.CoordInfoCode').text())
+ .focus()
+ .select();
+
+ $(document).mouseup(function (e) {
+ if ($(e.target).parent("div#dlgClipboard").length == 0) {
+ $(this).unbind(e);
+ $("div#dlgClipboard").hide();
+ }
+ });
+
+ return false;
+ });
+
+
+</script>
+
+ <div class="span-17">
+
+ <div class="span-17 last BottomSpacing" id="cacheDetails">
+ <p class="cacheImage">
+ <a href="/about/cache_types.aspx" target="_blank" title="About Cache Types"><img src="/images/WptTypes/8.gif" alt="Unknown Cache" title="Unknown Cache" /></a>
+ </p>
+
+ <h2 class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_CacheName">Needle in a Haystack</span></h2>
+ <div class="minorCacheDetails Clear">
+ <div id="ctl00_ContentBody_mcd1">
+ A cache by <a href="http://www.geocaching.com/profile/?guid=f3d7b7c8-8698-4e21-a6ad-24e148f5c6a5&wid=98e6f5a9-cf2d-42f8-9cdf-a3f53436f384&ds=2">The North Star</a></div>
+ <div id="ctl00_ContentBody_mcd2">
+ Hidden:
+ 12/21/2012
+
+ </div>
+ <div>In California, United States</div>
+ </div>
+ </div>
+ <div id="ctl00_ContentBody_diffTerr" class="CacheStarLabels span-3 BottomSpacing">
+
+ Difficulty:
+ <br />
+ Terrain:
+
+ </div>
+
+ <div id="ctl00_ContentBody_diffTerrStars" class="CacheStarImgs span-2">
+
+ <span id="ctl00_ContentBody_uxLegendScale" title="(1 is easiest, 5 is hardest)"><img src="http://www.geocaching.com/images/stars/stars3.gif" alt="3 out of 5" /></span>
+ <span id="ctl00_ContentBody_Localize12" title="(1 is easiest, 5 is hardest)"><img src="http://www.geocaching.com/images/stars/stars1_5.gif" alt="1.5 out of 5" /></span>
+
+ </div>
+
+ <div id="ctl00_ContentBody_size" class="CacheSize span-9">
+
+ <p style="text-align: center;">
+ Size: <span class="minorCacheDetails"><img src="/images/icons/container/other.gif" alt="Size: other" title="Size: other" /> <small>(other)</small></span></p>
+
+ </div>
+
+
+
+ <div class="span-3 right last">
+
+
+
+ </div>
+
+
+ <div id="lus_container" class="lus-container Clear">
+ <div class="lus-header">
+ <span>
+ Join now to view geocache location details. It's free!
+ </span>
+ <span class="lus-signup">
+ <a id="ctl00_ContentBody_locdSignUpLink" title="Sign up" href="/membership/register.aspx?type=basic">Sign up</a><a id="hlFBLogin" title="Log in with Facebook" class="btnFacebookLogin" href="/api/beginfacebook"><span id="ctl00_ContentBody_locFBLogin">Login</span></a>
+ </span>
+ </div>
+ <div style="position: relative;height:257px;">
+ <div class="lus-video">
+ <div class="lus-textblock">
+ <div class="play-control AlignCenter"><a id="ctl00_ContentBody_hlPlayArrow" title="Play Video">▶</a></div>
+ <h4>
+ Watch
+ </h4>
+ How Geocaching Works
+ </div>
+ </div>
+ <div class="lus-image">
+ <img src="/images/seek/locdp_cityscape.jpg" width="380" height="257" />
+ </div>
+ </div>
+ <div class="lus-footer">
+ <span class="AlignRight">
+ <span>Looking for a different adventure?</span>
+ </span>
+ <span class="lus-findacache NoWrap">
+ <input type="submit" name="ctl00$ContentBody$findacache" value="Find a Cache Near Me" id="findacache" title="Find a Cache Near Me" />
+ </span>
+ </div>
+ </div>
+ <script type="text/javascript">
+
+ $("#lus_container")
+ .on("click", "div.lus-video", function () {
+ var $this = $(this),
+ h = $this.height(),
+ w = $this.width();
+
+ $("div.lus-image").hide('slide', { direction: 'right' }, 500, function () {
+ var vhtml = ["<iframe width=\"" + w + "\" height=\"" + h + "\" src=\"http://www.youtube.com/embed/-4VFeYZTTYs?rel=0&autoplay=1\" frameborder=\"0\" allowfullscreen></iframe>"].join('');
+ $this.replaceWith(vhtml);
+ });
+ return false;
+ });
+
+ $("#findacache").click(function (e) {
+ e.preventDefault();
+ $("#txtFindCache").text("Searching...");
+
+ navigator.geolocation.getCurrentPosition(
+ function (position) { // Browser success
+ $(window.location).attr('href', '/seek/nearest.aspx?origin_lat=' + position.coords.latitude + '&origin_long=' + position.coords.longitude + '&dist=100');
+ }, function (error) { // Browser failure, fallback to geocode.
+ $.ajax({
+ url: '/api/geocode?cmd=whoami',
+ dataType: 'json',
+ async: false,
+ success: function (response) {
+ if (response.status == 'success') { // Geocode success
+ $(window.location).attr('href', '/seek/nearest.aspx?origin_lat=' + response.data.lat + '&origin_long=' + response.data.lng + '&dist=100');
+ } else { // Total failure, just go to the search page.
+ $(window.location).attr('href', '/seek/nearest.aspx');
+ }
+ }
+ });
+ },
+ {
+ timeout: 3000 // Wait on the browser for a max of 3 seconds.
+ });
+ return false;
+ });
+
+ // Geolocation emulator
+ (function (geolocation) {
+
+ if (geolocation) return;
+
+ var cache;
+
+ geolocation = window.navigator.geolocation = {};
+ geolocation.getCurrentPosition = function (callback) {
+
+ if (cache) callback(cache);
+
+ $.getScript('//www.google.com/jsapi', function () {
+
+ cache = {
+ coords: {
+ "latitude": google.loader.ClientLocation.latitude,
+ "longitude": google.loader.ClientLocation.longitude
+ }
+ };
+
+ callback(cache);
+ });
+
+ };
+
+ geolocation.watchPosition = geolocation.getCurrentPosition;
+ })(navigator.geolocation);
+
+
+ </script>
+
+ <p class="Clear">
+ </p>
+
+
+
+
+
+
+ <fieldset class="DisclaimerWidget">
+ <legend class="warning">
+ Please note
+ </legend>
+ <p class="NoBottomSpacing">
+ Use of geocaching.com services is subject to the terms and conditions <a href="/about/disclaimer.aspx" title="Read Our Disclaimer">in our disclaimer</a>.
+ </p>
+ </fieldset>
+
+
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_ShortDescription">
+</span>
+
+ </div>
+
+ <br />
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_LongDescription"><div class="Section1">
+<p><span style="font-size:10.0pt;font-family:Verdana;mso-bidi-font-family:Arial;color:red;">The cache is not at the posted coordinates but is less than 2 miles away</span></p>
+<p><span style="font-size:10.0pt;font-family:Verdana;mso-bidi-font-family:Arial;color:#333333;"><a href="http://coord.info/GC430FM" target="_blank" rel="nofollow">Cache is Unpublished</a> is a little like looking for a Needle in a Haystack. The “<b>Needle</b>” should be easier to find in this <a href="http://dl.dropbox.com/u/1930940/Haystack.zip" target="_blank" rel="nofollow">Haystack</a>.<br />
+<span style="font-size:10.0pt;font-family:Verdana;mso-bidi-font-family:Arial;color:#333333;"><br />
+Cache is "sign" only. Don't forget to bring your pen.<br />
+<br />
+Enjoy!<br />
+<br />
+You can validate your puzzle solution with <a href="http://certitude.comxa.com/certitude.php?wp=GC431F2">Certitude</a> or see <a href="http://certitude.comxa.com/certified.php?wp=GC431F2">who solved</a> this puzzle.<br />
+<br />
+Congratulations to <a href="http://www.geocaching.com/profile/?u=fmoraes" target="_blank" rel="nofollow">fmoraes</a> on FTS and <a href="http://www.geocaching.com/profile/?u=TeamOttlet" target="_blank" rel="nofollow">TeamOttlet</a> on FTF. That's two The North Star FTF's in a row!</span></span></p>
+</div></span>
+
+ </div>
+
+ <p>
+
+
+ </p>
+ <p id="ctl00_ContentBody_hints">
+ <strong>
+ Additional Hints</strong>
+ (<a id="ctl00_ContentBody_lnkDH" title="Decrypt" onclick="return false;" href="#">No hints available.</a>)</p>
+ <div id="div_hint" class="span-8 WrapFix">
+ </div>
+ <div id='dk' style="display: block;" class="span-9 last">
+ <span id="ctl00_ContentBody_EncryptionKey" class="right"></span>
+ </div>
+ <div class="Clear">
+ </div>
+
+ </div>
+
+
+ <div class="span-6 prepend-1 last">
+
+
+<div class="CacheDetailNavigationWidget NoPrint">
+
+ <h3 class="WidgetHeader">
+ Navigation
+ </h3>
+ <div class="WidgetBody">
+
+ <ul class="CacheDetailsNavLinks">
+ <li><a href="https://www.geocaching.com/login/?RESET=Y&redir=%2fseek%2flog.aspx%3fID%3d3373765" class="lnk"><img src="/images/icons/16/write_log_locked.png" /> <span>Log in to log your visit</span></a></li>
+<li><a href="https://www.geocaching.com/login/?RESET=Y&redir=%2fmy%2fwatchlist.aspx%3fw%3d3373765" class="lnk"><img src="/images/icons/16/watch_locked.png" /> <span>Log in to watch this listing</span></a></li>
+
+ </ul>
+
+ </div>
+
+
+</div>
+
+
+
+
+
+
+
+ <div id="ctl00_ContentBody_detailWidget" class="CacheDetailNavigationWidget TopSpacing BottomSpacing">
+
+ <h3 class="WidgetHeader">
+ Attributes</h3>
+ <div class="WidgetBody">
+ <img src="/images/attributes/bicycles-yes.gif" alt="bikes allowed" title="bikes allowed" width="30" height="30" /> <img src="/images/attributes/available-yes.gif" alt="available 24-7" title="available 24-7" width="30" height="30" /> <img src="/images/attributes/food-yes.gif" alt="food nearby" title="food nearby" width="30" height="30" /> <img src="/images/attributes/stealth-yes.gif" alt="stealth required" title="stealth required" width="30" height="30" /> <img src="/images/attributes/parking-yes.gif" alt="parking available" title="parking available" width="30" height="30" /> <img src="/images/attributes/onehour-yes.gif" alt="takes less than 1 hour" title="takes less than 1 hour" width="30" height="30" /> <img src="/images/attributes/kids-yes.gif" alt="kid friendly" title="kid friendly" width="30" height="30" /> <img src="/images/attributes/dogs-yes.gif" alt="dogs allowed" title="dogs allowed" width="30" height="30" /> <img src="/images/attributes/attribute-blank.gif" alt="blank" title="blank" width="30" height="30" /> <img src="/images/attributes/attribute-blank.gif" alt="blank" title="blank" width="30" height="30" /> <img src="/images/attributes/attribute-blank.gif" alt="blank" title="blank" width="30" height="30" /> <img src="/images/attributes/attribute-blank.gif" alt="blank" title="blank" width="30" height="30" /> <p class="NoBottomSpacing"><small><a href="/about/icons.aspx" title="What are Attributes?">What are Attributes?</a></small></p>
+ </div>
+
+ </div>
+
+
+ <div id="ctl00_ContentBody_uxBanManWidget" class="CacheDetailPageAds clear">
+
+ <div id="ctl00_ContentBody_divContentSide">
+
+ <p class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_ADModules_09"><iframe type="iframe" src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&SiteID=1&X='0d1ee02cdbf3498284b0b44ef7d7aeef'" width="120" height="240" Marginwidth="0" Marginheight="0" Hspace="0" Vspace="0" Frameborder="0" Scrolling="no" style="width:120px;Height:240px;"><a href="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Click&;Mode=HTML&SiteID=1" target="_blank"><img src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&Mode=HTML&SiteID=1" width="120" height="240" border="0" alt="" /></a></iframe></span>
+ </p>
+ <p class="AlignCenter">
+ <small><a href="../about/advertising.aspx" id="ctl00_ContentBody_advertisingWithUs" title="Advertising with Us">Advertising with Us</a></small></p>
+
+ </div>
+
+</div>
+
+
+
+ <div class="GoogleAds AlignCenter BottomSpacing">
+ </div>
+ <div class="clear">
+ </div>
+
+ <span id="ctl00_ContentBody_lnkTravelBugs"></span>
+
+
+<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">
+ <span id="ctl00_ContentBody_uxTravelBugList_uxInventoryLabel">Inventory</span>
+ </h3>
+ <div class="WidgetBody">
+
+
+ <div id="ctl00_ContentBody_uxTravelBugList_uxNoTrackableItems">
+
+ <p class="NoBottomSpacing"><span id="ctl00_ContentBody_uxTravelBugList_uxNoTrackableItemsLabel">There are no Trackables in this cache.</span></p>
+
+</div>
+ <div class="TopSpacing">
+
+ <p class="NoBottomSpacing"><a id="ctl00_ContentBody_uxTravelBugList_uxTrackableItemsHistory" href="../track/search.aspx?wid=98e6f5a9-cf2d-42f8-9cdf-a3f53436f384">View past Trackables</a></p>
+ <p class="NoBottomSpacing"><a id="ctl00_ContentBody_uxTravelBugList_uxWhatAreTrackables" title="What are Trackable Items?" href="../track/default.aspx">What are Trackable Items?</a></p>
+ </div>
+
+
+ </div>
+
+
+</div>
+
+
+<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">Bookmark Lists</h3>
+ <div class="WidgetBody">
+
+
+ <ul>
+
+ <li style='padding: .5em;' class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=9fd39fb8-9502-47b4-ae08-86ce236fc661">
+ fmoraes' solved but far</a><br />
+ <small><em>
+ by
+ <a href="http://www.geocaching.com/profile/?guid=440cf61b-dcf3-4220-a877-ce312f103921">
+ fmoraes</a> </em></small>
+ </li>
+
+ <li style='padding: .5em;' class='AlternatingRow'>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=da19f503-8df2-4a36-aa98-5d4179f58550">
+ Solved Puzzles</a><br />
+ <small><em>
+ by
+ <a href="http://www.geocaching.com/profile/?guid=371d312e-e828-4da8-8021-651422a44621">
+ w00fel</a> </em></small>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+ <a href="/bookmarks/default.aspx?guid=98e6f5a9-cf2d-42f8-9cdf-a3f53436f384&WptTypeID=8" title="View all bookmark lists...">View all bookmark lists...</a>
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
+
+
+ </div>
+
+
+ <div id="ctl00_ContentBody_bottomSection" class="span-24 last">
+
+ <p>
+
+ <br />
+
+
+ </p>
+
+
+
+ <p class="NoPrint">
+ <span id="ctl00_ContentBody_uxFindLinksHeader" style="font-weight:bold;">Find...</span>
+ <br />
+ <span id="ctl00_ContentBody_FindText"></span>
+ </p>
+ <ul class="NoPrint">
+ <li>
+ ...other caches
+ <a id="ctl00_ContentBody_uxFindLinksHiddenByThisUser" href="/seek/nearest.aspx?u=The+North+Star">hidden</a>
+ or
+ <a id="ctl00_ContentBody_uxFindLinksFoundByThisUser" href="/seek/nearest.aspx?ul=The+North+Star">found</a>
+ by this user
+ </li>
+
+
+ <li>
+ ...nearby <a id="ctl00_ContentBody_uxFindLinksHotels" href="/reviews/hotels-in-Sunnyvale,CA,US">Hotels</a>
+ </li>
+ </ul>
+ <p class="NoPrint">
+
+ </p>
+ <span class="NoPrint">
+
+ </span>
+ <p class="NoPrint">
+
+ </p>
+
+ <div class="InformationWidget Clear">
+ <h3>
+ 2 Logged Visits</h3>
+ <div class="EncryptDecrypt">
+ <a href="#" class="decrypt-link">
+ Decrypt
+ </a>
+ </div>
+ <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 1 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 1 </p></span>
+ <p class="HalfLeft">
+ <a id="ctl00_ContentBody_uxLogbookLink" href="cache_logbook.aspx?guid=98e6f5a9-cf2d-42f8-9cdf-a3f53436f384">View Logbook</a>
+ </p>
+ <p class="NoBottomSpacing AlignRight">
+ <span class="Warning">**Warning!</span> <a href="/about/glossary.aspx#spoiler" title="Spoilers">Spoilers</a> may be included in the descriptions or links.
+ </p>
+ </div>
+
+ <div id="cache_logs_container">
+ <table id="cache_logs_table" class="LogsTable NoBottomSpacing">
+ <tbody>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="AlignCenter">
+ <div id="pnlLazyLoad" style="display: none;">
+ <img src="/images/loading2.gif" class="StatusIcon" alt="Loading" />
+ Loading Cache Logs...
+ </div>
+ <div id="pnlButtonLoad" style="display: none;">
+ <a class="MobileButton">
+ Load More Logs...</a>
+ </div>
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+ </div>
+ <p>
+ <small>
+ Current Time: <time datetime="2012-12-21T10:52:24Z">12/21/2012 10:52:24 AM (UTC-08:00) Pacific Time (US & Canada) (6:52 PM GMT)</time><br/>Last Updated: <time class="timeago" datetime="2012-12-21T16:59:00Z">2012-12-21T16:59:00Z</time> on 12/21/2012 8:59:00 AM (UTC-08:00) Pacific Time (US & Canada) (4:59 PM GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
+ </small>
+ </p>
+
+
+ </div>
+ <script id="tmpl_CacheLogRow" type="text/x-jquery-tmpl">
+ <tr class="log-row" data-encoded="${IsEncoded}" >
+ <td>
+ <div class="FloatLeft LogDisplayLeft" >
+ <p class="logOwnerProfileName">
+ <strong><a id="143568283" href="/profile/?guid=${AccountGuid}">${UserName}</a></strong></p>
+ <p class="logOwnerBadge">
+ <img title="${creator.GroupTitle}" src="${creator.GroupImageUrl}">${creator.GroupTitle}
+ </p>
+ <p class="logOwnerAvatar">
+ <a href="/profile/?guid=${AccountGuid}">
+ {{if includeAvatars && AvatarImage}}
+ <img width="48" height="48" src="http://img.geocaching.com/user/avatar/${AvatarImage}">
+ {{else includeAvatars }}
+ <img width="48" height="48" src="/images/default_avatar.jpg">
+ {{/if}}
+ </a></p>
+ <p class="logOwnerStats">
+
+ {{if GeocacheFindCount > 0 }}
+ <img title="Caches Found" src="/images/icons/icon_smile.png"> ${GeocacheFindCount}
+ {{/if}}
+
+ </p>
+ </div>
+ <div class="FloatLeft LogDisplayRight">
+ <div class="HalfLeft LogType">
+ <strong>
+ <img title="${LogType}" alt="${LogType}" src="/images/logtypes/${LogTypeImage}"> ${LogType}</strong></div>
+ <div class="HalfRight AlignRight">
+ <span class="minorDetails LogDate">${Visited}</span></div>
+ <div class="Clear LogContent">
+ {{if LatLonString.length > 0}}
+ <strong>${LatLonString}</strong>
+ {{/if}}
+ <p class="LogText">{{html LogText}}</p>
+ {{if Images.length > 0}}
+ <table cellspacing="0" cellpadding="3" class="LogImagesTable">
+ {{tmpl(Images) "tmplCacheLogImages"}}
+ </table>
+ {{/if}}
+
+ <div class="AlignRight">
+ <small><a title="View Log" href="log.aspx?LUID=${LogGuid}" target="_blank">
+ {{if (userInfo.ID==AccountID)}}
+ View / Edit Log / Images
+ {{else}}
+ View Log
+ {{/if}}
+ </a></small>
+ {{if (userInfo.ID==AccountID)}}
+ <small><a title="Upload Image" href="upload.aspx?LID=${LogID}" target="_blank">Upload Image</a></small>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ </script>
+ <script id="tmpl_CacheLogImages" type="text/x-jquery-tmpl">
+ <tr>
+ <td>
+ <a class="tb_images lnk" rel="tb_images[grp${LogID}]" href="http://img.geocaching.com/cache/log/large/${FileName}" data-title="{{tmpl "tmplCacheLogImagesTitle"}}">
+ <img title="Photo" alt="Photo" src="/images/icons/16/photo.png">
+ <span>${ $('<div />').text($('<div />').html($item.data.Name).text()).html() }</span>
+ </a>
+ </td>
+ </tr>
+ </script>
+ <script id="tmpl_CacheLogImagesTitle" type="text/x-jquery-tmpl">
+ <span class="LogImgTitle"> ${ $('<div />').text($('<div />').text($('<div />').html($item.data.Name).text()).html()).html() } </span><span class="LogImgLink">
+
+ <a target="_blank" href="log.aspx?LUID=${$item.parent.parent.data.LogGuid}&IID=${ImageGuid}">View Log</a>
+
+ <a href="http://img.geocaching.com/cache/log/large/${FileName}">Print Picture</a></span>
+
+ {{if (Descr && Descr.length > 0) }}
+ <br /><p class="LogImgDescription">${ $('<div />').text($('<div />').text($('<div />').html($item.data.Descr).text()).html()).html() }</p>
+ {{/if}}
+ </script>
+ <script id="tmpl_CacheCoordinateUpdate" type="text/x-jquery-tmpl">
+ <div class="ccu-update" data-lat="${ll[0]}" data-lng="${ll[1]}">
+ <h4 class="BottomSpacing">Corrected Coordinates (hidden from others)</h4>
+ <dl>
+ <dt>Original:</dt>
+ <dd>${ll_formatted} <a href="#" class="ccu-restore">Restore</a></dd>
+ </dl>
+ <dl class="ccu-parse">
+ <dt>Change To:</dt>
+ <dd>
+ <input type="text" max="40" size="35" class="cc-parse-text">
+ <button class="ccu-button ccu-parse">Submit</button>
+ </dd>
+ </dl>
+ <dl class="ccu-parseverify" style="display:none;">
+ <dt>Change To:</dt>
+ <dd>
+ <span class="ccu-parseverify-coords">N 32°38.880′, W 097°23.755′</span>
+
+ <button class="ccu-button ccu-parseverify-accept">Accept</button> <button class="ccu-button ccu-parseverify-cancel">Cancel</button>
+ </dd>
+ </dl>
+ </div>
+ <div class="Clear"></div>
+
+ </script>
+
+ <script type="text/javascript">
+ <!--
+ var dh, lat, lng, guid;
+
+ dh = 'true';
+
+ lat=null;lng=null;guid=null;
+
+
+ function s2gps(guid) {
+ var w = window.open('sendtogps.aspx?guid=' + guid, 's2gps', config='width=450,height=450,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no');
+ w.focus();
+ }
+
+ function s2phone(wpid) {
+ window.location.href='sendtophone.aspx?gc=' + wpid;
+ }
+
+ function pl(lc) {
+ document.location.href='cache_details_print.aspx?guid=' + guid + '&numlogs=' + lc +'&pt=full<=letter&decrypt='+ ((dh)?'y':'n');
+ }
+ function setNotification(id) {
+ //new Effect.Highlight(id, {startcolor:'#ffffff', endcolor:'#ffff99', restorecolor:'#ffff99', duration:3.0, queue:'front'});
+ //new Effect.Highlight(id, {startcolor:'#ffff99', endcolor:'#ffffff', restorecolor:'#ffffff', duration:5.0, queue:'end'});
+ }
+ function cmo(id) {
+ //new Effect.Fade(id);
+ Cookie.set('sn', true);
+ }
+ function pp(img) {
+ var w = window.open(img);
+ w.focus();
+ }
+
+ //-->
+ </script>
+ <script language="javascript" type="text/javascript">
+ var map, bounds;
+ var canUpdateFavoriteStatus = true;
+ var decryptLogs = (urlParams["decrypt"] && urlParams["decrypt"] == "y") ? true : false;
+ var logInitialLoaded = false;
+ var $tfoot = $("#cache_logs_table").find("tfoot");
+ var currentPageIdx = 1, totalPages = 1, pageSize = 10;
+ var isBusy = false;
+
+ var locString = {
+ decrypt: 'Decrypt',
+ encrypt: 'Encrypt'
+ };
+
+ $("#tmpl_CacheLogImagesTitle").template("tmplCacheLogImagesTitle");
+ $("#tmpl_CacheLogImages").template("tmplCacheLogImages");
+ $("#tmpl_CacheLogRow").template("tmplCacheLogRow");
+
+ $(".EncryptDecrypt")
+ .button({ icons: { secondary: 'ui-icon-arrowreturnthick-1-w'} })
+ .click(function (e) {
+ e.preventDefault();
+ $("tr.log-row").each(function (i, obj) {
+ var $obj = $(obj);
+ if ($obj.data("encoded") == true) {
+ var lt = $obj.find("p.LogText");
+ //var ltDecoded = $('<div />').html(lt.html()).text();
+ lt.html(convertROTStringWithBrackets(lt.html()));
+ }
+ });
+
+ decryptLogs = !decryptLogs;
+
+ $("a.decrypt-link").html(decryptLogs ? locString.encrypt : locString.decrypt);
+
+ return false;
+ });
+
+ function appendNewLogs(obj) {
+
+ totalPages = obj.pageInfo.totalPages;
+
+ var $newBody = $(document.createElement("TBODY"));
+
+ $("#tmpl_CacheLogRow").tmpl(obj.data,{ includeAvatars: includeAvatars }).appendTo($newBody);
+
+ $newBody.find("a.tb_images").each(function()
+ {
+ var $this = $(this);
+ $this.fancybox({
+ 'type': 'image',
+ 'titlePosition': 'inside',
+ 'padding': 10,
+ titleFormat: function() { return $this.data('title'); }
+ });
+ });
+
+ $("#cache_logs_table")
+ .append($newBody.children());
+
+ currentPageIdx = obj.pageInfo.idx + 1;
+ pageSize = obj.pageInfo.size;
+ }
+
+ function callLogLoad(hideFooter) {
+ $.getJSON("/seek/geocache.logbook", { tkn: userToken, idx: currentPageIdx, num: pageSize, decrypt: decryptLogs },
+ function (response) {
+ if (response.status == "success") {
+ appendNewLogs(response);
+ if( hideFooter || (totalPages < currentPageIdx) ) {
+ $tfoot.hide();
+ }
+ } else if (response.status == "error" && response.value == "1") {
+ // reload the page since the data had expired.
+ window.location.reload();
+ }
+ isBusy = false;
+ });
+ }
+
+ $("#add_to_favorites").click(function () {
+
+ if (canUpdateFavoriteStatus) {
+ canUpdateFavoriteStatus = false;
+
+ var fv = parseInt($(".favorite-value").text());
+ fv++;
+ $(".favorite-value").text(fv);
+
+ var fr = parseInt($(".favorite-rank").text());
+ fr--;
+ $(".favorite-rank").text(fr);
+
+ $("#pnlNonfavoriteCache").fadeOut("fast", function () {
+ $("#pnlFavoriteCache").fadeIn("fast");
+ });
+
+ $.ajax({
+ type: "POST",
+ cache: false,
+ url: '/datastore/favorites.svc/update?u=' + userToken + '&f=true',
+ success: function () {
+ canUpdateFavoriteStatus = true;
+ gotScore = false;
+ showFavoriteScore();
+ }
+ });
+
+ return false;
+ }
+ });
+
+ $("#remove_from_favorites").click(function () {
+
+ if (canUpdateFavoriteStatus) {
+ canUpdateFavoriteStatus = false;
+
+ var fv = parseInt($(".favorite-value").text());
+ fv--;
+ $(".favorite-value").text(fv);
+
+ var fr = parseInt($(".favorite-rank").text());
+ fr++;
+ $(".favorite-rank").text(fr);
+
+ $("#pnlFavoriteCache").fadeOut("fast", function () {
+ $("#pnlNonfavoriteCache").fadeIn("fast");
+ });
+
+ $.ajax({
+ type: "POST",
+ cache: false,
+ url: '/datastore/favorites.svc/update?u=' + userToken + '&f=false',
+ success: function () {
+ canUpdateFavoriteStatus = true;
+ gotScore = false;
+ showFavoriteScore();
+ }
+ });
+
+ return false;
+ }
+ });
+
+ $(function () {
+
+ // CSP Section
+ if ($("#cspMessage").length) {
+
+ var editLink = $('a[href*="report.aspx"]').attr('href');
+
+ $("#cspMessage").prepend('<P>Please take a moment to check the listing and ensure it is ready to enable. Clicking "Submit for Review" will enable your cache page.</P>');
+ $("#cspMessage").prepend('<P>Once it is enabled, you will receive a confirmation email that it was successfully submitted. It is peak season for cache placement. Your volunteer reviewer will strive to begin the review process within the next 7 days.</P>');
+ $("#cspMessage").prepend('<P>Your cache page has not been reviewed yet. It will not appear in the review queue until you enable it.</P>');
+
+ $("#cspGoBack").click(function (e) {
+ e.preventDefault();
+ window.location = editLink;
+ return false;
+ });
+
+ $("#cspSubmit").click(function (e) {
+ e.preventDefault();
+ $.pageMethod("EnableCSPCache", JSON.stringify({ dto: { ut: userToken } }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.success == true) {
+ window.location = '/seek/cache_details.aspx?guid=' + r.guid;
+ } else {
+ alert("There was an error enabling your cache.");
+ }
+ });
+ return false;
+ });
+
+ $("#cspConfirm").change(function() {
+ if ($("#cspConfirm").is(":checked")) {
+ $("#cspSubmit").removeAttr('disabled');
+ $("#cspGoBack").attr('disabled', true);
+ } else {
+ $("#cspSubmit").attr('disabled', true);
+ $("#cspGoBack").removeAttr('disabled');
+ }
+ });
+ }
+
+
+ //override coords
+ if (typeof(userDefinedCoords) != "undefined") {
+ if (userDefinedCoords.status == "success" && userDefinedCoords.data.isUserDefined == true) {
+ mapLatLng = $.extend({}, mapLatLng, userDefinedCoords.data);
+ $("#uxLatLon")
+ .data("isOverridden", true)
+ .addClass("myLatLon");
+ } else if (userDefinedCoords.status == "success") {
+ mapLatLng = $.extend({}, mapLatLng, userDefinedCoords.data);
+ } else {
+ $("#uxLatLonLink").contents().unwrap();
+ }
+ } else {
+ $("#uxLatLonLink").contents().unwrap();
+ }
+
+
+ var cacheNoteText = {
+ DefaultText: 'Click to enter a note',
+ ErrorInSaving: 'There was an error saving page. Please refresh the page and try again.',
+ SavingText: 'Please wait, saving your note...'
+ };
+
+
+
+ $("time.timeago").timeago();
+
+ $(".button").button();
+
+ var sn = Cookie.get('sn');
+
+ if ($('#trNotPM').length > 0) {
+ $('#trNotPM').toggle(!sn);
+ }
+
+ $("#cache_note").editInPlace({
+ callback: function (unused, enteredText) {
+ var me = $(this);
+
+ var et = $.trim(enteredText);
+ if (et.length > 500)
+ et = et.substr(0, 500);
+
+ $.pageMethod("SetUserCacheNote", JSON.stringify({ dto: { et: et, ut: userToken} }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.success == true) {
+ if ($.trim(r.note) == "") {
+ $("#cache_note").text(cacheNoteText.DefaultText);
+ } else {
+ $("#cache_note").text(r.note);
+ }
+
+ me.effect('highlight', { color: '#ffb84c' }, 'slow');
+ } else {
+ alert(cacheNoteText.ErrorInSaving);
+ $("#cache_note").text(cacheNoteText.DefaultText);
+ }
+
+ });
+
+ return cacheNoteText.SavingText;
+ }
+ , default_text: cacheNoteText.DefaultText
+ , field_type: "textarea"
+ , textarea_rows: "7"
+ , textarea_cols: "65"
+ , show_buttons: true
+ , bg_over: "#FDEBBB"
+ //, callback_skip_dom_reset: true
+
+ });
+
+ $("#lnk_slippyMap").click(function(e) {
+ e.preventDefault();
+ loadDynamicMap();
+ return false;
+ });
+
+ $(".inplace_field").live("focus", function () {
+ if ($(this).data("created") == null) {
+ $(this).data("created", true)
+ $(this).countable({
+ maxLength: 500
+ });
+ }
+ });
+
+ $("#pcn_help").tipTip({ activation: 'hover', content: 'Enter your own notes here. No other user will be able to access them.' });
+
+ $("a.decrypt-link").html(decryptLogs ? locString.encrypt : locString.decrypt);
+
+ if ($("#cache_logs_container").length > 0) {
+
+ appendNewLogs(initalLogs);
+
+ if (DetectMobileQuick()) {
+ $("#pnlButtonLoad")
+ .show()
+ .find("a.MobileButton")
+ .click(function (e) {
+ e.preventDefault();
+ callLogLoad(false);
+ return false;
+ })
+ .button();
+ if(!DetectTierTablet()){
+ $("a.MobileButton").addClass("Phone");
+ }
+ } else {
+ $("#pnlLazyLoad").show();
+
+ $(window).endlessScroll({
+ fireOnce: true,
+ fireDelay: 500,
+ bottomPixels: ($(document).height() - $("#cache_logs_container").offset().top) + 50,
+ ceaseFire: function(){
+ // stop the scrolling if the last page is reached.
+ return (isLoggedIn == false) || (totalPages < currentPageIdx);
+ },
+ callback: function() {
+ if (!isBusy) {
+
+ isBusy = true;
+ $tfoot.show();
+ callLogLoad(true);
+ }
+ }
+ });
+ }
+ }
+
+ if (!isLoggedIn) {
+ $("#cache_logs_table").find("tfoot").hide();
+ }
+
+ if (mapLatLng != null) {
+
+ $("#uxLatLonLink").qtip({
+ suppress:false,
+ content: buildCacheCoordMenu(),
+ position: {
+ my: 'left top',
+ at: 'right top',
+ adjust: {
+ x: 10, y: -10
+ }
+ },
+ show: {
+ ready: false,
+ event: "click",
+ solo: true
+ }, hide: {
+ event: 'unfocus'
+ },
+ style: {
+ tip: {
+ corner: false
+ },
+ classes: 'ui-tooltip-widget'
+ },
+ events: {
+ show: function () {
+ if ($("#uxLatLon").data("isOverridden")) {
+ $("a.ccu-restore").show();
+ } else {
+ $("a.ccu-restore").hide();
+ }
+
+ if (userDefinedCoords.status != "success") {
+ $("div.ccu-update").hide();
+ } else {
+ $("div.ccu-update").show();
+ }
+ }
+ }
+ }).click(function (e) {
+ e.preventDefault();
+ return false;
+ });
+
+ setStaticMaps();
+ //$("#staticMap").lazyload();
+ }
+ });
+
+ function setStaticMaps() {
+
+ var map = new L.Map('map_preview_canvas', {
+ center: new L.LatLng(mapLatLng.lat, mapLatLng.lng),
+ zoom: 10,
+ doubleClickZoom: false,
+ dragging: false,
+ touchZoom: false,
+ scrollWheelZoom: false,
+ attributionControl: false
+ })
+ .addControl(new L.Control.Attribution({ prefix: '<a href="/about/maps.aspx#leaflet" target="_blank">About our maps</a>' }));
+
+
+ var mapLarge = new L.Map('map_canvas', {
+ center: new L.LatLng(mapLatLng.lat, mapLatLng.lng),
+ zoom: 14,
+ doubleClickZoom: true,
+ dragging: true,
+ touchZoom: false,
+ scrollWheelZoom: false,
+ zoomControl: true,
+ attributionControl: false
+ })
+ .addControl(new L.Control.Attribution({ prefix: '<a href="/about/maps.aspx#leaflet" target="_blank">About our maps</a>' }))
+ .addControl(new L.Control.Scale());
+
+ var tileOptions = {
+ tileUrl: "http://otile{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg",
+ name: "mpqosm",
+ alt: "MapQuest",
+ //attribution: "Tiles Courtesy of <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png'>, Map and map data © 2012 <a href=\"http://www.openstreetmap.org\" target='_blank'>OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>. ",
+ subdomains: "1234",
+ tileSize: 256,
+ minZoom: 0,
+ maxZoom: 18
+ };
+
+ map.addLayer(new L.TileLayer(tileOptions.tileUrl, tileOptions));
+ mapLarge.addLayer(new L.TileLayer(tileOptions.tileUrl, tileOptions));
+
+ var pinIcon = L.Icon.extend({
+ iconSize: new L.Point(20, 23),
+ iconAnchor: new L.Point(10,23),
+ shadowUrl: null
+ });
+
+ var mkA = new L.Marker(new L.LatLng(mapLatLng.lat, mapLatLng.lng),
+ {
+ icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + mapLatLng.type + '.png', iconAnchor: new L.Point(10,23)}),
+ title: mapLatLng.name
+ })
+ .on("click", function () {
+ document.getElementById("uxlrgMap").scrollIntoView(true);
+ return false;
+ });
+
+ var mkA2 = new L.Marker(new L.LatLng(mapLatLng.lat, mapLatLng.lng), {
+ icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + mapLatLng.type + '.png', iconAnchor: new L.Point(10,23)}),
+ clickable: false, zIndexOffset:99, title: mapLatLng.name
+ });
+
+ map.addLayer(mkA);
+ mapLarge.addLayer(mkA2);
+
+ $("#ctl00_ContentBody_uxNotesAboutPrinting").fancybox({
+ overlayShow: false
+ });
+
+
+ if (cmapAdditionalWaypoints != null && cmapAdditionalWaypoints.length > 0) {
+ var llBounds = new L.LatLngBounds();
+
+ for (var x = 0, len = cmapAdditionalWaypoints.length; x < len; x++) {
+ var item = cmapAdditionalWaypoints[x],
+ ll = new L.LatLng(item.lat, item.lng),
+ marker = new L.Marker(ll, {
+ icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + item.type + '.png', iconAnchor: new L.Point(10,23)}),
+ title: item.name,
+ clickable:false
+ });
+
+ llBounds.extend(ll);
+ mapLarge.addLayer(marker);
+ }
+ var bz = mapLarge.getBoundsZoom(llBounds);
+
+ mapLarge.setView(new L.LatLng(mapLatLng.lat, mapLatLng.lng), bz);
+ }
+ }
+
+
+
+ function dht() {
+ try {
+ $('#div_hint').html(convertROTStringWithBrackets($('#div_hint').html()));
+ var linkText = (($('#ctl00_ContentBody_lnkDH').attr('title') == 'Decrypt') ? 'Encrypt' : 'Decrypt');
+ $('#ctl00_ContentBody_lnkDH').text(linkText);
+ $('#ctl00_ContentBody_lnkDH').attr('title', linkText);
+ } catch (e) {
+ alert(e);
+ return false;
+ }
+ return false;
+ }
+
+ function buildCacheCoordMenu() {
+ var curLatLng = new LatLon(mapLatLng.lat, mapLatLng.lng)
+ $.template( "tmplCacheCoordinateUpdate_CoordItem", "<tr><td nowrap='nowrap'>${t}</td><td class='ccc-coord' nowrap='nowrap' dataum='${k}'>${v}</td></tr>" );
+
+ var $menu = $("<div></div>");
+
+ $( "#tmpl_CacheCoordinateUpdate" ).tmpl( {
+ ll: [mapLatLng.lat, mapLatLng.lng],
+ ll_formatted: mapLatLng.oldLatLngDisplay
+ } ).appendTo( $menu );
+
+ $menu.find("button.ccu-button").button();
+
+ $menu.delegate("button.ccu-parse", "click", function (e) {
+ e.preventDefault();
+ var $this = $(e.target),
+ $parse =$this.closest('dd').find(".cc-parse-text"),
+ parseCoords = $.trim($parse.val());
+
+ if (parseCoords.length == 0) {
+ alert('Please provide valid coordinates.');
+ } else {
+ $.getJSON("/api/geocode", { parse: parseCoords}, function (response) {
+ if (response.status == "success") {
+ var newLatLng = new LatLon(response.data.lat, response.data.lng);
+
+ // update the displayed coords
+ var dist = curLatLng.rhumbDistanceTo(newLatLng);
+ var bearingTo = curLatLng.rhumbBearingTo(newLatLng);
+ var bearing = bearingTo >= 0 || bearingTo < 22.5 ? "N" : bearingTo >= 22.5 || bearingTo < 67.5 ? "NE" : bearingTo >= 67.5 || bearingTo < 112.5 ? "E" : bearingTo >= 112.5 || bearingTo < 157.5 ? "SE" : bearingTo >= 157.5 || bearingTo < 202.5 ? "S" : bearingTo >= 202.5 || bearingTo < 247.5 ? "SW" : bearingTo >= 247.5 || bearingTo < 292.5 ? "W" : bearingTo >= 292.5 || bearingTo < 337.5 ? "NW" : "N";
+
+ var formats = response.data.formats;
+ // all these finds, make me feel dirty
+ $menu
+ .find("span.ccu-parseverify-coords").text(formats.DM).end()
+ .find("dl.ccu-parse").hide().end()
+ .find("dl.ccu-parseverify").show().end()
+ .find("button.ccu-parseverify-accept")
+ .data("utm", '')
+ .data("dm", formats.DM)
+ .data("lat", response.data.lat)
+ .data("lng", response.data.lng)
+ .end();
+ } else {
+ alert("Sorry unable to parse the coordinates you entered.");
+ }
+ });
+ }
+
+ return false;
+ });
+
+ $menu.delegate("button.ccu-parseverify-accept", "click", function (e) {
+ e.preventDefault();
+ var $this = $(this);
+ // update to webmethod
+ $.pageMethod("SetUserCoordinate", JSON.stringify({ dto: { data: {lat: $this.data("lat"), lng: $this.data("lng") }, ut: userToken } }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.status == "success") {
+ window.location.reload();
+ } else {
+ $("#uxLatLonLink").qtip('hide');
+ }
+
+ });
+
+ return false;
+ });
+
+ $menu.delegate("button.ccu-parseverify-cancel", "click", function (e) {
+ e.preventDefault();
+ $menu
+ .find("input.cc-parse-text").val('').end()
+ .find("dl.ccu-parse").show().end()
+ .find("dl.ccu-parseverify").hide().end();
+ return false;
+ });
+
+ $menu.delegate("a.ccu-restore", "click", function (e) {
+ e.preventDefault();
+
+ $.pageMethod("ResetUserCoordinate", JSON.stringify({ dto: { ut: userToken } }), function (r) {
+ var r = JSON.parse(r.d);
+ if (r.status == "success") {
+ window.location.reload();
+ }
+ });
+
+ return false;
+ });
+
+ return $menu;
+ }
+
+ GSPK = window.GSPK || {};
+ GSPK.Selector = {};
+ GSPK.Selector.getSelected = function(){
+ var t = null;
+ if ( window.getSelection ){
+ t = window.getSelection();
+ }else if(document.getSelection){
+ t = document.getSelection();
+ }else if(document.selection){
+ t = document.selection.createRange().text;
+ }
+ return t;
+ }
+
+ try { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'NotSignedIn', null, true]); } catch(err) { }
+ </script>
+
+
+
+ </div>
+
+
+
+
+ </div>
+
+
+ </section>
+
+ <footer>
+
+ <div class="container">
+
+ <div class="span-24 last FooterTop">
+
+
+
+<div class="LocaleText">
+
+ <strong>Choose Your Language:</strong>
+
+</div>
+<div class="LocaleList">
+
+ <div class="selected-language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul class="language-list">
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+ jQuery(".selected-language a").click(function (e) {
+ e.preventDefault();
+ var $loc = jQuery(this).parent().next();
+ jQuery($loc).show().position({
+ of: $loc.parent(),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 0",
+ collision: "fit fit"
+ });
+ jQuery(this).addClass("Expanded");
+ jQuery(document).click(function () {
+ jQuery(".language-list").fadeOut("fast");
+ jQuery(".selected-language a").removeClass("Expanded");
+ });
+ return false;
+ });
+ });
+</script>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ About</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterGlossary" title="Glossary of Terms" href="../about/glossary.aspx">Glossary of Terms</a></li>
+ <li>
+ <a id="ctl00_hlFooterBrochures" title="Brochures" href="../tools/#Guide">Brochures</a></li>
+ <li>
+ <a id="ctl00_hlFooterAbout" title="About Groundspeak" href="../about/groundspeak.aspx">About Groundspeak</a></li>
+ <li>
+ <a id="ctl00_hlFooterVolunteers" title="About Our Volunteers" href="../volunteers/">About Our Volunteers</a></li>
+ <li>
+ <a id="ctl00_hlFooterHistory" title="History" href="../about/history.aspx">History</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ Press</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterNews" title="News Articles" href="../press/">News Articles</a></li>
+ <li>
+ <a id="ctl00_hlFooterMediaFAQs" title="Media FAQs" rel="document" href="../articles/Brochures/footer/FAQ_Media.pdf">Media FAQs</a></li>
+ <li>
+ <a id="ctl00_hlFooterMediaInquiries" title="Media Inquiries" rel="external" href="http://support.groundspeak.com/index.php?pg=request&xCategory=11">Media Inquiries</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-5">
+
+ <p class="FooterHeader">
+ <strong>
+ Questions & Suggestions</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterHelpCenterLink" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li>
+ <li>
+ <a id="ctl00_hlFooterDiscussionForums" accesskey="f" title="Discussion Forums" href="../forums/">Discussion Forums</a></li>
+ <li>
+ <a id="ctl00_hlFooterParksPoliceLink" title="Land Management and Law Enforcement" href="../parksandpolice/">Land Management and Law Enforcement</a></li>
+ <li>
+ <a id="ctl00_hlFooterContactUs" title="Contact Us" href="../contact/">Contact Us</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ Resources</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterTools" accesskey="o" title="Tools and Downloads" href="../tools/">Tools and Downloads</a></li>
+ <li>
+ <a id="ctl00_hlFooterAPIProgram" title="API Program" href="../live/">API Program</a></li>
+ <li>
+ <a id="ctl00_hlFooterBenchmarks" title="Find a Benchmark" href="../mark/">Find a Benchmark</a></li>
+ </ul>
+
+ </div>
+ <div class="span-4 append-3 last">
+
+ <p class="FooterHeader">
+ <strong>
+ Follow Us</strong></p>
+ <ul class="FooterLinks FollowUsLinks">
+ <li><a id="ctl00_hlFacebook" title="Facebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts"><img id="ctl00_imgFacebook" title="Facebook" src="../images/home/icon_facebook.png" alt="Facebook" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlTwitter" title="Twitter" href="http://twitter.com/GoGeocaching"><img id="ctl00_imgTwitter" title="Twitter" src="../images/twitter/twitter_icon_white_22.png" alt="Twitter" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlFlickr" title=" Flickr" href="http://www.flickr.com/photos/geocaching_com/"><img id="ctl00_imgFlickr" title="Flickr" src="../images/home/icon_flickr.png" alt="Flickr" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlYouTube" title="YouTube" href="http://www.youtube.com/user/GoGeocaching"><img id="ctl00_imgYouTube" title="YouTube" src="../images/home/icon_youtube.png" alt="YouTube" style="border-width:0px;" /></a></li>
+ </ul>
+
+ </div>
+
+ <p class="span-24 last FooterBottom">
+ Copyright
+ © 2000-2012
+ <a href="http://www.groundspeak.com/" title="Groundspeak, Inc." accesskey="g">Groundspeak, Inc.</a>
+ All Rights Reserved.<br />
+ <a id="ctl00_hlFooterTerms" accesskey="u" title="Groundspeak Terms of Use" href="../about/termsofuse.aspx">Groundspeak Terms of Use</a>
+ |
+ <a id="ctl00_hlFooterPrivacy" accesskey="x" title="Privacy Policy" href="../about/privacypolicy.aspx">Privacy Policy</a>
+ |
+ <a id="ctl00_hlFooterLogo" accesskey="l" title="Geocaching Logo Usage Guidelines" href="../about/logousage.aspx">Geocaching Logo Usage Guidelines</a>
+ |
+ <a id="ctl00_hlFooterAPI" accesskey="`" title="API License Agreement" href="../live/api_license_agreement.aspx">API License Agreement</a>
+ |
+ <a id="ctl00_HlFooterStatus" accesskey="`" title="Current Service Status" href="http://status.geocaching.com">Service Status</a></p>
+
+ </div>
+
+
+ </footer>
+ <div class="SkipLinks">
+
+ <a id="ctl00_hlSkipLinksTop" accesskey="t" title="Return to the Top of the Page" href="#Top">Return to the Top of the Page</a>
+
+ </div>
+
+
+
+<script type="text/javascript">
+//<![CDATA[
+var Page_ValidationSummaries = new Array(document.getElementById("ctl00_vsSignInWidgetForm"));
+var Page_Validators = new Array(document.getElementById("ctl00_rfvUsername"), document.getElementById("ctl00_rfvPassword"));
+//]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+var ctl00_vsSignInWidgetForm = document.all ? document.all["ctl00_vsSignInWidgetForm"] : document.getElementById("ctl00_vsSignInWidgetForm");
+ctl00_vsSignInWidgetForm.headertext = "<h4>Please correct the following issues:</h4>";
+ctl00_vsSignInWidgetForm.validationGroup = "SignInForm";
+var ctl00_rfvUsername = document.all ? document.all["ctl00_rfvUsername"] : document.getElementById("ctl00_rfvUsername");
+ctl00_rfvUsername.controltovalidate = "ctl00_tbUsername";
+ctl00_rfvUsername.errormessage = "Username is a required field; please enter a valid username.";
+ctl00_rfvUsername.display = "Dynamic";
+ctl00_rfvUsername.validationGroup = "SignInForm";
+ctl00_rfvUsername.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
+ctl00_rfvUsername.initialvalue = "";
+var ctl00_rfvPassword = document.all ? document.all["ctl00_rfvPassword"] : document.getElementById("ctl00_rfvPassword");
+ctl00_rfvPassword.controltovalidate = "ctl00_tbPassword";
+ctl00_rfvPassword.errormessage = "Password is a required field; please enter a valid password.";
+ctl00_rfvPassword.display = "Dynamic";
+ctl00_rfvPassword.validationGroup = "SignInForm";
+ctl00_rfvPassword.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
+ctl00_rfvPassword.initialvalue = "";
+//]]>
+</script>
+
+
+<script type="text/javascript">
+//<![CDATA[
+var isLoggedIn = false;
+var userDefinedCoords = {"status":"fail","data":{"isUserDefined":false,"oldLatLngDisplay":"N 37° 21.540' W 122° 01.937'"}};
+userInfo = {ID: 0};
+userToken = 'WQZID4ZFAYC6SULYQF74LYDA3S3BDCRFF42MHAMCQ2FV344K2FX57T5PR5HMIIEYY3CGMUR4ZCJLPZTNFNAGW2TB5YIQR6RFKPTVW2ZNM3FM5APRUY3SDKBHWTW64K6GBBSWW67UP4QLB3IAMCTNJVRWCDBKLLDOGPUFLZA';
+//]]>
+</script>
+<script type="text/javascript">setNotification('ctl00_ContentBody_trNotLoggedIn');</script>
+<script type="text/javascript">
+//<![CDATA[
+initalLogs = {"status":"success", "data": [{"LogID":284793524,"CacheID":3373765,"LogGuid":"28f4aded-353c-4cb8-a8ac-17873b5e136f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"FTF 8am.<br />Woo-Hoo, two TNS cache FTFs in a row. This one was much easier, I just pulled out my really big magnet and sucked the needle right out of the stack! TFTP","Created":"12/21/2012","Visited":"12/21/2012","UserName":"TeamOttlet","MembershipLevel":3,"AccountID":623076,"AccountGuid":"b9f2639c-5ed0-4625-82ed-f7723aad6a24","Email":"","AvatarImage":"b4d5c924-f0b3-4668-866d-0c7eafe6a6ad.jpg","GeocacheFindCount":7971,"GeocacheHideCount":11,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284780265,"CacheID":3373765,"LogGuid":"28f7397c-4d68-419d-a78c-d9af48530900","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Publish Listing","LogTypeImage":"24.png","LogText":"Published","Created":"12/21/2012","Visited":"12/21/2012","UserName":"Nomex","MembershipLevel":3,"AccountID":651514,"AccountGuid":"930c9960-afb8-4517-937c-a9256effcdb7","Email":"","AvatarImage":"f2fe44a0-95e7-4e94-b152-f462505ceb79.jpg","GeocacheFindCount":0,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Reviewer","GroupImageUrl":"/images/icon_admin.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 5, "totalRows": 2, "rows": 2 } };
+
+document.getElementById('ctl00_vsSignInWidgetForm').dispose = function() {
+ Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_vsSignInWidgetForm'));
+}
+
+var Page_ValidationActive = false;
+if (typeof(ValidatorOnLoad) == "function") {
+ ValidatorOnLoad();
+}
+
+function ValidatorOnSubmit() {
+ if (Page_ValidationActive) {
+ return ValidatorCommonOnSubmit();
+ }
+ else {
+ return true;
+ }
+}
+ WebForm_AutoFocus('btnSignIn');
+document.getElementById('ctl00_rfvUsername').dispose = function() {
+ Array.remove(Page_Validators, document.getElementById('ctl00_rfvUsername'));
+}
+
+document.getElementById('ctl00_rfvPassword').dispose = function() {
+ Array.remove(Page_Validators, document.getElementById('ctl00_rfvPassword'));
+}
+//]]>
+</script>
+</form>
+ <script type="text/javascript">
+ var browserType = {
+ IE: !!(window.attachEvent && !window.opera),
+ Opera: !!window.opera,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ };
+
+ $(function () {
+ // Make the menu system play nice with all browsers:
+ $('ul.Menu li').hover(function () {
+ $(this).addClass('hover');
+ $('ul:first', this).css('visibility', 'visible');
+ }, function () {
+ $(this).removeClass('hover');
+ $('ul:first', this).css('visibility', 'hidden');
+ });
+ if (!isiOS()) {
+ // Constructing a Twitter-esque Login:
+ $(".SignInLink").click(function (e) {
+ e.preventDefault();
+ $("#SignInWidget").toggle();
+ $(".ProfileWidget").toggleClass("WidgetOpen");
+ $(this).blur();
+ $("#ctl00_tbUsername").focus();
+ });
+ $(".SignInCloseLink").click(function () {
+ $("#SignInWidget").toggle();
+ $(".ProfileWidget").toggleClass("WidgetOpen");
+ });
+ }
+ $('.SignedInProfileLink').truncate({
+ width: 120,
+ after: '&hellip;',
+ center: false,
+ addclass: false,
+ addtitle: false
+ });
+
+ // Hide the warning message if the user closed it already
+ if ($.cookie('hide_warning') != null) {
+ $(".WarningMessage").hide();
+ } else {
+ $("#warningCloseButton").click(function () {
+ $('.WarningMessage').hide('blind');
+ $.cookie('hide_warning', 'true', { expires: 1 });
+ });
+ }
+
+ function isiOS() {
+ return (
+ (navigator.userAgent.match(/(iPhone)|(iPod)|(iPad)/i))
+ );
+ }
+ });
+ </script>
+
+
+ <script id="loc_favPointsScoreDesc" type="text/html">
+ Favorites/Premium Logs
+ </script>
+ <script type="text/javascript" language="javascript">
+ <!--
+
+
+
+ var gotScore = false;
+ var favDropDown = $('.favorite-dropdown');
+ var favContainer = $('.favorite-container');
+
+ function showFavoriteScore() {
+ $('#imgFavoriteScore').attr('src', '/images/loading3.gif');
+
+ $('#uxFavoriteScore').parent().fadeTo(200, .001, function () {
+ $.ajax({
+ type: "POST",
+ cache: false,
+ url: '/datastore/favorites.svc/score?u=' + userToken,
+ success: function (scoreResult) {
+ gotScore = true;
+
+ var score = 0;
+
+ if(scoreResult)
+ score = scoreResult;
+
+ if(score > 100)
+ score = 100;
+
+ $('#imgFavoriteScore').attr('src', '/images/favorites/piecharts/' + score + '.png');
+ var pieDesc = (score < 1 ? "<1" : score) + '% ' + $("#loc_favPointsScoreDesc").text().trim();
+ $('#imgFavoriteScore').attr('alt', pieDesc);
+ $('#imgFavoriteScore').attr('title', pieDesc);
+
+ $('#uxFavoriteScore').parent().fadeTo(1000, 1);
+ $('#uxFavoriteScore').html('<strong>' + (score < 1 ? "<1" : score) + '%</strong> ' + $("#loc_favPointsScoreDesc").html());
+ }
+ });
+ });
+ }
+
+
+
+ $(document).bind('mouseup', function (e) {
+ var $clicked = $(e.target);
+
+
+ if (!$clicked.parents().hasClass("favorite-dropdown") && !$clicked.parents().hasClass("FavoriteWidget")) {
+ favDropDown.hide(1, function () {
+ favContainer.addClass('favorite-container');
+ favContainer.removeClass('favorite-container-open');
+ $('#imgFavoriteArrow').attr('src', '/images/arrow-down.png');
+ });
+ }
+ });
+
+ $('#uxFavContainerLink').click(function () {
+ if ($(favDropDown).is(':visible')) {
+ favDropDown.hide(1, function(){
+ favContainer.addClass('favorite-container');
+ favContainer.removeClass('favorite-container-open');
+ $('#imgFavoriteArrow').attr('src', '/images/arrow-down.png');
+ });
+ }
+ else {
+ if (!gotScore) {
+ showFavoriteScore();
+ }
+
+ favContainer.addClass('favorite-container-open');
+ favContainer.removeClass('favorite-container');
+ $('#imgFavoriteArrow').attr('src', '/images/arrow-up.png');
+ favDropDown.show(1);
+ }
+ });
+ // End -->
+ </script>
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2020240-1']);
+ _gaq.push(['_trackPageview']);
+ (function () {
+ var ga = document.createElement('script');
+ ga.src = ('https:' == document.location.protocol ?
+ 'https://ssl' : 'http://www') +
+ '.google-analytics.com/ga.js';
+ ga.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(ga);
+ })();
+ $(function () {
+ $("a.language").click(function (e) {
+ e.preventDefault();
+ window.location.replace(window.location.href + (window.location.search.indexOf("?") == -1 ? "?" : "&") + "lang=" + $(this).attr("lang"));
+ });
+ });
+ </script>
+
+
+ <!-- Quantcast Tag -->
+ <div id="Quantcast">
+ <script type="text/javascript">
+ var _qevents = _qevents || [];
+
+ (function () {
+ var elem = document.createElement('script');
+
+ elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";
+ elem.async = true;
+ elem.type = "text/javascript";
+ var scpt = document.getElementsByTagName('script')[0];
+ scpt.parentNode.insertBefore(elem, scpt);
+ })();
+ </script>
+ <script type="text/javascript">
+ _qevents.push({ qacct: "p-f6VPrfmR4cujU" });
+ </script>
+ <noscript>
+ <div style="display: none;">
+ <img src="http://pixel.quantserve.com/pixel/p-f6VPrfmR4cujU.gif" height="1" width="1"
+ alt="Quantcast" /></div>
+ </noscript>
+ </div>
+ <!-- End Quantcast tag -->
+
+ <!-- Server: WEB03; Build: Web.HotFix_20121211.1 -->
+</body>
+</html>
diff --git a/tests/res/raw/gc433yc_owner_unpublished.html b/tests/res/raw/gc433yc_owner_unpublished.html new file mode 100644 index 0000000..aa144b0 --- /dev/null +++ b/tests/res/raw/gc433yc_owner_unpublished.html @@ -0,0 +1,2188 @@ +<!DOCTYPE html> +<html class=" js flexbox canvas canvastext webgl no-touch geolocation postmessage no-websqldatabase indexeddb hashchange history draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow textshadow opacity cssanimations csscolumns cssgradients no-cssreflections csstransforms csstransforms3d csstransitions fontface video audio localstorage sessionstorage webworkers applicationcache svg inlinesvg smil svgclippaths" lang="en"><script id="bug.surrogate">var urchinTracker=function(){},_gaq={push:function(){try {if(arguments[0][0]=='_link')window.location.href=arguments[0][1]}catch(er){}}},_gat={_createTracker:function(){}, _getTracker:function(){return{__noSuchMethod__:function(){},_link:function(o){if(o)location.href=o;},_linkByPost:function(){return true;},_getLinkerUrl:function(o){return o;},_trackEvent:function(){}}}}; if (document.location.host == 'www.salon.com') {var _ga_ = document.querySelectorAll('script[src$=ga\\.js]')[0], ga_e = document.createEvent('Event'); ga_e.initEvent('load', true, true);_ga_.dispatchEvent(ga_e);}</script><head id="ctl00_Head1"> +<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"> + <!--[if IE]><![endif]--> + <title> + GC433YC Stenarna (Earthcache) in Södermanland, Sweden created by ra_sch +</title><meta name="DC.title" content="Geocaching - The Official Global GPS Cache Hunt Site"><meta id="ctl00_ogTitle" property="og:title" content="Geocaching - The Official Global GPS Cache Hunt Site"><meta id="ctl00_ogSiteName" property="og:site_name" content="Geocaching - The Official Global GPS Cache Hunt Site"><meta id="ctl00_ogType" property="og:type" content="website"><meta id="ctl00_ogUrl" property="og:url" content="http://www.geocaching.com/"><meta name="author" content="Groundspeak, Inc."><meta name="DC.creator" content="Groundspeak, Inc."><meta name="Copyright" content="Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved."><!-- Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved. --><meta name="description" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world."><meta name="DC.subject" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world."><meta id="ctl00_ogDescription" property="og:description" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world."><meta http-equiv="imagetoolbar" content="no"><meta name="distribution" content="global"><meta name="MSSmartTagsPreventParsing" content="true"><meta name="rating" content="general"><meta name="revisit-after" content="1 days"><meta name="robots" content="all"><meta http-equiv="X-UA-Compatible" content="IE=8"><link rel="icon" href="http://www.geocaching.com/favicon.ico"><link rel="shortcut icon" href="http://www.geocaching.com/favicon.ico"><link rel="apple-touch-icon" href="http://www.geocaching.com/apple-touch-icon.png"><link id="ctl00_imageSrc" rel="image_src" href="http://www.geocaching.com/preview.png"><meta id="ctl00_ogImage" property="og:image" content="/preview.png"><link rel="stylesheet" type="text/css" media="all" href="gc433yc_files/reset.css"><link rel="stylesheet" type="text/css" media="all" href="gc433yc_files/typography.css"><link rel="stylesheet" type="text/css" media="screen,projection" href="gc433yc_files/grid.css"> + <!--[if lt IE 8]> + <link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/ie.css" /> + <![endif]--> + <link id="uxCssMaster" rel="stylesheet" type="text/css" media="screen,projection" href="gc433yc_files/tlnMasterScreen.css"><link id="uxCssMain" rel="stylesheet" type="text/css" media="all" href="gc433yc_files/tlnMain.css"><link rel="Stylesheet" type="text/css" media="all" href="gc433yc_files/jquery-ui-1.css"><link rel="stylesheet" type="text/css" media="all" href="gc433yc_files/jquery.css"><link rel="stylesheet" type="text/css" media="print" href="gc433yc_files/tlnMasterPrint.css"> + <script type="text/javascript" src="gc433yc_files/modernizr-1.js"></script> + <script type="text/javascript" src="gc433yc_files/jquery_002.js"></script> + <script type="text/javascript" src="gc433yc_files/jquery-ui.js"></script> + <script type="text/javascript" src="gc433yc_files/jquery_003.js"></script> + + + + <link href="gc433yc_files/jquery_004.css" rel="stylesheet" type="text/css"> + <link href="gc433yc_files/jquery_003.css" rel="stylesheet" type="text/css"> + <link href="gc433yc_files/tipTip.css" rel="stylesheet" type="text/css"> + <link href="gc433yc_files/jquery_002.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]> + <style type="text/css" media="all"> + legend{ + position: absolute; + top: -.6em; + left: 1em; + line-height: 1.3; + } + fieldset p{ + margin-top:1em; + } + img.CacheNoteHelpImg{ + top:-.2em; + } + </style> + <![endif]--> + <style type="text/css" media="screen,projection"> + #otherSearchOptions li + { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + } + .ff + { + font-family: "Andale Mono" , "Courier New" ,Courier,monospace; + } + .fr + { + margin-top: 1.5em; + float: right; + } + .fl + { + float: left; + } + .clsCell + { + border: 1px solid #c0cee3; + font-size: 80%; + background-color: #fff; + } + .clsResultTitle, .clsResultTitleNoBold + { + color: #0000de; + } + .clsResultDescription + { + color: #333; + } + .clsURL + { + color: #999; + } + a.title:link, a.title:visited, a.title:hover, a.title:active + { + color: #000; + text-decoration: underline; + } + a.title + { + text-align: right; + font-size: 10px; + font-family: arial,sans-serif; + padding: 0 1px 0 0; + } + #mapSizePager a:hover + { + font-weight: bold; + } + #mapSizePager ul + { + width: 100%; + margin: 0; + padding: 0; + list-style: none; + } + #mapSizePager li + { + float: left; + list-style: none; + } + #mapSizePager li a + { + font-family: verdana,sans-serif; + font-size: x-small; + display: block; + margin: 0 2px 0 0; + padding: 4px; + text-decoration: none; + border: solid 1px #c0c0c0; + height: 10px; + min-width: 10px; + cursor: pointer; + } + #mapPrintingNotes + { + width: 280px; + text-align: left; + overflow: auto; + } + .inplace_field { + width:100%; + resize: none; + } + legend.note{ + background:url('../images/icons/16/user_note.png') no-repeat 0 0; + padding-left:18px; + } + legend.warning{ + background:url('../images/icons/16/take_note.png') no-repeat 0 0; + padding-left:18px; + } + fieldset.CacheNote{ + border-color: #e9a24c !important; + background-color:#ffffde; + position:relative; + } + .CacheNoteHelpImg{ + position:relative; + cursor:pointer; + top:-1em; + right:-.75em; + float:right; + } + .InformationWidget h3{ + margin-bottom:.5em; + } + .InformationWidget .AlignRight{ + font-size:.8em; + } + #tiptip_content{ + *background-color:#000; + box-shadow:none; + } + .maxed{ + color:#992a2a; + } + + + span.ccu-parseverify-distance img{ + text-align:center !important; + vertical-align:text-bottom !important; + } + .edit-cache-coordinates{ + text-decoration: none; + color: #000 !important; + background: url(/images/icons/16/edit.png) no-repeat right 0; + padding:2px 20px 2px 0px; + margin-right:4px; + } + .ccc-coord{ + cursor: text; + font-family: Courier New, Sans-Serif; + } + .ccu-update dl { + margin-bottom:.25em; + } + .ccu-update dt{ + float:left; + min-width:90px; + } + .ccu-update .ui-button-text-only .ui-button-text{ + padding:.3em .75em; + } + .ccu-parseverify-coords{ + font-style:italic; + margin-right:.25em; + } + .ccu-parseverify-accept, .ccu-parseverify-cancel{ + margin-top:-5px; + } + .ui-tooltip-widget .ui-tooltip-content{ + border-width:1px; + background-color:#fff; + border-color:#c0cee3; + color:#594a42; + padding:1em; + width:420px; + } + .myLatLon { + border-bottom:2px solid #c0cee3; + font-style:italic; + } + .leaflet-control-attribution{ + padding:3px !important; + } + .leaflet-control-attribution img{ + vertical-align:middle; + } + </style> + <link rel="Stylesheet" type="text/css" media="screen" href="gc433yc_files/CSPScreen.css"> + <link rel="stylesheet" type="text/css" media="all" href="gc433yc_files/leaflet.css"> + <!--[if IE]> + <link rel="stylesheet" type="text/css" media="all" href="/js/leaflet/v5/leaflet.ie.css" /> + <![endif]--> + <script type="text/javascript" language="javascript" src="gc433yc_files/leaflet.js"></script> + <script type="text/javascript" src="gc433yc_files/jquery.js"></script> + <script type="text/javascript" src="gc433yc_files/geometa.js"></script> + <script type="text/javascript"> + var userToken = null, + urlParams = {}, + mapLatLng = null, + cmapAdditionalWaypoints = [], + initalLogs = null, totalLogs = 0, includeAvatars = false; + + (function () { + var e, + d = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }, + q = window.location.search.substring(1), + r = /([^&=]+)=?([^&]*)/g; + + while (e = r.exec(q)) { + urlParams[d(e[1])] = d(e[2]); + } + })(); + </script> +<meta name="description" content="Stenarna (GC433YC) was created by ra_sch on 12/21/2012. It's a Not chosen size geocache, with difficulty of 1.5, terrain of 1.5. It's located in Södermanland, Sweden. "><style type="text/css">/** GCTour - Container*/#gctourButtonWrapper { height: 32px !important; padding: 0 !important; position: fixed !important; top: 30px !important; width: 35px !important; background-color: #fff; z-index: 100001 !important; border: 1px solid #333; border-width: 1px 1px 1px 0; border-radius: 0 5px 5px 0; -moz-user-select: none;}#gctourButtonWrapper img { position: relative; top: 8px; left: 8px;}#gctourContainer { background-color: #fff; overflow: hidden; left: -210px; padding: 0 !important; position: fixed !important; top: 30px !important; width: 200px; z-index: 100002 !important; border: 1px solid #333; border-left: 0px; border-radius: 0 5px 5px 0; font-size: 12px; line-height: 1.5;}#gctourContainer .cachelist { width: 100%; margin: 0; padding:0; font-size:80%; list-style-type:none;}#gctourContainer .cachelist li { color:#000; margin:0.5em; padding:3px; width:120px; min-height:44px; list-style-position:inside; border:1pt dashed gray; background-color:#FFF; -moz-background-clip:border; -moz-background-inline-policy:continuous; -moz-background-origin:padding; -moz-border-radius:8px 0 8px 0; border-radius:8px 0 8px 0;}#gctourContainer img.imgShadow { -moz-box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2); box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2); background-color: lightgray;}#gctourContainer img.tourImage { cursor: pointer; margin: 0 2px 0 2px;}/* Styling the placeholder for when the user starts dragging an item */#gctourContainer li.ui-sortable-placeholder { min-height:50px; max-height:80px; width: 90%; background-color: rgba(0, 0, 0, 0.03);}/** GCTour - Grand*/.gctour-grand-default { /* http://www.colorzilla.com/gradient-editor/#a7cfef+0,c9dded+3,ffffff+10;gctour-grand-default * http://css3please.com/ */ background: rgb(167,207,239); /* Old browsers */ background: -moz-linear-gradient(top, rgba(167,207,239,1) 0%, rgba(201,221,237,1) 3px, rgba(255,255,255,1) 10px); /* FF3.6+ */ background: -webkit-linear-gradient(top, rgba(167,207,239,1) 0%,rgba(201,221,237,1) 3px,rgba(255,255,255,1) 10px); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(167,207,239,1) 0%,rgba(201,221,237,1) 3px,rgba(255,255,255,1) 10px); /* Opera 11.10+ */ background: linear-gradient(top, rgba(167,207,239,1) 0%,rgba(201,221,237,1) 3px,rgba(255,255,255,1) 10px); /* W3C */}.gctour-grand-hover { /* http://www.colorzilla.com/gradient-editor/#ffad32+0,ffd699+3,ffffff+10;gctour-grand-hover */ background: rgb(255,173,50); /* Old browsers */ background: -moz-linear-gradient(top, rgba(255,173,50,1) 0%, rgba(255,214,153,1) 3px, rgba(255,255,255,1) 10px); /* FF3.6+ */ background: -webkit-linear-gradient(top, rgba(255,173,50,1) 0%,rgba(255,214,153,1) 3px,rgba(255,255,255,1) 10px); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(255,173,50,1) 0%,rgba(255,214,153,1) 3px,rgba(255,255,255,1) 10px); /* Opera 11.10+ */ background: linear-gradient(top, rgba(255,173,50,1) 0%,rgba(255,214,153,1) 3px,rgba(255,255,255,1) 10px); /* W3C */}.gctour-grand-highlight { /* http://www.colorzilla.com/gradient-editor/#ffe000+0,ffee7f+3,ffffff+10;gctour-grand-highlight */ background: rgb(255,224,0); /* Old browsers */ background: -moz-linear-gradient(top, rgba(255,224,0,1) 0%, rgba(255,238,127,1) 3px, rgba(255,255,255,1) 10px); /* FF3.6+ */ background: -webkit-linear-gradient(top, rgba(255,224,0,1) 0%,rgba(255,238,127,1) 3px,rgba(255,255,255,1) 10px); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(255,224,0,1) 0%,rgba(255,238,127,1) 3px,rgba(255,255,255,1) 10px); /* Opera 11.10+ */ background: linear-gradient(top, rgba(255,224,0,1) 0%,rgba(255,238,127,1) 3px,rgba(255,255,255,1) 10px); /* W3C */}.gctour-grand-active { /* Grün http://www.colorzilla.com/gradient-editor/#3dff32+0,9eff99+3,ffffff+10;gctour-grand-active */ background: rgb(61,255,50); /* Old browsers */ background: -moz-linear-gradient(top, rgba(61,255,50,1) 0%, rgba(158,255,153,1) 3px, rgba(255,255,255,1) 10px); /* FF3.6+ */ background: -webkit-linear-gradient(top, rgba(61,255,50,1) 0%,rgba(158,255,153,1) 3px,rgba(255,255,255,1) 10px); /* Chrome10+,Safari5.1+ */ background: linear-gradient(top, rgba(61,255,50,1) 0%,rgba(158,255,153,1) 3px,rgba(255,255,255,1) 10px); /* W3C */$$$$ background: -o-linear-gradient(top, rgba(61,255,50,1) 0%,rgba(158,255,153,1) 3px,rgba(255,255,255,1) 10px); /* Opera 11.10+ */}.gctour-grand-error { /* http://www.colorzilla.com/gradient-editor/#ff3232+0,ff9999+3,ffffff+10;gctour-grand-error */ background: rgb(255,50,50); /* Old browsers */ background: -moz-linear-gradient(top, rgba(255,50,50,1) 0%, rgba(255,153,153,1) 3px, rgba(255,255,255,1) 10px); /* FF3.6+ */ background: -webkit-linear-gradient(top, rgba(255,50,50,1) 0%,rgba(255,153,153,1) 3px,rgba(255,255,255,1) 10px); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(255,50,50,1) 0%,rgba(255,153,153,1) 3px,rgba(255,255,255,1) 10px); /* Opera 11.10+ */ background: linear-gradient(top, rgba(255,50,50,1) 0%,rgba(255,153,153,1) 3px,rgba(255,255,255,1) 10px); /* W3C */}/** GCTour Slider*/.gct_scrollbar { background-color:pink; height: 20px; left: 0; position: absolute; top: 0; width: 100%;}.gct_scroller{ background-color:lime; height: 20px; left: 0; position: absolute; top: 0; width: 20px; }/* * GCTour Pop-Up */.gct_popup{ position:absolute; z-index:10; width:172px; height:102px; text-align:center; color:#FF0000; font: 14px Verdana, Arial, Helvetica, sans-serif; background-color:lime; border-radius: 5px;}.gct_popup_header{ border-radius: 5px 5px 0px 0px;}.dialogMask { background-image:url(data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%08%00%00%00%08%08%06%00%00%00%C4%0F%BE%8B%00%00%00%01sRGB%00%AE%CE%1C%E9%00%00%00%06bKGD%00%FF%00%FF%00%FF%A0%BD%A7%93%00%00%00%09pHYs%00%00%0E%C4%00%00%0E%C4%01%95%2B%0E%1B%00%00%00%07tIME%07%DB%03%17%0C%03%0F%8C%CB%E4%8C%00%00%00%19tEXtComment%00Created%20with%20GIMPW%81%0E%17%00%00%00%26IDAT%18%D3c%F8%FF%FF%FF%FFMW%3E%FF%C7E3%FC%87%02%98%20%3A%9F%81%A0%09%B8t%C2%00%C3%20p%03%00%DA%B4%F2%A1%8A%CD%18%A3%00%00%00%00IEND%AEB%60%82); height:100%; left:0; opacity:0.7; position:fixed; top:0; width:100%; z-index:9000000;}.dialogBody { -moz-border-radius:5px; border-radius:5px; background:none repeat scroll 0 0 #fff; border:1px solid #333333; color:#333333; cursor:default; font-family:Arial; font-size:12px; left:50%; margin-left:-250px; margin-top:20px; padding:0 0 1em; position:fixed; text-align:left; top:0; width:600px; z-index:9000010; max-height:85%; min-height:440px; overflow:auto;}.dialogBody p { font-size:12px; font-weight:normal; margin:1em 0;}.header h1 { background-color:#B2D4F3; background-repeat:repeat-x; font-size:110% !important; font-family:Helvetica Neue,Arial,Helvetica,sans-serif; margin-bottom:0.2em; margin-top:0; padding:0.5em; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; color:#333333; background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAABWCAYAAACdOoshAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oKAwcSHqDAeZMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAArElEQVR42u3XMQ5AUBRFwU9ESEgIlmn%2F5bMBt9Ap5ixhutNVVTXpa11V3RjeG1prF4aMc2LIOAeGjLNjyDgbhoyzYsg4C4aMM2PIOBOGjDNiyPtgPEM9Ajhw4MCBAwcOHDiCAwcOHDhw4MCBA0dw4MCBAwcOHDhwBAcOHDhw4MCBAweO4MCBAwcOHDhw4AgOHDhw4MCBAwcOHMGBAwcOHDhw4MARHDhw4MD5TQ9jZAyriwnP2QAAAABJRU5ErkJggg%3D%3D)}/*.dialogBody h1 { background-color:#7A7A7A; border-bottom:1px solid #333333; font-size:110%; font-family:Helvetica Neue,Arial,Helvetica,sans-serif; margin-bottom:0.2em; padding:0.5em; -moz-border-radius:5px 5px 0px 0px; border-radius:5px 5px 0px 0px; color:#fff;}*/.dialogHistory { border:1px inset #999999; margin:0 1em 1em; padding-bottom: 1em; max-height: 200px; overflow-y:auto; width:518px; padding-left:1em;}.dialogHistory ul { margin-left:2em;}.dialogHistory li { list-style-type:circle;}.dialogFooter input { -moz-border-radius:3px; border-radius:3px; background:none no-repeat scroll 4px center #EEEEEE; border:1px outset #666666; cursor:pointer; float:right; margin-left:0.5em; padding:3px 5px 5px 20px; min-width:100px; font-size: 12px;}.dialogFooter input:hover { background-color:#f9f9f9;}.dialogContent { padding:0 10px 0 10px;}.dialogMin { min-height:0 !important}#dialogDetails { height:364px; padding:3px; overflow:auto; background-color:#eff4f9; border:1px solid #C0CEE3; -moz-border-radius: 0 5px 5px 0; width:424px; position: absolute; right: 10px;}.dialogList li { font-size:10px; padding:3px; clear:both; list-style-type: none;}.dialogList { margin:0; padding:0}.activeTour { border: 1px solid #C0CEE3; -moz-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; background-color:#eff4f9; padding:1px;}#dialogListContainer { height:374px; overflow:auto; width:146px; position: absolute; left: 10px;}.unselectable { -o-user-select: none; -webkit-user-select: none; -moz-user-select: -none; -khtml-user-select: none; user-select: none;}#cacheList .counter { position:absolute; right:4px; bottom: 0; z-index:0; overflow:hidden; font: normal 24px arial,sans-serif; color: #d5d5d5; text-align:right; text-shadow: 1px 1px 1px #C0C0C0; vertical-align: text-bottom; background-color: transparent; margin-right:0; margin-bottom:0; padding: 0;}0</style><style type="text/css"></style><script type="text/javascript">function s2cgeo(code) {window.open('http://send2.cgeo.org/add.html?cache='+code,'cgeo','height=50,width=50'); }</script><style>@media print, screen and (view-mode:minimized){#ghostery-purple-bubble{display:none}}</style></head> +<body gcvotemarker="3.0c"> + <form name="aspnetForm" method="post" action="cache_details.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&csp=1" id="aspnetForm" class="csp"> +<div> +<input name="__EVENTTARGET" id="__EVENTTARGET" value="" type="hidden"> +<input name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" type="hidden"> +<input name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT" value="2" type="hidden"> +<input name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc1MjcwNzgxNg8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzMzNzYxMzEWAmYPZBYGZg9kFgoCCg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgsPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAiEPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIiDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCJw8WAh4HVmlzaWJsZWhkAgEPFgIeBWNsYXNzBQNjc3AWEgIFDxYCHwFkZAIIDxYCHwNnFggCAQ8PFgIeCEltYWdlVXJsBTNodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2ltYWdlcy9kZWZhdWx0X2F2YXRhci5qcGdkZAIDDxYCHwEFaEhlbGxvLCA8YSBocmVmPSIvbXkvZGVmYXVsdC5hc3B4IiB0aXRsZT0iVmlldyBQcm9maWxlIGZvciByYV9zY2giIGNsYXNzPSJTaWduZWRJblByb2ZpbGVMaW5rIj5yYV9zY2g8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFrwFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmd1aWQlM2RmZWUxYWQ1YS1kM2RmLTQ2YjctOWZlMC0zMmViMGQ0NTJiNjglMjZjc3AlM2QxZGQCCw8WAh8BBRA5NTcgQ2FjaGVzIEZvdW5kZAINDxYCHwNnFgICDQ8PFgIfBgVAfi90cmFjay9zZWFyY2guYXNweD9vPTEmdWlkPWRmZDQ0NGQwLTUzN2EtNDlmZi05MGYxLWQ3ZWY5Yjg5MzYwYmRkAhAPDxYCHwNnZGQCLA9kFgQCAw8WAh8BBQdFbmdsaXNoZAIFDxYCHgtfIUl0ZW1Db3VudAIQFiBmD2QWAgIBDw8WCB4PQ29tbWFuZEFyZ3VtZW50BQVlbi1VUx4LQ29tbWFuZE5hbWUFDVNldFRlbXBMb2NhbGUfAQUHRW5nbGlzaB4QQ2F1c2VzVmFsaWRhdGlvbmhkZAIBD2QWAgIBDw8WCB8IBQVkZS1ERR8JBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCmhkZAICD2QWAgIBDw8WCB8IBQVmci1GUh8JBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8KaGRkAgMPZBYCAgEPDxYIHwgFBXB0LVBUHwkFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8KaGRkAgQPZBYCAgEPDxYIHwgFBWNzLUNaHwkFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwpoZGQCBQ9kFgICAQ8PFggfCAUFc3YtU0UfCQUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwpoZGQCBg9kFgICAQ8PFggfCAUFZXMtRVMfCQUNU2V0VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8KaGRkAgcPZBYCAgEPDxYIHwgFBWl0LUlUHwkFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCmhkZAIID2QWAgIBDw8WCB8IBQVubC1OTB8JBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCmhkZAIJD2QWAgIBDw8WCB8IBQVjYS1FUx8JBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCmhkZAIKD2QWAgIBDw8WCB8IBQVwbC1QTB8JBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8KaGRkAgsPZBYCAgEPDxYIHwgFBWV0LUVFHwkFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCmhkZAIMD2QWAgIBDw8WCB8IBQVuYi1OTx8JBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwpoZGQCDQ9kFgICAQ8PFggfCAUFa28tS1IfCQUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCmhkZAIOD2QWAgIBDw8WCB8IBQVodS1IVR8JBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8KaGRkAg8PZBYCAgEPDxYIHwgFBXJvLVJPHwkFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCmhkZAIuD2QWAgIDD2QWAgIBDxYCHwNnFgICAQ8WAh8BBVxZb3VyIGNhY2hlIGhhcyAxIG5vdGUocykgZnJvbSBhIHJldmlld2VyLiA8YSBocmVmPScjY2FjaGVfbG9nc19jb250YWluZXInPlJlYWQgdGhlbSBub3c8L2E+LmQCLw8WAh8EBQxzcGFuLTI0IGxhc3QWAgIBD2QWKgIBD2QWAmYPZBYCAgEPDxYCHwEFB0dDNDMzWUNkZAICDxYCHwEFmgE8YSBocmVmPSIvYWJvdXQvY2FjaGVfdHlwZXMuYXNweCIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJBYm91dCBDYWNoZSBUeXBlcyI+PGltZyBzcmM9Ii9pbWFnZXMvV3B0VHlwZXMvMTM3LmdpZiIgYWx0PSJFYXJ0aGNhY2hlIiB0aXRsZT0iRWFydGhjYWNoZSIgLz48L2E+ZAIGD2QWBAIBDxYCHwNnZAIGDxYCHwNoZAILD2QWBAIBDxYCHwEFATBkAgUPDxYCHwYFRC9zZWVrL2NhY2hlX2Zhdm9yaXRlZC5hc3B4P2d1aWQ9ZmVlMWFkNWEtZDNkZi00NmI3LTlmZTAtMzJlYjBkNDUyYjY4ZGQCDQ8PFgIfA2hkZAIQDxYCHwNoZAIRDxYCHwNoZAISD2QWDAIDDxYCHgVzdHlsZQUPZGlzcGxheTppbmxpbmU7FgICAQ8WAh8BBRtVVE06IDMzViBFIDY2MjM0NyBOIDY1MjEyMjdkAg0PDxYCHwYFM2NkcGYuYXNweD9ndWlkPWZlZTFhZDVhLWQzZGYtNDZiNy05ZmUwLTMyZWIwZDQ1MmI2OGRkAg8PDxYCHwYFOGNkcGYuYXNweD9ndWlkPWZlZTFhZDVhLWQzZGYtNDZiNy05ZmUwLTMyZWIwZDQ1MmI2OCZsYz01ZGQCEQ8PFgIfBgU5Y2RwZi5hc3B4P2d1aWQ9ZmVlMWFkNWEtZDNkZi00NmI3LTlmZTAtMzJlYjBkNDUyYjY4JmxjPTEwZGQCEw8PFgQfBgVuaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2Y9ZCZobD1lbiZzYWRkcj00OS43MzMyLDguNTY5NjY3IChIb21lIExvY2F0aW9uKSZkYWRkcj01OC44MDAzNSwxNy44MTAwNShTdGVuYXJuYSkeBlRhcmdldAUGX2JsYW5rZGQCGw9kFggCAQ8PFgQeCUZvcmVDb2xvcgweBF8hU0ICBGRkAgMPDxYEHw0MHw4CBGRkAgUPDxYCHwNnFgIeB29uY2xpY2sFO3MyZ3BzKCdmZWUxYWQ1YS1kM2RmLTQ2YjctOWZlMC0zMmViMGQ0NTJiNjgnKTtyZXR1cm4gZmFsc2U7ZAIHDw8WAh8DZxYCHw8FIHMycGhvbmUoJ0dDNDMzWUMnKTtyZXR1cm4gZmFsc2U7ZAIUDxYCHwNnZAIXD2QWCGYPFgIfA2hkAgEPDxYCHwNoZGQCAg8PFgIfA2hkZAIDDxYCHwNoZAIYD2QWAgIDDw8WAh8BBRNObyBoaW50cyBhdmFpbGFibGUuFgIfDwUNcmV0dXJuIGZhbHNlO2QCGQ8WAh8DaGQCHA8WAh8DaGQCHQ8PFgIfA2hkFgICAw8PFgIfA2hkZAIeDxYCHwNnZAIfDxYCHwNoZAIiD2QWAgIBD2QWBAIBDw8WAh8BBf8DPGlmcmFtZSB0eXBlPSJpZnJhbWUiIHNyYz0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9R2V0JlNpdGVJRD0xJlg9J2U1MjJhZjRiNWM2NTQ0ZWViYTY3MmRkZDA2ODk2MTRhJyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyNDAiIE1hcmdpbndpZHRoPSIwIiBNYXJnaW5oZWlnaHQ9IjAiIEhzcGFjZT0iMCIgVnNwYWNlPSIwIiBGcmFtZWJvcmRlcj0iMCIgU2Nyb2xsaW5nPSJubyIgc3R5bGU9IndpZHRoOjEyMHB4O0hlaWdodDoyNDBweDsiPjxhIGhyZWY9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUNsaWNrJjtNb2RlPUhUTUwmU2l0ZUlEPTEiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9R2V0Jk1vZGU9SFRNTCZTaXRlSUQ9MSIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyNDAiIGJvcmRlcj0iMCIgYWx0PSIiIC8+PC9hPjwvaWZyYW1lPmRkAgMPFgIeCWlubmVyaHRtbAUTQWR2ZXJ0aXNpbmcgd2l0aCBVc2QCKQ9kFhYCAw8WAh8DZxYCAgEPDxYCHwYFRS9oaWRlL3dwdGxpc3QuYXNweD9SZWZXcHRJRD1mZWUxYWQ1YS1kM2RmLTQ2YjctOWZl" type="hidden"> +<input name="__VIEWSTATE1" id="__VIEWSTATE1" value="MC0zMmViMGQ0NTJiNjgmRFM9MWRkAgUPFgIfA2dkAgcPDxYGHgZSRFMuSUQLKXZHcm91bmRzcGVhay5XZWIuR1BYLldwdERhdGFTb3VyY2VzLCBUdWNzb24uQ29tbW9uLkxlZ2FjeSwgVmVyc2lvbj0zLjAuNDcyOC4xNjE1MiwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsAR4HUldQVC5JRCgrBAczMzc2MTMxHwNoZGQCCQ8PFgIfA2dkFgICAQ8PFgQfBgUrL21hcC9kZWZhdWx0LmFzcHg/bGF0PTU4LjgwMDM1JmxuZz0xNy44MTAwNR8DZ2RkAhEPDxYCHwYFGy9zZWVrL25lYXJlc3QuYXNweD91PXJhX3NjaGRkAhUPDxYCHwYFHC9zZWVrL25lYXJlc3QuYXNweD91bD1yYV9zY2hkZAIZD2QWCgIDDw8WAh8GBVYvc2Vlay9uZWFyZXN0LmFzcHg/dHg9YzY2ZjVjZjMtOTUyMy00NTQ5LWI4ZGQtNzU5Y2QyZjE4ZGI4JmxhdD01OC44MDAzNTAmbG5nPTE3LjgxMDA1MGRkAgUPDxYCHwYFWi9zZWVrL25lYXJlc3QuYXNweD90eD1jNjZmNWNmMy05NTIzLTQ1NDktYjhkZC03NTljZDJmMThkYjgmbGF0PTU4LjgwMDM1MCZsbmc9MTcuODEwMDUwJmY9MWRkAgkPDxYCHwYFLi9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NTguODAwMzUwJmxuZz0xNy44MTAwNTBkZAILDw8WAh8GBTIvc2Vlay9uZWFyZXN0LmFzcHg/bGF0PTU4LjgwMDM1MCZsbmc9MTcuODEwMDUwJmY9MWRkAg8PDxYCHwYFSGh0dHA6Ly93d3cud2F5bWFya2luZy5jb20vZGlyZWN0b3J5LmFzcHg/Zj0xJmxhdD01OC44MDAzNTAmbG9uPTE3LjgxMDA1MGRkAhsPFgIfA2hkAh8PDxYCHwYFJi9yZXZpZXdzL2hvdGVscy1jb29yZHMtNTguODAwNCwxNy44MTAxZGQCIw9kFgICAQ8PFgQfAQXCBzxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL21hcC9kZWZhdWx0LmFzcHg/bGF0PTU4LjgwMDM1JmxuZz0xNy44MTAwNSIgdGFyZ2V0PSJfYmxhbmsiPkdlb2NhY2hpbmcuY29tIE1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/cT1OKzU4JWMyJWIwKzQ4LjAyMStFKzAxNyVjMiViMCs0OC42MDMrKEdDNDMzWUMpKyIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubWFwcXVlc3QuY29tL21hcHMvbWFwLmFkcD9zZWFyY2h0eXBlPWFkZHJlc3MmZm9ybXR5cGU9bGF0bG9uZyZsYXRsb25ndHlwZT1kZWNpbWFsJmxhdGl0dWRlPTU4LjgwMDM1JmxvbmdpdHVkZT0xNy44MTAwNSZ6b29tPTEwIiB0YXJnZXQ9Il9ibGFuayI+TWFwUXVlc3Q8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMueWFob28uY29tLyNsYXQ9NTguODAwMzUmbG9uPTE3LjgxMDA1Jnpvb209MTYmcT01OC44MDAzNSwxNy44MTAwNSZjb25mPTEmc3RhcnQ9MSZtdnQ9bSZ0cmY9MCIgdGFyZ2V0PSJfYmxhbmsiPllhaG9vIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5iaW5nLmNvbS9tYXBzL2RlZmF1bHQuYXNweD92PTImbHZsPTE0JnNwPXBvaW50LjU4LjgwMDM1XzE3LjgxMDA1X0dDNDMzWUMiIHRhcmdldD0iX2JsYW5rIj5CaW5nIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnLz96b29tPTEyJmxhdD01OC44MDAzNSZsb249MTcuODEwMDUiIHRhcmdldD0iX2JsYW5rIj5PcGVuIEN5Y2xlIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy8/bWxhdD01OC44MDAzNSZtbG9uPTE3LjgxMDA1Jnpvb209MTIiIHRhcmdldD0iX2JsYW5rIj5PcGVuIFN0cmVldCBNYXBzPC9hPjwvbGk+HwNnZGQCJw9kFggCAQ8WAh8BBQ4xIExvZ2dlZCBWaXNpdGQCBw8PFgIfBgVDfi9zZWVrL2NhY2hlX2xvZ2Jvb2suYXNweD9ndWlkPWZlZTFhZDVhLWQzZGYtNDZiNy05ZmUwLTMyZWIwZDQ1MmI2OGRkAggPFgIfA2hkAgkPDxYCHwNoZGQCKg8WAh8BBQR0cnVlZAIrDxYCHwEFSmxhdD01OC44MDAzNTsgbG5nPTE3LjgxMDA1OyBndWlkPSdmZWUxYWQ1YS1kM2RmLTQ2YjctOWZlMC0zMmViMGQ0NTJiNjgnOw0KZAIsDxYCHwEFcXRyeSB7IF9nYXEucHVzaChbJ190cmFja0V2ZW50JywgJ0dlb2NhY2hpbmcnLCAnQ2FjaGVEZXRhaWxzTWVtYmVyVHlwZScsICdQcmVtaXVtJywgbnVsbCwgdHJ1ZV0pOyB9IGNhdGNoKGVycikgeyB9ZAIwDxYCHwNoZAIxD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIfBwIQFiBmD2QWAgIBDw8WCB8IBQVlbi1VUx8JBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2gfCmhkZAIBD2QWAgIBDw8WCB8IBQVkZS1ERR8JBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCmhkZAICD2QWAgIBDw8WCB8IBQVmci1GUh8JBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8KaGRkAgMPZBYCAgEPDxYIHwgFBXB0LVBUHwkFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8KaGRkAgQPZBYCAgEPDxYIHwgFBWNzLUNaHwkFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwpoZGQCBQ9kFgICAQ8PFggfCAUFc3YtU0UfCQUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwpoZGQCBg9kFgICAQ8PFggfCAUFZXMtRVMfCQUNU2V0VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8KaGRkAgcPZBYCAgEPDxYIHwgFBWl0LUlUHwkFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCmhkZAIID2QWAgIBDw8WCB8IBQVubC1OTB8JBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCmhkZAIJD2QWAgIBDw8WCB8IBQVjYS1FUx8JBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCmhkZAIKD2QWAgIBDw8WCB8IBQVwbC1QTB8JBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8KaGRkAgsPZBYCAgEPDxYIHwgFBWV0LUVFHwkFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCmhkZAIMD2QWAgIBDw8WCB8IBQVuYi1OTx8JBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwpoZGQCDQ9kFgICAQ8PFggfCAUFa28tS1IfCQUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCmhkZAIOD2QWAgIBDw8WCB8IBQVodS1IVR8JBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8KaGRkAg8PZBYCAgEPDxYIHwgFBXJvLVJPHwkFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCmhkZAIDDxYCHwEFK1NlcnZlcjogV0VCMTM7IEJ1aWxkOiBXZWIuSG90Rml4XzIwMTIxMjExLjFkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBRtjdGwwMCRDb250ZW50Q1NQJGNzcENvbmZpcm06xL130XjARa21fe+yF8/udheOWQ==" type="hidden"> +</div> + +<script type="text/javascript"> +//<![CDATA[ +var theForm = document.forms['aspnetForm']; +if (!theForm) { + theForm = document.aspnetForm; +} +function __doPostBack(eventTarget, eventArgument) { + if (!theForm.onsubmit || (theForm.onsubmit() != false)) { + theForm.__EVENTTARGET.value = eventTarget; + theForm.__EVENTARGUMENT.value = eventArgument; + theForm.submit(); + } +} +//]]> +</script> + + +<script src="gc433yc_files/WebResource.axd" type="text/javascript"></script> + + +<script src="gc433yc_files/ScriptResource_004.axd" type="text/javascript"></script> +<script src="gc433yc_files/ScriptResource.axd" type="text/javascript"></script> +<script src="gc433yc_files/ScriptResource_003.axd" type="text/javascript"></script> +<script src="gc433yc_files/ScriptResource_002.axd" type="text/javascript"></script> +<script src="gc433yc_files/cachedetails.js" type="text/javascript"></script> +<script src="gc433yc_files/latlng.js" type="text/javascript"></script> + <script type="text/javascript"> +//<![CDATA[ +Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00'); +//]]> +</script> + + <div id="Top" class="SkipLinks"> + + <a id="ctl00_hlSkipLinksNavigation" accesskey="n" title="Skip to Navigation" href="#Navigation">Skip to Navigation</a> + <a id="ctl00_hlSkipLinksContent" accesskey="c" title="Skip to Content" href="#Content">Skip to Content</a> + + </div> + + <!--[if lte IE 6]> + <div class="WarningMessage PhaseOut"> + + <p>Groundspeak is phasing out support for older browsers. Visit the <a href="http://support.groundspeak.com/index.php?pg=kb.page&id=215" title="Browser Support Information">Help Center</a> for more information.</p> + + </div> + <![endif]--> + + + + <div class="PrintOnly"> + + <p> + <img src="gc433yc_files/logo_print_bw.png" alt="Geocaching.com"></p> + <hr> + + </div> + + <header> + + <div class="container"> + + <h1 class="Logo span-16"> + <a href="http://www.geocaching.com/" id="ctl00_HDHomeLink" title="Geocaching" accesskey="h">Geocaching</a></h1> + <div class="ProfileWidget span-8 last"> + + + + <div id="ctl00_divSignedIn"> + + <p class="Avatar NoBottomSpacing"> + <a id="ctl00_hlHeaderAvatar" accesskey="p" title="Your Profile" href="http://www.geocaching.com/my/"><img title="Your Profile" src="gc433yc_files/default_avatar.jpg" alt="" style="border-width:0px;"></a></p> + <p class="SignedInText"> + <strong> + Hello, <a href="http://www.geocaching.com/my/default.aspx" title="View Profile for ra_sch" class="SignedInProfileLink">ra_sch</a></strong> (<a id="ctl00_hlSignOut" accesskey="s" title="Sign Out" href="https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2fseek%2fcache_details.aspx%3fguid%3dfee1ad5a-d3df-46b7-9fe0-32eb0d452b68%26csp%3d1">Sign Out</a>)<br> + <span id="ctl00_litPMLevel">Premium Member</span> + + <strong style="display:block"> + 957 Caches Found</strong> + + </p> + + </div> + + + </div> + + <div class="NavContainer span-24 last"> + <nav id="Navigation"> + + <ul class="Menu"> + <li class=""> + <a id="ctl00_hlNavLearn" accesskey="1" title="Learn" href="http://www.geocaching.com/guide/">Learn ▼</a> + <ul style="visibility: hidden;" class="SubMenu"> + <li> + <a id="ctl00_hlSubNavGeocaching101" accesskey="i" title="Geocaching 101" href="http://www.geocaching.com/guide/">Geocaching 101</a></li> + <li> + <a id="ctl00_hlSubNavGeocaching2Minutes" title="Geocaching in 2 Minutes" href="http://www.geocaching.com/videos/#cat=cat:newbies&vid=-4VFeYZTTYs">Geocaching in 2 Minutes</a></li> + </ul> + </li> + + <li class="" id="ctl00_liNavProfile"> + <a id="ctl00_hlNavProfile" accesskey="2" title="Your Profile" href="http://www.geocaching.com/my/">Your Profile ▼</a> + <ul style="visibility: hidden;" class="SubMenu"> + <li> + <a id="ctl00_hlSubNavQuickView" accesskey="p" title="Quick View" href="http://www.geocaching.com/my/">Quick View</a></li> + <li> + <a id="ctl00_hlSubNavLists" accesskey="q" title="Lists" href="http://www.geocaching.com/my/lists.aspx">Lists</a></li> + <li class="ExtraText"> + <a id="ctl00_hlSubNavGeocaches" accesskey="m" title="Geocaches" class="NoRightPadding" href="http://www.geocaching.com/my/geocaches.aspx">Geocaches</a> + (<a id="ctl00_hlSubNavGeocachesYours" accesskey="y" title="Yours" class="NoSidePadding" href="http://www.geocaching.com/my/owned.aspx">Yours</a>)</li> + <li class="ExtraText"> + <a id="ctl00_hlSubNavProfileTrackables" title="Trackables" class="NoRightPadding" href="http://www.geocaching.com/my/travelbugs.aspx">Trackables</a> + (<a id="ctl00_hlSubNavTrackablesYours" accesskey="8" title="Yours" class="NoSidePadding" href="http://www.geocaching.com/track/search.aspx?o=1&uid=dfd444d0-537a-49ff-90f1-d7ef9b89360b">Yours</a>)</li> + <li> + <a id="ctl00_hlSubNavPocketQueries" accesskey="9" title="Pocket Queries" href="http://www.geocaching.com/pocket/">Pocket Queries</a></li> + <li> + <a id="ctl00_hlSubNavFieldNotes" accesskey="0" title="Field Notes" href="http://www.geocaching.com/my/fieldnotes.aspx">Field Notes</a></li> + <li> + <a id="ctl00_hlSubNavAccount" accesskey="a" title="Account Details" href="http://www.geocaching.com/account/">Account Details</a></li> + </ul> + </li> + <li> + <a id="ctl00_hlNavPlay" accesskey="3" title="Play" href="http://www.geocaching.com/seek/">Play ▼</a> + <ul class="SubMenu"> + <li> + <a id="ctl00_hlSubNavHide" accesskey="d" title="Hide & Seek a Cache" href="http://www.geocaching.com/seek/">Hide & Seek a Cache</a></li> + <li> + <a id="ctl00_hlSubNavLogCache" title="Log a Cache" href="http://www.geocaching.com/my/recentlyviewedcaches.aspx">Log a Cache</a></li> + <li><a id="ctl00_hlSubNavMap" accesskey="/" title="View Geocache Map" href="http://www.geocaching.com/map/">View Geocache Map</a></li> + <li> + <a id="ctl00_hlSubNavTrackables" accesskey="e" title="Find Trackables" href="http://www.geocaching.com/track/">Find Trackables</a></li> + <li> + <a id="ctl00_hlSubNavHelpCenter" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li> + </ul> + </li> + <li> + <a id="ctl00_hlNavCommunity" accesskey="6" title="Community" href="http://www.geocaching.com/forums/">Community ▼</a> + <ul class="SubMenu"> + + <li> + <a id="ctl00_hlSubNavTellaFriend" accesskey="-" title="Tell a Friend" href="http://www.geocaching.com/account/SendReferral.aspx">Tell a Friend</a></li> + + <li><a id="ctl00_hlSubNavVolunteers" accesskey="+" title="Volunteers" href="http://www.geocaching.com/volunteers/">Volunteers</a></li> + <li> + <a id="ctl00_hlSubNavLocal" accesskey="z" title="Local Organizations" href="http://www.geocaching.com/organizations/">Local Organizations</a></li> + <li> + <a id="ctl00_hlSubNavDiscussionForums" accesskey="f" title="Discussion Forums" href="http://www.geocaching.com/forums/">Discussion Forums</a></li> + <li> + <a id="ctl00_hlSubNavBlog" accesskey="b" title="Blog" rel="external" href="http://blog.geocaching.com/">Blog</a></li> + <li> + <a id="ctl00_hlSubNavEvents" accesskey="v" title="Events" href="http://www.geocaching.com/calendar/">Events</a></li> + </ul> + </li> + <li> + <a id="ctl00_hlNavShop" accesskey="4" title="Shop" href="http://shop.geocaching.com/">Shop ▼</a> + <ul class="SubMenu"> + <li> + <a id="ctl00_hlSubNavShop" accesskey="j" title="Shop Geocaching" rel="external" href="http://shop.geocaching.com/">Shop Geocaching</a></li> + <li> + <a id="ctl00_hlSubNavIntlRetailers" title="International Retailers" rel="external" href="http://shop.geocaching.com/default/international-retailers/">International Retailers</a></li> + <li> + <a id="ctl00_hlSubNavGPSReviews" accesskey="w" title="GPS Reviews" href="http://www.geocaching.com/reviews/gps">GPS Reviews</a></li> + <li> + <a id="ctl00_hlSubNavGPSGuide" accesskey="k" title="Guide to Buying a GPS Device" href="http://www.geocaching.com/about/buying.aspx">Guide to Buying a GPS Device</a></li> + </ul> + </li> + <li> + <a id="ctl00_hlNavPartnering" accesskey="5" title="Partnering" href="http://www.geocaching.com/travel/">Partnering ▼</a> + <ul class="SubMenu"> + <li> + <a id="ctl00_hlSubNavTravel" title="Travel and GeoTourism" href="http://www.geocaching.com/travel/">Travel and GeoTourism</a></li> + <li> + <a id="ctl00_hlSubNavBrandedPromotions" title="Branded Promotions" href="http://www.geocaching.com/brandedpromotions/">Branded Promotions</a></li> + <li> + <a id="ctl00_hlSubNavEducation" title="Geocaching and Education" href="http://www.geocaching.com/education/">Geocaching and Education</a></li> + <li> + <a id="ctl00_hlSubNavAdvertisingWithUs" title="Advertising with Us" href="http://www.geocaching.com/about/advertising.aspx">Advertising with Us</a></li> + <li> + <a id="ctl00_hlSubNavAPIProgram" title="API Program" href="http://www.geocaching.com/live/apidevelopers/">API Program</a></li> + </ul> + </li> + <li> + <a id="ctl00_hlNavVideos" accesskey="7" title="Videos" href="http://www.geocaching.com/videos/">Videos</a></li> + <li> + <a id="ctl00_hlNavFollowUs" title="Follow Us" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Follow Us ▼</a> + <ul class="SubMenu NavSocialMedia"> + <li> + <a id="ctl00_hlSubNavFacebook" title="Facebook" class="SubNavFacebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Facebook</a></li> + <li> + <a id="ctl00_hlSubNavTwitter" title="Twitter" class="SubNavTwitter" href="http://twitter.com/GoGeocaching">Twitter</a></li> + <li> + <a id="ctl00_hlSubNavFlickr" title="Flickr" class="SubNavFlickr" href="http://www.flickr.com/photos/geocaching_com/">Flickr</a></li> + <li> + <a id="ctl00_hlSubNavYouTube" title="YouTube" class="SubNavYouTube" href="http://www.youtube.com/user/GoGeocaching">YouTube</a></li> + </ul> + </li> + </ul> + + </nav> + <div class="LanguageSelector"> + + +<div class="LocaleText"> + + <strong>Choose Your Language:</strong> + +</div> +<div class="LocaleList"> + + <div class="selected-language"> + + <a href="#">English▼</a> + + </div> + <ul class="language-list"> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li> + + <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li> + + </ul> + +</div> +<script type="text/javascript"> + + jQuery(document).ready(function () { + jQuery(".selected-language a").click(function (e) { + e.preventDefault(); + var $loc = jQuery(this).parent().next(); + jQuery($loc).show().position({ + of: $loc.parent(), + my: "left top", + at: "left bottom", + offset: "0 0", + collision: "fit fit" + }); + jQuery(this).addClass("Expanded"); + jQuery(document).click(function () { + jQuery(".language-list").fadeOut("fast"); + jQuery(".selected-language a").removeClass("Expanded"); + }); + return false; + }); + }); +</script> + </div> + </div> + + + </div> + + + </header> + <section id="Content"> + + + <div class="container"> + + <div id="ctl00_divBreadcrumbs" class="BreadcrumbWidget span-24 last"> + + <p> + <span id="ctl00_Breadcrumbs"><span><a title="Geocaching - The Official Global GPS Cache Hunt Site" href="http://www.geocaching.com/">Geocaching</a></span><span> > </span><span><a title="Hide and Seek A Geocache" href="http://www.geocaching.com/seek/default.aspx">Hide and Seek A Geocache</a></span><span> > </span><span>Geocache Details</span></span> + </p> + + + + + <div style="display:none;"> + <p> + Your cache has 1 note(s) from a reviewer. <a href="#cache_logs_container">Read them now</a>. + </p> + </div> + + + <div id="cspMessage" class="cspWidget cspWarningWidget"><p>Your cache page has not been reviewed yet. It will not appear in the review queue until you enable it.</p><p>Once + it is enabled, you will receive a confirmation email that it was +successfully submitted. It is peak season for cache placement. Your +volunteer reviewer will strive to begin the review process within the +next 7 days.</p><p>Please take a moment to check the listing and ensure +it is ready to enable. Clicking "Submit for Review" will enable your +cache page.</p> + <p> + <span class="Checkbox" title="Yes, the cache is in place and ready to be found" autocomplete="off"><input id="cspConfirm" name="ctl00$ContentCSP$cspConfirm" type="checkbox"><label for="cspConfirm">Yes, the cache is in place and ready to be found</label></span> + </p> + <p class="NoBottomSpacing"> + <input name="ctl00$ContentCSP$cspSubmit" value="Submit for Review" id="cspSubmit" disabled="disabled" title="Submit for Review" class="cspButton cspPrimaryButton" type="submit"> + <input name="ctl00$ContentCSP$cspGoBack" value="Edit Listing" id="cspGoBack" title="Edit Listing" class="cspButton" type="submit"></p> + </div> + + </div> + + <div id="ctl00_divContentMain" class="span-24 last"> + + + + + <div id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoLinkPanel" class="CoordInfoLinkWidget"> + + <p> + <a href="#" class="CoordInfoLink"> + <span id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode" class="CoordInfoCode">GC433YC</span> + <span class="arrow">▼</span> </a> + </p> + +</div> +<div id="dlgClipboard"> + <input class="TextFormat" type="text"> + <a href="#" onclick="$('#dlgClipboard').hide();return false;" title="Close" class="Close"> + x</a> +</div> +<script type="text/javascript"> + $("a.CoordInfoLink").click(function (e) { + e.preventDefault(); + + $("#dlgClipboard") + .show() + .position({ + of: $("a.CoordInfoLink"), + my: "right top", + at: "right bottom", + offset: "0 5" + }) + .find("input") + .val('http://coord.info/' + $('.CoordInfoCode').text()) + .focus() + .select(); + + $(document).mouseup(function (e) { + if ($(e.target).parent("div#dlgClipboard").length == 0) { + $(this).unbind(e); + $("div#dlgClipboard").hide(); + } + }); + + return false; + }); + + +</script> + + <div class="span-17"> + + <div class="span-17 last BottomSpacing" id="cacheDetails"> + <p class="cacheImage"> + <a href="http://www.geocaching.com/about/cache_types.aspx" target="_blank" title="About Cache Types"><img src="gc433yc_files/137.gif" alt="Earthcache" title="Earthcache"></a> + </p> + + <h2 class="NoBottomSpacing"> + <span id="ctl00_ContentBody_CacheName">Stenarna</span></h2> + <div class="minorCacheDetails Clear"> + <div id="ctl00_ContentBody_mcd1"> + A cache by <a href="http://www.geocaching.com/profile/?guid=dfd444d0-537a-49ff-90f1-d7ef9b89360b&wid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&ds=2">ra_sch</a></div> + <div id="ctl00_ContentBody_mcd2"> + Hidden: + 12/21/2012 + + </div> + <div></div> + </div> + </div> + <div id="ctl00_ContentBody_diffTerr" class="CacheStarLabels span-3 BottomSpacing"> + + Difficulty: + <br> + Terrain: + + </div> + + <div id="ctl00_ContentBody_diffTerrStars" class="CacheStarImgs span-2"> + + <span id="ctl00_ContentBody_uxLegendScale" title="(1 is easiest, 5 is hardest)"><img src="gc433yc_files/stars1_5.gif" alt="1.5 out of 5"></span> + <span id="ctl00_ContentBody_Localize12" title="(1 is easiest, 5 is hardest)"><img src="gc433yc_files/stars1_5.gif" alt="1.5 out of 5"></span> + + </div> + + <div id="ctl00_ContentBody_size" class="CacheSize span-9"> + + <p style="text-align: center;"> + Size: <span class="minorCacheDetails"><img src="gc433yc_files/not_chosen.gif" alt="Size: not chosen" title="Size: not chosen"> <small>(not chosen)</small><span id="GCVote_container"><div name="VoteControlfee1ad5a-d3df-46b7-9fe0-32eb0d452b68" style="float: right;"><div style="white-space: nowrap; font-size: small; padding: 0px; margin: 0px; line-height: 80%;"><table id="gcvoteDetailsfee1ad5a-d3df-46b7-9fe0-32eb0d452b68" style="z-index: 200; position: absolute; visibility: hidden; background-color: rgb(239, 244, 249); border: 1px solid rgb(192, 206, 227); width: auto;"><tr><td style="font-weight: bold;">Verteilung der Bewertungen:</td></tr><tr><td style="text-align: center;"><img src="gc433yc_files/chart.png"></td></tr></table><img style="cursor: pointer;" id="gcvoteStarsfee1ad5a-d3df-46b7-9fe0-32eb0d452b68" title="Durchschnitt (Mittel) 0.0 von 5" alt="Durchschnitt (Mittel) 0.0 von 5" src="gc433yc_files/stars0.gif" align="absmiddle"><small><em style="color: rgb(0, 0, 0); font-weight: normal; font-size: 1.15em;"> (0)</em></small></div><div style="white-space: nowrap; font-size: 1.3em;"><small></small><a title="unbewertet" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=0" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=0" style="background-color: rgb(48, 224, 48); font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=0">?</a><a title="1: schlecht" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=1" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=1" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=1">1</a><span style="color: grey; font-size: 1.4ex;"><a title="1,5: lohnt nicht" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=1.5" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=1.5" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=1.5">½</a></span><a title="2: schwach" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=2" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=2" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=2">2</a><span style="color: grey; font-size: 1.4ex;"><a title="2,5: ok" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=2.5" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=2.5" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=2.5">½</a></span><a title="3: durchschnittlich" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=3" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=3" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=3">3</a><span style="color: grey; font-size: 1.4ex;"><a title="3,5: besser" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=3.5" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=3.5" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=3.5">½</a></span><a title="4: gut" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=4" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=4" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=4">4</a><span style="color: grey; font-size: 1.4ex;"><a title="4,5: fast perfekt" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=4.5" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=4.5" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=4.5">½</a></span><a title="5: großartig" name="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=5" id="GCVoteLinkfee1ad5a-d3df-46b7-9fe0-32eb0d452b68=5" style="font-weight: normal;" href="#fee1ad5a-d3df-46b7-9fe0-32eb0d452b68=5">5</a><img name="GCVoteWaitfee1ad5a-d3df-46b7-9fe0-32eb0d452b68" id="GCVoteWaitfee1ad5a-d3df-46b7-9fe0-32eb0d452b68" style="display: none;" src="gc433yc_files/loading.gif" height="14px" width="14px"></div></div></span></span></p> + + </div> + + + + <div class="span-3 right last"> + + + <div class="favorite right"> + <a id="uxFavContainerLink" href="javascript:void(0);"> + <div class="favorite-container"> + <span class="favorite-value"> + 0</span><br> + Favorites + <img id="imgFavoriteArrow" src="gc433yc_files/arrow-down.png" alt="Expand" title="Expand"> + </div> + </a> + <div class="favorite-dropdown"> + <dl class="top"> + <dt> + <img id="imgFavoriteScore" src="gc433yc_files/loading3.gif" alt="Loading" title="Loading" height="20" width="20"></dt> + <dd> + <span id="uxFavoriteScore"> </span></dd> + </dl> + <dl class="bottom"> + <dt> + <img src="gc433yc_files/view_user.png" alt="View Who Favorited this Cache" title="View Who Favorited this Cache"></dt> + <dd> + <a id="hlViewWhoFavorited" title="View Who Favorited this Cache" href="http://www.geocaching.com/seek/cache_favorited.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68">View Who Favorited this Cache</a></dd> + <dt> + <img src="gc433yc_files/help.png" alt="About Favorites" title="About Favorites"></dt> + <dd> + <a id="hlAboutFavorites" title="About Favorites" href="http://support.groundspeak.com/index.php?pg=kb.page&id=287" target="_blank">About Favorites</a> + </dd> + </dl> + </div> + </div> + + + </div> + + + <p class="Clear"> + </p> + + + + + <div id="ctl00_ContentBody_CacheInformationTable" class="CacheInformationTable"> + <div class="LocationData FloatContainer"> + <div class="span-9"> + <p class="NoBottomSpacing"> + + <span id="uxLatLon" style="font-weight:bold;">N 58° 48.021 E 017° 48.603</span> + + <br> + <span id="ctl00_ContentBody_LocationSubPanel" style="display:inline;"><small> + UTM: 33V E 662347 N 6521227</small> + <br> + </span><small> + <a id="ctl00_ContentBody_lnkConversions" title="Other Conversions" href="http://www.geocaching.com/wpt/?lat=58.80035&lon=17.81005&detail=1" target="_blank">Other Conversions</a> + </small> + </p> + </div> + <div class="span-7 last AlignRight"> + <span id="ctl00_ContentBody_Location">In Södermanland, Sweden</span><br> + <span id="lblDistFromHome"><img src="gc433yc_files/NE.gif" alt="NE" style="vertical-align:text-bottom"> NE 1170.9 km from your home location</span> + </div> + </div> + <div id="Print"> + <p class="NoBottomSpacing"> + <span id="ctl00_ContentBody_uxPrintHeader" style="font-weight:bold;">Print</span>: + <br> + <small> + <a id="ctl00_ContentBody_lnkPrintFriendly" class="lnk" href="http://www.geocaching.com/seek/cdpf.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68" target="_blank"> + <img src="gc433yc_files/print.png" alt="Print" title="Print" height="16" width="16"> <span> + No Logs + </span> + </a> + <a id="ctl00_ContentBody_lnkPrintFriendly5Logs" href="http://www.geocaching.com/seek/cdpf.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&lc=5" target="_blank">5 Logs</a> + <a id="ctl00_ContentBody_lnkPrintFriendly10Logs" href="http://www.geocaching.com/seek/cdpf.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&lc=10" target="_blank">10 Logs</a> · + <a id="ctl00_ContentBody_lnkPrintDirectionsSimple" class="lnk" href="http://maps.google.com/maps?f=d&hl=en&saddr=49.7332,8.569667%20%28Home%20Location%29&daddr=58.80035,17.81005%28Stenarna%29" target="_blank"> + <img src="gc433yc_files/directions.png" alt="Driving Directions" title="Driving Directions" height="16" width="16"> <span> + Driving Directions + </span> + </a></small></p> + <div id="ctl00_ContentBody_uxPrintPDFSection" style="display: none;"> + <p> + <img src="gc433yc_files/pdf_icon.gif" alt="PDF" title="PDF" height="16" width="16"> <small>[PDF:] <a id="ctl00_ContentBody_lnkPDFPrintNoLogs" href="javascript:pl(0);">No Logs</a> <a id="ctl00_ContentBody_lnkPDFPrint5Logs" href="javascript:pl(5);">5 Logs</a> <a id="ctl00_ContentBody_lnkPDFPrint10Logs" href="javascript:pl(10);">10 Logs</a></small></p> + </div> + </div> + <div id="Download"> + <p class="NoBottomSpacing"> + <span id="ctl00_ContentBody_uxDownloadLabel" style="font-weight:bold;">Download</span>: + <small> + <a id="ctl00_ContentBody_lnkDownloads" title="Read about waypoint downloads" href="http://www.geocaching.com/software/default.aspx">Read about waypoint downloads</a> + </small> + </p> + + <p class="NoBottomSpacing TopSpacing"> + <input name="ctl00$ContentBody$btnLocDL" value="LOC waypoint file" id="ctl00_ContentBody_btnLocDL" type="submit"> + | + <input name="ctl00$ContentBody$btnGPXDL" value="GPX file" id="ctl00_ContentBody_btnGPXDL" type="submit"> + | + <input name="ctl00$ContentBody$btnSendToGPS" value="Send to My GPS" onclick="s2gps('fee1ad5a-d3df-46b7-9fe0-32eb0d452b68');return false;" id="ctl00_ContentBody_btnSendToGPS" type="submit"> + | + <input name="ctl00$ContentBody$btnSendToPhone" value="Send to My Phone" onclick="s2phone('GC433YC');return false;" id="ctl00_ContentBody_btnSendToPhone" type="submit"> + | <input name="ctl00$ContentBody$btnSendTocgeo" value="Send to c:geo" onclick="s2cgeo('GC433YC'); return false;" id="ctl00_ContentBody_btnSendTocgeo" type="button"></p> + + </div> + <div style="border-top: 1px solid rgb(192, 206, 227);"><fieldset class="dialogFooter" style="background-color: #EFF4F9;border-color: #C0CEE3 !important;margin-top:0;padding: 0.5em;"><legend class="note" style="background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDGQg7CZXhIq0AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAD30lEQVQ4yy3M2W8UBRwH8O9vjj2ms92rpUsPutClLdjVQi0WS%2BHBNCq2QCKJhoemLxhr9QlTEhIjPIgxKiRINKSiQEKEBINIsVpSSRpQMLZKCU3tfQBdeyzda3Z3ZnZ%2Bvvj5Az5kWZaLiOwAFAAeZl6z%2BNevNRM%2FnGoB4JEUl5ReeuRNRaY9joKSZFnT%2Fpny5rYRu7tgEsA%2FAMaImSsBuP5P8mb7L25%2BfPvqzuo3D8%2F5qupVQ0sUyoqLLNPgse9Pls%2FevFCua3E5tOedBxWtHX2ykn9HAlDFM39uIFESkjZveuH367X1Xed%2FkZ15%2Fid3e8omrp1%2Brul47z1BklPVb3TFK%2FZ0LE799HVo%2BMz729jQ9eoDR2YkTixtxc3PX%2BP2s7cfnuiorDvUfUNyKGlmThc3tDy5d%2FzAbiLKAkgBEGWnyxXa%2B%2B5TpaAUeYGgJYhSoUBDVxqxMh2MR6MVzoISu%2Bx0qUTkJCKZmaXSptdnouNDfmZWcnpG1RNR1UhEHe4NYcHQ4r6ckQ2Q9UnjAoVeNEesYi0QbpzyVdWPA0gDUAEEsvGVwgfdh4Nrt7dGVifv58dnR%2FypyJRLj6%2BIejrFzWeGr0mIRVQE65%2Fqg4MeW76%2FAIDAc0OO5G%2BXS1aXI66Et9LKrC45kyMDtuJsxFa2721NKgpZDn%2BxOH%2BqzS5c%2F2CrBLaAlVkHBMkm2hyF030XSsa%2F6ija5taENTvbk4H9h%2BKr44P68qUjHq8tKiDPyXD7BZxvz1s3elk2fEESEN49hzvfuFQzJqXmR92e0BZ74KX2jHpiftn27KuWfLS6SFFdtmTx85wmhVASlhAZdfAfl2RiE5RNigL2fnSLFa9W8fCcU%2FiuU%2FUaS1K483RW8pWKqN1ngS2SVa%2FIVk7U3OsIfZ8pfOsLG1kGMjnAbO6akEhx3%2Bf3eon%2BvvqCMnCu0jz5ikuq3GFy01smhm%2FI8Ach%2B0ul4vUbybaQIP75Y5GMDHIWMO8OZ8sb26eImRuYOQSgiixz8%2FjFYw3ywJeBYD4IWpwgiIBdZTZ1gpEBLBNEQEwHzLZv53y72vqJmQPMXARgIxHVAtgy1tNdZ%2FR%2BWrCJZ0XkTBAIAMMCYAl2XvDWZO2ymCtSZY2D9UPEzA4AbgBBAHVs6ttJT4ZTpuB3HK1aG9vUkhB0zQDYyNjcmccJy%2FLW7Fhab08amLwro%2FXYFQmAwcwZIkrC1OP48cMAj%2FSVKU0Hl1BYHvMdPNuvJVZXQMKKR81PBACdmU0iymJXZ4yZ%2F5WYmYnIYGYNorwI1TeGZ142UBKOoLMnAuCRU3VHAESZWQNgEpHFzCYAnYhS%2FwF8odAV4EB4aAAAAABJRU5ErkJggg%3D%3D") no-repeat scroll 0 0 transparent">GCTour</legend><input onclick="return false;" style="float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9kFFAUXKNiDRngAAAJmSURBVDjLjZPPS1RRFMc%2F972n1qiUpqMRaj8UXPVj46Igw0WrKIKkwEWSCC4jjKLoX5BoU5GUJg6KFrVpFYiBEAouAkH0Of4endHRKSSY53v3tHgzbyxddFb3Xu753O%2F3nHMVwOBw5LpSvBQtFQIggpAJkV1lGCOe53a13Ln7lYNicKg%2FtrWdlIMinU7LenxNPn4e%2Ft0%2F8P7Jv7kGgOu6x48eKWEzmWA9ESMWX2FlbYml1XnimzF%2BplLcuHbzcEW48mlfpOfxPoAWQRBcz2XWnsWetbFtmzl7jpmZWaILUQzD4MrlplBB%2FqFn73q7G7MAC0C0BgHPc6mprvaBotGiEa1ZXl7hw6ch8q0Czp09H%2Fo%2BPtYJjAYArTUArreLbUcR0YgIon2QJ5q8vDzCleUopXB33atv3r6y2u91uFbWgg%2FQVFdXAeIDBH5cbMTZ2AQgXV5GQzzB6LcRU0RbgJuzkGnfQnQeUf4awNnY5FJbGyjFWHc3%2FoMa0cI%2BC0opTp05jVIqqPJGVqEEk4FoHajOAPyNaZoszi%2BSuHUbN7nlXwiFfIVKkVdYSMQwKAJTGcYiUGFlJfkAi9q6WmLJLRpaW4MXdUbRhebm4Gy8pyf8dxsVWIaJPb8AwK%2BpKf4nAgsKMAyTuro61sNhpicmAMgvKuJkfT0AC9PTODs7mRE0EmjNHgsK0zQBaJqeyhRS8aXkWFAwZ2eHFtE8f9HliUgN9x%2F6AMu0Vre2kydKS8vI1T%2B30ns6kEqlsCwznk476cCC4zjtA4OR147jVOV%2BsZ9UXlxMdHLSBxUX09vXs%2BJ5bkfng0cC8AdIoVh%2Ffv3rlAAAAABJRU5ErkJggg%3D%3D)" value="Add to Tour" type="button"><input onclick="return false;" style="float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9oIGQopDsx58QcAAAHySURBVDjLpZNNaxNRFIafuWYRQRCLoCnTQIsfFAwxGFGQLBVRXPqJQfFHCEqd2iIupK6q7lwIfiVZ6EKrVkRGjQUDlRJQIVqoRd0Ixk7aTGbm3uuqTYbUVPDC4XIOnOe897xc%2BM9jtCb5Qm4IsP6hb%2FjI4aODbdV8IacbjUbHcF1X5ws5vdgTWQ5fKpX%2BOjqdTofyZQGJRKL5RsMI3VrrzgClFOVyGQAhRBsolUqtrMA0TYQQGIbRFisq0Fpj2%2FbSRCEEmUyGkddZ6t4co8cn2m28YA0MAVY0GmXL5q0opULyAZ7PX6W7q5cP3yZJ%2Fsriui7A8KICa9C6iJQS3%2FcBOP9wP1oFeCrAkwHd6zbRH9uF487zsj7K7TNTXL9xzYq0LqlSqRCLxbBtm0B57N12CqkVUkkUmu%2FVWRI9e6h5dQ7ejHOAs80dOI6DW69TrVZJJpM8sj2kVsz8rOCrgED5%2BNJnruGwvSdDzV%2Fg7vSlJkAIwZzjMD7%2BjFqthtvrEsiADWvjBFIiteLH7690rdnI5GyR4uci2VUDYReklOxI7wTg45cct96O4CkPN%2FDpW9%2FP7r59lGbe8OLTK3KHJhh78rgJ8DwP0zSX7LscHwu5cOJBGkOs5t30FE9PvkcpFbLxHnCs0%2Fe7o67gK8npyLnW8v0%2F5Gb7fMJoZowAAAAASUVORK5CYII%3D)" value="Print this geocache" type="button"><input onclick="return false;" style="float:left;background-image:url(http://www.geocaching.com/images/icons/coord_update.gif)" value="Move the coordinates" type="button"></fieldset></div></div> + + <fieldset class="DisclaimerWidget"> + <legend class="warning"> + Please note + </legend> + <p class="NoBottomSpacing"> + Use of geocaching.com services is subject to the terms and conditions <a href="http://www.geocaching.com/about/disclaimer.aspx" title="Read Our Disclaimer">in our disclaimer</a>. + </p> + </fieldset> + + + <fieldset class="NotesWidget"> + <legend class="note"> + Personal Cache Note + </legend> + <img src="gc433yc_files/help.png" id="pcn_help" class="CacheNoteHelpImg"> + <p id="cache_note" class="NoBottomSpacing">Click to enter a note</p> + </fieldset> + + <div class="UserSuppliedContent"> + + <span id="ctl00_ContentBody_ShortDescription">Test +</span> + + </div> + + <br> + <div class="UserSuppliedContent"> + + <span id="ctl00_ContentBody_LongDescription">Test</span> + + </div> + + <p> + + + </p> + <p id="ctl00_ContentBody_hints"> + <strong> + Additional Hints</strong> + (<a id="ctl00_ContentBody_lnkDH" title="Decrypt" onclick="return false;" href="#">No hints available.</a>)</p> + <div id="div_hint" class="span-8 WrapFix"> + </div> + <div id="dk" style="display: block;" class="span-9 last"> + <span id="ctl00_ContentBody_EncryptionKey" class="right"></span> + </div> + <div class="Clear"> + </div> + + </div> + + + <div class="span-6 prepend-1 last"> + + +<div class="CacheDetailNavigationWidget NoPrint"> + + <h3 class="WidgetHeader"> + Navigation + </h3> + <div class="WidgetBody"> + + <ul class="CacheDetailsNavLinks"> + <li><a href="http://www.geocaching.com/seek/log.aspx?ID=3376131" class="lnk"><img src="gc433yc_files/write_log.png"> <span>Log your visit</span></a></li> +<li><a href="http://www.geocaching.com/my/watchlist.aspx?w=3376131" class="lnk"><img src="gc433yc_files/watch.png"> <span>Watch Listing</span></a></li> +<li><a href="http://www.geocaching.com/hide/report.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68" class="lnk"><img src="gc433yc_files/edit.png"> <span>Edit Listing</span></a></li> +<li><a href="http://www.geocaching.com/hide/attributes.aspx?WptID=3376131" class="lnk"><img src="gc433yc_files/edit_attributes.png"> <span>Edit Attributes</span></a></li> +<li><a href="http://www.geocaching.com/hide/wptlist.aspx?RefWptID=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&DS=1" class="lnk"><img src="gc433yc_files/waypoints.png"> <span>Waypoints</span></a></li> +<li><a href="http://www.geocaching.com/seek/upload.aspx?id=3376131" class="lnk"><img src="gc433yc_files/photo.png"> <span>Upload Images</span></a></li> +<li><a href="http://www.geocaching.com/seek/log.aspx?ID=3376131&LogType=5" class="lnk"><img src="gc433yc_files/archive.png"> <span>Archive Listing</span></a></li> +<li><a href="http://www.geocaching.com/seek/log.aspx?ID=3376131&LogType=23" class="lnk"><img src="gc433yc_files/enable.png"> <span>Enable Listing</span></a></li> +<li><a href="http://www.geocaching.com/bookmarks/ignore.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&WptTypeID=137" class="lnk"><img src="gc433yc_files/ignore.png"> <span>Ignore Listing</span></a></li> +<li><a href="http://www.geocaching.com/bookmarks/mark.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&WptTypeID=137" class="lnk"><img src="gc433yc_files/bookmark_list.png"> <span>Bookmark Listing</span></a></li> + + </ul> + + </div> + + +</div> + + + + + + <div id="map_preview_canvas" class="TopSpacing leaflet-container leaflet-fade-anim" style="width: 228px; height: 175px; position: relative;"><div style="left: 0px; top: 0px;" class="leaflet-map-pane"><div class="leaflet-tile-pane"><div class="leaflet-layer"><img src="gc433yc_files/303_002.jpg" style="width: 256px; height: 256px; left: -55px; top: -187px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/303.jpg" style="width: 256px; height: 256px; left: 201px; top: -187px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/304_002.jpg" style="width: 256px; height: 256px; left: -55px; top: 69px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/304.jpg" style="width: 256px; height: 256px; left: 201px; top: 69px;" class="leaflet-tile leaflet-tile-loaded"></div></div><div class="leaflet-objects-pane"><div class="leaflet-shadow-pane"></div><div class="leaflet-overlay-pane"></div><div class="leaflet-marker-pane"><img title="Stenarna" style="margin-left: -10px; margin-top: -23px; opacity: 1; left: 114px; top: 88px; z-index: 88;" class="leaflet-marker-icon leaflet-clickable" src="gc433yc_files/137.png"></div><div class="leaflet-popup-pane"></div></div></div><div class="leaflet-control-container"><div class="leaflet-top leaflet-left"><div class="leaflet-control-zoom leaflet-control"><a title="Zoom in" href="#" class="leaflet-control-zoom-in"></a><a title="Zoom out" href="#" class="leaflet-control-zoom-out"></a></div></div><div class="leaflet-top leaflet-right"></div><div class="leaflet-bottom leaflet-left"></div><div class="leaflet-bottom leaflet-right"><div class="leaflet-control-attribution leaflet-control"><a href="http://www.geocaching.com/about/maps.aspx#leaflet" target="_blank">About our maps</a></div></div></div></div> + + + + <div id="ctl00_ContentBody_detailWidget" class="CacheDetailNavigationWidget TopSpacing BottomSpacing"> + + <h3 class="WidgetHeader"> + Attributes</h3> + <div class="WidgetBody"> + <img src="gc433yc_files/wheelchair-no.gif" alt="not wheelchair accessible" title="not wheelchair accessible" height="30" width="30"> <img src="gc433yc_files/available-yes.gif" alt="available 24-7" title="available 24-7" height="30" width="30"> <img src="gc433yc_files/scenic-yes.gif" alt="scenic view" title="scenic view" height="30" width="30"> <img src="gc433yc_files/restrooms-yes.gif" alt="restrooms available" title="restrooms available" height="30" width="30"> <img src="gc433yc_files/attribute-blank.gif" alt="blank" title="blank" height="30" width="30"> <img src="gc433yc_files/attribute-blank.gif" alt="blank" title="blank" height="30" width="30"> <p class="NoBottomSpacing"><small><a href="http://www.geocaching.com/about/icons.aspx" title="What are Attributes?">What are Attributes?</a></small></p> + </div> + + </div> + + + <div id="ctl00_ContentBody_uxBanManWidget" class="CacheDetailPageAds clear"> + + <div id="ctl00_ContentBody_divContentSide"> + + <p class="NoBottomSpacing"> + <span id="ctl00_ContentBody_ADModules_09"><iframe type="iframe" src="gc433yc_files/a.html" marginwidth="0" marginheight="0" hspace="0" vspace="0" style="width:120px;Height:240px;" frameborder="0" height="240" scrolling="no" width="120"><a + +href="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Click&;Mode=HTML&SiteID=1" + target="_blank"><img +src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&Mode=HTML&SiteID=1" + width="120" height="240" border="0" alt="" /></a></iframe></span> + </p> + <p class="AlignCenter"> + <small><a href="http://www.geocaching.com/about/advertising.aspx" id="ctl00_ContentBody_advertisingWithUs" title="Advertising with Us">Advertising with Us</a></small></p> + + </div> + +</div> + + + + <div class="GoogleAds AlignCenter BottomSpacing"> + </div> + <div class="clear"> + </div> + + <span id="ctl00_ContentBody_lnkTravelBugs"></span> + + +<div class="CacheDetailNavigationWidget"> + + <h3 class="WidgetHeader"> + <span id="ctl00_ContentBody_uxTravelBugList_uxInventoryLabel">Inventory</span> + </h3> + <div class="WidgetBody"> + + + + <div class="TopSpacing"> + + <p class="NoBottomSpacing"><a id="ctl00_ContentBody_uxTravelBugList_uxTrackableItemsHistory">View past Trackables</a></p> + <p class="NoBottomSpacing"><a id="ctl00_ContentBody_uxTravelBugList_uxWhatAreTrackables" title="What are Trackable Items?" href="http://www.geocaching.com/track/default.aspx">What are Trackable Items?</a></p> + </div> + + + </div> + + +</div> + + + + + </div> + + + <div id="ctl00_ContentBody_bottomSection" class="span-24 last"> + + <p> + <span id="ctl00_ContentBody_WaypointsInfo" style="font-weight:bold;">Additional Waypoints</span> <span id="ctl00_ContentBody_addEditWptLink">(<a id="ctl00_ContentBody_uxAddEditWaypoints" href="http://www.geocaching.com/hide/wptlist.aspx?RefWptID=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68&DS=1">Add / Edit waypoints</a>)</span> + <br> + No additional waypoints to display. + + </p> + + <div id="uxlrgMap" class="fr"> + + <div class="PageBreakBefore"> + </div> + <div class="CDMapWidget"> + <p class="WidgetHeader NoBottomSpacing"> + <a id="ctl00_ContentBody_uxViewLargerMap" title="View Larger Map" href="http://www.geocaching.com/map/default.aspx?lat=58.80035&lng=17.81005" target="_blank">View Larger Map</a> + </p> + + <div class=" leaflet-container leaflet-fade-anim" id="map_canvas" style="width: 325px; height: 325px; position: relative;"><div style="left: 0px; top: 0px;" class="leaflet-map-pane"><div class="leaflet-tile-pane"><div class="leaflet-layer"><img src="gc433yc_files/4864.jpg" style="width: 256px; height: 256px; left: 20px; top: -139px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/4865.jpg" style="width: 256px; height: 256px; left: 20px; top: 117px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/4864_002.jpg" style="width: 256px; height: 256px; left: -236px; top: -139px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/4864_003.jpg" style="width: 256px; height: 256px; left: 276px; top: -139px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/4865_003.jpg" style="width: 256px; height: 256px; left: -236px; top: 117px;" class="leaflet-tile leaflet-tile-loaded"><img src="gc433yc_files/4865_002.jpg" style="width: 256px; height: 256px; left: 276px; top: 117px;" class="leaflet-tile leaflet-tile-loaded"></div></div><div class="leaflet-objects-pane"><div class="leaflet-shadow-pane"></div><div class="leaflet-overlay-pane"></div><div class="leaflet-marker-pane"><img title="Stenarna" style="margin-left: -10px; margin-top: -23px; opacity: 1; left: 162px; top: 162px; z-index: 261;" class="leaflet-marker-icon " src="gc433yc_files/137.png"></div><div class="leaflet-popup-pane"></div></div></div><div class="leaflet-control-container"><div class="leaflet-top leaflet-left"><div class="leaflet-control-zoom leaflet-control"><a title="Zoom in" href="#" class="leaflet-control-zoom-in"></a><a title="Zoom out" href="#" class="leaflet-control-zoom-out"></a></div></div><div class="leaflet-top leaflet-right"></div><div class="leaflet-bottom leaflet-left"><div class="leaflet-control-scale leaflet-control"><div style="width: 30px;" class="leaflet-control-scale-line">200 m</div><div style="width: 52px;" class="leaflet-control-scale-line">1000 ft</div></div></div><div class="leaflet-bottom leaflet-right"><div class="leaflet-control-attribution leaflet-control"><a href="http://www.geocaching.com/about/maps.aspx#leaflet" target="_blank">About our maps</a></div></div></div></div> + <p class="WidgetFooter"> + <a id="ctl00_ContentBody_uxNotesAboutPrinting" href="#mapPrintingNotes" class="NoPrint">Notes about Printing Maps</a></p> + </div> + <div style="display: none;"> + <div id="mapPrintingNotes"> + To print the map in Firefox and Opera, enable background images in the print dialog. + <a href="#dlgMapPrintWarning" class="dialog" onclick="$.fancybox.close()"> + Close + </a> + </div> + </div> + +</div> + + <p class="NoPrint"> + <span id="ctl00_ContentBody_uxFindLinksHeader" style="font-weight:bold;">Find...</span> + <br> + <span id="ctl00_ContentBody_FindText"></span> + </p> + <ul class="NoPrint"> + <li> + ...other caches + <a id="ctl00_ContentBody_uxFindLinksHiddenByThisUser" href="http://www.geocaching.com/seek/nearest.aspx?u=ra_sch">hidden</a> + or + <a id="ctl00_ContentBody_uxFindLinksFoundByThisUser" href="http://www.geocaching.com/seek/nearest.aspx?ul=ra_sch">found</a> + by this user + </li> + + <li> + ...nearby <a id="ctl00_ContentBody_uxFindLinksNearbyCachesOfType" href="http://www.geocaching.com/seek/nearest.aspx?tx=c66f5cf3-9523-4549-b8dd-759cd2f18db8&lat=58.800350&lng=17.810050">caches of this type</a>, + <a id="ctl00_ContentBody_uxFindLinksNearbyNotFound" href="http://www.geocaching.com/seek/nearest.aspx?tx=c66f5cf3-9523-4549-b8dd-759cd2f18db8&lat=58.800350&lng=17.810050&f=1">that I haven't found</a> + </li> + <li> + ...all nearby <a id="ctl00_ContentBody_uxFindLinksAllNearbyCaches" href="http://www.geocaching.com/seek/nearest.aspx?lat=58.800350&lng=17.810050">caches</a>, + <a id="ctl00_ContentBody_uxFindLinksAllNearbyNotFound" href="http://www.geocaching.com/seek/nearest.aspx?lat=58.800350&lng=17.810050&f=1">that I haven't found</a> + </li> + <li> + ...all nearby <a id="ctl00_ContentBody_uxFindLinksWaymarking" href="http://www.waymarking.com/directory.aspx?f=1&lat=58.800350&lon=17.810050">waymarks on Waymarking.com</a> + </li> + + + <li> + ...nearby <a id="ctl00_ContentBody_uxFindLinksHotels" href="http://www.geocaching.com/reviews/hotels-coords-58.8004,17.8101">Hotels</a> + </li> + </ul> + <p class="NoPrint"> + <span id="ctl00_ContentBody_uxMapLinkHeader" style="font-weight:bold;">For online maps...</span> + </p> + <span class="NoPrint"> + +<ul> + <span id="ctl00_ContentBody_MapLinks_MapLinks"><li><a href="http://www.geocaching.com/map/default.aspx?lat=58.80035&lng=17.81005" target="_blank">Geocaching.com Map</a></li><li><a href="http://maps.google.com/maps?q=N+58%c2%b0+48.021+E+017%c2%b0+48.603+%28GC433YC%29+" target="_blank">Google Maps</a></li><li><a href="http://www.mapquest.com/maps/map.adp?searchtype=address&formtype=latlong&latlongtype=decimal&latitude=58.80035&longitude=17.81005&zoom=10" target="_blank">MapQuest</a></li><li><a href="http://maps.yahoo.com/#lat=58.80035&lon=17.81005&zoom=16&q=58.80035,17.81005&conf=1&start=1&mvt=m&trf=0" target="_blank">Yahoo Maps</a></li><li><a href="http://www.bing.com/maps/default.aspx?v=2&lvl=14&sp=point.58.80035_17.81005_GC433YC" target="_blank">Bing Maps</a></li><li><a href="http://www.opencyclemap.org/?zoom=12&lat=58.80035&lon=17.81005" target="_blank">Open Cycle Maps</a></li><li><a href="http://www.openstreetmap.org/?mlat=58.80035&mlon=17.81005&zoom=12" target="_blank">Open Street Maps</a></li></span> +</ul> + + </span> + <p class="NoPrint"> + + </p> + + <div class="InformationWidget Clear"> + <h3> + 1 Logged Visit</h3> + <div role="button" class="EncryptDecrypt ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-secondary"><span class="ui-button-text"> + <a href="#" class="decrypt-link">Decrypt</a> + </span><span class="ui-button-icon-secondary ui-icon ui-icon-arrowreturnthick-1-w"></span></div> + <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="gc433yc_files/18.png" alt="Post Reviewer Note" title="Post Reviewer Note"> 1 </p></span> + <p class="HalfLeft"> + <a id="ctl00_ContentBody_uxLogbookLink" href="http://www.geocaching.com/seek/cache_logbook.aspx?guid=fee1ad5a-d3df-46b7-9fe0-32eb0d452b68">View Logbook</a> + </p> + <p class="NoBottomSpacing AlignRight"> + <span class="Warning">**Warning!</span> <a href="http://www.geocaching.com/about/glossary.aspx#spoiler" title="Spoilers">Spoilers</a> may be included in the descriptions or links. + </p> + </div> + + <div id="cache_logs_container"> + <table id="cache_logs_table" class="LogsTable NoBottomSpacing"> + <tbody> + <tr class="log-row" data-encoded="false"> <td> <div class="FloatLeft LogDisplayLeft"> <p class="logOwnerProfileName"> <strong><a id="143568283" href="http://www.geocaching.com/profile/?guid=dfd444d0-537a-49ff-90f1-d7ef9b89360b">ra_sch</a></strong></p> <p class="logOwnerBadge"> <img title="Premium Member" src="gc433yc_files/prem_user.gif">Premium Member </p> <p class="logOwnerAvatar"> <a href="http://www.geocaching.com/profile/?guid=dfd444d0-537a-49ff-90f1-d7ef9b89360b"> </a></p> <p class="logOwnerStats"> <img title="Caches Found" src="gc433yc_files/icon_smile.png"> 957 </p> </div> <div class="FloatLeft LogDisplayRight"> <div class="HalfLeft LogType"> <strong> <img title="Post Reviewer Note" alt="Post Reviewer Note" src="gc433yc_files/18.png"> Post Reviewer Note</strong></div> <div class="HalfRight AlignRight"> <span class="minorDetails LogDate">12/21/2012</span></div> <div class="Clear LogContent"> <p class="LogText">test</p> <div class="AlignRight"> <small><a title="View Log" href="http://www.geocaching.com/seek/log.aspx?LUID=c5548283-9e9b-4dfd-bee3-bc4a2b17e1db" target="_blank"> + + View / Edit Log / Images + </a></small> <small><a title="Upload Image" href="http://www.geocaching.com/seek/upload.aspx?LID=284810941" target="_blank">Upload Image</a></small> </div> </div> </div> </td> </tr></tbody> + <tfoot style="display: none;"> + <tr> + <td class="AlignCenter"> + <div id="pnlLazyLoad" style=""> + <img src="gc433yc_files/loading2.gif" class="StatusIcon" alt="Loading"> + Loading Cache Logs... + </div> + <div id="pnlButtonLoad" style="display: none;"> + <a class="MobileButton"> + Load More Logs...</a> + </div> + </td> + </tr> + </tfoot> + </table> + </div> + <p> + <small> + Current Time: <time datetime="2012-12-21T11:14:37Z">12/21/2012 11:14:37 (UTC-08:00) Pacific Time (US & Canada) (19:14 GMT)</time><br>Last Updated: <time title="2012-12-21T19:14:41Z" class="timeago" datetime="2012-12-21T19:14:41Z">about a minute ago</time> on 12/21/2012 11:14:41 (UTC-08:00) Pacific Time (US & Canada) (19:14 GMT) <br>Last Found: Never<br><span class="Warning">This cache has not been published yet.</span><br>Rendered From:Unknown<br>Coordinates are in the WGS84 datum + </small> + </p> + + + </div> + <script id="tmpl_CacheLogRow" type="text/x-jquery-tmpl"> + <tr class="log-row" data-encoded="${IsEncoded}" > + <td> + <div class="FloatLeft LogDisplayLeft" > + <p class="logOwnerProfileName"> + <strong><a id="143568283" href="/profile/?guid=${AccountGuid}">${UserName}</a></strong></p> + <p class="logOwnerBadge"> + <img title="${creator.GroupTitle}" src="${creator.GroupImageUrl}">${creator.GroupTitle} + </p> + <p class="logOwnerAvatar"> + <a href="/profile/?guid=${AccountGuid}"> + {{if includeAvatars && AvatarImage}} + <img width="48" height="48" src="http://img.geocaching.com/user/avatar/${AvatarImage}"> + {{else includeAvatars }} + <img width="48" height="48" src="/images/default_avatar.jpg"> + {{/if}} + </a></p> + <p class="logOwnerStats"> + + {{if GeocacheFindCount > 0 }} + <img title="Caches Found" src="/images/icons/icon_smile.png"> ${GeocacheFindCount} + {{/if}} + + </p> + </div> + <div class="FloatLeft LogDisplayRight"> + <div class="HalfLeft LogType"> + <strong> + <img title="${LogType}" alt="${LogType}" src="/images/logtypes/${LogTypeImage}"> ${LogType}</strong></div> + <div class="HalfRight AlignRight"> + <span class="minorDetails LogDate">${Visited}</span></div> + <div class="Clear LogContent"> + {{if LatLonString.length > 0}} + <strong>${LatLonString}</strong> + {{/if}} + <p class="LogText">{{html LogText}}</p> + {{if Images.length > 0}} + <table cellspacing="0" cellpadding="3" class="LogImagesTable"> + {{tmpl(Images) "tmplCacheLogImages"}} + </table> + {{/if}} + + <div class="AlignRight"> + <small><a title="View Log" href="log.aspx?LUID=${LogGuid}" target="_blank"> + {{if (userInfo.ID==AccountID)}} + View / Edit Log / Images + {{else}} + View Log + {{/if}} + </a></small> + {{if (userInfo.ID==AccountID)}} + <small><a title="Upload Image" href="upload.aspx?LID=${LogID}" target="_blank">Upload Image</a></small> + {{/if}} + </div> + </div> + </div> + </td> + </tr> + </script> + <script id="tmpl_CacheLogImages" type="text/x-jquery-tmpl"> + <tr> + <td> + <a class="tb_images lnk" rel="tb_images[grp${LogID}]" href="http://img.geocaching.com/cache/log/large/${FileName}" data-title="{{tmpl "tmplCacheLogImagesTitle"}}"> + <img title="Photo" alt="Photo" src="/images/icons/16/photo.png"> + <span>${ $('<div />').text($('<div />').html($item.data.Name).text()).html() }</span> + </a> + </td> + </tr> + </script> + <script id="tmpl_CacheLogImagesTitle" type="text/x-jquery-tmpl"> + <span class="LogImgTitle"> ${ $('<div />').text($('<div />').text($('<div />').html($item.data.Name).text()).html()).html() } </span><span class="LogImgLink"> + + <a target="_blank" href="log.aspx?LUID=${$item.parent.parent.data.LogGuid}&IID=${ImageGuid}">View Log</a> + + <a href="http://img.geocaching.com/cache/log/large/${FileName}">Print Picture</a></span> + + {{if (Descr && Descr.length > 0) }} + <br /><p class="LogImgDescription">${ $('<div />').text($('<div />').text($('<div />').html($item.data.Descr).text()).html()).html() }</p> + {{/if}} + </script> + <script id="tmpl_CacheCoordinateUpdate" type="text/x-jquery-tmpl"> + <div class="ccu-update" data-lat="${ll[0]}" data-lng="${ll[1]}"> + <h4 class="BottomSpacing">Corrected Coordinates (hidden from others)</h4> + <dl> + <dt>Original:</dt> + <dd>${ll_formatted} <a href="#" class="ccu-restore">Restore</a></dd> + </dl> + <dl class="ccu-parse"> + <dt>Change To:</dt> + <dd> + <input type="text" max="40" size="35" class="cc-parse-text"> + <button class="ccu-button ccu-parse">Submit</button> + </dd> + </dl> + <dl class="ccu-parseverify" style="display:none;"> + <dt>Change To:</dt> + <dd> + <span class="ccu-parseverify-coords">N 32°38.880′, W 097°23.755′</span> + + <button class="ccu-button ccu-parseverify-accept">Accept</button> <button class="ccu-button ccu-parseverify-cancel">Cancel</button> + </dd> + </dl> + </div> + <div class="Clear"></div> + + </script> + + <script type="text/javascript"> + <!-- + var dh, lat, lng, guid; + + dh = 'true'; + + lat=58.80035; lng=17.81005; guid='fee1ad5a-d3df-46b7-9fe0-32eb0d452b68'; + + + function s2gps(guid) { + var w = window.open('sendtogps.aspx?guid=' + guid, 's2gps', config='width=450,height=450,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no'); + w.focus(); + } + + function s2phone(wpid) { + window.location.href='sendtophone.aspx?gc=' + wpid; + } + + function pl(lc) { + document.location.href='cache_details_print.aspx?guid=' + guid + '&numlogs=' + lc +'&pt=full<=letter&decrypt='+ ((dh)?'y':'n'); + } + function setNotification(id) { + //new Effect.Highlight(id, {startcolor:'#ffffff', endcolor:'#ffff99', restorecolor:'#ffff99', duration:3.0, queue:'front'}); + //new Effect.Highlight(id, {startcolor:'#ffff99', endcolor:'#ffffff', restorecolor:'#ffffff', duration:5.0, queue:'end'}); + } + function cmo(id) { + //new Effect.Fade(id); + Cookie.set('sn', true); + } + function pp(img) { + var w = window.open(img); + w.focus(); + } + + //--> + </script> + <script language="javascript" type="text/javascript"> + var map, bounds; + var canUpdateFavoriteStatus = true; + var decryptLogs = (urlParams["decrypt"] && urlParams["decrypt"] == "y") ? true : false; + var logInitialLoaded = false; + var $tfoot = $("#cache_logs_table").find("tfoot"); + var currentPageIdx = 1, totalPages = 1, pageSize = 10; + var isBusy = false; + + var locString = { + decrypt: 'Decrypt', + encrypt: 'Encrypt' + }; + + $("#tmpl_CacheLogImagesTitle").template("tmplCacheLogImagesTitle"); + $("#tmpl_CacheLogImages").template("tmplCacheLogImages"); + $("#tmpl_CacheLogRow").template("tmplCacheLogRow"); + + $(".EncryptDecrypt") + .button({ icons: { secondary: 'ui-icon-arrowreturnthick-1-w'} }) + .click(function (e) { + e.preventDefault(); + $("tr.log-row").each(function (i, obj) { + var $obj = $(obj); + if ($obj.data("encoded") == true) { + var lt = $obj.find("p.LogText"); + //var ltDecoded = $('<div />').html(lt.html()).text(); + lt.html(convertROTStringWithBrackets(lt.html())); + } + }); + + decryptLogs = !decryptLogs; + + $("a.decrypt-link").html(decryptLogs ? locString.encrypt : locString.decrypt); + + return false; + }); + + function appendNewLogs(obj) { + + totalPages = obj.pageInfo.totalPages; + + var $newBody = $(document.createElement("TBODY")); + + $("#tmpl_CacheLogRow").tmpl(obj.data,{ includeAvatars: includeAvatars }).appendTo($newBody); + + $newBody.find("a.tb_images").each(function() + { + var $this = $(this); + $this.fancybox({ + 'type': 'image', + 'titlePosition': 'inside', + 'padding': 10, + titleFormat: function() { return $this.data('title'); } + }); + }); + + $("#cache_logs_table") + .append($newBody.children()); + + currentPageIdx = obj.pageInfo.idx + 1; + pageSize = obj.pageInfo.size; + } + + function callLogLoad(hideFooter) { + $.getJSON("/seek/geocache.logbook", { tkn: userToken, idx: currentPageIdx, num: pageSize, decrypt: decryptLogs }, + function (response) { + if (response.status == "success") { + appendNewLogs(response); + if( hideFooter || (totalPages < currentPageIdx) ) { + $tfoot.hide(); + } + } else if (response.status == "error" && response.value == "1") { + // reload the page since the data had expired. + window.location.reload(); + } + isBusy = false; + }); + } + + $("#add_to_favorites").click(function () { + + if (canUpdateFavoriteStatus) { + canUpdateFavoriteStatus = false; + + var fv = parseInt($(".favorite-value").text()); + fv++; + $(".favorite-value").text(fv); + + var fr = parseInt($(".favorite-rank").text()); + fr--; + $(".favorite-rank").text(fr); + + $("#pnlNonfavoriteCache").fadeOut("fast", function () { + $("#pnlFavoriteCache").fadeIn("fast"); + }); + + $.ajax({ + type: "POST", + cache: false, + url: '/datastore/favorites.svc/update?u=' + userToken + '&f=true', + success: function () { + canUpdateFavoriteStatus = true; + gotScore = false; + showFavoriteScore(); + } + }); + + return false; + } + }); + + $("#remove_from_favorites").click(function () { + + if (canUpdateFavoriteStatus) { + canUpdateFavoriteStatus = false; + + var fv = parseInt($(".favorite-value").text()); + fv--; + $(".favorite-value").text(fv); + + var fr = parseInt($(".favorite-rank").text()); + fr++; + $(".favorite-rank").text(fr); + + $("#pnlFavoriteCache").fadeOut("fast", function () { + $("#pnlNonfavoriteCache").fadeIn("fast"); + }); + + $.ajax({ + type: "POST", + cache: false, + url: '/datastore/favorites.svc/update?u=' + userToken + '&f=false', + success: function () { + canUpdateFavoriteStatus = true; + gotScore = false; + showFavoriteScore(); + } + }); + + return false; + } + }); + + $(function () { + + // CSP Section + if ($("#cspMessage").length) { + + var editLink = $('a[href*="report.aspx"]').attr('href'); + + $("#cspMessage").prepend('<P>Please take a moment to check the listing and ensure it is ready to enable. Clicking "Submit for Review" will enable your cache page.</P>'); + $("#cspMessage").prepend('<P>Once it is enabled, you will receive a confirmation email that it was successfully submitted. It is peak season for cache placement. Your volunteer reviewer will strive to begin the review process within the next 7 days.</P>'); + $("#cspMessage").prepend('<P>Your cache page has not been reviewed yet. It will not appear in the review queue until you enable it.</P>'); + + $("#cspGoBack").click(function (e) { + e.preventDefault(); + window.location = editLink; + return false; + }); + + $("#cspSubmit").click(function (e) { + e.preventDefault(); + $.pageMethod("EnableCSPCache", JSON.stringify({ dto: { ut: userToken } }), function (r) { + var r = JSON.parse(r.d); + if (r.success == true) { + window.location = '/seek/cache_details.aspx?guid=' + r.guid; + } else { + alert("There was an error enabling your cache."); + } + }); + return false; + }); + + $("#cspConfirm").change(function() { + if ($("#cspConfirm").is(":checked")) { + $("#cspSubmit").removeAttr('disabled'); + $("#cspGoBack").attr('disabled', true); + } else { + $("#cspSubmit").attr('disabled', true); + $("#cspGoBack").removeAttr('disabled'); + } + }); + } + + + //override coords + if (typeof(userDefinedCoords) != "undefined") { + if (userDefinedCoords.status == "success" && userDefinedCoords.data.isUserDefined == true) { + mapLatLng = $.extend({}, mapLatLng, userDefinedCoords.data); + $("#uxLatLon") + .data("isOverridden", true) + .addClass("myLatLon"); + } else if (userDefinedCoords.status == "success") { + mapLatLng = $.extend({}, mapLatLng, userDefinedCoords.data); + } else { + $("#uxLatLonLink").contents().unwrap(); + } + } else { + $("#uxLatLonLink").contents().unwrap(); + } + + + var cacheNoteText = { + DefaultText: 'Click to enter a note', + ErrorInSaving: 'There was an error saving page. Please refresh the page and try again.', + SavingText: 'Please wait, saving your note...' + }; + + + + $("time.timeago").timeago(); + + $(".button").button(); + + var sn = Cookie.get('sn'); + + if ($('#trNotPM').length > 0) { + $('#trNotPM').toggle(!sn); + } + + $("#cache_note").editInPlace({ + callback: function (unused, enteredText) { + var me = $(this); + + var et = $.trim(enteredText); + if (et.length > 500) + et = et.substr(0, 500); + + $.pageMethod("SetUserCacheNote", JSON.stringify({ dto: { et: et, ut: userToken} }), function (r) { + var r = JSON.parse(r.d); + if (r.success == true) { + if ($.trim(r.note) == "") { + $("#cache_note").text(cacheNoteText.DefaultText); + } else { + $("#cache_note").text(r.note); + } + + me.effect('highlight', { color: '#ffb84c' }, 'slow'); + } else { + alert(cacheNoteText.ErrorInSaving); + $("#cache_note").text(cacheNoteText.DefaultText); + } + + }); + + return cacheNoteText.SavingText; + } + , default_text: cacheNoteText.DefaultText + , field_type: "textarea" + , textarea_rows: "7" + , textarea_cols: "65" + , show_buttons: true + , bg_over: "#FDEBBB" + //, callback_skip_dom_reset: true + + }); + + $("#lnk_slippyMap").click(function(e) { + e.preventDefault(); + loadDynamicMap(); + return false; + }); + + $(".inplace_field").live("focus", function () { + if ($(this).data("created") == null) { + $(this).data("created", true) + $(this).countable({ + maxLength: 500 + }); + } + }); + + $("#pcn_help").tipTip({ activation: 'hover', content: 'Enter your own notes here. No other user will be able to access them.' }); + + $("a.decrypt-link").html(decryptLogs ? locString.encrypt : locString.decrypt); + + if ($("#cache_logs_container").length > 0) { + + appendNewLogs(initalLogs); + + if (DetectMobileQuick()) { + $("#pnlButtonLoad") + .show() + .find("a.MobileButton") + .click(function (e) { + e.preventDefault(); + callLogLoad(false); + return false; + }) + .button(); + if(!DetectTierTablet()){ + $("a.MobileButton").addClass("Phone"); + } + } else { + $("#pnlLazyLoad").show(); + + $(window).endlessScroll({ + fireOnce: true, + fireDelay: 500, + bottomPixels: ($(document).height() - $("#cache_logs_container").offset().top) + 50, + ceaseFire: function(){ + // stop the scrolling if the last page is reached. + return (isLoggedIn == false) || (totalPages < currentPageIdx); + }, + callback: function() { + if (!isBusy) { + + isBusy = true; + $tfoot.show(); + callLogLoad(true); + } + } + }); + } + } + + if (!isLoggedIn) { + $("#cache_logs_table").find("tfoot").hide(); + } + + if (mapLatLng != null) { + + $("#uxLatLonLink").qtip({ + suppress:false, + content: buildCacheCoordMenu(), + position: { + my: 'left top', + at: 'right top', + adjust: { + x: 10, y: -10 + } + }, + show: { + ready: false, + event: "click", + solo: true + }, hide: { + event: 'unfocus' + }, + style: { + tip: { + corner: false + }, + classes: 'ui-tooltip-widget' + }, + events: { + show: function () { + if ($("#uxLatLon").data("isOverridden")) { + $("a.ccu-restore").show(); + } else { + $("a.ccu-restore").hide(); + } + + if (userDefinedCoords.status != "success") { + $("div.ccu-update").hide(); + } else { + $("div.ccu-update").show(); + } + } + } + }).click(function (e) { + e.preventDefault(); + return false; + }); + + setStaticMaps(); + //$("#staticMap").lazyload(); + } + }); + + function setStaticMaps() { + + var map = new L.Map('map_preview_canvas', { + center: new L.LatLng(mapLatLng.lat, mapLatLng.lng), + zoom: 10, + doubleClickZoom: false, + dragging: false, + touchZoom: false, + scrollWheelZoom: false, + attributionControl: false + }) + .addControl(new L.Control.Attribution({ prefix: '<a href="/about/maps.aspx#leaflet" target="_blank">About our maps</a>' })); + + + var mapLarge = new L.Map('map_canvas', { + center: new L.LatLng(mapLatLng.lat, mapLatLng.lng), + zoom: 14, + doubleClickZoom: true, + dragging: true, + touchZoom: false, + scrollWheelZoom: false, + zoomControl: true, + attributionControl: false + }) + .addControl(new L.Control.Attribution({ prefix: '<a href="/about/maps.aspx#leaflet" target="_blank">About our maps</a>' })) + .addControl(new L.Control.Scale()); + + var tileOptions = { + tileUrl: "http://otile{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg", + name: "mpqosm", + alt: "MapQuest", + //attribution: "Tiles Courtesy of <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png'>, Map and map data © 2012 <a href=\"http://www.openstreetmap.org\" target='_blank'>OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>. ", + subdomains: "1234", + tileSize: 256, + minZoom: 0, + maxZoom: 18 + }; + + map.addLayer(new L.TileLayer(tileOptions.tileUrl, tileOptions)); + mapLarge.addLayer(new L.TileLayer(tileOptions.tileUrl, tileOptions)); + + var pinIcon = L.Icon.extend({ + iconSize: new L.Point(20, 23), + iconAnchor: new L.Point(10,23), + shadowUrl: null + }); + + var mkA = new L.Marker(new L.LatLng(mapLatLng.lat, mapLatLng.lng), + { + icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + mapLatLng.type + '.png', iconAnchor: new L.Point(10,23)}), + title: mapLatLng.name + }) + .on("click", function () { + document.getElementById("uxlrgMap").scrollIntoView(true); + return false; + }); + + var mkA2 = new L.Marker(new L.LatLng(mapLatLng.lat, mapLatLng.lng), { + icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + mapLatLng.type + '.png', iconAnchor: new L.Point(10,23)}), + clickable: false, zIndexOffset:99, title: mapLatLng.name + }); + + map.addLayer(mkA); + mapLarge.addLayer(mkA2); + + $("#ctl00_ContentBody_uxNotesAboutPrinting").fancybox({ + overlayShow: false + }); + + + if (cmapAdditionalWaypoints != null && cmapAdditionalWaypoints.length > 0) { + var llBounds = new L.LatLngBounds(); + + for (var x = 0, len = cmapAdditionalWaypoints.length; x < len; x++) { + var item = cmapAdditionalWaypoints[x], + ll = new L.LatLng(item.lat, item.lng), + marker = new L.Marker(ll, { + icon: new pinIcon({iconUrl:'/images/wpttypes/pins/' + item.type + '.png', iconAnchor: new L.Point(10,23)}), + title: item.name, + clickable:false + }); + + llBounds.extend(ll); + mapLarge.addLayer(marker); + } + var bz = mapLarge.getBoundsZoom(llBounds); + + mapLarge.setView(new L.LatLng(mapLatLng.lat, mapLatLng.lng), bz); + } + } + + + + function dht() { + try { + $('#div_hint').html(convertROTStringWithBrackets($('#div_hint').html())); + var linkText = (($('#ctl00_ContentBody_lnkDH').attr('title') == 'Decrypt') ? 'Encrypt' : 'Decrypt'); + $('#ctl00_ContentBody_lnkDH').text(linkText); + $('#ctl00_ContentBody_lnkDH').attr('title', linkText); + } catch (e) { + alert(e); + return false; + } + return false; + } + + function buildCacheCoordMenu() { + var curLatLng = new LatLon(mapLatLng.lat, mapLatLng.lng) + $.template( "tmplCacheCoordinateUpdate_CoordItem", "<tr><td nowrap='nowrap'>${t}</td><td class='ccc-coord' nowrap='nowrap' dataum='${k}'>${v}</td></tr>" ); + + var $menu = $("<div></div>"); + + $( "#tmpl_CacheCoordinateUpdate" ).tmpl( { + ll: [mapLatLng.lat, mapLatLng.lng], + ll_formatted: mapLatLng.oldLatLngDisplay + } ).appendTo( $menu ); + + $menu.find("button.ccu-button").button(); + + $menu.delegate("button.ccu-parse", "click", function (e) { + e.preventDefault(); + var $this = $(e.target), + $parse =$this.closest('dd').find(".cc-parse-text"), + parseCoords = $.trim($parse.val()); + + if (parseCoords.length == 0) { + alert('Please provide valid coordinates.'); + } else { + $.getJSON("/api/geocode", { parse: parseCoords}, function (response) { + if (response.status == "success") { + var newLatLng = new LatLon(response.data.lat, response.data.lng); + + // update the displayed coords + var dist = curLatLng.rhumbDistanceTo(newLatLng); + var bearingTo = curLatLng.rhumbBearingTo(newLatLng); + var bearing = bearingTo >= 0 || bearingTo < 22.5 ? "N" : bearingTo >= 22.5 || bearingTo < 67.5 ? "NE" : bearingTo >= 67.5 || bearingTo < 112.5 ? "E" : bearingTo >= 112.5 || bearingTo < 157.5 ? "SE" : bearingTo >= 157.5 || bearingTo < 202.5 ? "S" : bearingTo >= 202.5 || bearingTo < 247.5 ? "SW" : bearingTo >= 247.5 || bearingTo < 292.5 ? "W" : bearingTo >= 292.5 || bearingTo < 337.5 ? "NW" : "N"; + + var formats = response.data.formats; + // all these finds, make me feel dirty + $menu + .find("span.ccu-parseverify-coords").text(formats.DM).end() + .find("dl.ccu-parse").hide().end() + .find("dl.ccu-parseverify").show().end() + .find("button.ccu-parseverify-accept") + .data("utm", '') + .data("dm", formats.DM) + .data("lat", response.data.lat) + .data("lng", response.data.lng) + .end(); + } else { + alert("Sorry unable to parse the coordinates you entered."); + } + }); + } + + return false; + }); + + $menu.delegate("button.ccu-parseverify-accept", "click", function (e) { + e.preventDefault(); + var $this = $(this); + // update to webmethod + $.pageMethod("SetUserCoordinate", JSON.stringify({ dto: { data: {lat: $this.data("lat"), lng: $this.data("lng") }, ut: userToken } }), function (r) { + var r = JSON.parse(r.d); + if (r.status == "success") { + window.location.reload(); + } else { + $("#uxLatLonLink").qtip('hide'); + } + + }); + + return false; + }); + + $menu.delegate("button.ccu-parseverify-cancel", "click", function (e) { + e.preventDefault(); + $menu + .find("input.cc-parse-text").val('').end() + .find("dl.ccu-parse").show().end() + .find("dl.ccu-parseverify").hide().end(); + return false; + }); + + $menu.delegate("a.ccu-restore", "click", function (e) { + e.preventDefault(); + + $.pageMethod("ResetUserCoordinate", JSON.stringify({ dto: { ut: userToken } }), function (r) { + var r = JSON.parse(r.d); + if (r.status == "success") { + window.location.reload(); + } + }); + + return false; + }); + + return $menu; + } + + GSPK = window.GSPK || {}; + GSPK.Selector = {}; + GSPK.Selector.getSelected = function(){ + var t = null; + if ( window.getSelection ){ + t = window.getSelection(); + }else if(document.getSelection){ + t = document.getSelection(); + }else if(document.selection){ + t = document.selection.createRange().text; + } + return t; + } + + try { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'Premium', null, true]); } catch(err) { } + </script> + + + + </div> + + + + + </div> + + + </section> + + <footer> + + <div class="container"> + + <div class="span-24 last FooterTop"> + + + +<div class="LocaleText"> + + <strong>Choose Your Language:</strong> + +</div> +<div class="LocaleList"> + + <div class="selected-language"> + + <a href="#">English▼</a> + + </div> + <ul class="language-list"> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li> + + <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li> + + </ul> + +</div> +<script type="text/javascript"> + + jQuery(document).ready(function () { + jQuery(".selected-language a").click(function (e) { + e.preventDefault(); + var $loc = jQuery(this).parent().next(); + jQuery($loc).show().position({ + of: $loc.parent(), + my: "left top", + at: "left bottom", + offset: "0 0", + collision: "fit fit" + }); + jQuery(this).addClass("Expanded"); + jQuery(document).click(function () { + jQuery(".language-list").fadeOut("fast"); + jQuery(".selected-language a").removeClass("Expanded"); + }); + return false; + }); + }); +</script> + + </div> + + <div class="span-4"> + + <p class="FooterHeader"> + <strong> + About</strong></p> + <ul class="FooterLinks"> + <li> + <a id="ctl00_hlFooterGlossary" title="Glossary of Terms" href="http://www.geocaching.com/about/glossary.aspx">Glossary of Terms</a></li> + <li> + <a id="ctl00_hlFooterBrochures" title="Brochures" href="http://www.geocaching.com/tools/#Guide">Brochures</a></li> + <li> + <a id="ctl00_hlFooterAbout" title="About Groundspeak" href="http://www.geocaching.com/about/groundspeak.aspx">About Groundspeak</a></li> + <li> + <a id="ctl00_hlFooterVolunteers" title="About Our Volunteers" href="http://www.geocaching.com/volunteers/">About Our Volunteers</a></li> + <li> + <a id="ctl00_hlFooterHistory" title="History" href="http://www.geocaching.com/about/history.aspx">History</a></li> + </ul> + + </div> + + <div class="span-4"> + + <p class="FooterHeader"> + <strong> + Press</strong></p> + <ul class="FooterLinks"> + <li> + <a id="ctl00_hlFooterNews" title="News Articles" href="http://www.geocaching.com/press/">News Articles</a></li> + <li> + <a id="ctl00_hlFooterMediaFAQs" title="Media FAQs" rel="document" href="http://www.geocaching.com/articles/Brochures/footer/FAQ_Media.pdf">Media FAQs</a></li> + <li> + <a id="ctl00_hlFooterMediaInquiries" title="Media Inquiries" rel="external" href="http://support.groundspeak.com/index.php?pg=request&xCategory=11">Media Inquiries</a></li> + </ul> + + </div> + + <div class="span-5"> + + <p class="FooterHeader"> + <strong> + Questions & Suggestions</strong></p> + <ul class="FooterLinks"> + <li> + <a id="ctl00_hlFooterHelpCenterLink" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li> + <li> + <a id="ctl00_hlFooterDiscussionForums" accesskey="f" title="Discussion Forums" href="http://www.geocaching.com/forums/">Discussion Forums</a></li> + <li> + <a id="ctl00_hlFooterParksPoliceLink" title="Land Management and Law Enforcement" href="http://www.geocaching.com/parksandpolice/">Land Management and Law Enforcement</a></li> + <li> + <a id="ctl00_hlFooterContactUs" title="Contact Us" href="http://www.geocaching.com/contact/">Contact Us</a></li> + </ul> + + </div> + + <div class="span-4"> + + <p class="FooterHeader"> + <strong> + Resources</strong></p> + <ul class="FooterLinks"> + <li> + <a id="ctl00_hlFooterTools" accesskey="o" title="Tools and Downloads" href="http://www.geocaching.com/tools/">Tools and Downloads</a></li> + <li> + <a id="ctl00_hlFooterAPIProgram" title="API Program" href="http://www.geocaching.com/live/">API Program</a></li> + <li> + <a id="ctl00_hlFooterBenchmarks" title="Find a Benchmark" href="http://www.geocaching.com/mark/">Find a Benchmark</a></li> + </ul> + + </div> + <div class="span-4 append-3 last"> + + <p class="FooterHeader"> + <strong> + Follow Us</strong></p> + <ul class="FooterLinks FollowUsLinks"> + <li><a id="ctl00_hlFacebook" title="Facebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts"><img id="ctl00_imgFacebook" title="Facebook" src="gc433yc_files/icon_facebook.png" alt="Facebook" style="border-width:0px;"></a></li> + <li><a id="ctl00_hlTwitter" title="Twitter" href="http://twitter.com/GoGeocaching"><img id="ctl00_imgTwitter" title="Twitter" src="gc433yc_files/twitter_icon_white_22.png" alt="Twitter" style="border-width:0px;"></a></li> + <li><a id="ctl00_hlFlickr" title=" Flickr" href="http://www.flickr.com/photos/geocaching_com/"><img id="ctl00_imgFlickr" title="Flickr" src="gc433yc_files/icon_flickr.png" alt="Flickr" style="border-width:0px;"></a></li> + <li><a id="ctl00_hlYouTube" title="YouTube" href="http://www.youtube.com/user/GoGeocaching"><img id="ctl00_imgYouTube" title="YouTube" src="gc433yc_files/icon_youtube.png" alt="YouTube" style="border-width:0px;"></a></li> + </ul> + + </div> + + <p class="span-24 last FooterBottom"> + Copyright + © 2000-2012 + <a href="http://www.groundspeak.com/" title="Groundspeak, Inc." accesskey="g">Groundspeak, Inc.</a> + All Rights Reserved.<br> + <a id="ctl00_hlFooterTerms" accesskey="u" title="Groundspeak Terms of Use" href="http://www.geocaching.com/about/termsofuse.aspx">Groundspeak Terms of Use</a> + | + <a id="ctl00_hlFooterPrivacy" accesskey="x" title="Privacy Policy" href="http://www.geocaching.com/about/privacypolicy.aspx">Privacy Policy</a> + | + <a id="ctl00_hlFooterLogo" accesskey="l" title="Geocaching Logo Usage Guidelines" href="http://www.geocaching.com/about/logousage.aspx">Geocaching Logo Usage Guidelines</a> + | + <a id="ctl00_hlFooterAPI" accesskey="`" title="API License Agreement" href="http://www.geocaching.com/live/api_license_agreement.aspx">API License Agreement</a> + | + <a id="ctl00_HlFooterStatus" accesskey="`" title="Current Service Status" href="http://status.geocaching.com/">Service Status</a></p> + + </div> + + + </footer> + <div class="SkipLinks"> + + <a id="ctl00_hlSkipLinksTop" accesskey="t" title="Return to the Top of the Page" href="#Top">Return to the Top of the Page</a> + + </div> + + + + +<script type="text/javascript"> +//<![CDATA[ +var uvtoken = 'eQoxbEsq2D0GKwApaTf6ye1uohqqSH9uBN58l8RKNQR8LIUjzbsrLb35KciGi63NpSiOeI%2bbWi%2f2TK4A7hs18eGBxRDQY0Zdteyw6JOTSnSn4usk0Adoik1Hroz5IVJb%2fZ2YYVAP1zIGCPXp2qNQJvRKrkJIEPUsjSMaDRtfTlWoJrj2CHNs%2blb1Gqo3Rg3iLL0MtaX54CezHnyjaw9diMDzKpLHNEp3BQ3%2bYKGSSDiHgKb1By9RwqflB4CwsGJSNgnF813K%2b4WkJ67Heid%2bwMyNcUkK77xwHvPHZykAsUIYz%2fABtMMd5CsIOqqOuTqA';var isLoggedIn = true; +var userDefinedCoords = {"status":"fail","data":{"isUserDefined":false,"oldLatLngDisplay":"N 58° 48.021' E 017° 48.603'"}}; +mapLatLng = {"lat":58.80035,"lng":17.81005,"type":137,"name":"Stenarna"}; +var ccConversions = [{"t":"Decimal","k":"DD","d":"WGS84","v":"58.800350, 017.810050"},{"t":"DDD MM SS.SSS","k":"DMS","d":"WGS84","v":"N 58° 48' 01.260\" E 017° 48' 36.180\""},{"t":"UTM","k":"UTM","d":"WGS84","v":"33V E 662347 N 6521227"}]; +userInfo = {ID: 1750448}; +userToken = 'FOUTFKOKLELXO6UEFIAQZWR6FG2ZEQLSILWLDKKY2HLEBIZYVHL44E2A27ZQQEK3WKH5JLPDQY24MBCNITG7FIJDSON6YYQ2FJXQVAEE5X7543VDICPKLCBGI53CYFJMR2S4JRHE4URPVORDQTHYRGYK5AJWDE63UP7VC5M2XKK4WREFITXQFRBJD46T4JDBPNENTZ3U4GVXK7NFUZWAPM3UX74XVRXHWYHNTKZ47HR72BTNMCBA'; +includeAvatars = false; +initalLogs = {"status":"success", "data": [{"LogID":284810941,"CacheID":3376131,"LogGuid":"c5548283-9e9b-4dfd-bee3-bc4a2b17e1db","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Post Reviewer Note","LogTypeImage":"18.png","LogText":"test","Created":"12/21/2012","Visited":"12/21/2012","UserName":"ra_sch","MembershipLevel":3,"AccountID":1750448,"AccountGuid":"dfd444d0-537a-49ff-90f1-d7ef9b89360b","Email":"","AvatarImage":"","GeocacheFindCount":957,"GeocacheHideCount":3,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 1, "rows": 1 } }; +//]]> +</script> +</form> + <script type="text/javascript"> + var browserType = { + IE: !!(window.attachEvent && !window.opera), + Opera: !!window.opera, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }; + + $(function () { + // Make the menu system play nice with all browsers: + $('ul.Menu li').hover(function () { + $(this).addClass('hover'); + $('ul:first', this).css('visibility', 'visible'); + }, function () { + $(this).removeClass('hover'); + $('ul:first', this).css('visibility', 'hidden'); + }); + if (!isiOS()) { + // Constructing a Twitter-esque Login: + $(".SignInLink").click(function (e) { + e.preventDefault(); + $("#SignInWidget").toggle(); + $(".ProfileWidget").toggleClass("WidgetOpen"); + $(this).blur(); + $("#ctl00_tbUsername").focus(); + }); + $(".SignInCloseLink").click(function () { + $("#SignInWidget").toggle(); + $(".ProfileWidget").toggleClass("WidgetOpen"); + }); + } + $('.SignedInProfileLink').truncate({ + width: 120, + after: '&hellip;', + center: false, + addclass: false, + addtitle: false + }); + + // Hide the warning message if the user closed it already + if ($.cookie('hide_warning') != null) { + $(".WarningMessage").hide(); + } else { + $("#warningCloseButton").click(function () { + $('.WarningMessage').hide('blind'); + $.cookie('hide_warning', 'true', { expires: 1 }); + }); + } + + function isiOS() { + return ( + (navigator.userAgent.match(/(iPhone)|(iPod)|(iPad)/i)) + ); + } + }); + </script> + + + <script id="loc_favPointsScoreDesc" type="text/html"> + Favorites/Premium Logs + </script> + <script type="text/javascript" language="javascript"> + <!-- + + + + var gotScore = false; + var favDropDown = $('.favorite-dropdown'); + var favContainer = $('.favorite-container'); + + function showFavoriteScore() { + $('#imgFavoriteScore').attr('src', '/images/loading3.gif'); + + $('#uxFavoriteScore').parent().fadeTo(200, .001, function () { + $.ajax({ + type: "POST", + cache: false, + url: '/datastore/favorites.svc/score?u=' + userToken, + success: function (scoreResult) { + gotScore = true; + + var score = 0; + + if(scoreResult) + score = scoreResult; + + if(score > 100) + score = 100; + + $('#imgFavoriteScore').attr('src', '/images/favorites/piecharts/' + score + '.png'); + var pieDesc = (score < 1 ? "<1" : score) + '% ' + $("#loc_favPointsScoreDesc").text().trim(); + $('#imgFavoriteScore').attr('alt', pieDesc); + $('#imgFavoriteScore').attr('title', pieDesc); + + $('#uxFavoriteScore').parent().fadeTo(1000, 1); + $('#uxFavoriteScore').html('<strong>' + (score < 1 ? "<1" : score) + '%</strong> ' + $("#loc_favPointsScoreDesc").html()); + } + }); + }); + } + + + + $(document).bind('mouseup', function (e) { + var $clicked = $(e.target); + + + if (!$clicked.parents().hasClass("favorite-dropdown") && !$clicked.parents().hasClass("FavoriteWidget")) { + favDropDown.hide(1, function () { + favContainer.addClass('favorite-container'); + favContainer.removeClass('favorite-container-open'); + $('#imgFavoriteArrow').attr('src', '/images/arrow-down.png'); + }); + } + }); + + $('#uxFavContainerLink').click(function () { + if ($(favDropDown).is(':visible')) { + favDropDown.hide(1, function(){ + favContainer.addClass('favorite-container'); + favContainer.removeClass('favorite-container-open'); + $('#imgFavoriteArrow').attr('src', '/images/arrow-down.png'); + }); + } + else { + if (!gotScore) { + showFavoriteScore(); + } + + favContainer.addClass('favorite-container-open'); + favContainer.removeClass('favorite-container'); + $('#imgFavoriteArrow').attr('src', '/images/arrow-up.png'); + favDropDown.show(1); + } + }); + // End --> + </script> + + + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-2020240-1']); + _gaq.push(['_trackPageview']); + (function () { + var ga = document.createElement('script'); + ga.src = ('https:' == document.location.protocol ? + 'https://ssl' : 'http://www') + + '.google-analytics.com/ga.js'; + ga.setAttribute('async', 'true'); + document.documentElement.firstChild.appendChild(ga); + })(); + $(function () { + $("a.language").click(function (e) { + e.preventDefault(); + window.location.replace(window.location.href + (window.location.search.indexOf("?") == -1 ? "?" : "&") + "lang=" + $(this).attr("lang")); + }); + }); + </script> + + + <!-- Quantcast Tag --> + <div id="Quantcast"> + <script type="text/javascript"> + var _qevents = _qevents || []; + + (function () { + var elem = document.createElement('script'); + + elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js"; + elem.async = true; + elem.type = "text/javascript"; + var scpt = document.getElementsByTagName('script')[0]; + scpt.parentNode.insertBefore(elem, scpt); + })(); + </script> + <script type="text/javascript"> + _qevents.push({ qacct: "p-f6VPrfmR4cujU" }); + </script> + <noscript> + <div style="display: none;"> + <img src="http://pixel.quantserve.com/pixel/p-f6VPrfmR4cujU.gif" height="1" width="1" + alt="Quantcast" /></div> + </noscript> + </div> + <!-- End Quantcast tag --> + + <!-- Server: WEB13; Build: Web.HotFix_20121211.1 --> + + +<div class="header gctour-grand-default" id="gctourButtonWrapper"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDGQg7CZXhIq0AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAD30lEQVQ4yy3M2W8UBRwH8O9vjj2ms92rpUsPutClLdjVQi0WS%2BHBNCq2QCKJhoemLxhr9QlTEhIjPIgxKiRINKSiQEKEBINIsVpSSRpQMLZKCU3tfQBdeyzda3Z3ZnZ%2Bvvj5Az5kWZaLiOwAFAAeZl6z%2BNevNRM%2FnGoB4JEUl5ReeuRNRaY9joKSZFnT%2Fpny5rYRu7tgEsA%2FAMaImSsBuP5P8mb7L25%2BfPvqzuo3D8%2F5qupVQ0sUyoqLLNPgse9Pls%2FevFCua3E5tOedBxWtHX2ykn9HAlDFM39uIFESkjZveuH367X1Xed%2FkZ15%2Fid3e8omrp1%2Brul47z1BklPVb3TFK%2FZ0LE799HVo%2BMz729jQ9eoDR2YkTixtxc3PX%2BP2s7cfnuiorDvUfUNyKGlmThc3tDy5d%2FzAbiLKAkgBEGWnyxXa%2B%2B5TpaAUeYGgJYhSoUBDVxqxMh2MR6MVzoISu%2Bx0qUTkJCKZmaXSptdnouNDfmZWcnpG1RNR1UhEHe4NYcHQ4r6ckQ2Q9UnjAoVeNEesYi0QbpzyVdWPA0gDUAEEsvGVwgfdh4Nrt7dGVifv58dnR%2FypyJRLj6%2BIejrFzWeGr0mIRVQE65%2Fqg4MeW76%2FAIDAc0OO5G%2BXS1aXI66Et9LKrC45kyMDtuJsxFa2721NKgpZDn%2BxOH%2BqzS5c%2F2CrBLaAlVkHBMkm2hyF030XSsa%2F6ija5taENTvbk4H9h%2BKr44P68qUjHq8tKiDPyXD7BZxvz1s3elk2fEESEN49hzvfuFQzJqXmR92e0BZ74KX2jHpiftn27KuWfLS6SFFdtmTx85wmhVASlhAZdfAfl2RiE5RNigL2fnSLFa9W8fCcU%2FiuU%2FUaS1K483RW8pWKqN1ngS2SVa%2FIVk7U3OsIfZ8pfOsLG1kGMjnAbO6akEhx3%2Bf3eon%2BvvqCMnCu0jz5ikuq3GFy01smhm%2FI8Ach%2B0ul4vUbybaQIP75Y5GMDHIWMO8OZ8sb26eImRuYOQSgiixz8%2FjFYw3ywJeBYD4IWpwgiIBdZTZ1gpEBLBNEQEwHzLZv53y72vqJmQPMXARgIxHVAtgy1tNdZ%2FR%2BWrCJZ0XkTBAIAMMCYAl2XvDWZO2ymCtSZY2D9UPEzA4AbgBBAHVs6ttJT4ZTpuB3HK1aG9vUkhB0zQDYyNjcmccJy%2FLW7Fhab08amLwro%2FXYFQmAwcwZIkrC1OP48cMAj%2FSVKU0Hl1BYHvMdPNuvJVZXQMKKR81PBACdmU0iymJXZ4yZ%2F5WYmYnIYGYNorwI1TeGZ142UBKOoLMnAuCRU3VHAESZWQNgEpHFzCYAnYhS%2FwF8odAV4EB4aAAAAABJRU5ErkJggg%3D%3D"></div><div style="left: -210px; height: 828px;" id="gctourContainer"><div style="height: 40px; cursor: pointer; -moz-user-select: none;" class="header gctour-grand-default" id="gctour_header"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIcAAAAYCAYAAADQ1%2B6cAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oIGQo6LQ%2FxwecAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAEBBJREFUaN7tW2tUVFeW%2Fu6jHlRB8S5eIo8SRFAQFaKxfSW2qBgjMmpixkfSJplMllkaku6OkzG2vZJxTDR20tMmrCahk8YsO3REDGjHFyrYohGiRsQSQZRnBSwKq6iqW3Xrzo%2Bcq8ebinavNT8GV%2B5aZ91bt86rzv7O3t%2Fe%2BxQDckmSxODOxQDgAKgAqAFoAGjJsxoAT75nSX0RgADABcBJ7m7yTgQgMQwjUf0rx%2FvBpax%2Fvzb%2FF%2F3%2FdCnWSLGQDBE4RwCgAaADoCclgAKJDBCGAscQADuAQQC3yGc3AK8MEMVY9P22XBX3H8z3n2hzL4BIPwHl3hdPhEWDQgaGmoBBDyDw1JtP5vdfOvVzdVConeVVrMdhCx%2F6riOJ5VWCPia5ZcTUxX9Pe%2BLX5xiOsxFAqUi%2FPrlIkkQDkC4MJTAfuYvkLinaMD%2FSRllfWY8GhUTNS5IkifkJIH52oiRJLAGDijIbKlI0AHRfPZe5Xh0UJjy0YdeRgPBY2cxwouDmzH%2Fdnta2v%2BQRR%2FfV0dqw6I7Uf3nls9FLik4D6AXQA%2BAmAAfRHrLAeGoc2jzJQvaQ%2Bl5K2Dw1T568k4Xspdr4KLOoNH%2ByCaTHEClA%2FlMmyJ%2FpepBAxkiSpFKYDy0lNO7o%2BmlLw9Ieupb1%2FDtXARiuH%2F1s9K0Oc0zGijeayOICAH%2F1yw%2FGXCp783FnX0ecccLsAzP%2B%2B%2BBOAJ0EJINEGBylkWgTxVGC8xDO4qI4C0fxHnp%2BEqnvJlzHTc1JBrGGApNP0b%2BTfJYB4s80SfcyyT9mrh4EkLBkoQMABAOIxMUDY%2FDJLxYCCDOXb09X6YOdWc%2B%2Fc44somegpTH86t7%2FWUgtsgOA07Tg38x5HzUVB8aOumZpODSv%2FXDZGACBFABkAIYAiAQQDSAOQJwgCPGCIMSTz7EAYgAYAYSTEgkginwXByDO5XLFezweum4kgFAABqqEkfcxVL9yvSAyHy0FIo0f7UlzK4bSShylyeh6HNl0zP1I8f97zkHKHaH9ZX0RHl1XBSDkRs3uvFm%2Fqy0mu8ELwGta%2BGLTlYr3g31eQWJ5tUjeswB8qoAgccrG8orrRz%2BLGzGtUOYeOgIiiTyHAQi5fPlyfHl5eUFHR8ckl8tlBACtVmuJi4trWLRo0d6xY8feIO188hzPnj2buG%2FfvkU9PT3j3W53KACfXq%2B%2FkZCQcGzlypXlUVFRfYQE%2BwCo1q5dWyyKYgTDMCxD2LAkST6DwdC4ZcuWN8i8XRRf8fm5eynzIykIuz%2BT6KW0kTTcwSFrDgOOf5iNXnMucp7cfe3gJxkBEXF2llNpyI%2FkAHD6qAQh1JTd0Fm7Jz5%2B5rI2SvvwADjDyDGu2MkLer67cDw%2BeuKcfmKqPKQPA4DwL7744mfV1dXrQkND22bNmrU7MzOzjed578WLF0eePn16xo4dO3bk5eX9YcmSJV%2BTdvyuXbsePnz48Jro6Ohz%2Bfn5Jenp6ddcLhfT0NCQfObMmQWbNm16dNWqVa9Onjy5lZgjdvr06R%2FxPB%2Fe39%2BfXFdXt2rJkiXveDyeIZ1O1000h1pBZH2KQpssgbzjKG0je23y5nETsDGySZQkadiaGP4ul%2FXUp7MQZLQgwKC9fmTX1JRFaw8S0yDzAh0AbfrKN05c%2B1tpZvzMZRar%2BWxga3Vx5kDr%2BVRHT9tIwdYXLvlEVmcc2Z5f1n6FtPcQEIXU1dWNq6qqenXChAl7XnjhhS9ZlnWQhZRGjRrV8fjjjzcUFxfn7d%2B%2Ff21iYuKbOTk5lhMnTiQfOnTouenTp5etXr36IHGX3QDEjIyMK0uXLj20cePG9aWlpb9NT09fYTAYvADEJUuWNAKIqK2tZevq6jB%2F%2FvwW0tZOwBFImQp%2F3pKL1LUR8%2Bkja6GnzJKa1HcR932Q0iK%2B4aw9%2BLtsZ0%2FzGESP7gagGeptT4jOmSsQM%2BDFd616BEcz8Lj0hoQMceBq45ivnh9v4hhIQRExAyHJmZbIzBm9nCYAnErraan8fa6rtzVCG5U8SHkqQRUVFStHjBhx9sUXX6wiiz5IdqYkg%2FS5556rioiI6Jd3aWVl5eLk5OT61atXHwZgJUUWFqvRaFQvvfTS5urq6rTu7m6vwWAYojiVSxRFjyK4FwBAe%2F78eWN5eXlhb2%2FvWFEUA%2FR6fU9GRsaxZ5555jjP8%2BK6deteXbx48dvTp0%2F%2FhjIxAVu3bl1qt9uzNm%2FevPvll1%2FePGXKlL0nT57MY1m2e9u2bS%2BT38PeJ84yLMBxJ%2FbAMAxC4gYBqCXRq2VYLhCA1nNqV8zA0Y8noevbUb1OlrkZnnEjMHbUTXVQ2FBuSswtXK4ZhcK3ziM%2B2wmAh3OQMx77r1nMe3OfxZvm3xBhMC0tLcb%2B%2Fv6MwsLC31C7cpDiJLdV9%2BLFixsAGNra2mL6%2BvqSly9f%2FikBhBVAH3mWPRlVXFwc9%2Byzz3bKxJkyd4IkSSIFFjUArra2Nqm0tLQoJibmXEFBQXFERMTghQsXRtfX1y%2Fu6uoat3HjxjKbzZYhCEIExZtYABqXyzXSbrenAgixWq1jDh48ODI%2BPv7o%2BPHj9yi00LDnHHfsLcP60NU0AoBKkny85PMFXvrsrdTmXW%2FlZxlc2oRglSd01ppj%2FNJt57w%2BH75akfiMqMu9yvW1xmLQ8r35%2BNMzD6G%2BLCfMJ%2FBuZ4CDsstobm5OYFnWnZub26Egej6K1NGBLO7KlSsxHMcJWVlZXZR35FCAg1e4w%2FJ7D7H7Eg0OURSZ3bt3%2F8JkMp167bXXPpWJ76RJkzpyc3Ovvvvuu69XVlZOBACO4%2BiUAQCoOY7jWZZlCegxevTo40VFRX8C0PWPxk6GCzjk2IKAxJyz%2BPbAPBzaYdKEGG%2FdNJ%2BJDEudZA9OzmwPmfpIG5%2B%2FzowvXpuA10et4tdW7dHGploua9MG0vlvRGTk2WC9ocPFA2kQBR4AOMGuozSTJIoiyzCM%2BP26fi%2F87du3z7NarZEMwzAsy3JqtVqj0WgC1Gp1gEqlCtDpdD6GYXwsyzL3iT3cKxIqXxwAtr6%2BPt5ut8esWrVqGwHGIFmHgIyMjE6TyXSmoaFhPACwLMtT7i0LQMNxHM8wjKyZkJWVdYEioy6ynsMeHCwVr7BjxR8roAvpx%2BcvF07RdIYO%2FnVTTnTOXOuj75%2FaH%2F7EW5cQZBTx5O8b4HFq0N8eFJY6qaf73IkkMCxQ91EizlfFwtYdKnfuSp19ilLzYnJycocoirrm5mYjYfwBLpdrpMvlSnU6nSlOpzPF4XCYbDZbQk9PT1p9ff2CiIgIh9fr1VJtdFSeR0dIpRzXCCLfqanYhBJAbHd3d7hGo7kVGxt76%2FbGoJKFRqOx69atW6FEcyiDhDqO41QEHCwAqNXqIQocbipSO6yDYTxZHAcAG4Kju%2FHGhY344%2FJ%2F1ZmPTU0avBEl%2FWpELDPz389gzi9bwPES9r0xFiwvImthX6wUJF0%2Fsisbr2w7is%2BLZsH%2BnUHuuMWh8iQ99d4hatHYcePGdQUHB7fu27dvRlpa2ucAxA0bNuyXXU8ihEAAhp07dy6w2%2B1ReXl55gMHDli%2B%2FPLLmWlpaddJAEsi4PDJYX5RFPn6%2BvqwpKSkzpiYmH7SJ6PQND4ACAkJuSUIgs5ut6sDAwNld17WLIzdbg%2FSaDRDLMv6vF5vAJmT7N7qJEkKIuDgSRjdR8YTFDERPAiaY4gQPQuCY9pRdPRDbLq4YcA0p85t6zOg4j%2Fm49cjVuDzoiycKH4IQUY7vt1vNPIubnxach%2F2vv4zGhj9YoD7Zubyo1x4vI0wd6fME2bPnl126dKlR%2Fbu3ZtNFj2YCDyEPOtrampSvv7669lz5szZx3Gcffbs2dVNTU0zKysrJxHvKUoR9YzasmXL2tLS0hKn0xlMhdcZkliTBeUFIEyePLmF53nX7t27pxCQBZGxAx0Oh85sNk80mUzNer2%2Bv7W1NYHMM5REa0MsFstowjk4Ag7RD9eQhnsIXeYcTmqHfR%2F4iRnjDvnl3%2F58%2FsOiHt%2BpP8%2FKFFwa9tD2mQAAp02P9%2BcvBYCRfkx%2Fv6h2T3h6099h7%2FciMNxFwCcBQH5%2B%2Fpne3t6SysrKZ5ubm2see%2ByxI%2Bnp6X0A0NnZadizZ8%2F0xsbGednZ2ZX5%2BfknAYgLFy480d7ebqioqHjBbDYnFxQUfGUymfoBSGfOnImtqKhY1NvbO76goGBDcnKyg%2BIbIgCRcmWdALx6vZ6ZNm1aWU1NzdMMw4hPPPFEnU6nE8xmc3hJSckKhmHEZcuW1bjdbpw%2BfXpuWlpa28MPP9w6NDTEl5SUzLVarUlGo7FNzuOQ%2FkVKuzwwiTc6gynb9GAq%2FxHVWlU88fIn%2F7lwaoSgMngHAv32xKm8Xaq474asluCECTMaVH3mcCTmHsGaXWXE9fSQ%2FkMBhB4%2FfnxsdXX1UovFksXzvIthGFEQBENwcHDrjBkzygsKCk7LwpTD53v37p147NixQqvVmqJSqQYlSWJFUdQZjcazhYWFH%2BXk5JgB9BMt6CZmKqyqqmpyeXn5Bx9%2F%2FHEBlenVlJWVTa2trX3K7XaHqVQqhyAIQdHR0Y1r1qwpNZlMNrfbrX777beXt7a2zuJ53i6KoiYkJKQ9Kiqqra%2BvL37r1q3vPf30039YtmzZS3Pnzq0FYCGxGzcA33DXHHRyiKWipYEAIm4nutyOGC%2BYoBvFL05N%2BrZ0qoUNHdRqtG6OESFIvKdP4MTrNi%2BrMU26NNkUfZO%2FejwNLGfDUx%2B8h5RpZkpYHCF1MoHUWa1W%2FYULF2IFQeBTUlIsCQkJVsoMDZEdyRP1HwhA29nZabh8%2BXI0y7K%2BjIyMrsjISBupayPFTkCgIeOEEGDKsRRJzg6LoqhtbGyMs1qtgSkpKT2JiYlWilByAFSdnZ2GpqammLCwMEd2draFZVmaw7jImP1UcE54EMyK8iSY7J7pAYRD9Mah69tUHP%2FwETy18yKGBrQoinxF2GrZ1NtwKMjrsnsCwmJtoaMn9WsM4e7bUcShAREttTwyF7SSBRukhKL1k7JnFSl1OgVPp%2BzlNjxpI7uqAqk%2FhDunz2SyqiPt1FSUU6L6VKb0vRQ4WCrFwCpC7LQZdhJAOqg5PxjgoADCULs0FDe%2BScJf1q%2FB1ZMFSJh4FppAJ9x2FX51skSxGN57JKwclO8v4e6TZjwlGIbiCbL7qxSSSkk2cfcBIQ91BgSKsVhFck1Or6sU4KRPldEn5FiKy9BCF6lx5TlLD8J5Dv42Sr7PaNOpZwHx4%2FuQMLEeEUmdMI4axLwNTZTA7WSXCpQQ7yKClMA8ioSWl3JfWT%2FBK3%2FH%2FgRKSMr4hU8hWCiA4KXA9GNHD3%2Fg8lIbiFGMKfmZr%2B9BcWH9RhWJ9mApdRxEipYIRs5UOnH3ySufQtX6S4Hf64CxUjjSPaKgyvYS7n0oGfdJgNH9%2BevH33jwA5QH5gTYDzSH4seKVDLMTal%2B%2BjCLQGkI6Ud21A8WTb7fCT34F%2BiP%2FDXhXgC411lPv3UIUO8nzH9I2A%2FiAeX%2FBUPhQRLDQ08NAAAAAElFTkSuQmCC" style="margin: 6px 0 0 6px;"><img id="gcTourPin" style="float:right;margin: 6px 2px 0 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAGYktHRAD%2FAP8A%2F6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfbBQcMJyOQosv2AAAD4UlEQVRYw8WXzU9cVRiHn3PuvXOH%2BWLK8FmhkDZltEAqdeHCnbGbmqgJqfEvcOMsTFyw6ca4mhgTE9HEhf9BiV8JqyZGo4AYDCpCIY0x6IAQmDIznZl758651wUXuWmwDJQpJ3lzc3PevOc5v%2Fc9X3DGTRzHeXAsG9E0%2BZ6uaa8p1015HniAEGLHVeq253nvrk6OV5oCMDiW7WwJh%2B4%2B%2B8xA4vLFPq2ORqFSp1Cpky9W%2BGd9QxV2NsuqXr%2B8Ojm%2B1WhcvVFHTZPLAz1t525ef45CVVGoOBiGg6bXkbqBGYlp24ab2NjY%2FBp4vtG4smFSTeb%2B%2BHubuYUVUlHJhY4Il7pjpJ%2BKMdIboVVts76xiRBi%2FjgpaFgBIdixanW%2B%2Bn6JL7%2F7HV3XEAKkAM%2F1qNoOSrkgZakpAHhsADiuIHVpiO4L%2FVzrj%2FFCH6hiiTezn6NJiXLd6nEAGk6Bo9wNKQ9qNhRuIRqL0tYaPQgmhQ0UmgKglLula7J%2BRJoU0BwFgLw%2Fw0esaeE2E6AoEMYRCoQA1RQAwzDeDptGKB4xD%2B1vT0aJtZghAR8OjmWTp7oKht744JNUZ%2BdQSNdIhBQXB2K0dxn0JjQcq8J2sUo8YrK5XcSQJBXiG2D0VLbiwbHs1Ugs9u2LN260SilZWfyNrfUcxUIJ8AjpGoYmcewauq9nte4VFXy0cnv81mMrEDaNt4bTA1Ep96Knh0cYuTZKe3sc6SpWfl3k55mf8ALJjIS0RM0TrwC3HrsGLNt5Z35hyes2ykTNPfdarU7%2Bfhl0jfTVYa6Mjvzn33EuxoXzKQdYbOiMOcphZ%2FlOre3plz69e2%2FtZVW%2BH073Js3z7XHCGkR0SUfCZHCgi85kC8loiJ2SXfhrq7hg1eo3d5bvOKd6H7jy%2BvvZSEvo1dIDKx2PHqyGUtnGNI2SFOLHilX7eHVy%2FIumXEj228TExG5rqqe15jjYtoVrP1jLZDL9J4klOVmbT0R0OpIRYnt1MXPSK9lJAeYcx8E0TTzPOxOAedu2MU0Tx3HOBGChWq1iGAaWZVWBhScKkMlk7lmWlbdtG2Auk8nUnrQCAPPlchlg7qSr6aitWPgblQyY2DfLshZLpdL13d3dX4A4e0%2BEh831j2fXt4YB9gcPAWH%2FawSBcrncn%2FF4nKmpqTWgJzCQB9R9s32rBaCOBWACUd%2FCPoQOyJmZmc2%2Bvr7c9PS0DnQFABTgABaw%2F0pSvnmN1oAX%2BD4sqQt4s7Oz6%2Fl8%2FofArIP9buCfwwZupAaUL5%2FwZxRMgQDk0tLSZ8B6YLBg3oMpUP8HIY4oQnlIERIoxsMU4xA13EepcKbtX%2BRcieZqbkRNAAAAAElFTkSuQmCC"></div><div style="height: 20px; -moz-user-select: none;" id="gctour_toolbar"><img alt="New Tour" title="New Tour" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABmJLR0QA%2FADpAE8017ENAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QISDiYc07YZKQAAAWpJREFUOMutkE9LW1EQxX9z741WJH0lgtDKWxbc1O5cZqkb8w2ycVm%2FRd6y3XcjBMSC38BNN90qhVJKslJKSVqEEP9FYpved8eFJsYYk1R6NjMMc%2BacM1Iul7drtVqREZid%2FcvcXJtn0W%2Fyy5%2Ff5aJvH%2BHPvmTDGaVSScfh%2FHhTL0%2FfaOe8oJcnK52LxuKutrLr2jIzrqvSbDYJIQAgIj31jNlj2n4h474iZgnrTCbY9mrHt1tTzld7BwbJ3WrkCGvqiHmFuAJgMSpG01%2BL4F66%2FqyD5OtebzoLTIE4EAuCABduNFkIOk%2FQ59hQRdNpQNC0ot6besamFffQ57uHAq%2Fx4SfgsVoBFO9f6OlZ69PM%2FPeDkRFEBOUpHV1DdYE0%2FQE8YWvn0GxsbL8FcKPItzWL1zwiQhRFNBpJT9QwIfp%2F0497EYY5eIh8x8GwpcHZsB0zqd2xEXK5HI%2BBi%2BP4Q5IkxX8hxXH8nv%2BFK8w9mWB7rBTJAAAAAElFTkSuQmCC" class="tourImage"><img alt="Load a tour" title="Load a tour" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QsVETINEBVQCwAAAaZJREFUOMulkb9PU1EUxz8vfajv0QYLDE1MNxlgc0ITIwODfwAIRgYkDBIQHNwMBAYXBxY2E34OBNQwA9FBRwYTEgxshGhMhCZtbeC95%2B279zi0aa15TTF%2BcpN7T8493%2FO951oPBvtmU6nUHH%2BhlCrtv9TYyvLaa%2BpgTT6bkJHh0chkEPgsrSxSKBQevXuztREpMP50TAb6Bzk8OgTAboqRSMRpRC6ffTn%2BZGrG1lrjOC7XW5IlxZjh4cBQQ4HNt%2BvTwIytlML3PfI%2FcwAkW1sA8LyLusWu21w522EY1jgAU0kelZ%2F1J52dXTWxDUQ6iLocxaUdxOMJ0ul0tIDve7z%2Fcs5BxgVg%2FsN6nX6fa6LeiSWxARzH5SDjsvD8PoHSXIZrV2JMze9WZwDwIxdwfHbRsFhrQ7rdrQ7RcUqBACKCZVmICCJgRNBGCLVQ1AYVGkIttCWu1v7CzaRP9lzxPeuDWBiE8kIEBEGkLAwERVMVOM2ccevOXfZP8uWiUncRMAiCBSIVV90drexu75AMvq1a9x6%2F%2Bug13ejhH2kuft37tPriNv%2FLbzdmyosZb3GLAAAAAElFTkSuQmCC" class="tourImage"><img alt="Download Tour" title="Download Tour" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9oIGQorAW7wjhQAAAMSSURBVDjLnZNNaFxlFIaf797v3tvMTOd%2FJjOZ%2FHSGhAyZmh%2FIlEhjSS00gihxoUatQqXqxoWFRkHBlVTcCi5ciBFLXQiiq0oRQw0qpoS0IaFiiyGJSabJOBPNZO783s%2BFaDBLHzibw%2Fs%2BiwNHcIjJ16dfAV7WpexTYCnH2VeKOU3Xrly9fO7jw3nxb%2FGNTwZNXfu6JxlrHenvIpkI4bIsiiWbe%2Bs7zC%2Bvc3dt%2B6YQ4sLVy%2BcW%2FyN46uJHWbe35aeJ0wNioCdKsWSzs7mG9EShJQDlHRKtIeaWN7g2u%2Fw7Qjz8j0QChEKeb86ezIgHUkEK%2BRzhzgy%2BcJxypU5u%2FVekU0Nr2pzJpmg6KnT9hzsfAg8CaC%2B%2B9ek7sWjAezrbjaE5NKQHNIEhJaYhcVmS1tBR4tEIEb%2BbbKadrrbgyLNvXjkPoHl9rgvDmU52i3nuV11E246hFDgKEBrCqbFV2OfLG0tcn53HZyn6utsAngSQe%2BV6pCsWYO7uNqmeKI46uGxpt8CJwQxCCJRSbGzdp2LbxCM%2BgGEAWak1NMsy0TxRdksVmo7CY%2Bk0m01qpR2ECANwa3wczeNh5aVXiXT0AgQBpK5rzh%2F7Fc1d2cQjLbb3w%2BQNk0bToVJoMFivc2t0FO%2FwMPbKCscSEbbtGkABQBqallv5Ld821B0j1RFndX2D2Xt%2FUsPErrn5dmSE9nSaowMDqGoV%2B%2BJrRAyDKdOMTE1MKH3ooSeSpWr9RKY7Qdjvxu%2Fz0hHQmVncou3tp0l1dhI4dYrq5ibuvj48x4%2F%2FPZkMpcVF9IXvvrjWnX3sktB10%2Bc2aDF1fpxfojb1Av3xOIGxMSqrqzTLZRrFIvVCgUaxiBEMsnf7NjpAsm%2FsztauPekgkVLj8%2B%2FX%2BaX%2FcZwbn9Fq27jTaZxKhSPt7UifDyMYBKXYW1g4%2BIVHz7%2F3TGeqY9rr85vpVIxY2ItlGSxNnuVkMol%2FdJTizAxr%2BTxHNA0JeKQ8EAD4g0lz%2FPlL07rlegRd%2BkEIpZzGma%2FelUOJBD%2Fncjy3tCT4P7zf26s%2BSKfV4f1fpUgaHTdq5X0AAAAASUVORK5CYII%3D" class="tourImage"><img alt="autoTour" title="autoTour" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAFMAIwADJfKnZwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9kKEg8hB1Dip48AAAJvSURBVDjLjdNLSFVBHMfx73%2FOued4r14wpSLQNj0JokUtFIKCgqIXPQgikqSijUrqoqA21lIkywoiCAqyRUZRFBGFoIEkFdHGoPcLF75S79Nz7sy0UK6kIf03s5j%2FfGZ%2BzIwwR7UecLYrl91a0yOiuxpu82Vmj8wFXDzopPedeRrtf98V9r24lRsf%2BpkRpbpzob43tlK3NzVhBODK0ZILYSZRa612ZiI1NzMEqRGUDciO%2FmDwUw8f3z7na9%2BLz3U3s0tdgCAzXlfV%2Bk3F4vPwPD%2B%2F%2BFKVB0B65DvhyAeYGKE4HqNy23E%2BvutcAuACYI1y%2FRjZbIZsNjOdTzlYnaMgXoprFhEMjRIM90GYAGuZBgCbHsCEKbBmatKwbN0ueu%2BcpGxFJb5fgHKL8OML0clf%2BU3yAAMvMalB%2FPmriC1aizgRNh1upvPaETrfPCOdGsOGKUoXLGbL9j0UFcWBsWlATyTo%2F9DL4KtuhpPwO4gxmnWpPtTAhtIyQAhTAwTj%2FSCQTCZmRLCa4iKX4rjHcnEQ16Oh%2FjqvO9r%2FupXmlmpiC1fPjqBzOYJsCqNDrMlhTI6zp9ajdci5ll5On1iD0SFDX3ooceOzAQuIAjGKx9eeA7D12EYcNfnWnIiP47oYrXFcfzagRCGiUI6ws2YHVmseXX3CtuObAYh4UazRWNf8G0AEpSIYDA%2Fb7k03RKKTo1%2BItQZrNK4XnQ2ICCKKB2132duwHwvcb%2B3A8QsmT%2BAXIlNRI35sBiBickFaxcorOHS%2BgluNjfmGwrJKoIPC8sopQNBhGkRM%2FjdeqY5eCIOg1lrr8B8lIjrieZdrbmTq%2FwA8AAC7ufHXbAAAAABJRU5ErkJggg%3D%3D" class="tourImage"><img alt="Show settings" title="Show settings" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QkaDBM5i2PCSAAAAfBJREFUOMulkktoE2EUhb%2BZ%2BEyKTRQKgkqwzMaFtt1FrC40FGJm60JwIVSkqLUtElICFQNDQqBrQXRlQIriwomN0GJXgtI2iUkXFYJVadOXhiBERDozbmaGMR3rwrP7ueece%2B%2B5P%2FwnBOcjnVGigArI8Vgi9xdNNJ1RbI7YUlT7r%2FYDqKaZq%2Fj6tQHNbLQd6YxiNBp1I51RDPdaw6pFAcR0RolaZKur19vmZhwFePDwPvFYQgZyACKgDt4cMp4%2BmzAA9fatETbX15A6Jer1r%2Fdas4ndGRUsMYBgFW8MDBqatiXoum7oukZhfk4ovC8CyDsFK7R0sBHpu0i5UmG59gUgGY8l7v7zjE68yr80SpUS3Sd7KJYLmBNMArqrQTCSOgzUrPeVkE7XCYmjR47RbDZ5N%2FcWtzU8TvH4cJi%2BUCcdAS%2FZmU2Ot39LLn1eOtd9qoeAP8BKbfnyhfD5%2Bemp11XAABCDkVQXUHs0JjNbXmS2vEjHQR8A5t5yLv8CSZI4e7rX%2BmR2HiJQHB8OM%2FWmxJamI%2B7zs1Fv2iOaI8vZJ4850O7nTKgXYMxpAMDuXR72%2BA7x88cvsvkFgHCrSS6vUv1Y%2FSNsEWBl4zv7fQHa9np4PvMBIPxpcnTaSTRNkmvrqwtA0r5CMJK6BEw4uNvEO%2BE3N%2BLV9uq8VLwAAAAASUVORK5CYII%3D" class="tourImage"><img alt="Send a message to the author." title="Send a message to the author." src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKLSURBVDiNfZPNbxNXFMV%2Fd2bMjDtYiZMYJRhivgoxiRtACV8SXXRLhdQdUrsICzb9D5DYVwWxqopYtkLdFLGBVt1WbVWh7mhiywgFMFEkKLKdEI8%2F5uPdLpwEVTE90tu8d9%2B595zznqgqg9BqncqJRCcskmlgHEbVUK84sf2nO7S4vFUngwiC4KMSxlwU0QNgJrq16iUAt1D8TdA1FetH3y%2F%2FAODs7Dw7I8bkxTJvgdlurXo2e7yDiEejLB97halVUd0TbMyk%2FMzSd%2F%2BZoNmcG3JTncvdWuXO1t7Q1F9q2%2FMCoLqmzUpWts52FYolVHV7tVrTJ%2BpLaBz%2B%2FMyY0Oj%2FIImfhPUl7smNWzc%2BtYW7URwNFyZXye99zfTIfbLHI0R2KNxGoyxE2flHjkmi7xeuXB3OjeUIw19Q85hg%2BT5h7zq73K8QkR2Xk6TSN7vjzVnGmBHPdXn40wNsywdsvAOfEyx%2FjZrmwO7r1WncQokg8BzLsiw%2B8H0OHTrMr78vYVkZRDL9jK3MeyUIWV79k8MCEBH25fPkxk7yePEltjXeL5IUqh0aZaFRFkzy5h2BTPCilt98Bwq2Y7M3f4SVlZNUqn9QnLpGo9zX7xVKQMRadQ8A7uSXWM4nNBpP%2BgSqSpzE9LodOt1xDk5%2Bxt%2BL99jtf4HrbuDUOwwP%2BcRjR0mlRuhF53DTl4CbmwQo7aBFc73J%2BTMXaLcDPG8%2FIk%2Bx5DnQwLY9RvwPefrMJZ0%2BQmbTnj6BUZLEMFOc5e3GOiZJQLIop0l0vh9dDL0IisdGeV5bRtX0CZyUU0%2BSeHT%2FvgJRFJL20ttG7fxmShj2OFg4TLvTxkk5dccYWfj29jd34yQefm9mA%2BDYzppBFv4FO4Au%2FTAT%2FmYAAAAASUVORK5CYII%3D" class="tourImage"></div><div id="gctour_tourHeader"><img id="inconsistentTour" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIwSURBVDiNjdO9T5NRHMXx7%2B%2Fe573tU%2FoUCpTy1kjlTTExIRol0ZiY4OTE0iZuuhgHIxvRuGhcUAeMcXNwcwH%2FARcHjUpYTExUEsWQ6CAEWiiFXhc1QYvhLHc593OXc8UYQ6MsXJACyn4mZqdcM%2FXzRx%2Bbz416quFtQDnBk47j431to%2BdGHMt5uGev4eslORvrOTIUtmQk2ZpRXnbw1EJRRvcHiIhOJGda%2BoZ98SOUl6Tl4CFPfP%2FBvoC3RSYSPSNZ11WojiFUtp%2FAtyWWGxiYL8n4f4Hnp8Vy48l7UbY9EMtBpbKo5jxYFs1dXYH2%2FRluitoTaOrgYjzXFzpSRbUXmJyeZXJ6Ft3ej6drxNvymfmPFBsCby5JoILErSgdBOIGqGQLzaFNpslBRR2I45LOhDFl%2B9Mfroj7D6A2uNaUydh2vYLuHMRsb5BN2WQjG7Ozie4cxmWDMJ32yytc3gW8m5DIcrzJVIJAEhESC2G7QnezTb7Vhe0KEqYRSxM5qzED11%2BWJPwD1DxuJELXsswGunsQamWorjHWH3CsV8P6EpS%2FojsL2PU1wgDLF6YAZKFIzmje53Nu4OQK2IfP%2FB4E%2BuRdAHZeXAVjwNTZej3H1vIin5ap7BgOWGjuNMWxtami23upb64iokAUS09LgGCq64DBmDq6awDr2yKpOPrHGrctYCzuYQNsvZrbNZLUr7P693qAwMNdKXPCMoZHX74zZQxug97eETaV4b7s9Z33m5%2BP5JF%2FA6jokgAAAABJRU5ErkJggg%3D%3D" style="float:right;padding:3px;display:none"><u id="tourName">Tour 2</u> <span style="font-size: 66%; background-color: rgb(255, 247, 193);" id="cachecount">(0)</span><span id="webcode" style="display:none;"><br>Webcode: <b><a href="http://gctourdev.madd.in/tour/" title="View on map" target="_blank">undefined</a></b> </span><br><img style="opacity: 0.5;" alt="Rename" title="Rename" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk%2FcWPt%2F3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371%2Fu855zn%2FM55zw%2BAERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh%2BdLA%2F%2FAGvbwACAHDVLiQSx%2BH%2Fg7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK%2F4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO%2F0xaL%2Ba%2FBvIj4h8d%2F%2BvIwCBAAQTs%2Fv2l%2Fl5dYDcMcBsHW%2Fa6lbANpWAGjf%2BV0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s%2B%2FzPhb%2BCLfvb8QB7%2B23rwAHGaQJmtwKOD%2FXFhbnauUo7nywRCMW735yP%2Bx4V%2F%2FY4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk%2FATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO%2F%2BY9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II%2FItchQ5jVxA%2BpDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS%2Bh1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE%2BwIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE%2B0JXoS%2BcR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE%2BS%2B8nD5LcUOsWI4kwJoiRSpJQSSjVlP%2BUEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL%2Bl0ugndgx5Fl9CX0mvoB%2Bnn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS%2BZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U%2F1XmqC1SrVQ%2BrXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O%2BX%2F2C%2BmMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF%2Bxt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0%2FLbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY%2Bt56Qn1yvUO6d3RR%2FVt9KP1F%2Brv1u%2FRHzcwNAg2kBlsMThj8MyQY%2BhrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ%2BM1eBc%2BZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82%2FyNhaVFnMVKizaLx5balnzLBZZNlvesmFY%2BVnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10%2FWjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo%2BPWX6zukDPsY%2BAp96n4e%2Bpr4i3z2%2BI37Wfpl%2BB%2Fye%2Bzv6y%2F2P%2BL%2FhefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG%2FljM9xnLJrRFcoInRVaG%2FowzCZMHtYRjobPCN8Qfm%2Bm%2BUzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y%2BpjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h%2FhF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I%2F5YMgQlAvGE%2Flp25NHRPyhJuFT0W%2Boo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI%2Flz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b%2B6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV%2BscKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb%2BvSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2%2FKhNqP2ep1%2FXctW%2Fa2rt77ZJtrWv913e%2FMOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur%2Fmft24R3dPxZ6Pe6V7B%2FZF7%2BtqdG9s3K%2B%2Fv7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e%2BNQ6KHOw9zDzd%2BZf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe%2Bt%2F9%2B7zHjY3XHNY9XnqCdKD3x%2BeSCk%2BOnZKeenU4%2FPdSZ3Hn3TPyZa11RXb1nQ8%2BePxd07ky3X%2FfJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2%2FrZffL7Vc8rnT0Tes70e%2FTf%2FpqwNVz1%2FjXLl2feb3vxuwbt24m3Ry4Jbr1%2BHb27Rd3Cu5M3F16j3iv%2FL7a%2FeoH%2Bg%2Fqf7T%2BsWXAbeD4YMBgz8NZD%2B8OCYee%2FpT%2F04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W%2F3nrc6vn3%2F3i%2B0vPWPzY8Av5i8%2B%2Frnmp83Lvq6mvOscjxx%2B8znk98ab8rc7bfe%2B477rfx70fmSj8QP5Q89H6Y8en0E%2F3Pud8%2Fvwv94Tz%2B4A5JREAAAAGYktHRADVAJ8AvxXHGoYAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfZBwcIASdkENZ8AAABgUlEQVQ4y5VTvUtCURT%2FmUmSWCqaSUtbEA1R4GRfFARBNfV%2FRNYUjY1JTY0N4VAiDdEgSNIQTUVDtgZBiPmBVkrq8%2FwaHj6VZ6%2B8cOGcc%2Fl9nHPvBbpckeAWW%2FOebsHjE6ttJKZGcH4WphHYVn3EqLKi5c9Pl9g4CJk0MEmKkPV6nYqisFarslqpsFL55tXpDpXXMJMnCSZPEmx10NvUINLplE75IX6I5blJpLNFjC0CF0f3CGwHgYNQO4EI4fEMgUKQ6o5H9jSw1z2I2M0j6J9GxyEKBZnMO7K5DHL5bEdwYH1X57B5C0K4XG44nS7V9oK%2FHby2C4p%2Bzs0WSOTzWe0g%2FZ6B1zuM2PUdppY2US6XYO2zGhCIwOFwQkhEo7dqMfmiKpMgBWLkABQUigUAwP5xRCuXyyUttlgsvxOQhN0%2BoN0AKZBGLKLVDVogPr8%2BDJ%2By2Ww2ciCw9dtUVaiqQgKi5oqigCI6gn%2F%2FhcaamZ2Hzzdi0hEAQCr19idJKxgAfgDG6PPJecMc5gAAAABJRU5ErkJggg%3D%3D" class="tourImage"><img style="opacity: 0.5;" alt="Printview" title="Printview" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9oIGQopDsx58QcAAAHySURBVDjLpZNNaxNRFIafuWYRQRCLoCnTQIsfFAwxGFGQLBVRXPqJQfFHCEqd2iIupK6q7lwIfiVZ6EKrVkRGjQUDlRJQIVqoRd0Ixk7aTGbm3uuqTYbUVPDC4XIOnOe897xc%2BM9jtCb5Qm4IsP6hb%2FjI4aODbdV8IacbjUbHcF1X5ws5vdgTWQ5fKpX%2BOjqdTofyZQGJRKL5RsMI3VrrzgClFOVyGQAhRBsolUqtrMA0TYQQGIbRFisq0Fpj2%2FbSRCEEmUyGkddZ6t4co8cn2m28YA0MAVY0GmXL5q0opULyAZ7PX6W7q5cP3yZJ%2Fsriui7A8KICa9C6iJQS3%2FcBOP9wP1oFeCrAkwHd6zbRH9uF487zsj7K7TNTXL9xzYq0LqlSqRCLxbBtm0B57N12CqkVUkkUmu%2FVWRI9e6h5dQ7ejHOAs80dOI6DW69TrVZJJpM8sj2kVsz8rOCrgED5%2BNJnruGwvSdDzV%2Fg7vSlJkAIwZzjMD7%2BjFqthtvrEsiADWvjBFIiteLH7690rdnI5GyR4uci2VUDYReklOxI7wTg45cct96O4CkPN%2FDpW9%2FP7r59lGbe8OLTK3KHJhh78rgJ8DwP0zSX7LscHwu5cOJBGkOs5t30FE9PvkcpFbLxHnCs0%2Fe7o67gK8npyLnW8v0%2F5Gb7fMJoZowAAAAASUVORK5CYII%3D" class="tourImage"><img style="opacity: 0.5;" alt="Send to GPS" title="Send to GPS" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9oIGQooOW3fZUkAAAFtSURBVDjLrZPLK0RhGMZ%2Fx62UEimSo0wihSxphhXKwsLGdsrextKt2fAnsJGVlX%2FAwqXIIRPCSpHLjEjJdcJ857vYOBhzjhRPfX3f4n1%2Bve%2FT%2B1l8ynx5W%2FxSOfxRQQDzHx38CmJ9L3aTXQDk24tBtf4Az%2Bind5gvIM%2BnMEM%2FgbMAALHxGJG2MACdPZ%2FmwbkO8yIemRnYs34M0TN%2FV1oKqsoa6J%2BuN4EZ5NuLxMZjANzWLWG0RGiJUJLKklqa7Qjx0xX2L7ZYGrq2fEeItIVZ33SQWtDVGEUZjdIKjeHyPkmTHSYlXribWDU7I8LKAnhzD8y2oIzm%2FOYIV0ukdnGVy2P6iRa7nZT7zP2YY%2FKCEo8uJJFKUl5cjVQKZTRXDwlKiyrYTTo4xw5nE1hZGXh331QNr0IgtOBVuoTKGmgNdbOd2GD5cI3EZDozA8%2Fsab63NmM3nicPsHIKiZ%2Fsf5j9dj%2FoEBotMPZwbtb%2FeAM%2Bw7BUpUnjdQAAAABJRU5ErkJggg%3D%3D" class="tourImage"><img style="opacity: 0.5;" alt="Download GPX" title="Download GPX" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9oIGQotDqgVNAMAAAG4SURBVDjLlZPPaxNBFMc%2Fs41CD1oMlVp1FUIPBhR6UxCPestucvIiqPtn%2BAOyET2I5yoUAmL%2FgMwS9OTBH%2FGgqHgT%2FAF1QTwYLG01yezsjKeN3TS25J3mveH74715I5rN5qM4ji8xQbiuSxAEAoAwDO2kEYahzcgK2aHb7WKMAUAIMVRzHCenXiwWc%2FmQwBhDu90eXnieRxRFw9z3%2FbHtOKOFSqWC53m7ArcRZLaFEDllKeWOBIXRQgbOCHdzkCPIrI8D15%2FU6Kl1lq%2B%2B%2F38LURQhhEBKmXsJgIFWHJ0tc%2FHBiZ0dSCnxfZ%2F6Yw9rNMpoVKo5fGCB8vxpNvq%2FedFbGk%2BwdZDaKM6fvExqDalJMVi%2Br8Wccs%2ByqXr8uv3Mvr2uRGErWEpJtVql1WrRR5Faw%2BrPTyRGo01CkiasDzZYdM%2Bxmfxh7WbH5vYgG1qtVqOv%2B%2BhUMzdzjEP7jzM%2FU2LP1DQH9x3hXdyh87nDl1v8czC6oj094OGreyij6OuE0myZM6ULvFl9ydOPz%2Fl2BwFQcF13pdFobPuNi1zJ5a0fdxHONK%2B%2FfqC%2BcH8pIGCiKN3Ya91rU3a0%2FheAk99ghKc72QAAAABJRU5ErkJggg%3D%3D" class="tourImage"><img style="opacity: 0.5;" alt="View on map" title="View on map" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9sBEQ0rMteXYLwAAAKiSURBVDjLlZPLaxRBEIe%2F3Z11N%2FvMxpFoXgfRQDBCRGIEEQQfIOJBEERRFG8eQvCg%2FgMiHjzpQcQHBvTiTRAVMSpqVAxEgxoMxmiMT5KY7EzPTM9Mz4yHmCwqItalmh%2FFr7%2FqroqtWrsqam5dipZI8L8xOPAarbl1KedOnftnsaOcP7TOg51oszfHgsuIW88o9diMH2kim88xNPSIQXGWrxMG2Vyeb5MGCS2JYUn2bYlIaSnis25GeZJyq4YhBPaNQYT4gmkKYm4%2Fjm1gCRPPETiOQElrjkKbPRSK84kin0yXDsf6SW3Xqa2rI%2BO%2FxVHN5Et50sk4WnIewpYkEhKgQlCe%2Fo6wppnSFUZJ4VwZhiAksh%2FguwJpOfiujSOm8Vz7T4Jidf3PXINxQFI6PYlat4iU7tLkTpDMN5LWYiRTSUzLA4wZgkRsxkNKF0vYGOVJzGzAVDPI7pGZIu86115s5fbIFqQQhF7lDeZaqKqqRq%2FWKRQbyOcWkNzTRtWoRtqrpV7%2FhKs8GvQWrg5vpq3%2BPMl4%2FNcWzLKFISQ6U%2FR9%2BsrNV31EGxTe42G8QFFXWkLLog5MaXG4p5uTO3b%2B9gvVCzGUy2Nh895No0KPja17CaKQIAwIifg8PcbyxjUIz2HPxQ7a2F0xeDL2jr6PQxRyGSxbIJVHEIWMTrzBDxUq9PEDH8M1aWtci%2FBt7skLMwaOchgPfLKpLKV0AS%2BjkEqiAkVtsQkVBARRyJfyB2pyC%2Bkf66V3uJf1xv4KQZ4CTsomEWXJxFwc5dL96ARe6CGVz2K9hdWLN9E3%2BpCe1%2Ffp6XrO8aMn0YJIAdBQs5KGmsqidCzZ9svi7DrTTixexdORAe4cGpjTY%2B1r2qNlK1qYnYe%2Fxd3iJfwwYJO5d057%2BewFPwAsnUE8ZPBqbQAAAABJRU5ErkJggg%3D%3D" class="tourImage"><img style="opacity: 0.5;" alt="Upload tour" title="Upload tour" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9oIGQoqEWpcrzEAAAMVSURBVDjLlZPfa1t1AMU%2F33tvE5pmSZvfSZfWXlNnF7sfsrjqnqq4OUUQRFHZkJWhD4ooDIXpg4gWhPkH%2BCBWHJtPUwYyGSpspdN1raOyYqWlW5N2bZqmTdsk9%2Fbm3vv1ycn65ufxcM55OHAE23jl%2FaE3gTdUTdstwStdtyYlo4qqnD03eOzr7X5xL%2FjBN%2Fs8qvJTd1ci3renk672MD6vl7WqwUyhxPhkgen88g0hxMlzg8f%2BvK%2Fg5fe%2ByrUEmq%2B%2F0L9X7O2OsVY1KN3No%2Flj0NwG9RLt8TCjkwtcGp4sI8ST%2F5ZoAOGw%2F%2BfDh7KiVw%2BxurJEpCNLMJKkbjZYKsyiuRaKY%2FBUTsdxZfjytb%2B%2BBB4HUAY%2B%2FPbTRKwt0J%2FL0KS42JofFEGTpuFp0vB5NeLhHSRjUaKtLeSyO%2BlMhfpeO332BIASCPpOHsh2UFlbobjlI5Z6ACnBlYBQEK7F4mqNH67c4vLwOEGvZHcmBfASgLZZb0Q7E22MTi%2Bjd8dw5X%2FLViurPLYvixACKSULi0VMwyAZDQIcANBMy1a8Xg%2BKP0alauK4Er9XxXEcrGoJISIAvHu%2BH8Pa4Nn4GaLpXQAhAEVVFXe9ZtJizuM38iyX1rhT3OB2cZO5so3VaLBZrbFlW%2ByM9PBd%2Fi1qhgWwCqA1KcrS7fmV1P5MAj2dZK6wwPDMBmOLA0jX5tfzNpZjk2rL0JM8yKZZ48zIE8T4YgxAk45z4ebU%2FNtZPQZAZ7qdwI51fl%2BwePqR13Gki%2BM6uEjuVgr0pg9RtQzGjIGjAOrNqxcuZXLPnxKq6gm2NNHsUflt%2FBYTqxfJxPcztzJNuVaiXC1St6psmBs8GO2lbhvU9xQ%2B1gAqyyvHr9xwv3ddeHRXnB8n1jF9JrZjEw92YDsOjnRZXM8T8if4ozDCyMwIdz5D3PvCcyc%2Bf7VDTw8Fgq2eh%2FUEF%2FMvYloWlmth2g30SA99%2BmHG8tf4Zeoq%2BcEtcd%2BZAFpDXZ4jx08NqV7fM6haKwghpWtLuzH7d%2Bidh3pTBxmdnWDqk7Lg%2F6J%2F5JHp06rcrv8D001PzAwk7SYAAAAASUVORK5CYII%3D" class="tourImage"><img style="opacity: 0.5;" alt="Add own waypoint" title="Add own waypoint" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFQSURBVDiNpZM7SwNBFIXPTB47TYioMAErLSz9BYJFIJ2FheA%2FEO2CTTB1go2ktrMSxFIQjFgIgkU6SxtthAyIGC0yz10LzSaz7AYlt7pzOXzcc7hDoijCLJVPG9aa5b5zIZ%2Bc5XJUdFuDyp8AzoW8tXvszZonBzxNmwoAAGMVnt%2FuAQDLi%2BtZsikAp2CdjfupgNphue%2FCsWcWBNIYxZx1PwCjwIJAVhulOPEcpaLbHlTyAODCkNd36pNgltxgb2ufAQB%2BEZ3zDvcsGKPw%2Bv6YuuaL6Hnvpfk13wIAaCNhrc30OlnayBSAlVgorXhC8fEEAOBzqz7AJgCUEnF6dRaHWCwU5PbG5jhELXFxdym1MWykoZSIGHDT%2FvQurNooRcqOQ1RWQRvDbo%2B%2BSNJO5h1oPcRoA62HWbJsgDJDsGI57v8FoISI694DT87StGTW7%2FwNezmaY41c7QEAAAAASUVORK5CYII%3D" class="tourImage"><img style="display: inline; opacity: 0.5;" alt="Delete this tour" title="Delete this tour" src="data:image/gif;base64,R0lGODlhEgASANUlAJaWluXl5dfX197e3pSUlNnZ2aampre3t3p6eubm5qioqLW1taenp9zc3LOzs7a2toGBgdra2t3d3YuLi3x8fKSkpHV1dc%2FPz%2BHh4ZiYmH5%2BfpeXl4qKioyMjMXFxaKior%2B%2Fv8vLy9DQ0LS0tDs7OwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACUALAAAAAASABIAAAZ4wJJwSCwaj8gjaZkcLp9QJOkhGHgACM2EQzJCv9EiaQSKBEQGAiHT9Y5IGFKBpCAB2uJ3gNQgOUgfeEQkCyR7EmN0gk4PJAl8iQyLQiQHjnKRkyWEhiQCfiQbmiQVJAMkFyQGJBSjCAAHISMAHRAWmptgTE28vUdBADs%3D" class="tourImage" id="gctourDeleteButton"></div><div style="overflow: auto; height: 713px; width: 100%;" id="gctour_geocacheList"><ul style="" class="cachelist ui-sortable" id="cacheList">The list is empty.</ul></div><div style="position: absolute; bottom: 0px; font-size: 75%; width: 100%; height: 14px;" id="gctour_footer"><div style="width: 100%;"><a title="http://gctour.madd.in" href="http://gctour.madd.in/" style="padding-left: 5px;">http://gctour.madd.in</a><div style="float: right; margin-right: 5px;">v 2.3.12356</div></div></div></div><div id="fancybox-tmp"></div><div id="fancybox-loading"><div></div></div><div id="fancybox-overlay"></div><div id="fancybox-wrap"><div id="fancybox-outer"><div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div><div id="fancybox-content"></div><a id="fancybox-close"></a><div id="fancybox-title"></div><a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a><a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a></div></div><div id="tiptip_holder" style="max-width:200px;"><div id="tiptip_arrow"><div id="tiptip_arrow_inner"></div></div><div id="tiptip_content"></div></div><div style="display: block;"></div></body></html>
\ No newline at end of file diff --git a/tests/res/raw/tb29ggq.htm b/tests/res/raw/tb29ggq.htm new file mode 100644 index 0000000..4baba57 --- /dev/null +++ b/tests/res/raw/tb29ggq.htm @@ -0,0 +1,1173 @@ +
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head id="ctl00_Head1"><meta charset="utf-8" />
+ <!--[if IE]><![endif]-->
+ <title>
+ (TB29GGQ) Travel Bug Dog Tag - Courageous Carrot
+</title><meta name="DC.title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta name="author" content="Groundspeak, Inc." /><meta name="DC.creator" content="Groundspeak, Inc." /><meta name="Copyright" content="Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved." /><!-- Copyright (c) 2000-2012 Groundspeak, Inc. All Rights Reserved. --><meta name="description" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world." /><meta name="DC.subject" content="Geocaching is a treasure hunting game where you use a GPS to hide and seek containers with other participants in the activity. Geocaching.com is the listing service for geocaches around the world." /><meta http-equiv="imagetoolbar" content="no" /><meta name="distribution" content="global" /><meta name="MSSmartTagsPreventParsing" content="true" /><meta name="rating" content="general" /><meta name="revisit-after" content="1 days" /><meta name="robots" content="all" /><meta http-equiv="X-UA-Compatible" content="IE=8" /><link rel="icon" href="/favicon.ico" /><link rel="shortcut icon" href="/favicon.ico" /><link rel="apple-touch-icon" href="/apple-touch-icon.png" /><link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/src/reset.css" /><link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/src/typography.css" /><link rel="stylesheet" type="text/css" media="screen,projection" href="../css/blueprint/src/grid.css" />
+ <!--[if lt IE 8]>
+ <link rel="stylesheet" type="text/css" media="all" href="../css/blueprint/ie.css" />
+ <![endif]-->
+ <link id="uxCssMaster" rel="stylesheet" type="text/css" media="screen,projection" href="../css/tlnMasterScreen.css?r=1" /><link id="uxCssMain" rel="stylesheet" type="text/css" media="all" href="../css/tlnMain.css?r=1" /><link rel="Stylesheet" type="text/css" media="all" href="../css/jqueryui1810/jquery-ui-1.8.10.custom.css" /><link rel="stylesheet" type="text/css" media="all" href="/js/jquery_plugins/jquery.jgrowl.css" /><link rel="stylesheet" type="text/css" media="print" href="../css/tlnMasterPrint.css" />
+ <script type="text/javascript" src="/js/modernizr-1.7.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="/js/jquery.truncate.min.js"></script>
+
+ <link href="/css/fancybox/jquery.fancybox.css" rel="stylesheet" type="text/css" />
+ <style type="text/css" media="screen">
+ .MasterPageAds{
+ margin-top:0;
+ }
+ .CoordInfoLinkWidget{
+ margin-right:-175px;
+ }
+ * + html .CoordInfoLinkWidget{ /* IE7 Hack */
+ margin-right:0;
+ position:relative;
+ right:-165px;
+ }
+ ul.imagelist li, ul.log_images li
+ {
+ list-style-image: none !important;
+ list-style-position: outside !important;
+ list-style-type: none !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ }
+ ul.log_images li
+ {
+ float: left;
+ margin-right: 5px !important;
+ }
+ ul.pager
+ {
+ padding: 0 !important;
+ margin: 5px 0 !important;
+ width: 100%;
+ overflow: hidden;
+ }
+ ul.pager li
+ {
+ display: inline;
+ float: left;
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ margin: 0 !important;
+ padding: 0 !important;
+ }
+ ul.pager li.pager-info
+ {
+ margin: 2px 5px 0 0 !important;
+ }
+ ul.pager li.pager-current
+ {
+ border: 1px solid #003F7E;
+ color: #c00;
+ float: left;
+ font-weight: bold;
+ margin: 0 5px 0 0 !important;
+ padding: 1px 5px !important;
+ }
+ ul.pager li a
+ {
+ background-image: none;
+ border: 1px solid #ccc;
+ display: block;
+ float: left;
+ margin: 0 5px 0 0;
+ padding: 1px 5px;
+ text-decoration: none;
+ }
+ ul.pager li a:hover
+ {
+ border: 1px solid #003F7E;
+ }
+ .LogImgTitle, .LogImgDescription
+ {
+ text-align: center !important;
+ width: 100%;
+ }
+ .TrackableItemOptionsTable
+ {
+ clear:both;
+ }
+ </style>
+<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/track/details.aspx?tracker=tb29ggq" property="og:url" /><meta name="og:description" content="I am part of a gang of vegetables (see pic)
+I want to travel and have adventures. Please help me! I love pics of my exploits too!
+Move me on far and fast and help me have FUN!" property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/14.png" property="og:image" /><meta name="og:title" content="Courageous Carrot" property="og:title" /></head>
+<body >
+ <form name="aspnetForm" method="post" action="details.aspx?tracker=tb29ggq" id="aspnetForm">
+<div>
+<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
+<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
+<input type="hidden" name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT" value="3" />
+<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTM3NDI4MjQ0OA8WAh4MVEJEZXRhaWxzLklEKClZU3lzdGVtLkludDY0LCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkHMTcxOTkzNhYCZg9kFgZmD2QWCgIGDxYCHgRUZXh0BWI8bWV0YSBuYW1lPSJDb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMC0yMDEyIEdyb3VuZHNwZWFrLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIiAvPmQCBw8WAh8BBUc8IS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDEyIEdyb3VuZHNwZWFrLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPmQCGg8WAh4EaHJlZgUdfi9jc3MvdGxuTWFzdGVyU2NyZWVuLmNzcz9yPTFkAhsPFgIfAgUVfi9jc3MvdGxuTWFpbi5jc3M/cj0xZAIgDxYCHgdWaXNpYmxlaGQCAQ9kFhACBQ8WAh8BZGQCCA8WAh8DZxYIAgEPDxYCHghJbWFnZVVybAVOaHR0cDovL2ltZy5nZW9jYWNoaW5nLmNvbS91c2VyL2F2YXRhci82NDJkMjc3MS00MjRlLTRlZTYtYmViNi1lZmVjZGUzNDA2ZmMuanBnZGQCAw8WAh8BBXRIZWxsbywgPGEgaHJlZj0iL215L2RlZmF1bHQuYXNweCIgdGl0bGU9IlZpZXcgUHJvZmlsZSBmb3IgQmFuYW5ld2VpemVuIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+QmFuYW5ld2VpemVuPC9hPmQCBQ8PFgIeC05hdmlnYXRlVXJsBYYBaHR0cHM6Ly93d3cuZ2VvY2FjaGluZy5jb20vbG9naW4vZGVmYXVsdC5hc3B4P1JFU0VUPVkmcmVkaXI9aHR0cCUzYSUyZiUyZnd3dy5nZW9jYWNoaW5nLmNvbSUyZnRyYWNrJTJmZGV0YWlscy5hc3B4JTNmdHJhY2tlciUzZHRiMjlnZ3FkZAILDxYCHwEFEDMyOCBDYWNoZXMgRm91bmRkAg0PFgIfA2cWAgINDw8WAh8FBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9MzE4OTI2NzgtMTExNy00NmViLWFhM2ItMTkxYzIwYmQ2NjA3ZGQCEA8PFgIfA2dkZAIsD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIeC18hSXRlbUNvdW50AhAWIGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAggPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8JaGRkAgkPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAgoPZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCCw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAgwPZBYCAgEPDxYIHwcFBW5iLU5PHwgFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfCWhkZAIND2QWAgIBDw8WCB8HBQVrby1LUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8JaGRkAg4PZBYCAgEPDxYIHwcFBWh1LUhVHwgFDVNldFRlbXBMb2NhbGUfAQUGTWFneWFyHwloZGQCDw9kFgICAQ8PFggfBwUFcm8tUk8fCAUNU2V0VGVtcExvY2FsZR8BBQhSb23Dom7Egx8JaGRkAi8PFgIeBWNsYXNzBQdzcGFuLTIwFgICAQ9kFg4CAw9kFgJmD2QWAgIBDw8WAh8BBQdUQjI5R0dRZGQCBQ8PFgQfBAUwaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvMjEuZ2lmHg1BbHRlcm5hdGVUZXh0BRJUcmF2ZWwgQnVnIERvZyBUYWdkZAIHDw8WAh8BBRFDb3VyYWdlb3VzIENhcnJvdGRkAg0PZBYcZg9kFgJmDw8WAh8BBSI8c3Ryb25nPlRyYWNrYWJsZSBPcHRpb25zPC9zdHJvbmc+ZGQCAQ9kFgJmD2QWAmYPDxYCHwUFMWxvZy5hc3B4P3dpZD1iMWFkOWU1ZC0xN2JkLTRkMTctOGYxMS1iOTQ4ZmQ3YjliOTdkZAICDw8WAh8DaGRkAgMPDxYCHwNnZBYCZg9kFgJmDw8WAh8FBRwvbXkvd2F0Y2hsaXN0LmFzcHg/Yj0xNzE5OTM2ZGQCBA8PFgIfA2hkZAIFDw8WAh8DaGRkAgYPZBYCZg9kFgJmDw8WAh8FBTx+L3RyYWNrL3NoZWV0LmFzcHg/Z3VpZD1iMWFkOWU1ZC0xN2JkLTRkMTctOGYxMS1iOTQ4ZmQ3YjliOTdkZAIHDw8WAh8DZ2QWAmYPZBYCZg8PFgIfBQU7L2ttbC90YmttbC5hc3B4P3RiZ3VpZD1iMWFkOWU1ZC0xN2JkLTRkMTctOGYxMS1iOTQ4ZmQ3YjliOTdkZAIIDw8WAh8DaGRkAgkPZBYCZg9kFgJmDw8WAh8BBTlUaGVyZSBhcmUgPHN0cm9uZz41PC9zdHJvbmc+IHVzZXJzIHdhdGNoaW5nIHRoaXMgbGlzdGluZy5kZAIKDw8WAh8DaGRkAgsPDxYCHwNoZGQCDA8PFgIfA2hkZAINDw8WAh8DaGQWAmYPZBYCZg8QZGQWAGQCDw8PFgIeC0J1Z1BhbmVsLklEKCsEBzE3MTk5MzZkFhYCAw8PFgYfAQUKVGVhbSBSb0tlVB8FBUxodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9OGM3MTBjZWMtNmNiNC00NDYwLTgyNzQtNWU1ZDAyMmY1YzY3HgdUb29sVGlwBRlWaXNpdCBUaGlzIFVzZXIncyBQcm9maWxlZGQCBQ9kFgICAw8PFgIfAQUaV2VkbmVzZGF5LCAwMSBPY3RvYmVyIDIwMDhkZAIHD2QWAgIDDw8WAh8BBSFOb3J0aHdlc3QgRW5nbGFuZCwgVW5pdGVkIEtpbmdkb21kZAILDw8WBh8BBTNJbiBJaHIgWmllbCBiZWZpbmRldCBzaWNoIHJlY2h0cyAoQWlycG9ydCBUQi1Ib3RlbCkfBQVbaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9zZWVrL2NhY2hlX2RldGFpbHMuYXNweD9ndWlkPTVmODU1Y2JjLTQzMzctNDIxOS05YmY0LTkwYzJmZmUwMzQ5NB8NBQ1WaXNpdCBMaXN0aW5nZGQCDQ8WAh8DaGQCDw8WAh8BBTJUaGUgb3duZXIgaGFzbid0IHNldCB0aGVpciBjb2xsZWN0aWJsZSBwcmVmZXJlbmNlLmQCEQ8PFgIfAQU0VXNlIDxzdHJvbmc+VEIyOUdHUTwvc3Ryb25nPiB0byByZWZlcmVuY2UgdGhpcyBpdGVtLmRkAhcPFgIfAQW5AUkgYW0gcGFydCBvZiBhIGdhbmcgb2YgdmVnZXRhYmxlcyAoc2VlIHBpYyk8YnIgLz5JIHdhbnQgdG8gdHJhdmVsIGFuZCBoYXZlIGFkdmVudHVyZXMuIFBsZWFzZSBoZWxwIG1lISBJIGxvdmUgcGljcyBvZiBteSBleHBsb2l0cyB0b28hPGJyIC8+TW92ZSBtZSBvbiBmYXIgYW5kIGZhc3QgYW5kIGhlbHAgbWUgaGF2ZSBGVU4hZAIcDw8WBh8EBVBodHRwOi8vaW1nLmdlb2NhY2hpbmcuY29tL3RyYWNrL2Rpc3BsYXkvYWFhMTdkNzMtYzNjOC00OTQwLTgxYTMtMTA3YjY0YWE4NmMwLmpwZx8LBQlUaGUgZ2FuZyEfA2dkZAIeDxYCHwEFEk1hZCBsb29raW5nIGNhcnJvdGQCIA9kFgICAQ9kFghmDxYCHwNoZAIBDw8WAh8DaGRkAgIPDxYCHwNoZGQCAw8WAh8DaGQCEQ8PFgQfAQWFAzxoMz5HYWxsZXJ5IEltYWdlcyByZWxhdGVkIHRvIENvdXJhZ2VvdXMgQ2Fycm90PC9oMz48dWwgY2xhc3M9ImltYWdlbGlzdCI+PGxpPjxhIGhyZWY9Imh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdHJhY2svbGFyZ2UvYWFhMTdkNzMtYzNjOC00OTQwLTgxYTMtMTA3YjY0YWE4NmMwLmpwZyIgY2xhc3M9InRiX2ltYWdlcyBsbmsiIHJlbD0idGJfaW1hZ2VzIj48aW1nIHNyYz0iL2ltYWdlcy9pY29ucy8x" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="Ni9waG90by5wbmciIGFsdD0iVGhlIGdhbmchIiAvPiZuYnNwOzxzcGFuPlRoZSBnYW5nITwvc3Bhbj48L2E+PC91bD48YSBocmVmPSJnYWxsZXJ5LmFzcHg/SUQ9MTcxOTkzNiIgdGl0bGU9J1ZpZXcgR2FsbGVyeSBJbWFnZXMnPlZpZXcgQWxsIDUgR2FsbGVyeSBJbWFnZXM8L2E+HwNnZGQCEw8PFgQeB1dwdEdVSUQFJGIxYWQ5ZTVkLTE3YmQtNGQxNy04ZjExLWI5NDhmZDdiOWI5Nx4FV3B0SUQoKwQHMTcxOTkzNmQWCAIBDxYCHwEFYFRyYWNraW5nIEhpc3RvcnkgKDU3NTMuOWttJm5ic3A7KSA8YSBocmVmPSJtYXBfZ20uYXNweD9JRD0xNzE5OTM2IiB0aXRsZT0nVmlldyBNYXAnPlZpZXcgTWFwPC9hPmQCAw8WAh8BBeEEPHVsIGNsYXNzPSJwYWdlciI+PGxpIGNsYXNzPSJwYWdlci1pbmZvIj4wMS0xMCBvZiAxNjcgcmVjb3JkcyAmbWlkZG90OzwvbGk+PGxpIGNsYXNzPSJwYWdlci1jdXJyZW50Ij4wMTwvbGk+PGxpPjxhIGhyZWY9Ii90cmFjay9kZXRhaWxzLmFzcHg/aWQ9MTcxOTkzNiZwYWdlPTIiPjAyPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii90cmFjay9kZXRhaWxzLmFzcHg/aWQ9MTcxOTkzNiZwYWdlPTMiPjAzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii90cmFjay9kZXRhaWxzLmFzcHg/aWQ9MTcxOTkzNiZwYWdlPTQiPjA0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii90cmFjay9kZXRhaWxzLmFzcHg/aWQ9MTcxOTkzNiZwYWdlPTUiPjA1PC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii90cmFjay9kZXRhaWxzLmFzcHg/aWQ9MTcxOTkzNiZwYWdlPTYiPjA2PC9hPjwvbGk+PGxpIGNsYXNzPSJwYWdlci1uZXh0Ij48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT0yIj5uZXh0IOKAujwvYT48L2xpPjxsaSBjbGFzcz0icGFnZXItbGFzdCBsYXN0Ij48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT0xNyI+bGFzdCDCuzwvYT48L2xpPjwvdWw+ZAIHDxYCHwYCChYUAgEPZBYEZg8VCQAGMTQucG5nC0Ryb3BwZWQgT2ZmC0Ryb3BwZWQgT2ZmCjIwMTItMTItMjKLAjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD02NWRmOTIyMi1lZWFiLTRlOTktODA2OC1iMjU2YTExOGJhZTMiPnIuYnVydG9uPC9hPiBwbGFjZWQgaXQgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9zZWVrL2NhY2hlX2RldGFpbHMuYXNweD9ndWlkPTVmODU1Y2JjLTQzMzctNDIxOS05YmY0LTkwYzJmZmUwMzQ5NCI+SWhyIFppZWwgYmVmaW5kZXQgc2ljaCByZWNodHMgKEFpcnBvcnQgVEItSG90ZWwpPC9hPhxOb3JkcmhlaW4tV2VzdGZhbGVuLCBHZXJtYW55AFJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3RyYWNrL2xvZy5hc3B4P0xVSUQ9MzZmMWQwMWEtODczMC00OGRjLThjNmEtODY0Y2U4YzJiYjAxZAICDxUEAAAAAGQCAg9kFgRmDxUJDkFsdGVybmF0aW5nUm93BjEzLnBuZxhSZXRyaWV2ZSBJdCBmcm9tIGEgQ2FjaGUYUmV0cmlldmUgSXQgZnJvbSBhIENhY2hlCjIwMTItMTItMjKQAjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD02NWRmOTIyMi1lZWFiLTRlOTktODA2OC1iMjU2YTExOGJhZTMiPnIuYnVydG9uPC9hPiByZXRyaWV2ZWQgaXQgZnJvbSA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3NlZWsvY2FjaGVfZGV0YWlscy5hc3B4P2d1aWQ9NWY4NTVjYmMtNDMzNy00MjE5LTliZjQtOTBjMmZmZTAzNDk0Ij5JaHIgWmllbCBiZWZpbmRldCBzaWNoIHJlY2h0cyAoQWlycG9ydCBUQi1Ib3RlbCk8L2E+HE5vcmRyaGVpbi1XZXN0ZmFsZW4sIEdlcm1hbnkAUmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svbG9nLmFzcHg/TFVJRD00Zjk2NjI2Ny1jYWExLTRkNWUtODQ2OS02NGM1OTk5OGE3YWJkAgIPFQQOQWx0ZXJuYXRpbmdSb3czU2VlbiBhdCB0aGUgQWlycG9ydC1Ib3RlbCBpbiBEdXNzZWxkb3JmL0dlcm1hbnkuLi4hAABkAgMPZBYEZg8VCQAGMTQucG5nC0Ryb3BwZWQgT2ZmC0Ryb3BwZWQgT2ZmCjIwMTItMTItMjGNAjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD1lNTcxYzkwNi1lNzVmLTRlMmEtOGRkNC04MzUxZTIxMjFmMDkiPnNpbGl6aXVzODM8L2E+IHBsYWNlZCBpdCBpbiA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3NlZWsvY2FjaGVfZGV0YWlscy5hc3B4P2d1aWQ9NWY4NTVjYmMtNDMzNy00MjE5LTliZjQtOTBjMmZmZTAzNDk0Ij5JaHIgWmllbCBiZWZpbmRldCBzaWNoIHJlY2h0cyAoQWlycG9ydCBUQi1Ib3RlbCk8L2E+HE5vcmRyaGVpbi1XZXN0ZmFsZW4sIEdlcm1hbnkMIC0gNzg4LjE2IGttUmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svbG9nLmFzcHg/TFVJRD1jYzJiZGQxMi02NzQ1LTQyNzYtOTdlMy02YzdjMzAyNzIzNGZkAgIPFQQARURyb3BwZWQgaW4gSWhyIFppZWwgYmVmaW5kZXQgc2ljaCByZWNodHMgKEFpcnBvcnQgVEItSG90ZWwpIChHQzFYOUZSKQAAZAIED2QWBGYPFQkOQWx0ZXJuYXRpbmdSb3cGMTkucG5nGkdyYWIgSXQgKE5vdCBmcm9tIGEgQ2FjaGUpGkdyYWIgSXQgKE5vdCBmcm9tIGEgQ2FjaGUpCjIwMTItMTItMjBwPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPWU1NzFjOTA2LWU3NWYtNGUyYS04ZGQ0LTgzNTFlMjEyMWYwOSI+c2lsaXppdXM4MzwvYT4gZ3JhYmJlZCBpdAAAUmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svbG9nLmFzcHg/TFVJRD0yMjcyMzBjZi04ZWUwLTQ1NGQtOTk3MC1hYjg5NWJlMTYwNjRkAgIPFQQOQWx0ZXJuYXRpbmdSb3c3SXQgdHVjIHNvbWUgdGltZSBidXQgbm93IGl0cyB0aW1lIHRvIHJlbGVhc2UgdGhpcyBvbmUsIAAAZAIFD2QWBGYPFQkABjE2LnBuZwxNYXJrIE1pc3NpbmcMTWFyayBNaXNzaW5nCjIwMTItMTEtMDR3PGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTk3ZGFiYmQ2LTNiZDQtNGIxOS1hNTMxLTAxZWIxZGNmOGU3NSI+aG9sbGVyMjwvYT4gbWFya2VkIGl0IGFzIG1pc3NpbmcAAFJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3RyYWNrL2xvZy5hc3B4P0xVSUQ9YzE0ZmU3ZDktOWRmNS00MmU4LTkyYTQtODIyYjRmOGM0Mzc4ZAICDxUEAPECVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbWVzc2FnZS48YnIgLz5UaGlzIFRyYWNrYWJsZSBoYXMgYmVlbiBtYXJrZWQgJ21pc3NpbmcnIGJ5IGEgY2FjaGUgb3duZXIgb3Igc2l0ZSBhZG1pbmlzdHJhdG9yLiAgVHJhY2thYmxlcyBhcmUgbWFya2VkIG1pc3Npbmcgd2hlbiBpdCBpcyBkZXRlcm1pbmVkIHRoYXQgdGhleSBhcmUgbm8gbG9uZ2VyIGxvY2F0ZWQgaW4gdGhlIGNhY2hlIHRoZXkgYXJlIGxpc3RlZCBpbiBvciBpbiB0aGUgaGFuZHMgb2YgdGhlIGN1cnJlbnQgaG9sZGVyLiAgUmV2aWV3IHRoZSBtb3N0IHJlY2VudCBsb2dzIG9uIHRoaXMgVHJhY2thYmxlIHRvIGxlYXJuIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaXRzIGN1cnJlbnQgc3RhdGUuAABkAgYPZBYEZg8VCQ5BbHRlcm5hdGluZ1JvdwU0LnBuZwpXcml0ZSBub3RlCldyaXRlIG5vdGUKMjAxMi0xMS0wNHc8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9MmJjMjY3MmEtN2E4ZC00N2Y0LTg2ZjgtMWE3ODdiZjBjYmU5Ij5jZXphbm5lPC9hPiBwb3N0ZWQgYSBub3RlIGZvciBpdAAAUmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svbG9nLmFzcHg/TFVJRD1mZmY3NmVhMS1lMzY1LTRiMWQtYTE3Zi00MDc2NzlhOTk2NWVkAgIPFQQOQWx0ZXJuYXRpbmdSb3fZAUFwcGFyZW50bHkgc29tZW9uZSB0b29rIHRo" />
+<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="aXMgVEIgdG8gYW4gZXZlbnQgd2hpY2ggdG9vayBwbGFjZSBpbiBCdXJnZW5sYW5kIGFuZCBmb3Jnb3QgdG8gbG9nIGl0IG91dCBvZiB0aGlzIGNhY2hlLiBUaGUgVEIgd2FzIGFscmVhZHkgbWlzc2luZyBmcm9tIHRoaXMgY2FjaGUgb24gU2VwdGVtYmVyIDE2IHdoaWxlIHRoZSBldmVudCB0b29rIHBsYWNlIG9uIFNlcHRlbWJlciAyMi4AAGQCBw9kFgRmDxUJAAY0OC5wbmcNRGlzY292ZXJlZCBJdA1EaXNjb3ZlcmVkIEl0CjIwMTItMDktMjJ0PGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTg2MWJjNzk2LTIyMWQtNGFjNy04MmZjLWI0YTRmMDQ3MjRlNiI+Y2FjaGUtZGl2ZXI8L2E+IGRpc2NvdmVyZWQgaXQAAFJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3RyYWNrL2xvZy5hc3B4P0xVSUQ9ZTAzOWNiZDctZWYzZS00MDk1LWJmYmEtMmIzYTMyMjcyMDMwZAICDxUEADhCZWltIDguU3RhbW10aXNjaCBkZXIgUyYjeEZDO2RidXJnZW5sJiN4RTQ7bmRlciBnZXNlaGVuIQAAZAIID2QWBGYPFQkOQWx0ZXJuYXRpbmdSb3cGNDgucG5nDURpc2NvdmVyZWQgSXQNRGlzY292ZXJlZCBJdAoyMDEyLTA5LTIydTxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD0zYzYwMjg2Yi0wMWIzLTQ4YzQtYTI2Mi04ZjIzZmVhODdmMTAiPlN0ZWlyZXJwb3N0aTwvYT4gZGlzY292ZXJlZCBpdAAAUmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svbG9nLmFzcHg/TFVJRD0yMTE1Mzc3My02ODQ5LTQxMGUtYTk1OC1kYjYwODU3NGM0ZDhkAgIPFQQOQWx0ZXJuYXRpbmdSb3ctaGV1dGUgZ2VzZWhlbiBiZWltIFN0cmF1c3Nlbi1FdmVudCBkZXIgU0JMICEhAABkAgkPZBYEZg8VCQAGNDgucG5nDURpc2NvdmVyZWQgSXQNRGlzY292ZXJlZCBJdAoyMDEyLTA5LTIycjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD04YTIwYTliMy1mOTNhLTQzYjgtYTFjOC04NTgyMjIyN2Q4NTIiPmNvc21vMTM1NTwvYT4gZGlzY292ZXJlZCBpdAAAUmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svbG9nLmFzcHg/TFVJRD1jMTIwNzk1Zi1jMTc0LTQ1OTctOWFiMy1iNWM2Mjc3NmNjOTBkAgIPFQQAG0dlc2VoZW4gYmVpbSBTdHJhdXNzZW5ldmVudAAAZAIKD2QWBGYPFQkOQWx0ZXJuYXRpbmdSb3cFNC5wbmcKV3JpdGUgbm90ZQpXcml0ZSBub3RlCjIwMTItMDktMTZ3PGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTVmNmFjOTg2LWQ0MzMtNDY3ZS1hNDFkLTk2OGJhOGI3N2Y2NiI+anVjaHV1dTwvYT4gcG9zdGVkIGEgbm90ZSBmb3IgaXQAAFJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3RyYWNrL2xvZy5hc3B4P0xVSUQ9MmFhYTBkNDgtM2Y1Zi00YmY3LTk1NTEtMjRjYjZhZjY5MGEwZAICDxUEDkFsdGVybmF0aW5nUm93Mk5pY2h0IG1laHIgaW0gQ2FjaGUgdm9yaGFuZGVuISEhISBOaWNodCBnZXNlaGVuISEhAABkAgsPFgIfAQXhBDx1bCBjbGFzcz0icGFnZXIiPjxsaSBjbGFzcz0icGFnZXItaW5mbyI+MDEtMTAgb2YgMTY3IHJlY29yZHMgJm1pZGRvdDs8L2xpPjxsaSBjbGFzcz0icGFnZXItY3VycmVudCI+MDE8L2xpPjxsaT48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT0yIj4wMjwvYT48L2xpPjxsaT48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT0zIj4wMzwvYT48L2xpPjxsaT48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT00Ij4wNDwvYT48L2xpPjxsaT48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT01Ij4wNTwvYT48L2xpPjxsaT48YSBocmVmPSIvdHJhY2svZGV0YWlscy5hc3B4P2lkPTE3MTk5MzYmcGFnZT02Ij4wNjwvYT48L2xpPjxsaSBjbGFzcz0icGFnZXItbmV4dCI+PGEgaHJlZj0iL3RyYWNrL2RldGFpbHMuYXNweD9pZD0xNzE5OTM2JnBhZ2U9MiI+bmV4dCDigLo8L2E+PC9saT48bGkgY2xhc3M9InBhZ2VyLWxhc3QgbGFzdCI+PGEgaHJlZj0iL3RyYWNrL2RldGFpbHMuYXNweD9pZD0xNzE5OTM2JnBhZ2U9MTciPmxhc3Qgwrs8L2E+PC9saT48L3VsPmQCMA8WAh8KBQtzcGFuLTQgbGFzdBYCAgEPZBYCAgEPDxYCHwEF/wM8aWZyYW1lIHR5cGU9ImlmcmFtZSIgc3JjPSJodHRwOi8vYWRzLmdyb3VuZHNwZWFrLmNvbS9hLmFzcHg/Wm9uZUlEPTkmVGFzaz1HZXQmU2l0ZUlEPTEmWD0nZGU1YzcyNmM1ZmU0NDU0MTk2MGY2ZmI3OGNlNzc1NGInIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjI0MCIgTWFyZ2lud2lkdGg9IjAiIE1hcmdpbmhlaWdodD0iMCIgSHNwYWNlPSIwIiBWc3BhY2U9IjAiIEZyYW1lYm9yZGVyPSIwIiBTY3JvbGxpbmc9Im5vIiBzdHlsZT0id2lkdGg6MTIwcHg7SGVpZ2h0OjI0MHB4OyI+PGEgaHJlZj0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9Q2xpY2smO01vZGU9SFRNTCZTaXRlSUQ9MSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwOi8vYWRzLmdyb3VuZHNwZWFrLmNvbS9hLmFzcHg/Wm9uZUlEPTkmVGFzaz1HZXQmTW9kZT1IVE1MJlNpdGVJRD0xIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjI0MCIgYm9yZGVyPSIwIiBhbHQ9IiIgLz48L2E+PC9pZnJhbWU+ZGQCMQ9kFgQCAw8WAh8BBQdFbmdsaXNoZAIFDxYCHwYCEBYgZg9kFgICAQ8PFggfBwUFZW4tVVMfCAUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHwloZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCA9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCCQ9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCCg9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAILD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCDA9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg0PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCDg9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIPD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCAw8WAh8BBStTZXJ2ZXI6IFdFQjAxOyBCdWlsZDogV2ViLkhvdEZpeF8yMDEyMTIxMS4xZGT8K6IlAWC8dkt7tG/Bikvy2o0veQ==" />
+</div>
+
+<script type="text/javascript">
+//<![CDATA[
+var theForm = document.forms['aspnetForm'];
+if (!theForm) {
+ theForm = document.aspnetForm;
+}
+function __doPostBack(eventTarget, eventArgument) {
+ if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
+ theForm.__EVENTTARGET.value = eventTarget;
+ theForm.__EVENTARGUMENT.value = eventArgument;
+ theForm.submit();
+ }
+}
+//]]>
+</script>
+
+
+<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634494454566271406" type="text/javascript"></script>
+
+
+<script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=4edbeeee" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=4edbeeee" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=5MtKNiX-AvTiJAmD-CuAbj2i1O1w1_sqCit4yp-ml_oeLlcBDoI34c7xF66GuJL-Fr4hkU72euEoaMI_-eplvmaZxdGIWIsjLkQ5n7ejd9FRAjKQhEz6SgN4YSU_UT5tzAicclG3I_-1tdJN2lyb0uaG4hoFrGKe6sW49Qb-folwHAUC0Oym6UmLHCk48nZjPiZi8lnfQOJH3ew-CNb6UMEqX541" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=C5mECf6JWQUTGOEvqWYgiTd7aYAVrqQJZGCHcxc-cHLemvCwBGRB9iWo1t5hONDlOQ-QIl5aRWJNXbZpFfybfWd9YeQi9lUG0eecrYxZH-GH26aMEiCJLSkwvHh6BuhJ_fVd4g2" type="text/javascript"></script>
+ <script type="text/javascript">
+//<![CDATA[
+Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00');
+//]]>
+</script>
+
+ <div id="Top" class="SkipLinks">
+
+ <a id="ctl00_hlSkipLinksNavigation" accesskey="n" title="Skip to Navigation" href="#Navigation">Skip to Navigation</a>
+ <a id="ctl00_hlSkipLinksContent" accesskey="c" title="Skip to Content" href="#Content">Skip to Content</a>
+
+ </div>
+
+ <!--[if lte IE 6]>
+ <div class="WarningMessage PhaseOut">
+
+ <p>Groundspeak is phasing out support for older browsers. Visit the <a href="http://support.groundspeak.com/index.php?pg=kb.page&id=215" title="Browser Support Information">Help Center</a> for more information.</p>
+
+ </div>
+ <![endif]-->
+
+
+
+ <div class="PrintOnly">
+
+ <p>
+ <img src="/images/logo_print_bw.png" alt="Geocaching.com" /></p>
+ <hr />
+
+ </div>
+
+ <header>
+
+ <div class="container">
+
+ <h1 class="Logo span-16">
+ <a href="../" id="ctl00_HDHomeLink" title="Geocaching" accesskey="h">Geocaching</a></h1>
+ <div class="ProfileWidget span-8 last">
+
+
+
+ <div id="ctl00_divSignedIn">
+
+ <p class="Avatar NoBottomSpacing">
+ <a id="ctl00_hlHeaderAvatar" accesskey="p" title="Your Profile" href="../my/"><img title="Your Profile" src="http://img.geocaching.com/user/avatar/642d2771-424e-4ee6-beb6-efecde3406fc.jpg" alt="" style="border-width:0px;" /></a></p>
+ <p class="SignedInText">
+ <strong>
+ Hello, <a href="/my/default.aspx" title="View Profile for Bananeweizen" class="SignedInProfileLink">Bananeweizen</a></strong> (<a id="ctl00_hlSignOut" accesskey="s" title="Sign Out" href="https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2ftrack%2fdetails.aspx%3ftracker%3dtb29ggq">Sign Out</a>)<br />
+ <span id="ctl00_litPMLevel">Premium Member</span>
+
+ <strong style="display:block">
+ 328 Caches Found</strong>
+
+ </p>
+
+ </div>
+
+
+ </div>
+
+ <div class="NavContainer span-24 last">
+ <nav id="Navigation">
+
+ <ul class="Menu">
+ <li>
+ <a id="ctl00_hlNavLearn" accesskey="1" title="Learn" href="../guide/">Learn ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavGeocaching101" accesskey="i" title="Geocaching 101" href="../guide/">Geocaching 101</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGeocaching2Minutes" title="Geocaching in 2 Minutes" href="../videos/#cat=cat:newbies&vid=-4VFeYZTTYs">Geocaching in 2 Minutes</a></li>
+ </ul>
+ </li>
+
+ <li id="ctl00_liNavProfile">
+ <a id="ctl00_hlNavProfile" accesskey="2" title="Your Profile" href="../my/">Your Profile ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavQuickView" accesskey="p" title="Quick View" href="../my/">Quick View</a></li>
+ <li>
+ <a id="ctl00_hlSubNavLists" accesskey="q" title="Lists" href="../my/lists.aspx">Lists</a></li>
+ <li class="ExtraText">
+ <a id="ctl00_hlSubNavGeocaches" accesskey="m" title="Geocaches" class="NoRightPadding" href="../my/geocaches.aspx">Geocaches</a>
+ (<a id="ctl00_hlSubNavGeocachesYours" accesskey="y" title="Yours" class="NoSidePadding" href="../my/owned.aspx">Yours</a>)</li>
+ <li class="ExtraText">
+ <a id="ctl00_hlSubNavProfileTrackables" title="Trackables" class="NoRightPadding" href="../my/travelbugs.aspx">Trackables</a>
+ (<a id="ctl00_hlSubNavTrackablesYours" accesskey="8" title="Yours" class="NoSidePadding" href="search.aspx?o=1&uid=31892678-1117-46eb-aa3b-191c20bd6607">Yours</a>)</li>
+ <li>
+ <a id="ctl00_hlSubNavPocketQueries" accesskey="9" title="Pocket Queries" href="../pocket/">Pocket Queries</a></li>
+ <li>
+ <a id="ctl00_hlSubNavFieldNotes" accesskey="0" title="Field Notes" href="../my/fieldnotes.aspx">Field Notes</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAccount" accesskey="a" title="Account Details" href="../account/">Account Details</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavPlay" accesskey="3" title="Play" href="../seek/">Play ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavHide" accesskey="d" title="Hide & Seek a Cache" href="../seek/">Hide & Seek a Cache</a></li>
+ <li>
+ <a id="ctl00_hlSubNavLogCache" title="Log a Cache" href="../my/recentlyviewedcaches.aspx">Log a Cache</a></li>
+ <li><a id="ctl00_hlSubNavMap" accesskey="/" title="View Geocache Map" href="../map/">View Geocache Map</a></li>
+ <li>
+ <a id="ctl00_hlSubNavTrackables" accesskey="e" title="Find Trackables" href="./">Find Trackables</a></li>
+ <li>
+ <a id="ctl00_hlSubNavHelpCenter" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavCommunity" accesskey="6" title="Community" href="../forums/">Community ▼</a>
+ <ul class="SubMenu">
+
+ <li>
+ <a id="ctl00_hlSubNavTellaFriend" accesskey="-" title="Tell a Friend" href="../account/SendReferral.aspx">Tell a Friend</a></li>
+
+ <li><a id="ctl00_hlSubNavVolunteers" accesskey="+" title="Volunteers" href="../volunteers/">Volunteers</a></li>
+ <li>
+ <a id="ctl00_hlSubNavLocal" accesskey="z" title="Local Organizations" href="../organizations/">Local Organizations</a></li>
+ <li>
+ <a id="ctl00_hlSubNavDiscussionForums" accesskey="f" title="Discussion Forums" href="../forums/">Discussion Forums</a></li>
+ <li>
+ <a id="ctl00_hlSubNavBlog" accesskey="b" title="Blog" rel="external" href="http://blog.geocaching.com/">Blog</a></li>
+ <li>
+ <a id="ctl00_hlSubNavEvents" accesskey="v" title="Events" href="../calendar/">Events</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavShop" accesskey="4" title="Shop" href="http://shop.geocaching.com/">Shop ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavShop" accesskey="j" title="Shop Geocaching" rel="external" href="http://shop.geocaching.com/">Shop Geocaching</a></li>
+ <li>
+ <a id="ctl00_hlSubNavIntlRetailers" title="International Retailers" rel="external" href="http://shop.geocaching.com/default/international-retailers/">International Retailers</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGPSReviews" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+ <li>
+ <a id="ctl00_hlSubNavGPSGuide" accesskey="k" title="Guide to Buying a GPS Device" href="../about/buying.aspx">Guide to Buying a GPS Device</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavPartnering" accesskey="5" title="Partnering" href="../travel/">Partnering ▼</a>
+ <ul class="SubMenu">
+ <li>
+ <a id="ctl00_hlSubNavTravel" title="Travel and GeoTourism" href="../travel/">Travel and GeoTourism</a></li>
+ <li>
+ <a id="ctl00_hlSubNavBrandedPromotions" title="Branded Promotions" href="../brandedpromotions/">Branded Promotions</a></li>
+ <li>
+ <a id="ctl00_hlSubNavEducation" title="Geocaching and Education" href="../education/">Geocaching and Education</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAdvertisingWithUs" title="Advertising with Us" href="../about/advertising.aspx">Advertising with Us</a></li>
+ <li>
+ <a id="ctl00_hlSubNavAPIProgram" title="API Program" href="../live/apidevelopers/">API Program</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavVideos" accesskey="7" title="Videos" href="../videos/">Videos</a></li>
+ <li>
+ <a id="ctl00_hlNavFollowUs" title="Follow Us" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Follow Us ▼</a>
+ <ul class="SubMenu NavSocialMedia">
+ <li>
+ <a id="ctl00_hlSubNavFacebook" title="Facebook" class="SubNavFacebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts">Facebook</a></li>
+ <li>
+ <a id="ctl00_hlSubNavTwitter" title="Twitter" class="SubNavTwitter" href="http://twitter.com/GoGeocaching">Twitter</a></li>
+ <li>
+ <a id="ctl00_hlSubNavFlickr" title="Flickr" class="SubNavFlickr" href="http://www.flickr.com/photos/geocaching_com/">Flickr</a></li>
+ <li>
+ <a id="ctl00_hlSubNavYouTube" title="YouTube" class="SubNavYouTube" href="http://www.youtube.com/user/GoGeocaching">YouTube</a></li>
+ </ul>
+ </li>
+ </ul>
+
+ </nav>
+ <div class="LanguageSelector">
+
+
+<div class="LocaleText">
+
+ <strong>Choose Your Language:</strong>
+
+</div>
+<div class="LocaleList">
+
+ <div class="selected-language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul class="language-list">
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li>
+
+ <li><a id="ctl00_uxLocaleListTop_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleListTop$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+ jQuery(".selected-language a").click(function (e) {
+ e.preventDefault();
+ var $loc = jQuery(this).parent().next();
+ jQuery($loc).show().position({
+ of: $loc.parent(),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 0",
+ collision: "fit fit"
+ });
+ jQuery(this).addClass("Expanded");
+ jQuery(document).click(function () {
+ jQuery(".language-list").fadeOut("fast");
+ jQuery(".selected-language a").removeClass("Expanded");
+ });
+ return false;
+ });
+ });
+</script>
+ </div>
+ </div>
+
+
+ </div>
+
+
+ </header>
+ <section id="Content">
+
+
+ <div class="container">
+
+ <div id="ctl00_divBreadcrumbs" class="BreadcrumbWidget span-24 last">
+
+ <p>
+ <span id="ctl00_Breadcrumbs"><span><a title="Geocaching - The Official Global GPS Cache Hunt Site" href="/">Geocaching</a></span><span> > </span><span><a title="Trackables" href="/track/default.aspx">Trackables</a></span><span> > </span><span>Trackable Item Details</span></span>
+ </p>
+
+
+ </div>
+
+ <div id="ctl00_divContentMain" class="span-20">
+
+
+
+ <div id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoLinkPanel" class="CoordInfoLinkWidget">
+
+ <p>
+ <a href="#" class="CoordInfoLink">
+ <span id="ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode" class="CoordInfoCode">TB29GGQ</span>
+ <span class="arrow">▼</span> </a>
+ </p>
+
+</div>
+<div id="dlgClipboard">
+ <input type="text" class="TextFormat" />
+ <a href="#" onclick="$('#dlgClipboard').hide();return false;" title="Close" class="Close">
+ x</a>
+</div>
+<script type="text/javascript">
+ $("a.CoordInfoLink").click(function (e) {
+ e.preventDefault();
+
+ $("#dlgClipboard")
+ .show()
+ .position({
+ of: $("a.CoordInfoLink"),
+ my: "right top",
+ at: "right bottom",
+ offset: "0 5"
+ })
+ .find("input")
+ .val('http://coord.info/' + $('.CoordInfoCode').text())
+ .focus()
+ .select();
+
+ $(document).mouseup(function (e) {
+ if ($(e.target).parent("div#dlgClipboard").length == 0) {
+ $(this).unbind(e);
+ $("div#dlgClipboard").hide();
+ }
+ });
+
+ return false;
+ });
+
+
+</script>
+
+ <h2 class="WrapFix">
+ <img id="ctl00_ContentBody_BugTypeImage" class="TravelBugHeaderIcon" src="http://www.geocaching.com/images/wpttypes/21.gif" alt="Travel Bug Dog Tag" style="border-width:0px;" />
+ <span id="ctl00_ContentBody_lbHeading">Courageous Carrot</span>
+ </h2>
+
+
+
+ <table id="ctl00_ContentBody_OptionTable" class="TrackableItemOptionsTable right" align="Right" border="0" style="width:240px;">
+ <tr id="ctl00_ContentBody_trHeader">
+ <td id="ctl00_ContentBody_tcTypeName" class="TableHeader"><strong>Trackable Options</strong></td>
+ </tr><tr id="ctl00_ContentBody_trLogIt">
+ <td>
+ <img src="/images/icons/16/write_log.png" width="16" height="16" alt="notebook"
+ title="Found it? Log it!" /> <a id="ctl00_ContentBody_LogLink" title="Found it? Log it!" href="log.aspx?wid=b1ad9e5d-17bd-4d17-8f11-b948fd7b9b97">Found it? Log it!</a></td>
+ </tr><tr id="ctl00_ContentBody_trWatchIt">
+ <td>
+ <img src="/images/icons/16/watch.png" width="16" height="16" alt="alert"
+ title="Watch This Trackable Item" /> <a id="ctl00_ContentBody_WatchLink" title="Watch This Trackable Item" href="/my/watchlist.aspx?b=1719936">Watch This Trackable Item</a></td>
+ </tr><tr id="ctl00_ContentBody_trPrintIt">
+ <td>
+ <img src="/images/icons/16/print.png" width="16" height="16" alt="printer"
+ title="Print Bug Sheet" /> <a id="ctl00_ContentBody_lnkPrint" title="Print Info Sheet" href="sheet.aspx?guid=b1ad9e5d-17bd-4d17-8f11-b948fd7b9b97">Print Info Sheet</a></td>
+ </tr><tr id="ctl00_ContentBody_trGoogleKML">
+ <td>
+ <img src="/images/icons/16/view_map.png" width="16" height="16" alt="map"
+ title="View in Google Earth"
+ class="lnk" /> <a id="ctl00_ContentBody_lnkGoogleKML" title="View in Google Earth" href="/kml/tbkml.aspx?tbguid=b1ad9e5d-17bd-4d17-8f11-b948fd7b9b97">View in Google Earth</a></td>
+ </tr><tr id="ctl00_ContentBody_trWatchList">
+ <td><span id="ctl00_ContentBody_WatchList">There are <strong>5</strong> users watching this listing.</span></td>
+ </tr>
+</table>
+
+<dl class="BugDetailsList">
+
+ <dt>
+ Owner:
+ </dt>
+
+ <dd>
+ <a id="ctl00_ContentBody_BugDetails_BugOwner" title="Visit This User's Profile" href="http://www.geocaching.com/profile/?guid=8c710cec-6cb4-4460-8274-5e5d022f5c67">Team RoKeT</a>
+ </dd>
+
+
+
+ <dt>
+ Released:
+ </dt>
+
+ <dd>
+ <span id="ctl00_ContentBody_BugDetails_BugReleaseDate">Wednesday, 01 October 2008</span>
+ </dd>
+
+
+
+
+ <dt>
+ Origin:
+ </dt>
+
+ <dd>
+ <span id="ctl00_ContentBody_BugDetails_BugOrigin">Northwest England, United Kingdom</span>
+ </dd>
+
+
+
+ <dt>
+ Recently Spotted:</dt>
+
+ <dd>
+ <a id="ctl00_ContentBody_BugDetails_BugLocation" title="Visit Listing" href="http://www.geocaching.com/seek/cache_details.aspx?guid=5f855cbc-4337-4219-9bf4-90c2ffe03494">In Ihr Ziel befindet sich rechts (Airport TB-Hotel)</a></dd>
+
+</dl>
+<p>
+
+</p>
+<p>
+ The owner hasn't set their collectible preference.
+</p>
+<p>
+ <span id="ctl00_ContentBody_BugDetails_BugTBNum" String="Use <strong>{0}</strong> to reference this item.">Use <strong>TB29GGQ</strong> to reference this item.</span>
+</p>
+<p>
+ <strong>
+ <a id="ctl00_ContentBody_BugDetails_uxFirstTime" title="First time logging a Trackable?" href="/track/default.aspx">First time logging a Trackable? Click here.</a>
+ </strong>
+</p>
+<h3>
+ Current GOAL
+</h3>
+<div id="TrackableGoal">
+<p>
+ I am part of a gang of vegetables (see pic)<br />I want to travel and have adventures. Please help me! I love pics of my exploits too!<br />Move me on far and fast and help me have FUN!
+</p>
+</div>
+<h3>
+ About This Item
+</h3>
+<div id="TrackableDetails">
+<p>
+ <img id="ctl00_ContentBody_BugDetails_BugImage" class="TrackableItemDetailsImage" src="http://img.geocaching.com/track/display/aaa17d73-c3c8-4940-81a3-107b64aa86c0.jpg" alt="The gang!" style="border-width:0px;" />
+</p>
+<p>
+ Mad looking carrot
+</p>
+</div>
+<div id="ctl00_ContentBody_BugDetails_uxAbuseReport">
+
+ <p>
+
+
+ </p>
+
+</div>
+
+ <div class="Clear">
+ </div>
+ <p>
+ <span id="ctl00_ContentBody_Images"><h3>Gallery Images related to Courageous Carrot</h3><ul class="imagelist"><li><a href="http://img.geocaching.com/track/large/aaa17d73-c3c8-4940-81a3-107b64aa86c0.jpg" class="tb_images lnk" rel="tb_images"><img src="/images/icons/16/photo.png" alt="The gang!" /> <span>The gang!</span></a></ul><a href="gallery.aspx?ID=1719936" title='View Gallery Images'>View All 5 Gallery Images</a></span></p>
+
+<h4 class="BottomSpacing">
+ Tracking History (5753.9km ) <a href="map_gm.aspx?ID=1719936" title='View Map'>View Map</a>
+</h4>
+<ul class="pager"><li class="pager-info">01-10 of 167 records ·</li><li class="pager-current">01</li><li><a href="/track/details.aspx?id=1719936&page=2">02</a></li><li><a href="/track/details.aspx?id=1719936&page=3">03</a></li><li><a href="/track/details.aspx?id=1719936&page=4">04</a></li><li><a href="/track/details.aspx?id=1719936&page=5">05</a></li><li><a href="/track/details.aspx?id=1719936&page=6">06</a></li><li class="pager-next"><a href="/track/details.aspx?id=1719936&page=2">next ›</a></li><li class="pager-last last"><a href="/track/details.aspx?id=1719936&page=17">last »</a></li></ul>
+
+
+ <table class="TrackableItemLogTable Table">
+
+ <tr class="Data BorderTop ">
+ <td width="105">
+ <img src="/images/logtypes/14.png" width="16" height="16" alt="Dropped Off" title="Dropped Off" /> 2012-12-22
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=65df9222-eeab-4e99-8068-b256a118bae3">r.burton</a> placed it in <a href="http://www.geocaching.com/seek/cache_details.aspx?guid=5f855cbc-4337-4219-9bf4-90c2ffe03494">Ihr Ziel befindet sich rechts (Airport TB-Hotel)</a>
+ </td>
+ <td>
+ Nordrhein-Westfalen, Germany
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=36f1d01a-8730-48dc-8c6a-864ce8c2bb01" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom ">
+ <td colspan="4">
+ <div></div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop AlternatingRow">
+ <td width="105">
+ <img src="/images/logtypes/13.png" width="16" height="16" alt="Retrieve It from a Cache" title="Retrieve It from a Cache" /> 2012-12-22
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=65df9222-eeab-4e99-8068-b256a118bae3">r.burton</a> retrieved it from <a href="http://www.geocaching.com/seek/cache_details.aspx?guid=5f855cbc-4337-4219-9bf4-90c2ffe03494">Ihr Ziel befindet sich rechts (Airport TB-Hotel)</a>
+ </td>
+ <td>
+ Nordrhein-Westfalen, Germany
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=4f966267-caa1-4d5e-8469-64c59998a7ab" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom AlternatingRow">
+ <td colspan="4">
+ <div>Seen at the Airport-Hotel in Dusseldorf/Germany...!</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop ">
+ <td width="105">
+ <img src="/images/logtypes/14.png" width="16" height="16" alt="Dropped Off" title="Dropped Off" /> 2012-12-21
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=e571c906-e75f-4e2a-8dd4-8351e2121f09">silizius83</a> placed it in <a href="http://www.geocaching.com/seek/cache_details.aspx?guid=5f855cbc-4337-4219-9bf4-90c2ffe03494">Ihr Ziel befindet sich rechts (Airport TB-Hotel)</a>
+ </td>
+ <td>
+ Nordrhein-Westfalen, Germany
+ - 788.16 km
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=cc2bdd12-6745-4276-97e3-6c7c3027234f" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom ">
+ <td colspan="4">
+ <div>Dropped in Ihr Ziel befindet sich rechts (Airport TB-Hotel) (GC1X9FR)</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop AlternatingRow">
+ <td width="105">
+ <img src="/images/logtypes/19.png" width="16" height="16" alt="Grab It (Not from a Cache)" title="Grab It (Not from a Cache)" /> 2012-12-20
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=e571c906-e75f-4e2a-8dd4-8351e2121f09">silizius83</a> grabbed it
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=227230cf-8ee0-454d-9970-ab895be16064" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom AlternatingRow">
+ <td colspan="4">
+ <div>It tuc some time but now its time to release this one, </div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop ">
+ <td width="105">
+ <img src="/images/logtypes/16.png" width="16" height="16" alt="Mark Missing" title="Mark Missing" /> 2012-11-04
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=97dabbd6-3bd4-4b19-a531-01eb1dcf8e75">holler2</a> marked it as missing
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=c14fe7d9-9df5-42e8-92a4-822b4f8c4378" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom ">
+ <td colspan="4">
+ <div>This is an automated message.<br />This Trackable has been marked 'missing' by a cache owner or site administrator. Trackables are marked missing when it is determined that they are no longer located in the cache they are listed in or in the hands of the current holder. Review the most recent logs on this Trackable to learn more information about its current state.</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop AlternatingRow">
+ <td width="105">
+ <img src="/images/logtypes/4.png" width="16" height="16" alt="Write note" title="Write note" /> 2012-11-04
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=2bc2672a-7a8d-47f4-86f8-1a787bf0cbe9">cezanne</a> posted a note for it
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=fff76ea1-e365-4b1d-a17f-407679a9965e" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom AlternatingRow">
+ <td colspan="4">
+ <div>Apparently someone took this TB to an event which took place in Burgenland and forgot to log it out of this cache. The TB was already missing from this cache on September 16 while the event took place on September 22.</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop ">
+ <td width="105">
+ <img src="/images/logtypes/48.png" width="16" height="16" alt="Discovered It" title="Discovered It" /> 2012-09-22
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=861bc796-221d-4ac7-82fc-b4a4f04724e6">cache-diver</a> discovered it
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=e039cbd7-ef3e-4095-bfba-2b3a32272030" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom ">
+ <td colspan="4">
+ <div>Beim 8.Stammtisch der Südburgenländer gesehen!</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop AlternatingRow">
+ <td width="105">
+ <img src="/images/logtypes/48.png" width="16" height="16" alt="Discovered It" title="Discovered It" /> 2012-09-22
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=3c60286b-01b3-48c4-a262-8f23fea87f10">Steirerposti</a> discovered it
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=21153773-6849-410e-a958-db608574c4d8" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom AlternatingRow">
+ <td colspan="4">
+ <div>heute gesehen beim Straussen-Event der SBL !!</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop ">
+ <td width="105">
+ <img src="/images/logtypes/48.png" width="16" height="16" alt="Discovered It" title="Discovered It" /> 2012-09-22
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=8a20a9b3-f93a-43b8-a1c8-85822227d852">cosmo1355</a> discovered it
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=c120795f-c174-4597-9ab3-b5c62776cc90" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom ">
+ <td colspan="4">
+ <div>Gesehen beim Straussenevent</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data BorderTop AlternatingRow">
+ <td width="105">
+ <img src="/images/logtypes/4.png" width="16" height="16" alt="Write note" title="Write note" /> 2012-09-16
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/profile/?guid=5f6ac986-d433-467e-a41d-968ba8b77f66">juchuuu</a> posted a note for it
+ </td>
+ <td>
+
+
+ </td>
+ <td width="70">
+ <a href="http://www.geocaching.com/track/log.aspx?LUID=2aaa0d48-3f5f-4bf7-9551-24cb6af690a0" title="Visit Log">Visit Log</a>
+ </td>
+ </tr>
+ <tr class="Data BorderBottom AlternatingRow">
+ <td colspan="4">
+ <div>Nicht mehr im Cache vorhanden!!!! Nicht gesehen!!!</div>
+
+
+ </td>
+ </tr>
+
+ <tr class="Data">
+ <td colspan="4" align="right">
+ <small>data on this page is cached for 3 mins</small>
+ </td>
+ </tr>
+ </table>
+
+
+<ul class="pager"><li class="pager-info">01-10 of 167 records ·</li><li class="pager-current">01</li><li><a href="/track/details.aspx?id=1719936&page=2">02</a></li><li><a href="/track/details.aspx?id=1719936&page=3">03</a></li><li><a href="/track/details.aspx?id=1719936&page=4">04</a></li><li><a href="/track/details.aspx?id=1719936&page=5">05</a></li><li><a href="/track/details.aspx?id=1719936&page=6">06</a></li><li class="pager-next"><a href="/track/details.aspx?id=1719936&page=2">next ›</a></li><li class="pager-last last"><a href="/track/details.aspx?id=1719936&page=17">last »</a></li></ul>
+<p>
+
+</p>
+
+
+
+
+
+ </div>
+
+ <div id="ctl00_divContentSide" class="span-4 last">
+
+ <div id="ctl00_uxBanManWidget" class="MasterPageAds">
+
+
+ <p class="NoBottomSpacing">
+ <span id="ctl00_ADModules_09"><iframe type="iframe" src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&SiteID=1&X='de5c726c5fe44541960f6fb78ce7754b'" width="120" height="240" Marginwidth="0" Marginheight="0" Hspace="0" Vspace="0" Frameborder="0" Scrolling="no" style="width:120px;Height:240px;"><a href="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Click&;Mode=HTML&SiteID=1" target="_blank"><img src="http://ads.groundspeak.com/a.aspx?ZoneID=9&Task=Get&Mode=HTML&SiteID=1" width="120" height="240" border="0" alt="" /></a></iframe></span></p>
+ <p class="AlignCenter">
+ <small>
+ <a id="ctl00_hlAdvertiseWithUs" title="Advertising with Us" href="../about/advertising.aspx">Advertising with Us</a></small></p>
+
+
+</div>
+
+
+ </div>
+
+
+ </div>
+
+
+ </section>
+
+ <footer>
+
+ <div class="container">
+
+ <div class="span-24 last FooterTop">
+
+
+
+<div class="LocaleText">
+
+ <strong>Choose Your Language:</strong>
+
+</div>
+<div class="LocaleList">
+
+ <div class="selected-language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul class="language-list">
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl00_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl00$uxLocaleItem','')">English</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl01_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl01$uxLocaleItem','')">Deutsch</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl02_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl02$uxLocaleItem','')">Français</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl03_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl03$uxLocaleItem','')">Português</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl04_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem','')">Čeština</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl05_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl05$uxLocaleItem','')">Svenska</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl06_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl06$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl07$uxLocaleItem','')">Italiano</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl08$uxLocaleItem','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl09$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl10$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl11$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl12$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl13$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl14_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl14$uxLocaleItem','')">Magyar</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl15_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl15$uxLocaleItem','')">Română</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+ jQuery(".selected-language a").click(function (e) {
+ e.preventDefault();
+ var $loc = jQuery(this).parent().next();
+ jQuery($loc).show().position({
+ of: $loc.parent(),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 0",
+ collision: "fit fit"
+ });
+ jQuery(this).addClass("Expanded");
+ jQuery(document).click(function () {
+ jQuery(".language-list").fadeOut("fast");
+ jQuery(".selected-language a").removeClass("Expanded");
+ });
+ return false;
+ });
+ });
+</script>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ About</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterGlossary" title="Glossary of Terms" href="../about/glossary.aspx">Glossary of Terms</a></li>
+ <li>
+ <a id="ctl00_hlFooterBrochures" title="Brochures" href="../tools/#Guide">Brochures</a></li>
+ <li>
+ <a id="ctl00_hlFooterAbout" title="About Groundspeak" href="../about/groundspeak.aspx">About Groundspeak</a></li>
+ <li>
+ <a id="ctl00_hlFooterVolunteers" title="About Our Volunteers" href="../volunteers/">About Our Volunteers</a></li>
+ <li>
+ <a id="ctl00_hlFooterHistory" title="History" href="../about/history.aspx">History</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ Press</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterNews" title="News Articles" href="../press/">News Articles</a></li>
+ <li>
+ <a id="ctl00_hlFooterMediaFAQs" title="Media FAQs" rel="document" href="../articles/Brochures/footer/FAQ_Media.pdf">Media FAQs</a></li>
+ <li>
+ <a id="ctl00_hlFooterMediaInquiries" title="Media Inquiries" rel="external" href="http://support.groundspeak.com/index.php?pg=request&xCategory=11">Media Inquiries</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-5">
+
+ <p class="FooterHeader">
+ <strong>
+ Questions & Suggestions</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterHelpCenterLink" title="Help Center" rel="external" href="http://support.groundspeak.com/index.php">Help Center</a></li>
+ <li>
+ <a id="ctl00_hlFooterDiscussionForums" accesskey="f" title="Discussion Forums" href="../forums/">Discussion Forums</a></li>
+ <li>
+ <a id="ctl00_hlFooterParksPoliceLink" title="Land Management and Law Enforcement" href="../parksandpolice/">Land Management and Law Enforcement</a></li>
+ <li>
+ <a id="ctl00_hlFooterContactUs" title="Contact Us" href="../contact/">Contact Us</a></li>
+ </ul>
+
+ </div>
+
+ <div class="span-4">
+
+ <p class="FooterHeader">
+ <strong>
+ Resources</strong></p>
+ <ul class="FooterLinks">
+ <li>
+ <a id="ctl00_hlFooterTools" accesskey="o" title="Tools and Downloads" href="../tools/">Tools and Downloads</a></li>
+ <li>
+ <a id="ctl00_hlFooterAPIProgram" title="API Program" href="../live/">API Program</a></li>
+ <li>
+ <a id="ctl00_hlFooterBenchmarks" title="Find a Benchmark" href="../mark/">Find a Benchmark</a></li>
+ </ul>
+
+ </div>
+ <div class="span-4 append-3 last">
+
+ <p class="FooterHeader">
+ <strong>
+ Follow Us</strong></p>
+ <ul class="FooterLinks FollowUsLinks">
+ <li><a id="ctl00_hlFacebook" title="Facebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts"><img id="ctl00_imgFacebook" title="Facebook" src="../images/home/icon_facebook.png" alt="Facebook" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlTwitter" title="Twitter" href="http://twitter.com/GoGeocaching"><img id="ctl00_imgTwitter" title="Twitter" src="../images/twitter/twitter_icon_white_22.png" alt="Twitter" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlFlickr" title=" Flickr" href="http://www.flickr.com/photos/geocaching_com/"><img id="ctl00_imgFlickr" title="Flickr" src="../images/home/icon_flickr.png" alt="Flickr" style="border-width:0px;" /></a></li>
+ <li><a id="ctl00_hlYouTube" title="YouTube" href="http://www.youtube.com/user/GoGeocaching"><img id="ctl00_imgYouTube" title="YouTube" src="../images/home/icon_youtube.png" alt="YouTube" style="border-width:0px;" /></a></li>
+ </ul>
+
+ </div>
+
+ <p class="span-24 last FooterBottom">
+ Copyright
+ © 2000-2012
+ <a href="http://www.groundspeak.com/" title="Groundspeak, Inc." accesskey="g">Groundspeak, Inc.</a>
+ All Rights Reserved.<br />
+ <a id="ctl00_hlFooterTerms" accesskey="u" title="Groundspeak Terms of Use" href="../about/termsofuse.aspx">Groundspeak Terms of Use</a>
+ |
+ <a id="ctl00_hlFooterPrivacy" accesskey="x" title="Privacy Policy" href="../about/privacypolicy.aspx">Privacy Policy</a>
+ |
+ <a id="ctl00_hlFooterLogo" accesskey="l" title="Geocaching Logo Usage Guidelines" href="../about/logousage.aspx">Geocaching Logo Usage Guidelines</a>
+ |
+ <a id="ctl00_hlFooterAPI" accesskey="`" title="API License Agreement" href="../live/api_license_agreement.aspx">API License Agreement</a>
+ |
+ <a id="ctl00_HlFooterStatus" accesskey="`" title="Current Service Status" href="http://status.geocaching.com">Service Status</a></p>
+
+ </div>
+
+
+ </footer>
+ <div class="SkipLinks">
+
+ <a id="ctl00_hlSkipLinksTop" accesskey="t" title="Return to the Top of the Page" href="#Top">Return to the Top of the Page</a>
+
+ </div>
+
+
+
+
+<script type="text/javascript">
+//<![CDATA[
+var uvtoken = 'PsDnbhUAfZpYJ%2fVuS%2fA9U54ejcA9wXNPAxTP1Ko197xlyETGZCA7gbO9VXK21qNg7lQ3ibk684aNVDy6A1BKO84P1Va3E5xbf%2b7DRtbbX1yOzF%2fNsOv37varJ6Nrw%2fcdK8biwChd4qunTzxrggjFYLhlIgrQ3psgM0Ci3JA7GVX7OR5%2fQX2Cb%2b2pzF7hLYSxKlVJBkirhFswq4yxlji7chiCUy0J0DIk6rGk6uRulo2mu6MClssPsLn9bk4UD%2bNPUm3ml4HjoE64jm5vnvZKffpmPbgMjmGQs1Vbg8ih4BxAwhPGzD8Sh16hVS1tpWETN2CD6H5qHSAxn3Xdxw5cNJsxQ6YoTsPRR6zdDl7IkoWUoREMJ9mJj%2fjxRooGdh0XWQPJt7QGWh3e5V9HwhXQw%2bB6230Dn1CXPG282Rs81UGZMv0KPSrXJukMUmrqhNVl';//]]>
+</script>
+</form>
+ <script type="text/javascript">
+ var browserType = {
+ IE: !!(window.attachEvent && !window.opera),
+ Opera: !!window.opera,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ };
+
+ $(function () {
+ // Make the menu system play nice with all browsers:
+ $('ul.Menu li').hover(function () {
+ $(this).addClass('hover');
+ $('ul:first', this).css('visibility', 'visible');
+ }, function () {
+ $(this).removeClass('hover');
+ $('ul:first', this).css('visibility', 'hidden');
+ });
+ if (!isiOS()) {
+ // Constructing a Twitter-esque Login:
+ $(".SignInLink").click(function (e) {
+ e.preventDefault();
+ $("#SignInWidget").toggle();
+ $(".ProfileWidget").toggleClass("WidgetOpen");
+ $(this).blur();
+ $("#ctl00_tbUsername").focus();
+ });
+ $(".SignInCloseLink").click(function () {
+ $("#SignInWidget").toggle();
+ $(".ProfileWidget").toggleClass("WidgetOpen");
+ });
+ }
+ $('.SignedInProfileLink').truncate({
+ width: 120,
+ after: '&hellip;',
+ center: false,
+ addclass: false,
+ addtitle: false
+ });
+
+ // Hide the warning message if the user closed it already
+ if ($.cookie('hide_warning') != null) {
+ $(".WarningMessage").hide();
+ } else {
+ $("#warningCloseButton").click(function () {
+ $('.WarningMessage').hide('blind');
+ $.cookie('hide_warning', 'true', { expires: 1 });
+ });
+ }
+
+ function isiOS() {
+ return (
+ (navigator.userAgent.match(/(iPhone)|(iPod)|(iPad)/i))
+ );
+ }
+ });
+ </script>
+
+ <script type="text/javascript" language="javascript">
+ $(function () {
+ $("a.tb_images").fancybox({ 'titlePosition': 'inside' });
+ });
+
+ $("#ctl00_ContentBody_btnLookupCode").click(function() {
+ if ($("#ctl00_ContentBody_txtTrackingNumber").val().length > 0) {
+ window.location = "/track/details.aspx?tracker=" + $("#ctl00_ContentBody_txtTrackingNumber").val();
+ } else {
+ alert("Please enter a tracking code to search for...");
+ window.setTimeout(hideModalSpinner(), 50);
+ }
+ });
+ </script>
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2020240-1']);
+ _gaq.push(['_trackPageview']);
+ (function () {
+ var ga = document.createElement('script');
+ ga.src = ('https:' == document.location.protocol ?
+ 'https://ssl' : 'http://www') +
+ '.google-analytics.com/ga.js';
+ ga.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(ga);
+ })();
+ $(function () {
+ $("a.language").click(function (e) {
+ e.preventDefault();
+ window.location.replace(window.location.href + (window.location.search.indexOf("?") == -1 ? "?" : "&") + "lang=" + $(this).attr("lang"));
+ });
+ });
+ </script>
+
+
+ <!-- Quantcast Tag -->
+ <div id="Quantcast">
+ <script type="text/javascript">
+ var _qevents = _qevents || [];
+
+ (function () {
+ var elem = document.createElement('script');
+
+ elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";
+ elem.async = true;
+ elem.type = "text/javascript";
+ var scpt = document.getElementsByTagName('script')[0];
+ scpt.parentNode.insertBefore(elem, scpt);
+ })();
+ </script>
+ <script type="text/javascript">
+ _qevents.push({ qacct: "p-f6VPrfmR4cujU" });
+ </script>
+ <noscript>
+ <div style="display: none;">
+ <img src="http://pixel.quantserve.com/pixel/p-f6VPrfmR4cujU.gif" height="1" width="1"
+ alt="Quantcast" /></div>
+ </noscript>
+ </div>
+ <!-- End Quantcast tag -->
+
+ <!-- Server: WEB01; Build: Web.HotFix_20121211.1 -->
+</body>
+</html>
diff --git a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java index 5323db7..dd71302 100644 --- a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java @@ -24,14 +24,42 @@ import android.test.suitebuilder.annotation.MediumTest; import java.util.ArrayList; public class GCParserTest extends AbstractResourceInstrumentationTestCase { - public void testUnpublishedCache() { - final String page = getFileContent(R.raw.cache_unpublished); + + public void testUnpublishedCacheNotOwner() { + final int cache = R.raw.cache_unpublished; + assertUnpublished(cache); + } + + public void testUnpublishedCacheOwner() { + final int cache = R.raw.gc433yc_owner_unpublished; + assertUnpublished(cache); + } + + private void assertUnpublished(final int cache) { + final String page = getFileContent(cache); SearchResult result = GCParser.parseCacheFromText(page, null); assertNotNull(result); assertTrue(result.isEmpty()); assertEquals(StatusCode.UNPUBLISHED_CACHE, result.getError()); } + public void testPublishedCacheWithUnpublishedInDescription1() { + assertPublishedCache(R.raw.gc430fm_published, "Cache is Unpublished"); + } + + public void testPublishedCacheWithUnpublishedInDescription2() { + assertPublishedCache(R.raw.gc431f2_published, "Needle in a Haystack"); + } + + private void assertPublishedCache(final int cachePage, final String cacheName) { + final String page = getFileContent(cachePage); + SearchResult result = GCParser.parseCacheFromText(page, null); + assertNotNull(result); + assertEquals(1, result.getCount()); + cgCache cache = result.getFirstCacheFromResult(LoadFlags.LOAD_CACHE_OR_DB); + assertEquals(cacheName, cache.getName()); + } + public void testOwnCache() { final cgCache cache = parseCache(R.raw.own_cache); assertNotNull(cache); diff --git a/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java b/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java index 357c0cc..4c2655d 100644 --- a/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java @@ -4,6 +4,7 @@ import cgeo.geocaching.LogEntry; import cgeo.geocaching.TrackableLog; import cgeo.geocaching.cgImage; import cgeo.geocaching.cgTrackable; +import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; import cgeo.geocaching.test.R; import cgeo.geocaching.utils.BaseUtils; @@ -71,7 +72,7 @@ public class TrackablesTest extends AbstractResourceInstrumentationTestCase { } public void testParseTrackableWithoutReleaseDate() { - cgTrackable trackable = GCParser.parseTrackable(getFileContent(R.raw.tb14wfv), null); + cgTrackable trackable = parseTrackable(R.raw.tb14wfv); assertNotNull(trackable); assertEquals("The Brickster", trackable.getName()); assertEquals("Adrian C", trackable.getOwner()); @@ -84,7 +85,7 @@ public class TrackablesTest extends AbstractResourceInstrumentationTestCase { } public void testParseRelativeLink() { - final cgTrackable trackable = GCParser.parseTrackable(getFileContent(R.raw.tb4cwjx), null); + final cgTrackable trackable = parseTrackable(R.raw.tb4cwjx); assertNotNull(trackable); assertEquals("The Golden Lisa", trackable.getName()); final String goal = trackable.getGoal(); @@ -93,12 +94,27 @@ public class TrackablesTest extends AbstractResourceInstrumentationTestCase { assertTrue(goal.contains("href=\"http://www.geocaching.com/seek/cache_details.aspx?wp=GC3B7PD#\"")); } + private cgTrackable parseTrackable(int trackablePage) { + String pageContent = getFileContent(trackablePage); + return GCParser.parseTrackable(BaseUtils.replaceWhitespace(pageContent), null); + } + + public void testParseMarkMissing() { + final cgTrackable trackable = parseTrackable(R.raw.tb29ggq); + assertNotNull(trackable); + final List<LogEntry> logs = trackable.getLogs(); + assertNotNull(logs); + assertFalse(logs.isEmpty()); + LogEntry marked = logs.get(4); + assertEquals(LogType.MARKED_MISSING, marked.type); + } + private cgTrackable getTB2R124() { - return GCParser.parseTrackable(BaseUtils.replaceWhitespace(getFileContent(R.raw.trackable_tb2r124)), null); + return parseTrackable(R.raw.trackable_tb2r124); } private cgTrackable getTBXATG() { - return GCParser.parseTrackable(BaseUtils.replaceWhitespace(getFileContent(R.raw.trackable_tbxatg)), null); + return parseTrackable(R.raw.trackable_tbxatg); } public void testParseTrackableNotExisting() { diff --git a/tests/src/cgeo/geocaching/files/GPXParserTest.java b/tests/src/cgeo/geocaching/files/GPXParserTest.java index f6e6e66..bf09256 100644 --- a/tests/src/cgeo/geocaching/files/GPXParserTest.java +++ b/tests/src/cgeo/geocaching/files/GPXParserTest.java @@ -216,26 +216,16 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase { return new ArrayList<cgCache>(cgData.loadCaches(result, LoadFlags.LOAD_ALL_DB_ONLY)); } - public static void testParseDateWithFractionalSeconds() { + public static void testParseDateWithFractionalSeconds() throws ParseException { // was experienced in GSAK file final String dateString = "2011-08-13T02:52:18.103Z"; - try { - GPXParser.parseDate(dateString); - } catch (ParseException e) { - fail(); - e.printStackTrace(); - } + GPXParser.parseDate(dateString); } - public static void testParseDateWithHugeFraction() { + public static void testParseDateWithHugeFraction() throws ParseException { // see issue 821 String dateString = "2011-11-07T00:00:00.0000000-07:00"; - try { - GPXParser.parseDate(dateString); - } catch (ParseException e) { - fail(); - e.printStackTrace(); - } + GPXParser.parseDate(dateString); } public void testSelfmadeGPXWithoutGeocodes() throws Exception { diff --git a/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java b/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java index 80a2451..15f7708 100644 --- a/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java +++ b/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java @@ -20,12 +20,20 @@ public class SimpleDirChooserUITest extends ActivityInstrumentationTestCase2<Sim @Override public void setUp() throws Exception { + super.setUp(); solo = new Solo(getInstrumentation(), getActivity()); } public void testSingleSelection() throws InterruptedException { + // normally our activity should be ready, but we already had Jenkins report no checkboxes right here at the beginning + solo.waitForActivity(solo.getCurrentActivity().getClass().getSimpleName(), 2000); + assertChecked("Newly opened activity", 0); solo.scrollToBottom(); + pause(); + // according to the documentation, automatic pauses only happen in the clickXYZ() methods. + // Therefore lets introduce a manual pause after the scrolling methods. + final int lastIndex = solo.getCurrentCheckBoxes().size() - 1; solo.clickOnCheckBox(lastIndex); @@ -34,12 +42,13 @@ public class SimpleDirChooserUITest extends ActivityInstrumentationTestCase2<Sim assertChecked("Clicked last checkbox", 1); solo.scrollUp(); - Thread.sleep(20); + pause(); solo.scrollToBottom(); - Thread.sleep(20); + pause(); assertChecked("Refreshing last checkbox", 1); solo.scrollToTop(); + pause(); solo.clickOnCheckBox(0); assertChecked("Clicked first checkbox", 1); assertTrue(solo.getCurrentCheckBoxes().get(0).isChecked()); @@ -48,6 +57,10 @@ public class SimpleDirChooserUITest extends ActivityInstrumentationTestCase2<Sim assertTrue(solo.getCurrentCheckBoxes().get(1).isChecked()); } + private static void pause() throws InterruptedException { + Thread.sleep(500); + } + private void assertChecked(String message, int expectedChecked) { int checked = 0; final ArrayList<CheckBox> boxes = solo.getCurrentCheckBoxes(); @@ -61,4 +74,9 @@ public class SimpleDirChooserUITest extends ActivityInstrumentationTestCase2<Sim assertEquals(message, expectedChecked, checked); } + @Override + public void tearDown() throws Exception { + solo.finishOpenedActivities(); + super.tearDown(); + } } diff --git a/tests/src/cgeo/geocaching/sorting/NameComparatorTest.java b/tests/src/cgeo/geocaching/sorting/NameComparatorTest.java index fa3b16c..98c77fd 100644 --- a/tests/src/cgeo/geocaching/sorting/NameComparatorTest.java +++ b/tests/src/cgeo/geocaching/sorting/NameComparatorTest.java @@ -13,13 +13,7 @@ public class NameComparatorTest extends AndroidTestCase { } } - private NameComparator comp; - - @Override - protected void setUp() throws Exception { - super.setUp(); - comp = new NameComparator(); - } + private NameComparator comp = new NameComparator(); public void testLexical() { assertSorted(new NamedCache("A"), new NamedCache("Z")); diff --git a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java index b9f8138..5e46445 100644 --- a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java +++ b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java @@ -124,7 +124,7 @@ public class RegExPerformanceTest extends TestCase { for (int j = 0; j < iterations; j++) { BaseUtils.getMatch(page, pattern, true, ""); } - return (System.currentTimeMillis() - start); + return System.currentTimeMillis() - start; } diff --git a/tests/src/cgeo/geocaching/test/mock/MockedCache.java b/tests/src/cgeo/geocaching/test/mock/MockedCache.java index 352c34d..8517c81 100644 --- a/tests/src/cgeo/geocaching/test/mock/MockedCache.java +++ b/tests/src/cgeo/geocaching/test/mock/MockedCache.java @@ -70,7 +70,7 @@ public abstract class MockedCache implements ICache { return BaseUtils.replaceWhitespace(buffer.toString()); } catch (IOException e) { - e.printStackTrace(); + Assert.fail(e.getMessage()); } finally { IOUtils.closeQuietly(is); IOUtils.closeQuietly(br); |
