diff options
| author | Gerald Barker <geraldbarker@gmail.com> | 2011-09-03 11:49:25 +0100 |
|---|---|---|
| committer | Gerald Barker <geraldbarker@gmail.com> | 2011-09-03 11:49:25 +0100 |
| commit | 22940d838d710537e8e5c83b1d22015747fbc4e4 (patch) | |
| tree | 216ea388625a7f7ed3505e5854b025fc475f5a14 | |
| parent | 560ce54b9727e4fb5e514716b33b70352f3a0ff1 (diff) | |
| parent | 8d040c24bfbb2a12788dede9911f14333df5098d (diff) | |
| download | cgeo-22940d838d710537e8e5c83b1d22015747fbc4e4.zip cgeo-22940d838d710537e8e5c83b1d22015747fbc4e4.tar.gz cgeo-22940d838d710537e8e5c83b1d22015747fbc4e4.tar.bz2 | |
Update locaal branch to revision 8d040c24bfbb2a12788d
150 files changed, 5948 insertions, 1278 deletions
diff --git a/.classpath b/.classpath deleted file mode 100644 index 9137552..0000000 --- a/.classpath +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="src" path="gen"/> - <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> - <classpathentry kind="lib" path="libs/mapsforge-map-0.2.4.jar"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7ff6a07..cc0a8fe 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -24,6 +24,7 @@ android:label="@string/app_name" android:icon="@drawable/cgeo" > <uses-library android:name="com.google.android.maps" /> + <uses-library android:name="android.test.runner" /> <meta-data android:name="android.app.default_searchable" android:value=".cgeoadvsearch" /> @@ -31,7 +32,7 @@ android:name=".cgeo" android:label="@string/app_name" android:windowSoftInputMode="stateHidden" - android:theme="@android:style/Theme.Wallpaper.NoTitleBar" + android:theme="@style/cgeo_main" android:configChanges="keyboardHidden|orientation" > <intent-filter> <action android:name="android.intent.action.MAIN"/> @@ -289,4 +290,6 @@ </intent-filter> </activity> </application> + <instrumentation android:name="android.test.InstrumentationTestRunner" + android:label="Tests for c:geo open source" android:targetPackage="cgeo.geocaching"/> </manifest> diff --git a/build.properties b/build.properties new file mode 100644 index 0000000..c1ba646 --- /dev/null +++ b/build.properties @@ -0,0 +1,4 @@ +
+# Set the output directory for class files to the same directory Eclipse uses. Was bin/classes
+out.classes.dir=bin
+
\ No newline at end of file diff --git a/project/attributes/Noun Project - Creative Commons Attribution.pdf b/project/attributes/Noun Project - Creative Commons Attribution.pdf Binary files differnew file mode 100644 index 0000000..14f0c29 --- /dev/null +++ b/project/attributes/Noun Project - Creative Commons Attribution.pdf diff --git a/project/attributes/iconlist.txt b/project/attributes/iconlist.txt index fbfcdc1..69c9e75 100644 --- a/project/attributes/iconlist.txt +++ b/project/attributes/iconlist.txt @@ -2,98 +2,97 @@ # - internal name: used as # a) name of string, prefixed with "attribute_" # b) name of icon, prefixed with "attribute_" -# - yn: y = normal icon will be generated -# n = striked thru icon will be generated +# - gsx: id used in groundspeak GPX files # - man: graphic is selfmade or overhauled # - license: type of license # - copyright holder: Name of person # - URL: icon is based on graphic downloadable here # -# internal name | yn | man | license | copyright holder | URL +# internal name | gsx | man | license | copyright holder | URL # # Permissions (allowed / not allowed) # -dogs | yn | | CC | | http://thenounproject.com/noun/dog/#icon-No364 -bicycles | yn | x | PD | | http://thenounproject.com/noun/bicycle/#icon-No536 -motorcycles | yn | | PD | | http://thenounproject.com/noun/motorcycle/#icon-No53 -quads | yn | | PD | USA National Park Service | http://thenounproject.com/noun/4-wheeler/#icon-No228 -jeeps | yn | | PD | USA National Park Service | http://thenounproject.com/noun/jeep/#icon-No57 -snowmobiles | yn | | PD | USA National Park Service | http://thenounproject.com/noun/snowmobile/#icon-No505 -horses | yn | | PD | USA National Park Service | http://thenounproject.com/noun/horseback-trail/#icon-No329 -campfires | yn | | PD | USA National Park Service | http://thenounproject.com/noun/campfire/#icon-No196 -rv | yn | | PD | USA National Park Service | http://thenounproject.com/noun/camper/#icon-No86 +dogs | 1 | | CC | | http://thenounproject.com/noun/dog/#icon-No364 +bicycles | 32 | x | PD | | http://thenounproject.com/noun/bicycle/#icon-No536 +motorcycles | 33 | | PD | | http://thenounproject.com/noun/motorcycle/#icon-No53 +quads | 34 | | PD | USA National Park Service | http://thenounproject.com/noun/4-wheeler/#icon-No228 +jeeps | 35 | | PD | USA National Park Service | http://thenounproject.com/noun/jeep/#icon-No57 +snowmobiles | 36 | | PD | USA National Park Service | http://thenounproject.com/noun/snowmobile/#icon-No505 +horses | 37 | | PD | USA National Park Service | http://thenounproject.com/noun/horseback-trail/#icon-No329 +campfires | 38 | | PD | USA National Park Service | http://thenounproject.com/noun/campfire/#icon-No196 +rv | 46 | | PD | USA National Park Service | http://thenounproject.com/noun/camper/#icon-No86 # # Conditions (yes / no) # -kids | yn | x | PD | Jack Biesek, Gladys Brenner, Margaret Faye, Healther Merrifield, Kate Keating, Wendy Olmstead, Todd Pierce, Jamie Cowgill, Jim Bolek | http://thenounproject.com/noun/teddy-bear/#icon-No610 -onehour | yn | x | CC | The Noun Project | http://thenounproject.com/noun/stopwatch/#icon-No282 -scenic | yn | | PD | USA National Park Service | http://thenounproject.com/noun/binoculars/#icon-No112 -hiking | yn | | PD | USA National Park Service | http://thenounproject.com/noun/hiker/#icon-No562 -climbing | yn | | PD | USA National Park Service | http://thenounproject.com/noun/climbing/#icon-No526 -wading | y | x | PD | USA National Park Service | http://thenounproject.com/noun/wading/#icon-No581 -swimming | y | | PD | USA National Park Service | http://thenounproject.com/noun/swimming/#icon-No226 -available | yn | x | PD | koem | -night | yn | | PD | | http://thenounproject.com/noun/moon/#icon-No128 -winter | yn | | PD | USA National Park Service | http://thenounproject.com/noun/snow/#icon-No64 -stealth | yn | x | PD | Celine | http://www.specialweb.com/original/icons4.html -firstaid | y | | PD | Roger Cook, Dan Shanosky | http://thenounproject.com/noun/first-aid/#icon-No535 -cow | y | | PD | | http://www.openclipart.org/people/Anonymous/mucca.svg -field_puzzle | yn | x | PD | nicubunu | http://www.openclipart.org/detail/15169/red-jigsaw-piece-13-by-nicubunu -nightcache | yn | x | PD | | http://thenounproject.com/noun/moon/#icon-No128 -parkngrab | yn | x | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/parking/#icon-No27 -abandonedbuilding | yn | x | CC | The Noun Project | http://thenounproject.com/noun/home/#icon-No293 -hike_short | yn | x | PD | koem | -hike_med | yn | x | PD | koem | -hike_long | yn | x | PD | koem | -seasonal | yn | x | PD | USA National Park Service | http://thenounproject.com/noun/sun/#icon-No76 http://thenounproject.com/noun/snow/#icon-No64 -touristok | yn | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/baggage/#icon-No12 -frontyard | yn | x | PD | koem | -teamwork | yn | | CC | The Noun Project | http://thenounproject.com/noun/community/#icon-No288 +kids | 6 | x | PD | Jack Biesek, Gladys Brenner, Margaret Faye, Healther Merrifield, Kate Keating, Wendy Olmstead, Todd Pierce, Jamie Cowgill, Jim Bolek | http://thenounproject.com/noun/teddy-bear/#icon-No610 +onehour | 7 | x | CC | The Noun Project | http://thenounproject.com/noun/stopwatch/#icon-No282 +scenic | 8 | | PD | USA National Park Service | http://thenounproject.com/noun/binoculars/#icon-No112 +hiking | 9 | | PD | USA National Park Service | http://thenounproject.com/noun/hiker/#icon-No562 +climbing | 10 | | PD | USA National Park Service | http://thenounproject.com/noun/climbing/#icon-No526 +wading | 11 | x | PD | USA National Park Service | http://thenounproject.com/noun/wading/#icon-No581 +swimming | 12 | | PD | USA National Park Service | http://thenounproject.com/noun/swimming/#icon-No226 +available | 13 | x | PD | koem | +night | 14 | | PD | | http://thenounproject.com/noun/moon/#icon-No128 +winter | 15 | | PD | USA National Park Service | http://thenounproject.com/noun/snow/#icon-No64 +stealth | 40 | x | PD | Celine | http://www.specialweb.com/original/icons4.html +firstaid | 42 | | PD | Roger Cook, Dan Shanosky | http://thenounproject.com/noun/first-aid/#icon-No535 +cow | 43 | | PD | | http://www.openclipart.org/people/Anonymous/mucca.svg +field_puzzle | 47 | x | PD | nicubunu | http://www.openclipart.org/detail/15169/red-jigsaw-piece-13-by-nicubunu +nightcache | 52 | x | PD | | http://thenounproject.com/noun/moon/#icon-No128 +parkngrab | 53 | x | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/parking/#icon-No27 +abandonedbuilding | 54 | x | CC | The Noun Project | http://thenounproject.com/noun/home/#icon-No293 +hike_short | 55 | x | PD | koem | +hike_med | 56 | x | PD | koem | +hike_long | 57 | x | PD | koem | +seasonal | 62 | x | PD | USA National Park Service | http://thenounproject.com/noun/sun/#icon-No76 http://thenounproject.com/noun/snow/#icon-No64 +touristok | 63 | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/baggage/#icon-No12 +frontyard | 65 | x | PD | koem | +teamwork | 66 | | CC | The Noun Project | http://thenounproject.com/noun/community/#icon-No288 # # other # -landf | y | x | PD | koem | -partnership | y | | PD | worker | http://www.openclipart.org/detail/152875/hand-shake-by-worker +landf | 45 | x | PD | koem | +partnership | 61 | | PD | worker | http://www.openclipart.org/detail/152875/hand-shake-by-worker # # Equipment (required / not required) # -fee | y | x | PD | koem | -rappelling | y | | PD | USA National Park Service | http://thenounproject.com/noun/rock-climbing/#icon-No529 -boat | y | | PD | USA National Park Service | http://thenounproject.com/noun/motorboat/#icon-No661 -scuba | y | | PD | USA National Park Service | http://thenounproject.com/noun/scuba-diving/#icon-No242 -flashlight | y | | CC | The Noun Project | http://thenounproject.com/noun/flashlight/#icon-No516 -uv | y | x | PD | koem | -snowshoes | y | | PD | USA National Park Service | http://thenounproject.com/noun/snow-shoeing/#icon-No388 -skiis | y | | PD | USA National Park Service | http://thenounproject.com/noun/cross-country-skiing/#icon-No510 -s_tool | y | | CC | The Noun Project | http://thenounproject.com/noun/gears/#icon-No179 -wirelessbeacon | y | x | PD | | http://thenounproject.com/noun/non-ionizing-radiation/#icon-No277 -treeclimbing | yn | | CC | The Noun Project | http://thenounproject.com/noun/tree/#icon-No173 +fee | 2 | x | PD | koem | +rappelling | 3 | | PD | USA National Park Service | http://thenounproject.com/noun/rock-climbing/#icon-No529 +boat | 4 | | PD | USA National Park Service | http://thenounproject.com/noun/motorboat/#icon-No661 +scuba | 5 | | PD | USA National Park Service | http://thenounproject.com/noun/scuba-diving/#icon-No242 +flashlight | 44 | | CC | The Noun Project | http://thenounproject.com/noun/flashlight/#icon-No516 +uv | 48 | x | PD | koem | +snowshoes | 49 | | PD | USA National Park Service | http://thenounproject.com/noun/snow-shoeing/#icon-No388 +skiis | 50 | | PD | USA National Park Service | http://thenounproject.com/noun/cross-country-skiing/#icon-No510 +s_tool | 51 | | CC | The Noun Project | http://thenounproject.com/noun/gears/#icon-No179 +wirelessbeacon | 60 | x | PD | | http://thenounproject.com/noun/non-ionizing-radiation/#icon-No277 +treeclimbing | 64 | | CC | The Noun Project | http://thenounproject.com/noun/tree/#icon-No173 # # Hazards (present / not present) # -poisonoak | yn | | CC | The Noun Project | http://thenounproject.com/noun/mushroom/#icon-No309 -dangerousanimals | y | | PD | USA National Park Service | http://thenounproject.com/noun/snake/#icon-No201 -ticks | y | x | PD | koem | -mine | y | | PD | USA National Park Service | http://thenounproject.com/noun/rock-collecting/#icon-No528 -cliff | y | | PD | USA National Park Service | http://thenounproject.com/noun/falling-rocks/#icon-No520 -hunting | y | | CC | The Noun Project | http://thenounproject.com/noun/location/#icon-No418 -danger | y | x | PD | ryanlerch | http://www.openclipart.org/detail/1448/skull-and-crossbones-by-ryanlerch -thorn | y | | PD | emilie.rollandin | http://www.openclipart.org/detail/68125/spine-by-emilie.rollandin +poisonoak | 17 | | CC | The Noun Project | http://thenounproject.com/noun/mushroom/#icon-No309 +dangerousanimals | 18 | | PD | USA National Park Service | http://thenounproject.com/noun/snake/#icon-No201 +ticks | 19 | x | PD | koem | +mine | 20 | | PD | USA National Park Service | http://thenounproject.com/noun/rock-collecting/#icon-No528 +cliff | 21 | | PD | USA National Park Service | http://thenounproject.com/noun/falling-rocks/#icon-No520 +hunting | 22 | | CC | The Noun Project | http://thenounproject.com/noun/location/#icon-No418 +danger | 23 | x | PD | ryanlerch | http://www.openclipart.org/detail/1448/skull-and-crossbones-by-ryanlerch +thorn | 39 | | PD | emilie.rollandin | http://www.openclipart.org/detail/68125/spine-by-emilie.rollandin # # Facilities # -wheelchair | yn | | PD | USA National Park Service | http://thenounproject.com/noun/wheelchair-accessible/#icon-No354 -parking | yn | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/parking/#icon-No27 -public | y | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/bus/#icon-No97 -water | yn | | PD | USA National Park Service | http://thenounproject.com/noun/drinking-water/#icon-No214 -restrooms | yn | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/unisex/#icon-No50 -phone | yn | | PD | | http://thenounproject.com/noun/telephone/#icon-No127 -picnic | yn | | PD | USA National Park Service | http://thenounproject.com/noun/picnic-table/#icon-No208 -camping | yn | | PD | USA National Park Service | http://thenounproject.com/noun/campground/#icon-No209 -stroller | yn | | PD | USA National Park Service | http://thenounproject.com/noun/stroller/#icon-No161 -fuel | yn | | PD | | http://thenounproject.com/noun/gas/#icon-No155 -food | yn | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/restaurant/#icon-No33 +wheelchair | 24 | | PD | USA National Park Service | http://thenounproject.com/noun/wheelchair-accessible/#icon-No354 +parking | 25 | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/parking/#icon-No27 +public | 26 | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/bus/#icon-No97 +water | 27 | | PD | USA National Park Service | http://thenounproject.com/noun/drinking-water/#icon-No214 +restrooms | 28 | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/unisex/#icon-No50 +phone | 29 | | PD | | http://thenounproject.com/noun/telephone/#icon-No127 +picnic | 30 | | PD | USA National Park Service | http://thenounproject.com/noun/picnic-table/#icon-No208 +camping | 31 | | PD | USA National Park Service | http://thenounproject.com/noun/campground/#icon-No209 +stroller | 41 | | PD | USA National Park Service | http://thenounproject.com/noun/stroller/#icon-No161 +fuel | 58 | | PD | | http://thenounproject.com/noun/gas/#icon-No155 +food | 59 | | PD | Roger Cook, Don Shanosky | http://thenounproject.com/noun/restaurant/#icon-No33 # # own # -icon_not_found | y | x | PD | | selfmade +icon_not_found | | x | PD | koem | selfmade diff --git a/project/attributes/makeGpxIdArray.sh b/project/attributes/makeGpxIdArray.sh new file mode 100644 index 0000000..f348771 --- /dev/null +++ b/project/attributes/makeGpxIdArray.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +require () { + hash $1 2>&- || { echo >&2 "I require $1 but it's not installed. Aborting."; exit 1; } +} + +require sed + +echo "private final int[] CACHE_ATTRIBUTES = {" + +cat iconlist.txt | grep -v "^#" \ + | cut -d "|" -f 1,2 \ + | sed "s/ *$//" \ + | grep "[0-9]$" \ + | sort -nk 3 \ + | sed "s/^\([^ ]*\)[ \|]*\([0-9]*\)$/ R.string.attribute_\1_yes, \/\/ GPX-ID \2/" \ + > $0.tmp + +maxid=`tail -n 1 $0.tmp | sed "s/^.* \([0-9]*\)$/\1/"` + +for n in `seq 0 $maxid`; do + l=`grep " $n$" $0.tmp` + if [ -z "$l" ]; then + echo " -1, // GPX-ID $n" + else + echo "$l" + fi +done + +echo "};" diff --git a/res/drawable-hdpi/actionbar_mylocation_off.png b/res/drawable-hdpi/actionbar_mylocation_off.png Binary files differnew file mode 100644 index 0000000..17d61db --- /dev/null +++ b/res/drawable-hdpi/actionbar_mylocation_off.png diff --git a/res/drawable-hdpi/actionbar_mylocation_on.png b/res/drawable-hdpi/actionbar_mylocation_on.png Binary files differnew file mode 100644 index 0000000..1f21901 --- /dev/null +++ b/res/drawable-hdpi/actionbar_mylocation_on.png diff --git a/res/drawable-hdpi/main_any.png b/res/drawable-hdpi/main_any_default.png Binary files differindex 1ddce91..1ddce91 100644 --- a/res/drawable-hdpi/main_any.png +++ b/res/drawable-hdpi/main_any_default.png diff --git a/res/drawable-hdpi/main_filter.png b/res/drawable-hdpi/main_filter_default.png Binary files differindex c5b2548..c5b2548 100644 --- a/res/drawable-hdpi/main_filter.png +++ b/res/drawable-hdpi/main_filter_default.png diff --git a/res/drawable-hdpi/main_live.png b/res/drawable-hdpi/main_live_default.png Binary files differindex ddaac04..ddaac04 100644 --- a/res/drawable-hdpi/main_live.png +++ b/res/drawable-hdpi/main_live_default.png diff --git a/res/drawable-hdpi/main_nearby.png b/res/drawable-hdpi/main_nearby_default.png Binary files differindex e75a338..e75a338 100644 --- a/res/drawable-hdpi/main_nearby.png +++ b/res/drawable-hdpi/main_nearby_default.png diff --git a/res/drawable-hdpi/main_search.png b/res/drawable-hdpi/main_search_default.png Binary files differindex bc9994a..bc9994a 100644 --- a/res/drawable-hdpi/main_search.png +++ b/res/drawable-hdpi/main_search_default.png diff --git a/res/drawable-hdpi/main_stored.png b/res/drawable-hdpi/main_stored_default.png Binary files differindex 57d3683..57d3683 100644 --- a/res/drawable-hdpi/main_stored.png +++ b/res/drawable-hdpi/main_stored_default.png diff --git a/res/drawable-hdpi/my_location_off.png b/res/drawable-hdpi/my_location_off.png Binary files differdeleted file mode 100644 index ced343c..0000000 --- a/res/drawable-hdpi/my_location_off.png +++ /dev/null diff --git a/res/drawable-hdpi/my_location_on.png b/res/drawable-hdpi/my_location_on.png Binary files differdeleted file mode 100644 index 5fde837..0000000 --- a/res/drawable-hdpi/my_location_on.png +++ /dev/null diff --git a/res/drawable-ldpi/actionbar_mylocation_off.png b/res/drawable-ldpi/actionbar_mylocation_off.png Binary files differnew file mode 100644 index 0000000..be0c923 --- /dev/null +++ b/res/drawable-ldpi/actionbar_mylocation_off.png diff --git a/res/drawable-ldpi/actionbar_mylocation_on.png b/res/drawable-ldpi/actionbar_mylocation_on.png Binary files differnew file mode 100644 index 0000000..f137305 --- /dev/null +++ b/res/drawable-ldpi/actionbar_mylocation_on.png diff --git a/res/drawable-ldpi/main_any.png b/res/drawable-ldpi/main_any_default.png Binary files differindex b307f95..b307f95 100644 --- a/res/drawable-ldpi/main_any.png +++ b/res/drawable-ldpi/main_any_default.png diff --git a/res/drawable-ldpi/main_filter.png b/res/drawable-ldpi/main_filter_default.png Binary files differindex b632ec1..b632ec1 100644 --- a/res/drawable-ldpi/main_filter.png +++ b/res/drawable-ldpi/main_filter_default.png diff --git a/res/drawable-ldpi/main_live.png b/res/drawable-ldpi/main_live_default.png Binary files differindex 568b777..568b777 100644 --- a/res/drawable-ldpi/main_live.png +++ b/res/drawable-ldpi/main_live_default.png diff --git a/res/drawable-ldpi/main_nearby.png b/res/drawable-ldpi/main_nearby_default.png Binary files differindex d6e1756..d6e1756 100644 --- a/res/drawable-ldpi/main_nearby.png +++ b/res/drawable-ldpi/main_nearby_default.png diff --git a/res/drawable-ldpi/main_search.png b/res/drawable-ldpi/main_search_default.png Binary files differindex 5ab1f1b..5ab1f1b 100644 --- a/res/drawable-ldpi/main_search.png +++ b/res/drawable-ldpi/main_search_default.png diff --git a/res/drawable-ldpi/main_stored.png b/res/drawable-ldpi/main_stored_default.png Binary files differindex 17dad09..17dad09 100644 --- a/res/drawable-ldpi/main_stored.png +++ b/res/drawable-ldpi/main_stored_default.png diff --git a/res/drawable-ldpi/my_location_off.png b/res/drawable-ldpi/my_location_off.png Binary files differdeleted file mode 100644 index 5889b1d..0000000 --- a/res/drawable-ldpi/my_location_off.png +++ /dev/null diff --git a/res/drawable-ldpi/my_location_on.png b/res/drawable-ldpi/my_location_on.png Binary files differdeleted file mode 100644 index 81538a4..0000000 --- a/res/drawable-ldpi/my_location_on.png +++ /dev/null diff --git a/res/drawable-mdpi/actionbar_mylocation_off.png b/res/drawable-mdpi/actionbar_mylocation_off.png Binary files differnew file mode 100644 index 0000000..1cdeeba --- /dev/null +++ b/res/drawable-mdpi/actionbar_mylocation_off.png diff --git a/res/drawable-mdpi/actionbar_mylocation_on.png b/res/drawable-mdpi/actionbar_mylocation_on.png Binary files differnew file mode 100644 index 0000000..1d1b625 --- /dev/null +++ b/res/drawable-mdpi/actionbar_mylocation_on.png diff --git a/res/drawable-mdpi/main_any.png b/res/drawable-mdpi/main_any_default.png Binary files differindex cea3288..cea3288 100644 --- a/res/drawable-mdpi/main_any.png +++ b/res/drawable-mdpi/main_any_default.png diff --git a/res/drawable-mdpi/main_filter.png b/res/drawable-mdpi/main_filter_default.png Binary files differindex 996d15b..996d15b 100644 --- a/res/drawable-mdpi/main_filter.png +++ b/res/drawable-mdpi/main_filter_default.png diff --git a/res/drawable-mdpi/main_live.png b/res/drawable-mdpi/main_live_default.png Binary files differindex f2cc262..f2cc262 100644 --- a/res/drawable-mdpi/main_live.png +++ b/res/drawable-mdpi/main_live_default.png diff --git a/res/drawable-mdpi/main_nearby.png b/res/drawable-mdpi/main_nearby_default.png Binary files differindex 9166267..9166267 100644 --- a/res/drawable-mdpi/main_nearby.png +++ b/res/drawable-mdpi/main_nearby_default.png diff --git a/res/drawable-mdpi/main_search.png b/res/drawable-mdpi/main_search_default.png Binary files differindex c3c1fdc..c3c1fdc 100644 --- a/res/drawable-mdpi/main_search.png +++ b/res/drawable-mdpi/main_search_default.png diff --git a/res/drawable-mdpi/main_stored.png b/res/drawable-mdpi/main_stored_default.png Binary files differindex b595723..b595723 100644 --- a/res/drawable-mdpi/main_stored.png +++ b/res/drawable-mdpi/main_stored_default.png diff --git a/res/drawable-mdpi/my_location_off.png b/res/drawable-mdpi/my_location_off.png Binary files differdeleted file mode 100644 index 0266600..0000000 --- a/res/drawable-mdpi/my_location_off.png +++ /dev/null diff --git a/res/drawable-mdpi/my_location_on.png b/res/drawable-mdpi/my_location_on.png Binary files differdeleted file mode 100644 index 04bec8f..0000000 --- a/res/drawable-mdpi/my_location_on.png +++ /dev/null diff --git a/res/drawable/action_button_dark.xml b/res/drawable/action_button_dark.xml index 82ecdcd..7732b8e 100644 --- a/res/drawable/action_button_dark.xml +++ b/res/drawable/action_button_dark.xml @@ -1,7 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_enabled="true" android:drawable="@drawable/action_button_dark_default" /> - <item android:state_pressed="true" android:drawable="@drawable/action_button_dark_pressed" /> - <item android:state_focused="true" android:drawable="@drawable/action_button_dark_pressed" /> - <item android:drawable="@drawable/action_button_dark_off" /> + <item android:drawable="@drawable/action_button_dark_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/action_button_dark_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/action_button_dark_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/action_button_dark_default" + android:state_focused="false" android:state_pressed="false" /> + <item android:drawable="@drawable/action_button_dark_off" + android:state_enabled="false" /> </selector>
\ No newline at end of file diff --git a/res/drawable/action_button_dark_selected.xml b/res/drawable/action_button_dark_selected.xml new file mode 100644 index 0000000..824b49c --- /dev/null +++ b/res/drawable/action_button_dark_selected.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <stroke + android:color="#FFFFFFFF" + android:width="2px" /> + <solid + android:color="#22FFFFFF" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/action_button_light.xml b/res/drawable/action_button_light.xml index ac59bf7..21d2310 100644 --- a/res/drawable/action_button_light.xml +++ b/res/drawable/action_button_light.xml @@ -1,7 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_enabled="true" android:drawable="@drawable/action_button_light_default" /> - <item android:state_pressed="true" android:drawable="@drawable/action_button_light_pressed" /> - <item android:state_focused="true" android:drawable="@drawable/action_button_light_pressed" /> - <item android:drawable="@drawable/action_button_light_off" /> + <item android:drawable="@drawable/action_button_light_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/action_button_light_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/action_button_light_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/action_button_light_default" + android:state_focused="false" android:state_pressed="false" /> + <item android:drawable="@drawable/action_button_light_off" + android:state_enabled="false" /> </selector>
\ No newline at end of file diff --git a/res/drawable/action_button_light_selected.xml b/res/drawable/action_button_light_selected.xml new file mode 100644 index 0000000..dbd5781 --- /dev/null +++ b/res/drawable/action_button_light_selected.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <stroke + android:color="#FF000000" + android:width="2px" /> + <solid + android:color="#22000000" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/actionbar_button.xml b/res/drawable/actionbar_button.xml new file mode 100644 index 0000000..85ce5a1 --- /dev/null +++ b/res/drawable/actionbar_button.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/actionbar_button_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/actionbar_button_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/actionbar_button_selected" + android:state_focused="true" /> + <item android:drawable="@android:color/transparent" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/actionbar_button_pressed.xml b/res/drawable/actionbar_button_pressed.xml new file mode 100644 index 0000000..593caea --- /dev/null +++ b/res/drawable/actionbar_button_pressed.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid + android:color="#44FFFFFF" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/actionbar_button_selected.xml b/res/drawable/actionbar_button_selected.xml new file mode 100644 index 0000000..ece89e1 --- /dev/null +++ b/res/drawable/actionbar_button_selected.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid + android:color="#22FFFFFF" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/actionbar_mylocation_off.png b/res/drawable/actionbar_mylocation_off.png Binary files differnew file mode 100644 index 0000000..1cdeeba --- /dev/null +++ b/res/drawable/actionbar_mylocation_off.png diff --git a/res/drawable/actionbar_mylocation_on.png b/res/drawable/actionbar_mylocation_on.png Binary files differnew file mode 100644 index 0000000..1d1b625 --- /dev/null +++ b/res/drawable/actionbar_mylocation_on.png diff --git a/res/drawable/main_any.xml b/res/drawable/main_any.xml new file mode 100644 index 0000000..43cf397 --- /dev/null +++ b/res/drawable/main_any.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/main_any_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/main_any_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/main_any_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/main_any_default" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/main_any.png b/res/drawable/main_any_default.png Binary files differindex cea3288..cea3288 100644 --- a/res/drawable/main_any.png +++ b/res/drawable/main_any_default.png diff --git a/res/drawable/main_any_pressed.xml b/res/drawable/main_any_pressed.xml new file mode 100644 index 0000000..d24b74f --- /dev/null +++ b/res/drawable/main_any_pressed.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_any_default" /> + </item> + <item android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_pressed" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_any_selected.xml b/res/drawable/main_any_selected.xml new file mode 100644 index 0000000..ff3aebf --- /dev/null +++ b/res/drawable/main_any_selected.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_any_default" /> + </item> + <item + android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_selected" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_filter.xml b/res/drawable/main_filter.xml new file mode 100644 index 0000000..7deb1a3 --- /dev/null +++ b/res/drawable/main_filter.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/main_filter_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/main_filter_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/main_filter_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/main_filter_default" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/main_filter.png b/res/drawable/main_filter_default.png Binary files differindex 996d15b..996d15b 100644 --- a/res/drawable/main_filter.png +++ b/res/drawable/main_filter_default.png diff --git a/res/drawable/main_filter_pressed.xml b/res/drawable/main_filter_pressed.xml new file mode 100644 index 0000000..dd76099 --- /dev/null +++ b/res/drawable/main_filter_pressed.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_filter_default" /> + </item> + <item android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_pressed" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_filter_selected.xml b/res/drawable/main_filter_selected.xml new file mode 100644 index 0000000..fb1011b --- /dev/null +++ b/res/drawable/main_filter_selected.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_filter_default" /> + </item> + <item + android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_selected" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_live.xml b/res/drawable/main_live.xml new file mode 100644 index 0000000..9914a23 --- /dev/null +++ b/res/drawable/main_live.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/main_live_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/main_live_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/main_live_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/main_live_default" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/main_live.png b/res/drawable/main_live_default.png Binary files differindex f2cc262..f2cc262 100644 --- a/res/drawable/main_live.png +++ b/res/drawable/main_live_default.png diff --git a/res/drawable/main_live_pressed.xml b/res/drawable/main_live_pressed.xml new file mode 100644 index 0000000..c1d1692 --- /dev/null +++ b/res/drawable/main_live_pressed.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_live_default" /> + </item> + <item android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_pressed" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_live_selected.xml b/res/drawable/main_live_selected.xml new file mode 100644 index 0000000..be028db --- /dev/null +++ b/res/drawable/main_live_selected.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_live_default" /> + </item> + <item + android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_selected" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_nearby.xml b/res/drawable/main_nearby.xml new file mode 100644 index 0000000..0d8e68e --- /dev/null +++ b/res/drawable/main_nearby.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/main_nearby_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/main_nearby_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/main_nearby_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/main_nearby_default" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/main_nearby.png b/res/drawable/main_nearby_default.png Binary files differindex 9166267..9166267 100644 --- a/res/drawable/main_nearby.png +++ b/res/drawable/main_nearby_default.png diff --git a/res/drawable/main_nearby_pressed.xml b/res/drawable/main_nearby_pressed.xml new file mode 100644 index 0000000..88f6689 --- /dev/null +++ b/res/drawable/main_nearby_pressed.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_nearby_default" /> + </item> + <item android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_pressed" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_nearby_selected.xml b/res/drawable/main_nearby_selected.xml new file mode 100644 index 0000000..975adc8 --- /dev/null +++ b/res/drawable/main_nearby_selected.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_nearby_default" /> + </item> + <item + android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_selected" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_overlay_pressed.xml b/res/drawable/main_overlay_pressed.xml new file mode 100644 index 0000000..58d070a --- /dev/null +++ b/res/drawable/main_overlay_pressed.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <corners android:radius="3dp" /> + <solid android:color="#44FFFFFF" /> + <stroke android:width="1dp" + android:color="#AAFFFFFF" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/main_overlay_selected.xml b/res/drawable/main_overlay_selected.xml new file mode 100644 index 0000000..200d2f4 --- /dev/null +++ b/res/drawable/main_overlay_selected.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <corners android:radius="3dp" /> + <solid android:color="#22FFFFFF" /> + <stroke android:width="1dp" + android:color="#88FFFFFF" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/main_search.xml b/res/drawable/main_search.xml new file mode 100644 index 0000000..681016d --- /dev/null +++ b/res/drawable/main_search.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/main_search_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/main_search_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/main_search_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/main_search_default" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/main_search.png b/res/drawable/main_search_default.png Binary files differindex c3c1fdc..c3c1fdc 100644 --- a/res/drawable/main_search.png +++ b/res/drawable/main_search_default.png diff --git a/res/drawable/main_search_pressed.xml b/res/drawable/main_search_pressed.xml new file mode 100644 index 0000000..faf8119 --- /dev/null +++ b/res/drawable/main_search_pressed.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_search_default" /> + </item> + <item android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_pressed" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_search_selected.xml b/res/drawable/main_search_selected.xml new file mode 100644 index 0000000..2106760 --- /dev/null +++ b/res/drawable/main_search_selected.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_search_default" /> + </item> + <item + android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_selected" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_stored.xml b/res/drawable/main_stored.xml new file mode 100644 index 0000000..751ba8d --- /dev/null +++ b/res/drawable/main_stored.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/main_stored_pressed" + android:state_focused="true" android:state_pressed="true" /> + <item android:drawable="@drawable/main_stored_pressed" + android:state_focused="false" android:state_pressed="true" /> + <item android:drawable="@drawable/main_stored_selected" + android:state_focused="true" /> + <item android:drawable="@drawable/main_stored_default" + android:state_focused="false" android:state_pressed="false" /> +</selector>
\ No newline at end of file diff --git a/res/drawable/main_stored.png b/res/drawable/main_stored_default.png Binary files differindex b595723..b595723 100644 --- a/res/drawable/main_stored.png +++ b/res/drawable/main_stored_default.png diff --git a/res/drawable/main_stored_pressed.xml b/res/drawable/main_stored_pressed.xml new file mode 100644 index 0000000..a74cf6d --- /dev/null +++ b/res/drawable/main_stored_pressed.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_stored_default" /> + </item> + <item android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_pressed" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/main_stored_selected.xml b/res/drawable/main_stored_selected.xml new file mode 100644 index 0000000..08e178e --- /dev/null +++ b/res/drawable/main_stored_selected.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <bitmap android:src="@drawable/main_stored_default" /> + </item> + <item + android:top="1dp" + android:bottom="3dp" + android:left="2dp" + android:right="2dp"> + <inset android:drawable="@drawable/main_overlay_selected" /> + </item> +</layer-list>
\ No newline at end of file diff --git a/res/drawable/my_location_off.png b/res/drawable/my_location_off.png Binary files differdeleted file mode 100644 index 0266600..0000000 --- a/res/drawable/my_location_off.png +++ /dev/null diff --git a/res/drawable/my_location_on.png b/res/drawable/my_location_on.png Binary files differdeleted file mode 100644 index 04bec8f..0000000 --- a/res/drawable/my_location_on.png +++ /dev/null diff --git a/res/layout/caches.xml b/res/layout/caches.xml index 5dcd500..ebd7610 100644 --- a/res/layout/caches.xml +++ b/res/layout/caches.xml @@ -13,6 +13,7 @@ android:onClick="selectList" /> <ProgressBar style="@style/action_bar_progress" android:visibility="gone" /> + <View style="@style/action_bar_separator" /> <ImageView style="@style/action_bar_action" android:src="@drawable/actionbar_map" android:onClick="goMap" /> diff --git a/res/layout/detail.xml b/res/layout/detail.xml index 396e30b..2d0e773 100644 --- a/res/layout/detail.xml +++ b/res/layout/detail.xml @@ -9,6 +9,7 @@ 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_compass" android:onClick="goCompass" /> diff --git a/res/layout/googlemap.xml b/res/layout/googlemap.xml index ffa22bc..e60df72 100644 --- a/res/layout/googlemap.xml +++ b/res/layout/googlemap.xml @@ -11,6 +11,11 @@ <TextView style="@style/action_bar_title" /> <ProgressBar style="@style/action_bar_progress" android:visibility="gone" /> + <View style="@style/action_bar_separator" /> + <ImageView style="@style/action_bar_action" + android:id="@+id/my_position" + android:src="@drawable/actionbar_mylocation_on" /> + <View style="@style/action_bar_separator" /> <ImageView style="@style/action_bar_action" android:src="@drawable/actionbar_manual" android:onClick="goManual" /> @@ -40,13 +45,5 @@ android:enabled="true" android:clickable="true" android:apiKey="@string/maps_api_key" /> - <ImageView android:id="@+id/my_position" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentTop="true" - android:layout_alignParentRight="true" - android:layout_margin="5dip" - android:padding="5dip" - android:src="@drawable/my_location_off" /> </RelativeLayout> </LinearLayout>
\ No newline at end of file diff --git a/res/layout/init.xml b/res/layout/init.xml index a3d2faf..427492d 100644 --- a/res/layout/init.xml +++ b/res/layout/init.xml @@ -9,6 +9,7 @@ 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" /> @@ -52,6 +53,9 @@ android:password="true" /> <Button style="@style/button" android:id="@+id/log_me_in" + android:lines="2" + android:singleLine="false" + android:scrollHorizontally="false" android:text="@string/init_login" /> <!-- ** --> <RelativeLayout style="@style/separator_horizontal_layout" > diff --git a/res/layout/main.xml b/res/layout/main.xml index e5dcd63..a5fec4c 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -7,8 +7,8 @@ <LinearLayout style="@style/action_bar"> <ImageView style="@style/action_bar_icon_cgeo" android:onClick="showAbout" /> - <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_search" android:onClick="goSearch" /> @@ -30,32 +30,33 @@ android:layout_margin="4dip" android:gravity="center_horizontal" android:orientation="horizontal" > - <LinearLayout android:id="@+id/map" + <LinearLayout android:layout_width="74dip" android:layout_height="wrap_content" android:layout_margin="4dip" android:orientation="vertical" > <View + android:id="@+id/map" style="@style/icon_mainscreen" android:background="@drawable/main_live" /> <TextView style="@style/icon_mainscreen_text" android:text="@string/live_map_button" /> </LinearLayout> - <LinearLayout android:id="@+id/nearest" + <LinearLayout android:layout_width="74dip" android:layout_height="wrap_content" android:layout_margin="4dip" android:orientation="vertical" > <View + android:id="@+id/nearest" style="@style/icon_mainscreen" - android:id="@+id/view_nearest" android:background="@drawable/main_nearby" /> <TextView style="@style/icon_mainscreen_text" android:text="@string/caches_nearby_button" /> </LinearLayout> - <RelativeLayout android:id="@+id/search_offline" + <RelativeLayout android:layout_width="74dip" android:layout_height="wrap_content" android:layout_margin="4dip" > @@ -67,6 +68,7 @@ android:orientation="vertical" android:layout_alignParentTop="true" > <View + android:id="@+id/search_offline" style="@style/icon_mainscreen" android:background="@drawable/main_stored" /> <TextView @@ -81,36 +83,39 @@ android:layout_margin="4dip" android:gravity="center_horizontal" android:orientation="horizontal" > - <LinearLayout android:id="@+id/advanced_button" + <LinearLayout android:layout_width="74dip" android:layout_height="wrap_content" android:layout_margin="4dip" android:orientation="vertical" > <View + android:id="@+id/advanced_button" style="@style/icon_mainscreen" android:background="@drawable/main_search" /> <TextView style="@style/icon_mainscreen_text" android:text="@string/advanced_search_button" /> </LinearLayout> - <LinearLayout android:id="@+id/any_button" + <LinearLayout android:layout_width="74dip" android:layout_height="wrap_content" android:layout_margin="4dip" android:orientation="vertical" > <View + android:id="@+id/any_button" style="@style/icon_mainscreen" android:background="@drawable/main_any" /> <TextView style="@style/icon_mainscreen_text" android:text="@string/any_button" /> </LinearLayout> - <LinearLayout android:id="@+id/filter_button" + <LinearLayout android:layout_width="74dip" android:layout_height="wrap_content" android:layout_margin="4dip" android:orientation="vertical" > <View + android:id="@+id/filter_button" style="@style/icon_mainscreen" android:background="@drawable/main_filter" /> <TextView android:id="@+id/filter_button_title" diff --git a/res/layout/mfmap.xml b/res/layout/mfmap.xml index 3ffb122..b36fcd0 100644 --- a/res/layout/mfmap.xml +++ b/res/layout/mfmap.xml @@ -11,6 +11,11 @@ <TextView style="@style/action_bar_title" /> <ProgressBar style="@style/action_bar_progress" android:visibility="gone" /> + <View style="@style/action_bar_separator" /> + <ImageView style="@style/action_bar_action" + android:id="@+id/my_position" + android:src="@drawable/actionbar_mylocation_on" /> + <View style="@style/action_bar_separator" /> <ImageView style="@style/action_bar_action" android:src="@drawable/actionbar_manual" android:onClick="goManual" /> @@ -39,13 +44,5 @@ android:keepScreenOn="true" android:enabled="true" android:clickable="true" /> - <ImageView android:id="@+id/my_position" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentTop="true" - android:layout_alignParentRight="true" - android:layout_margin="5dip" - android:padding="5dip" - android:src="@drawable/my_location_off" /> </RelativeLayout> </LinearLayout>
\ No newline at end of file diff --git a/res/layout/navigate.xml b/res/layout/navigate.xml index f8b52d4..36b8674 100644 --- a/res/layout/navigate.xml +++ b/res/layout/navigate.xml @@ -9,6 +9,7 @@ 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" /> diff --git a/res/layout/point.xml b/res/layout/point.xml index f30f289..10ce9b4 100644 --- a/res/layout/point.xml +++ b/res/layout/point.xml @@ -9,6 +9,7 @@ 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" /> diff --git a/res/layout/popup.xml b/res/layout/popup.xml index ba140f8..93f0622 100644 --- a/res/layout/popup.xml +++ b/res/layout/popup.xml @@ -6,6 +6,7 @@ android:background="?background_color_transparent" > <LinearLayout style="@style/action_bar"> <TextView style="@style/action_bar_title" /> + <View style="@style/action_bar_separator" /> <ImageView style="@style/action_bar_action" android:src="@drawable/actionbar_compass" android:onClick="goCompass" /> diff --git a/res/layout/search.xml b/res/layout/search.xml index e845246..b543b88 100644 --- a/res/layout/search.xml +++ b/res/layout/search.xml @@ -9,6 +9,7 @@ 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" /> diff --git a/res/layout/touch.xml b/res/layout/touch.xml index ed8c9e3..e68eace 100644 --- a/res/layout/touch.xml +++ b/res/layout/touch.xml @@ -9,6 +9,7 @@ android:onClick="goHome" /> <View style="@style/action_bar_separator" /> <TextView style="@style/action_bar_title" /> + <View style="@style/action_bar_separator" /> <ProgressBar style="@style/action_bar_progress" android:visibility="gone" /> <ImageView style="@style/action_bar_action" diff --git a/res/layout/trackable_detail.xml b/res/layout/trackable_detail.xml index 5efe8a5..9ffd5cb 100644 --- a/res/layout/trackable_detail.xml +++ b/res/layout/trackable_detail.xml @@ -9,6 +9,7 @@ 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" /> diff --git a/res/layout/trackables.xml b/res/layout/trackables.xml index 832b13c..a77f3a3 100644 --- a/res/layout/trackables.xml +++ b/res/layout/trackables.xml @@ -9,6 +9,7 @@ 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" /> diff --git a/res/layout/visit.xml b/res/layout/visit.xml index 43e4209..8b08d55 100644 --- a/res/layout/visit.xml +++ b/res/layout/visit.xml @@ -9,6 +9,7 @@ android:onClick="goHome" /> <View style="@style/action_bar_separator" /> <TextView style="@style/action_bar_title" /> + <View style="@style/action_bar_separator" /> <ProgressBar style="@style/action_bar_progress" android:visibility="gone" /> <ImageView style="@style/action_bar_action" diff --git a/res/layout/waypoint.xml b/res/layout/waypoint.xml index 02235ac..d160ae1 100644 --- a/res/layout/waypoint.xml +++ b/res/layout/waypoint.xml @@ -9,6 +9,7 @@ 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:id="@+id/compass" android:src="@drawable/actionbar_compass" diff --git a/res/layout/waypoint_new.xml b/res/layout/waypoint_new.xml index 1a96eab..cd5e970 100644 --- a/res/layout/waypoint_new.xml +++ b/res/layout/waypoint_new.xml @@ -9,6 +9,7 @@ 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" /> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index cb3a382..5cb7d31 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -90,6 +90,15 @@ <string name="log_stars_4">4 Sterne</string> <string name="log_stars_45">4,5 Sterne</string> <string name="log_stars_5">5 Sterne</string> + <string name="log_stars_1_description">schlecht</string> + <string name="log_stars_15_description">lohnt nicht</string> + <string name="log_stars_2_description">schwach</string> + <string name="log_stars_25_description">ok</string> + <string name="log_stars_3_description">durchschnittlich</string> + <string name="log_stars_35_description">besser</string> + <string name="log_stars_4_description">gut</string> + <string name="log_stars_45_description">fast perfekt</string> + <string name="log_stars_5_description">großartig</string> <string name="log_webcam">Webcam-Foto gemacht</string> <string name="log_new_log">Loggen</string> <string name="log_new_log_text">Log-Text</string> @@ -277,6 +286,8 @@ <string name="caches_sort_vote">Eigene Bewertung</string> <string name="caches_sort_inventory">Inventaranzahl</string> <string name="caches_sort_date">Datum</string> + <string name="caches_sort_finds">Funde</string> + <string name="caches_sort_state">Status</string> <string name="caches_select">Wähle von Liste</string> <string name="caches_select_mode">Auswahlmodus</string> <string name="caches_select_mode_exit">Auswahlmodus beenden</string> @@ -367,7 +378,7 @@ <string name="init_username">Benutzername</string> <string name="init_password">Passwort</string> <string name="init_passvote">Passwort</string> - <string name="init_login">Anmeldedaten überprüfen</string> + <string name="init_login">Anmeldedaten überprüfen & Datumsformat setzen</string> <string name="init_login_popup">Login</string> <string name="init_login_popup_working">Bei geocaching.com anmelden…</string> <string name="init_login_popup_ok">Login erfolgreich.</string> @@ -384,6 +395,7 @@ <string name="init_signature_template_button">Platzhalter einfügen</string> <string name="init_signature_template_date">Datum</string> <string name="init_signature_template_time">Zeit</string> + <string name="init_signature_template_datetime">Datum & Zeit</string> <string name="init_signature_template_user">Benutzer</string> <string name="init_signature_template_number">Nummer</string> <string name="init_languages">Übersetzung</string> @@ -476,6 +488,7 @@ <string name="cache_offline_time_days">Tagen</string> <string name="cache_premium">Premium</string> <string name="cache_attributes">Attribute</string> + <string name="cache_attributes_no_icons">(aktualisiere den Cache um die Attribut-Icons anzuzeigen)</string> <string name="cache_inventory">Inventar</string> <string name="cache_log_offline">Offline-Log</string> <string name="cache_log_images_loading">Lade Logbild …</string> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 1ce4f1d..30b7ba7 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <resources> <string name="app_name">c:geo</string> - <string name="app_name_compass">c:geo compass</string> + <string name="app_name_compass">boussole c:geo</string> <!-- basics --> <string name="cache">cache</string> @@ -15,7 +15,7 @@ <string name="traditional">traditionnelles</string> <string name="multi">multiples</string> <string name="mystery">inconnues</string> - <string name="letterbox">boites-à-lettres hybrides</string> + <string name="letterbox">boîtes aux lettres hybrides</string> <string name="event">évènements</string> <string name="mega">méga-évènements</string> <string name="earth">earthcache</string> @@ -43,14 +43,14 @@ <string name="log_published">publiée</string> <string name="log_enabled">activée</string> <string name="log_disabled">désactivée</string> - <string name="log_attend">will attend</string> - <string name="log_attended">attended</string> + <string name="log_attend">va participer</string> + <string name="log_attended">a participé</string> <string name="log_retrieved">retrouvé</string> <string name="log_grabbed">pris ailleurs</string> <string name="log_maintained">maintenu</string> <string name="log_maintenance_needed">nécessite une maintenance</string> - <string name="log_maintenance_owner">maitenance</string> - <string name="log_update">coordonnées mise-à-jours</string> + <string name="log_maintenance_owner">maintenance</string> + <string name="log_update">coordonnées mises à jour</string> <string name="log_archived">archivée</string> <string name="log_needs_archived">nécessite d\'être archivée</string> <string name="log_discovered">retrouvée</string> @@ -58,7 +58,7 @@ <string name="log_tb_nothing">ne fait rien</string> <string name="log_tb_visit">visité</string> <string name="log_tb_drop">déposé ici</string> - <string name="log_tb_changeall">Tout modifier</string> + <string name="log_tb_changeall">tout modifié</string> <string name="log_save">Enregistrer</string> <string name="log_saving">Enregistrement en cours…</string> <string name="log_clear">Effacer</string> @@ -84,38 +84,38 @@ <!-- errors --> <string name="err_none">ok</string> - <string name="err_start">communication not started</string> - <string name="err_parse">failed login page parsing</string> - <string name="err_server">failed connection to geocaching.com (server or connection down?)</string> - <string name="err_login">no login information stored</string> - <string name="err_unknown">unknown error</string> - <string name="err_comm">unknown communication error</string> - <string name="err_wrong">wrong login informations</string> - <string name="err_license">user has not agreed to Geocaching.com license agreement</string> - <string name="err_store">Sorry, c:geo can\'t store cache.</string> - <string name="err_drop">Sorry, c:geo can\'t drop cache.</string> - <string name="err_title_problem">problem</string> - <string name="err_detail_open">Sorry, c:geo can\'t open geocache details.</string> - <string name="err_detail_cache">Sorry, c:geo can\'t display geocache you want. Is it really geocache?</string> - <string name="err_detail_cache_find">Sorry, c:geo can\'t find geocache</string> - <string name="err_detail_cache_find_some">Sorry, c:geo can\'t find that geocache.</string> - <string name="err_detail_cache_forgot">Sorry, c:geo forgot which geocache you want.</string> - <string name="err_detail_cache_language">c:geo can\'t read some cache details. Please check if you have geocaching.com website set to English. Unfortunately, c:geo doesn\'t understand other localizations.</string> - <string name="err_detail_no_spoiler">c:geo found no spoiler images for this cache.</string> - <string name="err_detail_no_map_static">c:geo found no static maps for this cache.</string> - <string name="err_detail_still_removing">Still removing this cache.</string> - <string name="err_detail_still_saving">Still saving this cache.</string> - <string name="err_detail_still_refreshing">Still reloading this cache.</string> - <string name="err_radar_title">Radar isn\'t installed.</string> - <string name="err_radar_message">This function requires Radar application. Would you install it?</string> - <string name="err_radar_market">c:geo can\'t start Android Market to search for Radar application.</string> - <string name="err_radar_generic">Sorry, c:geo can\'t start Radar application. Is installed?</string> - <string name="err_navigation_no">c:geo can\'t find any supported navigation.</string> - <string name="err_application_no">c:geo can\'t find any suitable application.</string> - <string name="err_auth_initialize">Sorry, c:geo failed to initialize authorization process.</string> - <string name="err_auth_process">Authorization process failed.</string> - <string name="err_cannot_log_visit">c:geo has not enough information to log visit. Please, do it from full cache details.</string> - <string name="err_init_cleared">Sorry, c:geo can\'t clear your login.</string> + <string name="err_start">communication non démarrée</string> + <string name="err_parse">échec login lecture page</string> + <string name="err_server">échec de la connexion à geocaching.com (probléme de serveur ou de connexion?)</string> + <string name="err_login">pas d\'utilisateur ou de mot de passe enregistré</string> + <string name="err_unknown">erreur inconnue</string> + <string name="err_comm">erreur inconnue de communication</string> + <string name="err_wrong">nom d\'utilisateur inconnu ou mauvais mot de passe</string> + <string name="err_license">l\'utilisateur n\'a pas accepté les termes et les conditions d\'utilisation de Geocaching.com</string> + <string name="err_store">Désolé, c:geo ne peut pas enregister la cache.</string> + <string name="err_drop">Désolé, c:geo ne peut pas effacer la cache.</string> + <string name="err_title_problem">problème</string> + <string name="err_detail_open">Désolé, c:geo ne peut pas ouvrir le détail de la cache.</string> + <string name="err_detail_cache">Désolé, c:geo ne peut pas afficher cette cache. Est-ce vraiment une geocache?</string> + <string name="err_detail_cache_find">Désolé, c:geo ne peut pas trouver de caches</string> + <string name="err_detail_cache_find_some">Désolé, c:geo ne peut pas trouver cette geocache.</string> + <string name="err_detail_cache_forgot">Désolé, c:geo a oublié la cache demandée.</string> + <string name="err_detail_cache_language">c:geo ne peut pas lire certains details de la cache. Merci de vérifier que le site Web geocaching.com est configuré en Anglais. Malheureusement, c:geo ne supporte pas les autres langues.</string> + <string name="err_detail_no_spoiler">c:geo n\'a pas trouvé de photo solution pour cette cache.</string> + <string name="err_detail_no_map_static">c:geo n\'a pas trouvé de cartes statiques pour cette cache.</string> + <string name="err_detail_still_removing">Cache toujours en cours d\'effacement.</string> + <string name="err_detail_still_saving">Cache toujours en cours de sauvegarde.</string> + <string name="err_detail_still_refreshing">Cache toujours en cours de chargement.</string> + <string name="err_radar_title">Le radar n\'est pas installé.</string> + <string name="err_radar_message">Cette fonction nécessite l\'application Radar. Voulez-vous l\'installer?</string> + <string name="err_radar_market">c:geo ne peux pas démarrer le Market Android pour rechercher l\'application Radar.</string> + <string name="err_radar_generic">Désolé, c:geo ne peux pas démarrer l\'application Radar. Est-elle installé?</string> + <string name="err_navigation_no">c:geo ne trouve pas de navigation supporté.</string> + <string name="err_application_no">c:geo ne trouve pas d\'application conforme.</string> + <string name="err_auth_initialize">Désolé, c:geo a échoué dans la demande d\'autorisation.</string> + <string name="err_auth_process">Echec de la demande d\'autorisation.</string> + <string name="err_cannot_log_visit">c:geo n\'a pas assez d\'information pour logger votre visite. Faites le depuis le détail de la cache, s\'il vous plait!</string> + <string name="err_init_cleared">Désolé, c:geo ne peux pas effacer votre nom d\'utilisateur.</string> <!-- location service --> <string name="loc_last">dernière pos. connue</string> @@ -176,27 +176,27 @@ <string name="init_skin">aspect sobre (nécessite le redémarrage de c:geo)</string> <string name="init_transparent">accueil de c:geo transparent</string> <string name="init_address">afficher l\'adresse sur l\'accueil</string> - <string name="init_exclude">exclure les caches trouvée et les miennes</string> - <string name="init_disabled">exclure les caches sdésactivées</string> - <string name="init_offline">enregistrer les cartes pour utilisation hors ligne</string> + <string name="init_exclude">exclure les caches trouvées et les miennes</string> + <string name="init_disabled">exclure les cachess désactivées</string> + <string name="init_offline">enregistrer les cartes pour une utilisation hors ligne</string> <string name="init_units">utiliser des unités de distance impériales</string> <string name="init_nav">utiliser Google Navigation</string> - <string name="init_autoload">chargement auto des descriptions longues</string> + <string name="init_autoload">chargement automatique des descriptions longues</string> <string name="init_livelist">afficher la direction des caches dans les listes</string> <string name="init_browser">identifier c:geo comme navigateur standard</string> - <string name="init_cleared">c:geo à effacé votre identifiant.</string> + <string name="init_cleared">c:geo a effacé votre identifiant.</string> <!-- auth --> <string name="auth_twitter">twitter</string> <string name="auth_authorize">autorisation de c:geo</string> - <string name="auth_start">start authorization</string> - <string name="auth_again">start again</string> - <string name="auth_pin_hint">pin assigned by twitter</string> - <string name="auth_finish">finish</string> - <string name="auth_dialog_wait">Waiting for Twitter…</string> - <string name="auth_dialog_pin_title">pin code</string> - <string name="auth_dialog_pin_message">Please write PIN code provided by Twitter website. It\'s mandatory to complete authorization.</string> - <string name="auth_dialog_completed">c:geo is now authorized to post on your Twitter.</string> + <string name="auth_start">début d\'autorisation</string> + <string name="auth_again">redémarre</string> + <string name="auth_pin_hint">code pin attribué par twitter</string> + <string name="auth_finish">terminé</string> + <string name="auth_dialog_wait">en attente de Twitter…</string> + <string name="auth_dialog_pin_title">code PIN</string> + <string name="auth_dialog_pin_message">Veuillez saisir votre code PIN fourni par Twitter. Il est obligatoire pour finaliser l\'autorisation.</string> + <string name="auth_dialog_completed">c:geo est maintenant autorisé à poster sur Twitter.</string> <!-- cache --> <string name="cache_count_no">aucune cache</string> @@ -223,11 +223,11 @@ <string name="cache_waypoints_add">ajouter une étape</string> <string name="cache_hint">indice</string> <string name="cache_logs">carnet de bord</string> - <string name="cache_dialog_loading_details">chargement des détails…</string> + <string name="cache_dialog_loading_details">Chargement des détails…</string> <string name="cache_dialog_loading_description">Chargement de la description…</string> - <string name="cache_dialog_offline_save_title">hors ligne</string> + <string name="cache_dialog_offline_save_title">Hors ligne</string> <string name="cache_dialog_offline_save_message">Enregistrement pour une utilisation hors ligne…</string> - <string name="cache_dialog_offline_drop_title">hors ligne</string> + <string name="cache_dialog_offline_drop_title">Hors ligne</string> <string name="cache_dialog_offline_drop_message">Suppression des caches de la mémoire…</string> <string name="cache_dialog_refresh_title">Recharger</string> <string name="cache_dialog_refresh_message">Rechargement des détails…</string> @@ -245,7 +245,7 @@ <string name="cache_menu_event">ajouter à l\'agenda</string> <string name="cache_menu_details">détails</string> <string name="cache_status">statut</string> - <string name="cache_status_offline_log">saved log</string> + <string name="cache_status_offline_log">logs sauvés</string> <string name="cache_status_found">trouvée</string> <string name="cache_status_archived">archivée</string> <string name="cache_status_disabled">désactivée</string> @@ -288,8 +288,8 @@ <string name="website">site: <a href="http://cgeo.org/">cgeo.org</a></string> <string name="facebook">facebook: <a href="http://www.facebook.com/pages/cgeo/297269860090">page c:geo</a></string> <string name="twitter">twitter: <a href="http://twitter.com/android_gc">@android_GC</a></string> - <string name="about_go4cache">Le service <b>Go 4 cache</b> vous permet de voir en temps réel d\'autres géocacheurs sur une carte (dans <b>c:geo</b> ou dans le navigateur). Il peut afficher quelles caches ils recherchent. En vous connectant sur <b>Go 4 cache</b> vous permettez à <b>c:geo</b> de publier votre publication pendant (seulement si <b>c:geo</b> fonctionne).</string> - <string name="about_twitter">Do you want to publish new status on Twitter everytimes you log find through <b>c:geo</b>?</string> - <string name="about_auth_1">The following proccess allows <b>c:geo</b> to access your Twitter account - if you agree.</string> - <string name="about_auth_2">Click on \"authorize c:geo\" button will start process. This process will open web browser with Twitter page where you have to login and Accept <b>c:geo</b> to access your account. When you Accept, Twitter will show you numeric PIN code. Please copy this code, paste into <b>c:geo</b> and confirm. That\'s all.</string> + <string name="about_go4cache">Le service <b>Go 4 cache</b> vous permet de voir en temps réel d\'autres géocacheurs sur une carte (dans <b>c:geo</b> ou dans le navigateur). Il peut afficher les caches en cours de recherche. En vous connectant sur <b>Go 4 cache</b> vous permettez à <b>c:geo</b> de publier votre publication (seulement si <b>c:geo</b> fonctionne).</string> + <string name="about_twitter">Voulez-vous publier un nouveau statut sur Twitter à chaque nouvelle cache découverte sous <b>c:geo</b>?</string> + <string name="about_auth_1">Le processus suivant permet à <b>c:geo</b> d\'accéder à votre compte Twitter - si vous acceptez.</string> + <string name="about_auth_2">Cliquer sur le bouton \"autoriser c:geo\" pour démarrer. Une fenêtre de navigateur va s\'ouvrir pour vous connecter sur Twitter. Accepter pour que <b>c:geo</b> accéde à votre compte. Twitter vous affichera alors une code PIN composé de chiffres. Merci de coller ce code dans <b>c:geo</b> puis confirmer. C\'est tout!</string> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 56bb69d..c68b769 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -287,6 +287,8 @@ <string name="caches_sort_vote">vote (own rating)</string> <string name="caches_sort_inventory">count of inventory</string> <string name="caches_sort_date">date</string> + <string name="caches_sort_finds">finds</string> + <string name="caches_sort_state">state</string> <string name="caches_select">Select from list</string> <string name="caches_select_mode">Select mode</string> <string name="caches_select_mode_exit">Exit select mode</string> @@ -377,7 +379,7 @@ <string name="init_username">Username</string> <string name="init_password">Password</string> <string name="init_passvote">Password</string> - <string name="init_login">Check login</string> + <string name="init_login">Check login & set date format</string> <string name="init_login_popup">Login</string> <string name="init_login_popup_working">Logging into geocaching.com…</string> <string name="init_login_popup_ok">Login ok.</string> @@ -390,10 +392,11 @@ <string name="init_signature">Signature</string> <string name="init_signature_help_button">Help</string> <string name="init_signature_help_title">Signature tips and tricks</string> - <string name="init_signature_help_text">Write your signature to use in log text.\nSpecial strings that can be used are: [DATE] , [TIME], [USER] & [NUMBER].\nThese will be expanded when the signature is inserted.</string> + <string name="init_signature_help_text">Write your signature to use in log text.\nSpecial strings that can be used are: [DATE] , [TIME], [DATETIME], [USER] & [NUMBER].\nThese will be expanded when the signature is inserted.</string> <string name="init_signature_template_button">Insert template</string> <string name="init_signature_template_date">Date</string> <string name="init_signature_template_time">Time</string> + <string name="init_signature_template_datetime">Date & Time</string> <string name="init_signature_template_user">User</string> <string name="init_signature_template_number">Number</string> <string name="init_languages">Translation</string> @@ -486,6 +489,7 @@ <string name="cache_offline_time_days">days ago</string> <string name="cache_premium">Premium</string> <string name="cache_attributes">Attributes</string> + <string name="cache_attributes_no_icons">(refresh cache to show attribute icons)</string> <string name="cache_inventory">Inventory</string> <string name="cache_log_offline">Offline log</string> <string name="cache_log_images_loading">Loading log Image …</string> @@ -907,7 +911,6 @@ · inkantis (localization PL)\n · <a href="http://www.jaytech.cz/">Jan Žatecký</a> (graphic)\n · <a href="http://joachim-wilke.de/">JoWi24</a> (code)\n - · <a href="http://github.com/koem">Köm</a> (code, artwork computation)\n · MichielK (code, loc. NL)\n · ncorreia (code, localization PT)\n · Pascal (localization NL)\n @@ -921,13 +924,27 @@ · thiasB (code, loc. DE EN)\n · YraFyra (code, loc. SV)\n · zenobios (code, loc. DE EN)\n + · <a href="http://github.com/koem">Karsten Priegnitz</a> (code, artwork computation)\n + · blafoo (code)\n \n · <a href="http://code.google.com/p/mapsforge/">Mapsforge</a> (OSM-rendering)\n - · <a href="http://thenounproject.com/">The Noun Project</a> (graphics)\n + · <a href="http://thenounproject.com/">The Noun Project</a> (basis for attribute icons)\n </string> <!-- changelog --> <string name="changelog">\n + <b>Next release</b>\n + · new: sort by state, sort by find count\n + · new: experimental support for .gpx from opencaching.com\n + · new: scan QR code to open cache description\n + · new: context menu on stored caches button (main screen)\n + · fix: performance of GPX import\n + · fix: performance of deleting caches from list\n + · fix: return to list after GPX import\n + · fix: fill signature when logging offline\n + · fix: show strikethrough in caches\n + · fix: no more empty map previews\n + \n\n <b>26.08.2011</b>\n · new: street view\n · new: attribute icons\n diff --git a/res/values/styles.xml b/res/values/styles.xml index bc42e23..f1f85e6 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -39,34 +39,32 @@ <item name="android:layout_height">@dimen/actionbar_height</item> <item name="android:orientation">horizontal</item> <item name="android:background">@drawable/actionbar_background</item> + <item name="android:gravity">center</item> </style> <style name="action_bar_icon_cgeo"> <item name="android:layout_width">@dimen/actionbar_height</item> <item name="android:layout_height">@dimen/actionbar_height</item> <item name="android:padding">4dip</item> - <item name="android:gravity">center</item> <item name="android:scaleType">center</item> + <item name="android:focusable">true</item> <item name="android:src">@drawable/actionbar_cgeo</item> + <item name="android:background">@drawable/actionbar_button</item> </style> <style name="action_bar_action"> <item name="android:layout_width">@dimen/actionbar_height</item> <item name="android:layout_height">@dimen/actionbar_height</item> <item name="android:padding">2dip</item> - <item name="android:gravity">center</item> <item name="android:scaleType">center</item> + <item name="android:focusable">true</item> <item name="android:src">@drawable/actionbar_home</item> + <item name="android:background">@drawable/actionbar_button</item> </style> <style name="action_bar_separator"> <item name="android:layout_width">@dimen/actionbar_separator_width</item> <item name="android:layout_height">@dimen/actionbar_separator_height</item> - <item name="android:layout_marginLeft">4dip</item> - <item name="android:layout_marginRight">4dip</item> - <item name="android:layout_marginTop">4dip</item> - <item name="android:layout_marginBottom">4dip</item> - <item name="android:gravity">center</item> <item name="android:background">@drawable/actionbar_separator</item> </style> @@ -74,19 +72,17 @@ <item name="android:id">@id/actionbar_progress</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> - <item name="android:layout_marginLeft">14dip</item> + <item name="android:layout_marginLeft">15dip</item> <item name="android:layout_marginRight">15dip</item> - <item name="android:layout_marginTop">14dip</item> <item name="android:indeterminate">true</item> </style> <style name="action_bar_title"> <item name="android:id">@id/actionbar_title</item> <item name="android:layout_width">0dip</item> - <item name="android:layout_height">fill_parent</item> + <item name="android:layout_height">wrap_content</item> <item name="android:layout_weight">1</item> - <item name="android:padding">4dip</item> - <item name="android:gravity">center_vertical|left</item> + <item name="android:paddingLeft">6dip</item> <item name="android:singleLine">true</item> <item name="android:scrollHorizontally">true</item> <item name="android:ellipsize">marquee</item> @@ -145,6 +141,7 @@ <item name="android:layout_gravity">center_horizontal</item> <item name="android:gravity">center</item> <item name="android:layout_margin">4dip</item> + <item name="android:focusable">true</item> </style> <style name="icon_mainscreen_text"> diff --git a/res/values/themes.xml b/res/values/themes.xml index 04daeb7..ba07eb2 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -1,9 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <resources> + <style name="cgeo_main" parent="android:Theme.Wallpaper.NoTitleBar"> + <!-- system elements --> + <item name="android:windowNoTitle">true</item> + <item name="android:windowContentOverlay">@null</item> + </style> + <style name="cgeo" parent="android:Theme.NoTitleBar"> <!-- system elements --> <item name="android:buttonStyle">@style/button</item> <item name="android:editTextStyle">@style/edittext</item> + <item name="android:windowContentOverlay">@null</item> </style> <style name="cgeo_transparent" parent="android:Theme.Dialog"> diff --git a/src/cgeo/geocaching/ICache.java b/src/cgeo/geocaching/ICache.java new file mode 100644 index 0000000..d32c48c --- /dev/null +++ b/src/cgeo/geocaching/ICache.java @@ -0,0 +1,88 @@ +/**
+ *
+ */
+package cgeo.geocaching;
+
+
+/**
+ * Basic interface for caches
+ * @author blafoo
+ *
+ */
+public interface ICache {
+
+ /**
+ * @return The data returned by the HTTP-GET request for this cache. Only for testing purposes.
+ */
+ public String getData();
+
+ /**
+ * @return Geocode like GCxxxx
+ */
+ public String getGeocode();
+ /**
+ * @return Tradi, multi etc.
+ */
+ public String getType();
+ /**
+ * @return Displayed owner, might differ from the real owner
+ */
+ public String getOwner();
+ /**
+ * @return GC username of the owner
+ */
+ public String getOwnerReal();
+ /**
+ * @return Micro, small etc.
+ */
+ public String getSize();
+ /**
+ * @return Difficulty assessment
+ */
+ public Float getDifficulty();
+ /**
+ * @return Terrain assessment
+ */
+ public Float getTerrain();
+ /**
+ * @return Latitute, e.g. N 52° 12.345
+ */
+ public String getLatitute();
+ /**
+ * @return Longitude, e.g. E 9° 34.567
+ */
+ public String getLongitude();
+ /**
+ * @return true if the cache is disabled, false else
+ */
+ public boolean isDisabled();
+ /**
+ * @return true if the user is the owner of the cache, false else
+ */
+ public boolean isOwn();
+ /**
+ * @return true is the cache is archived, false else
+ */
+ public boolean isArchived();
+ /**
+ * @return true is the cache is a Premium Member cache only, false else
+ */
+ public boolean isMembersOnly();
+ /**
+ * @return Decrypted hint
+ */
+ public String getHint();
+ /**
+ * @return Descrition
+ */
+ public String getDescription();
+ /**
+ * @return Short Description
+ */
+ public String getShortDescription();
+ /**
+ * @return Name
+ */
+ public String getName();
+
+}
diff --git a/src/cgeo/geocaching/LogTemplateProvider.java b/src/cgeo/geocaching/LogTemplateProvider.java index 60c7cc7..296a173 100644 --- a/src/cgeo/geocaching/LogTemplateProvider.java +++ b/src/cgeo/geocaching/LogTemplateProvider.java @@ -18,7 +18,7 @@ public class LogTemplateProvider { private String template;
private int resourceId;
- public LogTemplate(String template, int resourceId) {
+ protected LogTemplate(String template, int resourceId) {
this.template = template;
this.resourceId = resourceId;
}
@@ -64,6 +64,14 @@ public class LogTemplateProvider { return base.formatTime(System.currentTimeMillis());
}
},
+ new LogTemplate("DATETIME", R.string.init_signature_template_datetime) {
+
+ @Override
+ String getValue(final cgBase base) {
+ final long currentTime = System.currentTimeMillis();
+ return base.formatFullDate(currentTime) + " " + base.formatTime(currentTime);
+ }
+ },
new LogTemplate("USER", R.string.init_signature_template_user) {
@Override
diff --git a/src/cgeo/geocaching/StaticMapsProvider.java b/src/cgeo/geocaching/StaticMapsProvider.java index cac5118..5962460 100644 --- a/src/cgeo/geocaching/StaticMapsProvider.java +++ b/src/cgeo/geocaching/StaticMapsProvider.java @@ -30,7 +30,7 @@ public class StaticMapsProvider { private static void downloadMapsInThread(final cgCache cache, String latlonMap, int edge, String waypoints) { createStorageDirectory(cache); - + downloadMap(cache, 20, "satellite", 1, latlonMap, edge, waypoints); downloadMap(cache, 18, "satellite", 2, latlonMap, edge, waypoints); downloadMap(cache, 16, "roadmap", 3, latlonMap, edge, waypoints); @@ -56,7 +56,7 @@ public class StaticMapsProvider { private static void downloadMap(cgCache cache, int zoom, String mapType, int level, String latlonMap, int edge, String waypoints) { String mapUrl = "http://maps.google.com/maps/api/staticmap?center=" + latlonMap; String markerUrl = getMarkerUrl(cache); - + String url = mapUrl + "&zoom=" + zoom + "&size=" + edge + "x" + edge + "&maptype=" + mapType + "&markers=icon%3A" + markerUrl + "%7C" + latlonMap + waypoints + "&sensor=false"; final String fileName = getStaticMapsDirectory(cache) + "/map_" + level; @@ -127,7 +127,7 @@ public class StaticMapsProvider { || cache.longitude == null || StringUtils.isNotBlank(cache.geocode)) { return; } - + final String latlonMap = String.format((Locale) null, "%.6f", cache.latitude) + "," + String.format((Locale) null, "%.6f", cache.longitude); final Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); final int maxWidth = display.getWidth() - 25; @@ -146,11 +146,13 @@ public class StaticMapsProvider { continue; } - waypoints.append("&markers=icon%3A" + MARKERS_URL + "marker_waypoint_"); + waypoints.append("&markers=icon%3A"); + waypoints.append(MARKERS_URL); + waypoints.append("marker_waypoint_"); waypoints.append(waypoint.type); waypoints.append(".png%7C"); waypoints.append(String.format((Locale) null, "%.6f", waypoint.latitude)); - waypoints.append(","); + waypoints.append(','); waypoints.append(String.format((Locale) null, "%.6f", waypoint.longitude)); } } @@ -158,7 +160,7 @@ public class StaticMapsProvider { // download map images in separate background thread for higher performance downloadMaps(cache, latlonMap, edge, waypoints.toString()); } - + private static void downloadMaps(final cgCache cache, final String latlonMap, final int edge, final String waypoints) { Thread staticMapsThread = new Thread("getting static map") {@Override diff --git a/src/cgeo/geocaching/activity/AbstractActivity.java b/src/cgeo/geocaching/activity/AbstractActivity.java index 825cc9b..1c2d637 100644 --- a/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/src/cgeo/geocaching/activity/AbstractActivity.java @@ -1,6 +1,7 @@ package cgeo.geocaching.activity; import android.app.Activity; +import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; @@ -21,11 +22,11 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi protected cgBase base = null; protected SharedPreferences prefs = null; - public AbstractActivity() { + protected AbstractActivity() { this(null); } - public AbstractActivity(final String helpTopic) { + protected AbstractActivity(final String helpTopic) { this.helpTopic = helpTopic; } @@ -68,7 +69,7 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi // init res = this.getResources(); app = (cgeoapplication) this.getApplication(); - prefs = getSharedPreferences(cgSettings.preferences, 0); + prefs = getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE); settings = new cgSettings(this, prefs); base = new cgBase(app, settings, prefs); } @@ -76,7 +77,7 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi final public cgSettings getSettings() { return settings; } - + public void addVisitMenu(Menu menu, cgCache cache) { ActivityMixin.addVisitMenu(this, menu, cache); } diff --git a/src/cgeo/geocaching/activity/AbstractListActivity.java b/src/cgeo/geocaching/activity/AbstractListActivity.java index 9cb3284..4624d34 100644 --- a/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -1,6 +1,7 @@ package cgeo.geocaching.activity; import android.app.ListActivity; +import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; @@ -22,11 +23,11 @@ public abstract class AbstractListActivity extends ListActivity implements protected cgBase base = null; protected SharedPreferences prefs = null; - public AbstractListActivity() { + protected AbstractListActivity() { this(null); } - public AbstractListActivity(final String helpTopic) { + protected AbstractListActivity(final String helpTopic) { this.helpTopic = helpTopic; } @@ -65,7 +66,7 @@ public abstract class AbstractListActivity extends ListActivity implements // init res = this.getResources(); app = (cgeoapplication) this.getApplication(); - prefs = getSharedPreferences(cgSettings.preferences, 0); + prefs = getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE); settings = new cgSettings(this, prefs); base = new cgBase(app, settings, prefs); } @@ -73,7 +74,7 @@ public abstract class AbstractListActivity extends ListActivity implements final public void setTitle(final String title) { ActivityMixin.setTitle(this, title); } - + final public cgSettings getSettings() { return settings; } diff --git a/src/cgeo/geocaching/activity/ActivityMixin.java b/src/cgeo/geocaching/activity/ActivityMixin.java index 5c76c08..6440b4e 100644 --- a/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/src/cgeo/geocaching/activity/ActivityMixin.java @@ -76,7 +76,7 @@ public final class ActivityMixin { } public final static void setTheme(final Activity activity) { - cgSettings settings = new cgSettings(activity, activity.getSharedPreferences(cgSettings.preferences, 0)); + cgSettings settings = new cgSettings(activity, activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE)); if (settings.skin == 1) { activity.setTheme(R.style.light); } else { diff --git a/src/cgeo/geocaching/apps/AbstractApp.java b/src/cgeo/geocaching/apps/AbstractApp.java index a6b22f8..190bf5e 100644 --- a/src/cgeo/geocaching/apps/AbstractApp.java +++ b/src/cgeo/geocaching/apps/AbstractApp.java @@ -33,8 +33,14 @@ public abstract class AbstractApp implements App { return null; } PackageManager packageManager = context.getPackageManager(); - Intent intent = packageManager.getLaunchIntentForPackage(packageName); - return intent; + try { + // This can throw an exception where the exception type is only defined on API Level > 3 + // therefore surround with try-catch + Intent intent = packageManager.getLaunchIntentForPackage(packageName); + return intent; + } catch (Exception e) { + return null; + } } public boolean isInstalled(final Context context) { @@ -70,6 +76,6 @@ public abstract class AbstractApp implements App { protected static cgSettings getSettings(Activity activity) { return new cgSettings(activity, - activity.getSharedPreferences(cgSettings.preferences, 0)); + activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE)); } } diff --git a/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java b/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java index 54d7709..5fd8542 100644 --- a/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java +++ b/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java @@ -7,7 +7,7 @@ import cgeo.geocaching.apps.AbstractApp; abstract class AbstractGeneralApp extends AbstractApp implements GeneralApp { - AbstractGeneralApp(String name, String packageName) { + protected AbstractGeneralApp(String name, String packageName) { super(name, null); this.packageName = packageName; } diff --git a/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java b/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java index 5ae8f44..f14c053 100644 --- a/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java +++ b/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java @@ -4,11 +4,11 @@ import cgeo.geocaching.apps.AbstractApp; abstract class AbstractNavigationApp extends AbstractApp implements NavigationApp { - AbstractNavigationApp(String name, String intent, String packageName) { + protected AbstractNavigationApp(String name, String intent, String packageName) { super(name, intent, packageName); } - AbstractNavigationApp(String name, String intent) { + protected AbstractNavigationApp(String name, String intent) { super(name, intent); } diff --git a/src/cgeo/geocaching/apps/cache/navi/LocusApp.java b/src/cgeo/geocaching/apps/cache/navi/LocusApp.java index 208ff93..6abcf4a 100644 --- a/src/cgeo/geocaching/apps/cache/navi/LocusApp.java +++ b/src/cgeo/geocaching/apps/cache/navi/LocusApp.java @@ -63,12 +63,12 @@ class LocusApp extends AbstractLocusApp implements NavigationApp { int icon = -1; if (cache != null) { - icon = cgBase.getIcon(true, cache.type, cache.own, cache.found, + icon = cgBase.getMarkerIcon(true, cache.type, cache.own, cache.found, cache.disabled || cache.archived); } else if (waypoint != null) { - icon = cgBase.getIcon(false, waypoint.type, false, false, false); + icon = cgBase.getMarkerIcon(false, waypoint.type, false, false, false); } else { - icon = cgBase.getIcon(false, "waypoint", false, false, false); + icon = cgBase.getMarkerIcon(false, "waypoint", false, false, false); } if (icon > 0) { @@ -137,7 +137,7 @@ class LocusApp extends AbstractLocusApp implements NavigationApp { continue; } - final int wpIcon = cgBase.getIcon(false, wp.type, false, + final int wpIcon = cgBase.getMarkerIcon(false, wp.type, false, false, false); if (wpIcon > 0) { diff --git a/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java b/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java index 4e97d6d..f058e93 100644 --- a/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java +++ b/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java @@ -46,7 +46,7 @@ class LocusCacheListApp extends AbstractLocusApp implements CacheListApp { // cache waypoints for (cgCache cache : cacheListCoord) { - final int wpIcon = cgBase.getIcon(true, cache.type, cache.own, cache.found, cache.disabled); + final int wpIcon = cgBase.getMarkerIcon(true, cache.type, cache.own, cache.found, cache.disabled); if (wpIcon > 0) { // load icon diff --git a/src/cgeo/geocaching/cgBase.java b/src/cgeo/geocaching/cgBase.java index 1e0891e..8204dcc 100644 --- a/src/cgeo/geocaching/cgBase.java +++ b/src/cgeo/geocaching/cgBase.java @@ -98,7 +98,6 @@ public class cgBase { private final static Pattern patternDesc = Pattern.compile("<span id=\"ctl00_ContentBody_LongDescription\"[^>]*>" + "(.*)</span>[^<]*</div>[^<]*<p>[^<]*</p>[^<]*<p>[^<]*<strong>\\W*Additional Hints</strong>", Pattern.CASE_INSENSITIVE); private final static Pattern patternCountLogs = Pattern.compile("<span id=\"ctl00_ContentBody_lblFindCounts\"><p(.+?)<\\/p><\\/span>", Pattern.CASE_INSENSITIVE); private final static Pattern patternCountLog = Pattern.compile("src=\"\\/images\\/icons\\/(.+?).gif\"[^>]+> (\\d+)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); - //private final static Pattern patternLogs = Pattern.compile("<table class=\"LogsTable\">(.*?)</table>\\s*<p", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternLog = Pattern.compile("<tr><td class.+?<a href=\"/profile/\\?guid=.+?>(.+?)</a>.+?(?:logOwnerStats[^>]+><img[^>]+icon_smile.+?> ([,\\d]+).+?)?LogType.+?<img.+?/images/icons/([^\\.]+)\\..+?title=\"(.+?)\".+?LogDate.+?>(.+?)<.+?LogText.+?>(.*?)</p>(.*?)</div></div></div></td></tr>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternLogImgs = Pattern.compile("href=\"(http://img.geocaching.com/cache/log/.+?)\".+?<span>([^<]*)", Pattern.CASE_INSENSITIVE); private final static Pattern patternAttributes = Pattern.compile("<h3 class=\"WidgetHeader\">[^<]*<img[^>]+>\\W*Attributes[^<]*</h3>[^<]*<div class=\"WidgetBody\">(([^<]*<img src=\"[^\"]+\" alt=\"[^\"]+\"[^>]*>)+)[^<]*<p", Pattern.CASE_INSENSITIVE); @@ -109,6 +108,23 @@ public class cgBase { private final static Pattern patternInventoryInside = Pattern.compile("[^<]*<li>[^<]*<a href=\"[a-z0-9\\-\\_\\.\\?\\/\\:\\@]*\\/track\\/details\\.aspx\\?guid=([0-9a-z\\-]+)[^\"]*\"[^>]*>[^<]*<img src=\"[^\"]+\"[^>]*>[^<]*<span>([^<]+)<\\/span>[^<]*<\\/a>[^<]*<\\/li>", Pattern.CASE_INSENSITIVE); private final static Pattern patternOnWatchlist = Pattern.compile("<img\\s*src=\"\\/images\\/stockholm\\/16x16\\/icon_stop_watchlist.gif\"", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_TrackableId = Pattern.compile("<a id=\"ctl00_ContentBody_LogLink\" title=\"[^\"]*\" href=\".*log\\.aspx\\?wid=([a-z0-9\\-]+)\"[^>]*>[^<]*</a>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Geocode = Pattern.compile("<span id=\"ctl00_ContentBody_BugDetails_BugTBNum\" String=\"[^\"]*\">Use[^<]*<strong>(TB[0-9a-z]+)[^<]*</strong> to reference this item.[^<]*</span>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Name = Pattern.compile("<h2>([^<]*<img[^>]*>)?[^<]*<span id=\"ctl00_ContentBody_lbHeading\">([^<]+)</span>[^<]*</h2>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Owner = Pattern.compile("<dt>\\W*Owner:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugOwner\" title=\"[^\"]*\" href=\"[^\"]*/profile/\\?guid=([a-z0-9\\-]+)\">([^<]+)<\\/a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Released = Pattern.compile("<dt>\\W*Released:[^<]*</dt>[^<]*<dd>[^<]*<span id=\"ctl00_ContentBody_BugDetails_BugReleaseDate\">([^<]+)<\\/span>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Origin = Pattern.compile("<dt>\\W*Origin:[^<]*</dt>[^<]*<dd>[^<]*<span id=\"ctl00_ContentBody_BugDetails_BugOrigin\">([^<]+)<\\/span>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_SpottedCache = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\" title=\"[^\"]*\" href=\"[^\"]*/seek/cache_details.aspx\\?guid=([a-z0-9\\-]+)\">In ([^<]+)</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_SpottedUser = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\" href=\"[^\"]*/profile/\\?guid=([a-z0-9\\-]+)\">In the hands of ([^<]+).</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_SpottedUnknown = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\">Unknown Location[^<]*</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_SpottedOwner = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\">In the hands of the owner[^<]*</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Goal = Pattern.compile("<h3>\\W*Current GOAL[^<]*</h3>[^<]*<p[^>]*>(.*)</p>[^<]*<h3>\\W*About This Item[^<]*</h3>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_DetailsImage = Pattern.compile("<h3>\\W*About This Item[^<]*</h3>([^<]*<p>([^<]*<img id=\"ctl00_ContentBody_BugDetails_BugImage\" class=\"[^\"]+\" src=\"([^\"]+)\"[^>]*>)?[^<]*</p>)?[^<]*<p[^>]*>(.*)</p>[^<]*<div id=\"ctl00_ContentBody_BugDetails_uxAbuseReport\">", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Icon = Pattern.compile("<img id=\"ctl00_ContentBody_BugTypeImage\" class=\"TravelBugHeaderIcon\" src=\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Type = Pattern.compile("<img id=\"ctl00_ContentBody_BugTypeImage\" class=\"TravelBugHeaderIcon\" src=\"[^\"]+\" alt=\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Distance = Pattern.compile("<h4[^>]*\\W*Tracking History \\(([0-9\\.,]+(km|mi))[^\\)]*\\)", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TRACKABLE_Log = Pattern.compile("<tr class=\"Data.+?src=\"/images/icons/([^\\.]+)\\.gif[^>]+> ([^<]+)</td>.+?guid.+?>([^<]+)</a>.+?(?:guid=([^\"]+)\">([^<]+)</a>.+?)?<td colspan=\"4\">(.+?)(?:<ul.+?ul>)?\\s*</td>\\s*</tr>", Pattern.CASE_INSENSITIVE); + public static HashMap<String, String> cacheTypes = new HashMap<String, String>(); public static HashMap<String, String> cacheTypesInv = new HashMap<String, String>(); public static HashMap<String, String> cacheIDs = new HashMap<String, String>(); @@ -129,7 +145,8 @@ public class cgBase { "yyyy/MM/dd", "dd/MMM/yyyy", "MMM/dd/yyyy", - "dd MMM yy" + "dd MMM yy", + "dd/MM/yyyy" }; HashMap<String, SimpleDateFormat> map = new HashMap<String, SimpleDateFormat>(); @@ -425,10 +442,10 @@ public class cgBase { String[] viewstates = new String[count]; // Get the viewstates + int no; final Matcher matcherViewstates = patternViewstates.matcher(page); while (matcherViewstates.find()) { String sno = matcherViewstates.group(1); // number of viewstate - int no; if ("".equals(sno)) no = 0; else @@ -573,13 +590,13 @@ public class cgBase { // on every page final Matcher matcherLogged2In = patternLogged2In.matcher(page); - while (matcherLogged2In.find()) { + if (matcherLogged2In.find()) { return true; } // after login final Matcher matcherLoggedIn = patternLoggedIn.matcher(page); - while (matcherLoggedIn.find()) { + if (matcherLoggedIn.find()) { return true; } @@ -902,9 +919,7 @@ public class cgBase { final String host = "www.geocaching.com"; final String path = "/seek/nearest.aspx"; final StringBuilder params = new StringBuilder(); - params.append("__EVENTTARGET="); - params.append("&"); - params.append("__EVENTARGUMENT="); + params.append("__EVENTTARGET=&__EVENTARGUMENT="); if (caches.viewstates != null && caches.viewstates.length > 0) { params.append("&__VIEWSTATE="); params.append(urlencode_rfc3986(caches.viewstates[0])); @@ -917,21 +932,17 @@ public class cgBase { } } for (String cid : cids) { - params.append("&"); - params.append("CID="); + params.append("&CID="); params.append(urlencode_rfc3986(cid)); } if (recaptchaChallenge != null && StringUtils.isNotBlank(recaptchaText)) { - params.append("&"); - params.append("recaptcha_challenge_field="); + params.append("&recaptcha_challenge_field="); params.append(urlencode_rfc3986(recaptchaChallenge)); - params.append("&"); - params.append("recaptcha_response_field="); + params.append("&recaptcha_response_field="); params.append(urlencode_rfc3986(recaptchaText)); } - params.append("&"); - params.append("ctl00%24ContentBody%24uxDownloadLoc=Download+Waypoints"); + params.append("&ctl00%24ContentBody%24uxDownloadLoc=Download+Waypoints"); final String coordinates = request(false, host, path, "POST", params.toString(), 0, true).getData(); @@ -1119,10 +1130,8 @@ public class cgBase { // cache geocode try { final Matcher matcherGeocode = patternGeocode.matcher(page); - if (matcherGeocode.find()) { - if (matcherGeocode.groupCount() > 0) { - cache.geocode = getMatch(matcherGeocode.group(1)); - } + if (matcherGeocode.find() && matcherGeocode.groupCount() > 0) { + cache.geocode = getMatch(matcherGeocode.group(1)); } } catch (Exception e) { // failed to parse cache geocode @@ -1132,10 +1141,8 @@ public class cgBase { // cache id try { final Matcher matcherCacheId = patternCacheId.matcher(page); - if (matcherCacheId.find()) { - if (matcherCacheId.groupCount() > 0) { - cache.cacheid = getMatch(matcherCacheId.group(1)); - } + if (matcherCacheId.find() && matcherCacheId.groupCount() > 0) { + cache.cacheid = getMatch(matcherCacheId.group(1)); } } catch (Exception e) { // failed to parse cache id @@ -1145,10 +1152,8 @@ public class cgBase { // cache guid try { final Matcher matcherCacheGuid = patternCacheGuid.matcher(page); - if (matcherCacheGuid.find()) { - if (matcherCacheGuid.groupCount() > 0) { - cache.guid = getMatch(matcherCacheGuid.group(1)); - } + if (matcherCacheGuid.find() && matcherCacheGuid.groupCount() > 0) { + cache.guid = getMatch(matcherCacheGuid.group(1)); } } catch (Exception e) { // failed to parse cache guid @@ -1158,10 +1163,8 @@ public class cgBase { // name try { final Matcher matcherName = patternName.matcher(page); - if (matcherName.find()) { - if (matcherName.groupCount() > 0) { - cache.name = Html.fromHtml(matcherName.group(1)).toString(); - } + if (matcherName.find() && matcherName.groupCount() > 0) { + cache.name = Html.fromHtml(matcherName.group(1)).toString(); } } catch (Exception e) { // failed to parse cache name @@ -1171,10 +1174,8 @@ public class cgBase { // owner real name try { final Matcher matcherOwnerReal = patternOwnerReal.matcher(page); - if (matcherOwnerReal.find()) { - if (matcherOwnerReal.groupCount() > 0) { - cache.ownerReal = URLDecoder.decode(matcherOwnerReal.group(1)); - } + if (matcherOwnerReal.find() && matcherOwnerReal.groupCount() > 0) { + cache.ownerReal = URLDecoder.decode(matcherOwnerReal.group(1)); } } catch (Exception e) { // failed to parse owner real name @@ -1209,10 +1210,8 @@ public class cgBase { // cache terrain try { final Matcher matcherTerrain = patternTerrain.matcher(tableInside); - if (matcherTerrain.find()) { - if (matcherTerrain.groupCount() > 0) { - cache.terrain = new Float(Pattern.compile("_").matcher(matcherTerrain.group(1)).replaceAll(".")); - } + if (matcherTerrain.find() && matcherTerrain.groupCount() > 0) { + cache.terrain = new Float(Pattern.compile("_").matcher(matcherTerrain.group(1)).replaceAll(".")); } } catch (Exception e) { // failed to parse terrain @@ -1222,10 +1221,8 @@ public class cgBase { // cache difficulty try { final Matcher matcherDifficulty = patternDifficulty.matcher(tableInside); - if (matcherDifficulty.find()) { - if (matcherDifficulty.groupCount() > 0) { - cache.difficulty = new Float(Pattern.compile("_").matcher(matcherDifficulty.group(1)).replaceAll(".")); - } + if (matcherDifficulty.find() && matcherDifficulty.groupCount() > 0) { + cache.difficulty = new Float(Pattern.compile("_").matcher(matcherDifficulty.group(1)).replaceAll(".")); } } catch (Exception e) { // failed to parse difficulty @@ -1235,10 +1232,8 @@ public class cgBase { // owner try { final Matcher matcherOwner = patternOwner.matcher(tableInside); - if (matcherOwner.find()) { - if (matcherOwner.groupCount() > 0) { - cache.owner = Html.fromHtml(matcherOwner.group(2)).toString(); - } + if (matcherOwner.find() && matcherOwner.groupCount() > 0) { + cache.owner = Html.fromHtml(matcherOwner.group(2)).toString(); } } catch (Exception e) { // failed to parse owner @@ -1248,10 +1243,8 @@ public class cgBase { // hidden try { final Matcher matcherHidden = patternHidden.matcher(tableInside); - if (matcherHidden.find()) { - if (matcherHidden.groupCount() > 0) { - cache.hidden = parseGcCustomDate(matcherHidden.group(1)); - } + if (matcherHidden.find() && matcherHidden.groupCount() > 0) { + cache.hidden = parseGcCustomDate(matcherHidden.group(1)); } } catch (ParseException e) { // failed to parse cache hidden date @@ -1262,10 +1255,8 @@ public class cgBase { // event date try { final Matcher matcherHiddenEvent = patternHiddenEvent.matcher(tableInside); - if (matcherHiddenEvent.find()) { - if (matcherHiddenEvent.groupCount() > 0) { - cache.hidden = parseGcCustomDate(matcherHiddenEvent.group(1)); - } + if (matcherHiddenEvent.find() && matcherHiddenEvent.groupCount() > 0) { + cache.hidden = parseGcCustomDate(matcherHiddenEvent.group(1)); } } catch (ParseException e) { // failed to parse cache event date @@ -1276,10 +1267,8 @@ public class cgBase { // favourite try { final Matcher matcherFavourite = patternFavourite.matcher(tableInside); - if (matcherFavourite.find()) { - if (matcherFavourite.groupCount() > 0) { - cache.favouriteCnt = Integer.parseInt(matcherFavourite.group(1)); - } + if (matcherFavourite.find() && matcherFavourite.groupCount() > 0) { + cache.favouriteCnt = Integer.parseInt(matcherFavourite.group(1)); } } catch (Exception e) { // failed to parse favourite count @@ -1289,10 +1278,8 @@ public class cgBase { // cache size try { final Matcher matcherSize = patternSize.matcher(tableInside); - if (matcherSize.find()) { - if (matcherSize.groupCount() > 0) { - cache.size = getMatch(matcherSize.group(1)).toLowerCase(); - } + if (matcherSize.find() && matcherSize.groupCount() > 0) { + cache.size = getMatch(matcherSize.group(1)).toLowerCase(); } } catch (Exception e) { // failed to parse size @@ -1319,10 +1306,8 @@ public class cgBase { // cache type try { final Matcher matcherType = patternType.matcher(page); - if (matcherType.find()) { - if (matcherType.groupCount() > 0) { - cache.type = cacheTypes.get(matcherType.group(1).toLowerCase()); - } + if (matcherType.find() && matcherType.groupCount() > 0) { + cache.type = cacheTypes.get(matcherType.group(1).toLowerCase()); } } catch (Exception e) { // failed to parse type @@ -1341,20 +1326,18 @@ public class cgBase { // latitude and logitude try { final Matcher matcherLatLon = patternLatLon.matcher(page); - if (matcherLatLon.find()) { - if (matcherLatLon.groupCount() > 0) { - cache.latlon = getMatch(matcherLatLon.group(2)); // first is <b> - - HashMap<String, Object> tmp = cgBase.parseLatlon(cache.latlon); - if (tmp.size() > 0) { - cache.latitude = (Double) tmp.get("latitude"); - cache.longitude = (Double) tmp.get("longitude"); - cache.latitudeString = (String) tmp.get("latitudeString"); - cache.longitudeString = (String) tmp.get("longitudeString"); - cache.reliableLatLon = true; - } - tmp = null; + if (matcherLatLon.find() && matcherLatLon.groupCount() > 0) { + cache.latlon = getMatch(matcherLatLon.group(2)); // first is <b> + + HashMap<String, Object> tmp = cgBase.parseLatlon(cache.latlon); + if (tmp.size() > 0) { + cache.latitude = (Double) tmp.get("latitude"); + cache.longitude = (Double) tmp.get("longitude"); + cache.latitudeString = (String) tmp.get("latitudeString"); + cache.longitudeString = (String) tmp.get("longitudeString"); + cache.reliableLatLon = true; } + tmp = null; } } catch (Exception e) { // failed to parse latitude and/or longitude @@ -1364,10 +1347,8 @@ public class cgBase { // cache location try { final Matcher matcherLocation = patternLocation.matcher(page); - if (matcherLocation.find()) { - if (matcherLocation.groupCount() > 0) { - cache.location = getMatch(matcherLocation.group(1)); - } + if (matcherLocation.find() && matcherLocation.groupCount() > 0) { + cache.location = getMatch(matcherLocation.group(1)); } } catch (Exception e) { // failed to parse location @@ -1377,13 +1358,11 @@ public class cgBase { // cache hint try { final Matcher matcherHint = patternHint.matcher(page); - if (matcherHint.find()) { - if (matcherHint.groupCount() > 2 && matcherHint.group(3) != null) { - // replace linebreak and paragraph tags - String hint = Pattern.compile("<(br|p)[^>]*>").matcher(matcherHint.group(3)).replaceAll("\n"); - if (hint != null) { - cache.hint = hint.replaceAll(Pattern.quote("</p>"), "").trim(); - } + if (matcherHint.find() && matcherHint.groupCount() > 2 && matcherHint.group(3) != null) { + // replace linebreak and paragraph tags + String hint = Pattern.compile("<(br|p)[^>]*>").matcher(matcherHint.group(3)).replaceAll("\n"); + if (hint != null) { + cache.hint = hint.replaceAll(Pattern.quote("</p>"), "").trim(); } } } catch (Exception e) { @@ -1420,10 +1399,8 @@ public class cgBase { // cache personal note try { final Matcher matcherPersonalNote = patternPersonalNote.matcher(page); - if (matcherPersonalNote.find()) { - if (matcherPersonalNote.groupCount() > 0) { - cache.personalNote = getMatch(matcherPersonalNote.group(1).trim()); - } + if (matcherPersonalNote.find() && matcherPersonalNote.groupCount() > 0) { + cache.personalNote = getMatch(matcherPersonalNote.group(1).trim()); } } catch (Exception e) { // failed to parse cache personal note @@ -1433,10 +1410,8 @@ public class cgBase { // cache short description try { final Matcher matcherDescShort = patternDescShort.matcher(page); - if (matcherDescShort.find()) { - if (matcherDescShort.groupCount() > 0) { - cache.shortdesc = getMatch(matcherDescShort.group(1)); - } + if (matcherDescShort.find() && matcherDescShort.groupCount() > 0) { + cache.shortdesc = getMatch(matcherDescShort.group(1)); } } catch (Exception e) { // failed to parse short description @@ -1446,10 +1421,8 @@ public class cgBase { // cache description try { final Matcher matcherDesc = patternDesc.matcher(page); - if (matcherDesc.find()) { - if (matcherDesc.groupCount() > 0) { - cache.description = getMatch(matcherDesc.group(1)); - } + if (matcherDesc.find() && matcherDesc.groupCount() > 0) { + cache.description = getMatch(matcherDesc.group(1)); } } catch (Exception e) { // failed to parse short description @@ -1459,30 +1432,28 @@ public class cgBase { // cache attributes try { final Matcher matcherAttributes = patternAttributes.matcher(page); - while (matcherAttributes.find()) { - if (matcherAttributes.groupCount() > 0) { - final String attributesPre = matcherAttributes.group(1); - final Matcher matcherAttributesInside = patternAttributesInside.matcher(attributesPre); - - while (matcherAttributesInside.find()) { - if (matcherAttributesInside.groupCount() > 1 && matcherAttributesInside.group(2).equalsIgnoreCase("blank") != true) { - if (cache.attributes == null) { - cache.attributes = new ArrayList<String>(); - } - // by default, use the tooltip of the attribute - String attribute = matcherAttributesInside.group(2).toLowerCase(); - - // if the image name can be recognized, use the image name as attribute - String imageName = matcherAttributesInside.group(1).trim(); - if (imageName.length() > 0) { - int start = imageName.lastIndexOf('/'); - int end = imageName.lastIndexOf('.'); - if (start >= 0 && end>= 0) { - attribute = imageName.substring(start + 1, end).replace('-', '_').toLowerCase(); - } + if (matcherAttributes.find() && matcherAttributes.groupCount() > 0) { + final String attributesPre = matcherAttributes.group(1); + final Matcher matcherAttributesInside = patternAttributesInside.matcher(attributesPre); + + while (matcherAttributesInside.find()) { + if (matcherAttributesInside.groupCount() > 1 && matcherAttributesInside.group(2).equalsIgnoreCase("blank") != true) { + if (cache.attributes == null) { + cache.attributes = new ArrayList<String>(); + } + // by default, use the tooltip of the attribute + String attribute = matcherAttributesInside.group(2).toLowerCase(); + + // if the image name can be recognized, use the image name as attribute + String imageName = matcherAttributesInside.group(1).trim(); + if (imageName.length() > 0) { + int start = imageName.lastIndexOf('/'); + int end = imageName.lastIndexOf('.'); + if (start >= 0 && end>= 0) { + attribute = imageName.substring(start + 1, end).replace('-', '_').toLowerCase(); } - cache.attributes.add(attribute); } + cache.attributes.add(attribute); } } } @@ -1494,28 +1465,26 @@ public class cgBase { // cache spoilers try { final Matcher matcherSpoilers = patternSpoilers.matcher(page); - while (matcherSpoilers.find()) { - if (matcherSpoilers.groupCount() > 0) { - final String spoilersPre = matcherSpoilers.group(1); - final Matcher matcherSpoilersInside = patternSpoilersInside.matcher(spoilersPre); - - while (matcherSpoilersInside.find()) { - if (matcherSpoilersInside.groupCount() > 0) { - final cgImage spoiler = new cgImage(); - spoiler.url = matcherSpoilersInside.group(1); - - if (matcherSpoilersInside.group(2) != null) { - spoiler.title = matcherSpoilersInside.group(2); - } - if (matcherSpoilersInside.group(4) != null) { - spoiler.description = matcherSpoilersInside.group(4); - } + if (matcherSpoilers.find() && matcherSpoilers.groupCount() > 0) { + final String spoilersPre = matcherSpoilers.group(1); + final Matcher matcherSpoilersInside = patternSpoilersInside.matcher(spoilersPre); - if (cache.spoilers == null) { - cache.spoilers = new ArrayList<cgImage>(); - } - cache.spoilers.add(spoiler); + while (matcherSpoilersInside.find()) { + if (matcherSpoilersInside.groupCount() > 0) { + final cgImage spoiler = new cgImage(); + spoiler.url = matcherSpoilersInside.group(1); + + if (matcherSpoilersInside.group(2) != null) { + spoiler.title = matcherSpoilersInside.group(2); + } + if (matcherSpoilersInside.group(4) != null) { + spoiler.description = matcherSpoilersInside.group(4); + } + + if (cache.spoilers == null) { + cache.spoilers = new ArrayList<cgImage>(); } + cache.spoilers.add(spoiler); } } } @@ -1529,7 +1498,7 @@ public class cgBase { cache.inventoryItems = 0; final Matcher matcherInventory = patternInventory.matcher(page); - while (matcherInventory.find()) { + if (matcherInventory.find()) { if (cache.inventory == null) { cache.inventory = new ArrayList<cgTrackable>(); } @@ -1590,72 +1559,68 @@ public class cgBase { // cache logs try { -// final Matcher matcherLogs = patternLogs.matcher(page); -// -// if (matcherLogs.find()) -// { - /* - 1- Author - 2- Finds-count - 3- Log type image name (e.g. "icon_smile") - 4- Type string (e.g. "Found it") - 5- Date string (e.g. "04/28/2010") - 6- Log text - 7- The rest (e.g. log-images, maybe faster) - */ - final Matcher matcherLog = patternLog.matcher(page);//(matcherLogs.group(1)); + /* + 1- Author + 2- Finds-count + 3- Log type image name (e.g. "icon_smile") + 4- Type string (e.g. "Found it") + 5- Date string (e.g. "04/28/2010") + 6- Log text + 7- The rest (e.g. log-images, maybe faster) + */ + final Matcher matcherLog = patternLog.matcher(page);//(matcherLogs.group(1)); + + while (matcherLog.find()) + { + final cgLog logDone = new cgLog(); - while (matcherLog.find()) + final String logIconName = matcherLog.group(3).toLowerCase(); + if (logTypes.containsKey(logIconName)) { - final cgLog logDone = new cgLog(); - - if (logTypes.containsKey(matcherLog.group(3).toLowerCase())) - { - logDone.type = logTypes.get(matcherLog.group(3).toLowerCase()); - } - else - { - logDone.type = logTypes.get("icon_note"); - } + logDone.type = logTypes.get(logIconName); + } + else + { + logDone.type = logTypes.get("icon_note"); + } - try - { - logDone.date = parseGcCustomDate(matcherLog.group(5)).getTime(); - } - catch (ParseException e) - { - Log.w(cgSettings.tag, "Failed to parse log date."); - } + try + { + logDone.date = parseGcCustomDate(matcherLog.group(5)).getTime(); + } + catch (ParseException e) + { + Log.w(cgSettings.tag, "Failed to parse log date."); + } - logDone.author = Html.fromHtml(matcherLog.group(1)).toString(); + logDone.author = Html.fromHtml(matcherLog.group(1)).toString(); - if (null != matcherLog.group(2)) - { - logDone.found = Integer.parseInt(matcherLog.group(2).replaceAll(",", "")); - } + if (null != matcherLog.group(2)) + { + logDone.found = Integer.parseInt(matcherLog.group(2).replaceAll(",", "")); + } - logDone.log = matcherLog.group(6); + logDone.log = matcherLog.group(6); - final Matcher matcherImg = patternLogImgs.matcher(matcherLog.group(7)); - while (matcherImg.find()) + final Matcher matcherImg = patternLogImgs.matcher(matcherLog.group(7)); + while (matcherImg.find()) + { + final cgImage logImage = new cgImage(); + logImage.url = matcherImg.group(1); + logImage.title = matcherImg.group(2); + if (logDone.logImages == null) { - final cgImage logImage = new cgImage(); - logImage.url = matcherImg.group(1); - logImage.title = matcherImg.group(2); - if (logDone.logImages == null) - { - logDone.logImages = new ArrayList<cgImage>(); - } - logDone.logImages.add(logImage); + logDone.logImages = new ArrayList<cgImage>(); } + logDone.logImages.add(logImage); + } - if (null == cache.logs) - { - cache.logs = new ArrayList<cgLog>(); - } - cache.logs.add(logDone); + if (null == cache.logs) + { + cache.logs = new ArrayList<cgLog>(); } -// } + cache.logs.add(logDone); + } } catch (Exception e) { @@ -1701,13 +1666,8 @@ public class cgBase { // waypoint type try { final Matcher matcherWpType = patternWpType.matcher(wp[3]); - while (matcherWpType.find()) { - if (matcherWpType.groupCount() > 0) { - waypoint.type = matcherWpType.group(1); - if (StringUtils.isNotBlank(waypoint.type)) { - waypoint.type = waypoint.type.trim(); - } - } + if (matcherWpType.find() && matcherWpType.groupCount() > 0) { + waypoint.type = matcherWpType.group(1).trim(); } } catch (Exception e) { // failed to parse type @@ -1717,13 +1677,8 @@ public class cgBase { // waypoint prefix try { final Matcher matcherWpPrefix = patternWpPrefixOrLookupOrLatlon.matcher(wp[4]); - while (matcherWpPrefix.find()) { - if (matcherWpPrefix.groupCount() > 1) { - waypoint.prefix = matcherWpPrefix.group(2); - if (StringUtils.isNotBlank(waypoint.prefix)) { - waypoint.prefix = waypoint.prefix.trim(); - } - } + if (matcherWpPrefix.find() && matcherWpPrefix.groupCount() > 1) { + waypoint.prefix = matcherWpPrefix.group(2).trim(); } } catch (Exception e) { // failed to parse prefix @@ -1733,13 +1688,8 @@ public class cgBase { // waypoint lookup try { final Matcher matcherWpLookup = patternWpPrefixOrLookupOrLatlon.matcher(wp[5]); - while (matcherWpLookup.find()) { - if (matcherWpLookup.groupCount() > 1) { - waypoint.lookup = matcherWpLookup.group(2); - if (StringUtils.isNotBlank(waypoint.lookup)) { - waypoint.lookup = waypoint.lookup.trim(); - } - } + if (matcherWpLookup.find() && matcherWpLookup.groupCount() > 1) { + waypoint.lookup = matcherWpLookup.group(2).trim(); } } catch (Exception e) { // failed to parse lookup @@ -1756,6 +1706,9 @@ public class cgBase { waypoint.name = waypoint.name.trim(); } } + if (matcherWpName.find() && matcherWpName.groupCount() > 0) { + waypoint.name = matcherWpName.group(1).trim(); + } } } catch (Exception e) { // failed to parse name @@ -1765,17 +1718,15 @@ public class cgBase { // waypoint latitude and logitude try { final Matcher matcherWpLatLon = patternWpPrefixOrLookupOrLatlon.matcher(wp[7]); - while (matcherWpLatLon.find()) { - if (matcherWpLatLon.groupCount() > 1) { - waypoint.latlon = Html.fromHtml(matcherWpLatLon.group(2)).toString(); - - final HashMap<String, Object> tmp = cgBase.parseLatlon(waypoint.latlon); - if (tmp.size() > 0) { - waypoint.latitude = (Double) tmp.get("latitude"); - waypoint.longitude = (Double) tmp.get("longitude"); - waypoint.latitudeString = (String) tmp.get("latitudeString"); - waypoint.longitudeString = (String) tmp.get("longitudeString"); - } + if (matcherWpLatLon.find() && matcherWpLatLon.groupCount() > 1) { + waypoint.latlon = Html.fromHtml(matcherWpLatLon.group(2)).toString(); + + final HashMap<String, Object> tmp = cgBase.parseLatlon(waypoint.latlon); + if (tmp.size() > 0) { + waypoint.latitude = (Double) tmp.get("latitude"); + waypoint.longitude = (Double) tmp.get("longitude"); + waypoint.latitudeString = (String) tmp.get("latitudeString"); + waypoint.longitudeString = (String) tmp.get("longitudeString"); } } } catch (Exception e) { @@ -1791,21 +1742,17 @@ public class cgBase { // waypoint note try { final Matcher matcherWpNote = patternWpNote.matcher(wp[3]); - while (matcherWpNote.find()) { - if (matcherWpNote.groupCount() > 0) { - waypoint.note = matcherWpNote.group(1); - if (StringUtils.isNotBlank(waypoint.note)) { - waypoint.note = waypoint.note.trim(); - } - } + if (matcherWpNote.find() && matcherWpNote.groupCount() > 0) { + waypoint.note = matcherWpNote.group(1).trim(); } } catch (Exception e) { // failed to parse note Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse waypoint note"); } - if (cache.waypoints == null) + if (cache.waypoints == null) { cache.waypoints = new ArrayList<cgWaypoint>(); + } cache.waypoints.add(waypoint); } } @@ -1885,7 +1832,7 @@ public class cgBase { // And BTW: You cannot even see that effect in the debugger, but must use a separate memory profiler! } - private static Date parseGcCustomDate(String input) + public Date parseGcCustomDate(String input) throws ParseException { if (StringUtils.isBlank(input)) @@ -1895,6 +1842,17 @@ public class cgBase { input = input.trim(); + if (null != settings + //&& null != settings.getGcCustomDate() + && gcCustomDateFormats.containsKey(settings.getGcCustomDate())) + { + try + { + return gcCustomDateFormats.get(settings.getGcCustomDate()).parse(input); + } + catch (ParseException e) {} + } + for (SimpleDateFormat format : gcCustomDateFormats.values()) { try @@ -1907,6 +1865,22 @@ public class cgBase { throw new ParseException("No matching pattern", 0); } + public void detectGcCustomDate() + { + final String host = "www.geocaching.com"; + final String path = "/account/ManagePreferences.aspx"; + + final String result = request(false, host, path, "GET", null, false, false, false).getData(); + + final Pattern pattern = Pattern.compile("<option selected=\"selected\" value=\"([ /Mdy-]+)\">", Pattern.CASE_INSENSITIVE); + final Matcher matcher = pattern.matcher(result); + + if (matcher.find()) + { + settings.setGcCustomDate(matcher.group(1)); + } + } + public cgRating getRating(String guid, String geocode) { ArrayList<String> guids = null; ArrayList<String> geocodes = null; @@ -2056,32 +2030,13 @@ public class cgBase { return null; } - final Pattern patternTrackableId = Pattern.compile("<a id=\"ctl00_ContentBody_LogLink\" title=\"[^\"]*\" href=\".*log\\.aspx\\?wid=([a-z0-9\\-]+)\"[^>]*>[^<]*</a>", Pattern.CASE_INSENSITIVE); - final Pattern patternGeocode = Pattern.compile("<span id=\"ctl00_ContentBody_BugDetails_BugTBNum\" String=\"[^\"]*\">Use[^<]*<strong>(TB[0-9a-z]+)[^<]*</strong> to reference this item.[^<]*</span>", Pattern.CASE_INSENSITIVE); - final Pattern patternName = Pattern.compile("<h2>([^<]*<img[^>]*>)?[^<]*<span id=\"ctl00_ContentBody_lbHeading\">([^<]+)</span>[^<]*</h2>", Pattern.CASE_INSENSITIVE); - final Pattern patternOwner = Pattern.compile("<dt>\\W*Owner:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugOwner\" title=\"[^\"]*\" href=\"[^\"]*/profile/\\?guid=([a-z0-9\\-]+)\">([^<]+)<\\/a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternReleased = Pattern.compile("<dt>\\W*Released:[^<]*</dt>[^<]*<dd>[^<]*<span id=\"ctl00_ContentBody_BugDetails_BugReleaseDate\">([^<]+)<\\/span>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternOrigin = Pattern.compile("<dt>\\W*Origin:[^<]*</dt>[^<]*<dd>[^<]*<span id=\"ctl00_ContentBody_BugDetails_BugOrigin\">([^<]+)<\\/span>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternSpottedCache = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\" title=\"[^\"]*\" href=\"[^\"]*/seek/cache_details.aspx\\?guid=([a-z0-9\\-]+)\">In ([^<]+)</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternSpottedUser = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\" href=\"[^\"]*/profile/\\?guid=([a-z0-9\\-]+)\">In the hands of ([^<]+).</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternSpottedUnknown = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\">Unknown Location[^<]*</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternSpottedOwner = Pattern.compile("<dt>\\W*Recently Spotted:[^<]*</dt>[^<]*<dd>[^<]*<a id=\"ctl00_ContentBody_BugDetails_BugLocation\">In the hands of the owner[^<]*</a>[^<]*</dd>", Pattern.CASE_INSENSITIVE); - final Pattern patternGoal = Pattern.compile("<h3>\\W*Current GOAL[^<]*</h3>[^<]*<p[^>]*>(.*)</p>[^<]*<h3>\\W*About This Item[^<]*</h3>", Pattern.CASE_INSENSITIVE); - final Pattern patternDetailsImage = Pattern.compile("<h3>\\W*About This Item[^<]*</h3>([^<]*<p>([^<]*<img id=\"ctl00_ContentBody_BugDetails_BugImage\" class=\"[^\"]+\" src=\"([^\"]+)\"[^>]*>)?[^<]*</p>)?[^<]*<p[^>]*>(.*)</p>[^<]*<div id=\"ctl00_ContentBody_BugDetails_uxAbuseReport\">", Pattern.CASE_INSENSITIVE); - final Pattern patternLogs = Pattern.compile("<table class=\"TrackableItemLogTable Table\">(.*)<\\/table>[^<]*<ul", Pattern.CASE_INSENSITIVE); - final Pattern patternIcon = Pattern.compile("<img id=\"ctl00_ContentBody_BugTypeImage\" class=\"TravelBugHeaderIcon\" src=\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE); - final Pattern patternType = Pattern.compile("<img id=\"ctl00_ContentBody_BugTypeImage\" class=\"TravelBugHeaderIcon\" src=\"[^\"]+\" alt=\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE); - final Pattern patternDistance = Pattern.compile("<h4[^>]*\\W*Tracking History \\(([0-9\\.,]+(km|mi))[^\\)]*\\)", Pattern.CASE_INSENSITIVE); - final cgTrackable trackable = new cgTrackable(); // trackable geocode try { - final Matcher matcherGeocode = patternGeocode.matcher(page); - while (matcherGeocode.find()) { - if (matcherGeocode.groupCount() > 0) { - trackable.geocode = matcherGeocode.group(1).toUpperCase(); - } + final Matcher matcherGeocode = PATTERN_TRACKABLE_Geocode.matcher(page); + if (matcherGeocode.find() && matcherGeocode.groupCount() > 0) { + trackable.geocode = matcherGeocode.group(1).toUpperCase(); } } catch (Exception e) { // failed to parse trackable geocode @@ -2090,11 +2045,9 @@ public class cgBase { // trackable id try { - final Matcher matcherTrackableId = patternTrackableId.matcher(page); - while (matcherTrackableId.find()) { - if (matcherTrackableId.groupCount() > 0) { - trackable.guid = matcherTrackableId.group(1); - } + final Matcher matcherTrackableId = PATTERN_TRACKABLE_TrackableId.matcher(page); + if (matcherTrackableId.find() && matcherTrackableId.groupCount() > 0) { + trackable.guid = matcherTrackableId.group(1); } } catch (Exception e) { // failed to parse trackable id @@ -2103,11 +2056,9 @@ public class cgBase { // trackable icon try { - final Matcher matcherTrackableIcon = patternIcon.matcher(page); - while (matcherTrackableIcon.find()) { - if (matcherTrackableIcon.groupCount() > 0) { - trackable.iconUrl = matcherTrackableIcon.group(1); - } + final Matcher matcherTrackableIcon = PATTERN_TRACKABLE_Icon.matcher(page); + if (matcherTrackableIcon.find() && matcherTrackableIcon.groupCount() > 0) { + trackable.iconUrl = matcherTrackableIcon.group(1); } } catch (Exception e) { // failed to parse trackable icon @@ -2116,11 +2067,9 @@ public class cgBase { // trackable name try { - final Matcher matcherName = patternName.matcher(page); - while (matcherName.find()) { - if (matcherName.groupCount() > 1) { - trackable.name = matcherName.group(2); - } + final Matcher matcherName = PATTERN_TRACKABLE_Name.matcher(page); + if (matcherName.find() && matcherName.groupCount() > 1) { + trackable.name = matcherName.group(2); } } catch (Exception e) { // failed to parse trackable name @@ -2130,11 +2079,9 @@ public class cgBase { // trackable type if (StringUtils.isNotBlank(trackable.name)) { try { - final Matcher matcherType = patternType.matcher(page); - while (matcherType.find()) { - if (matcherType.groupCount() > 0) { - trackable.type = matcherType.group(1); - } + final Matcher matcherType = PATTERN_TRACKABLE_Type.matcher(page); + if (matcherType.find() && matcherType.groupCount() > 0) { + trackable.type = matcherType.group(1); } } catch (Exception e) { // failed to parse trackable type @@ -2144,12 +2091,10 @@ public class cgBase { // trackable owner name try { - final Matcher matcherOwner = patternOwner.matcher(page); - while (matcherOwner.find()) { - if (matcherOwner.groupCount() > 0) { - trackable.ownerGuid = matcherOwner.group(1); - trackable.owner = matcherOwner.group(2); - } + final Matcher matcherOwner = PATTERN_TRACKABLE_Owner.matcher(page); + if (matcherOwner.find() && matcherOwner.groupCount() > 0) { + trackable.ownerGuid = matcherOwner.group(1); + trackable.owner = matcherOwner.group(2); } } catch (Exception e) { // failed to parse trackable owner name @@ -2158,11 +2103,9 @@ public class cgBase { // trackable origin try { - final Matcher matcherOrigin = patternOrigin.matcher(page); - while (matcherOrigin.find()) { - if (matcherOrigin.groupCount() > 0) { - trackable.origin = matcherOrigin.group(1); - } + final Matcher matcherOrigin = PATTERN_TRACKABLE_Origin.matcher(page); + if (matcherOrigin.find() && matcherOrigin.groupCount() > 0) { + trackable.origin = matcherOrigin.group(1); } } catch (Exception e) { // failed to parse trackable origin @@ -2171,30 +2114,26 @@ public class cgBase { // trackable spotted try { - final Matcher matcherSpottedCache = patternSpottedCache.matcher(page); - while (matcherSpottedCache.find()) { - if (matcherSpottedCache.groupCount() > 0) { - trackable.spottedGuid = matcherSpottedCache.group(1); - trackable.spottedName = matcherSpottedCache.group(2); - trackable.spottedType = cgTrackable.SPOTTED_CACHE; - } + final Matcher matcherSpottedCache = PATTERN_TRACKABLE_SpottedCache.matcher(page); + if (matcherSpottedCache.find() && matcherSpottedCache.groupCount() > 0) { + trackable.spottedGuid = matcherSpottedCache.group(1); + trackable.spottedName = matcherSpottedCache.group(2); + trackable.spottedType = cgTrackable.SPOTTED_CACHE; } - final Matcher matcherSpottedUser = patternSpottedUser.matcher(page); - while (matcherSpottedUser.find()) { - if (matcherSpottedUser.groupCount() > 0) { - trackable.spottedGuid = matcherSpottedUser.group(1); - trackable.spottedName = matcherSpottedUser.group(2); - trackable.spottedType = cgTrackable.SPOTTED_USER; - } + final Matcher matcherSpottedUser = PATTERN_TRACKABLE_SpottedUser.matcher(page); + if (matcherSpottedUser.find() && matcherSpottedUser.groupCount() > 0) { + trackable.spottedGuid = matcherSpottedUser.group(1); + trackable.spottedName = matcherSpottedUser.group(2); + trackable.spottedType = cgTrackable.SPOTTED_USER; } - final Matcher matcherSpottedUnknown = patternSpottedUnknown.matcher(page); + final Matcher matcherSpottedUnknown = PATTERN_TRACKABLE_SpottedUnknown.matcher(page); if (matcherSpottedUnknown.find()) { trackable.spottedType = cgTrackable.SPOTTED_UNKNOWN; } - final Matcher matcherSpottedOwner = patternSpottedOwner.matcher(page); + final Matcher matcherSpottedOwner = PATTERN_TRACKABLE_SpottedOwner.matcher(page); if (matcherSpottedOwner.find()) { trackable.spottedType = cgTrackable.SPOTTED_OWNER; } @@ -2205,24 +2144,22 @@ public class cgBase { // released try { - final Matcher matcherReleased = patternReleased.matcher(page); - while (matcherReleased.find()) { - if (matcherReleased.groupCount() > 0 && matcherReleased.group(1) != null) { - try { - if (trackable.released == null) { - trackable.released = dateTbIn1.parse(matcherReleased.group(1)); - } - } catch (Exception e) { - // + final Matcher matcherReleased = PATTERN_TRACKABLE_Released.matcher(page); + if (matcherReleased.find() && matcherReleased.groupCount() > 0 && matcherReleased.group(1) != null) { + try { + if (trackable.released == null) { + trackable.released = dateTbIn1.parse(matcherReleased.group(1)); } + } catch (Exception e) { + // + } - try { - if (trackable.released == null) { - trackable.released = dateTbIn2.parse(matcherReleased.group(1)); - } - } catch (Exception e) { - // + try { + if (trackable.released == null) { + trackable.released = dateTbIn2.parse(matcherReleased.group(1)); } + } catch (Exception e) { + // } } } catch (Exception e) { @@ -2232,11 +2169,9 @@ public class cgBase { // trackable distance try { - final Matcher matcherDistance = patternDistance.matcher(page); - while (matcherDistance.find()) { - if (matcherDistance.groupCount() > 0) { - trackable.distance = parseDistance(matcherDistance.group(1)); - } + final Matcher matcherDistance = PATTERN_TRACKABLE_Distance.matcher(page); + if (matcherDistance.find() && matcherDistance.groupCount() > 0) { + trackable.distance = parseDistance(matcherDistance.group(1)); } } catch (Exception e) { // failed to parse trackable distance @@ -2245,11 +2180,9 @@ public class cgBase { // trackable goal try { - final Matcher matcherGoal = patternGoal.matcher(page); - while (matcherGoal.find()) { - if (matcherGoal.groupCount() > 0) { - trackable.goal = matcherGoal.group(1); - } + final Matcher matcherGoal = PATTERN_TRACKABLE_Goal.matcher(page); + if (matcherGoal.find() && matcherGoal.groupCount() > 0) { + trackable.goal = matcherGoal.group(1); } } catch (Exception e) { // failed to parse trackable goal @@ -2258,18 +2191,16 @@ public class cgBase { // trackable details & image try { - final Matcher matcherDetailsImage = patternDetailsImage.matcher(page); - while (matcherDetailsImage.find()) { - if (matcherDetailsImage.groupCount() > 0) { - final String image = matcherDetailsImage.group(3); - final String details = matcherDetailsImage.group(4); - - if (StringUtils.isNotBlank(image)) { - trackable.image = image; - } - if (StringUtils.isNotBlank(details)) { - trackable.details = details; - } + final Matcher matcherDetailsImage = PATTERN_TRACKABLE_DetailsImage.matcher(page); + if (matcherDetailsImage.find() && matcherDetailsImage.groupCount() > 0) { + final String image = matcherDetailsImage.group(3); + final String details = matcherDetailsImage.group(4); + + if (image != null) { + trackable.image = image; + } + if (details != null) { + trackable.details = details; } } } catch (Exception e) { @@ -2278,90 +2209,47 @@ public class cgBase { } // trackable logs - try { - final Matcher matcherLogs = patternLogs.matcher(page); - while (matcherLogs.find()) { - if (matcherLogs.groupCount() > 0) { - final Pattern patternLog = Pattern.compile("[^>]*>" + - "[^<]*<td[^<]*<img src=[\"|'].*\\/icons\\/([^\\.]+)\\.[a-z]{2,5}[\"|'][^>]*> (\\d+).(\\d+).(\\d+)[^<]*</td>" + - "[^<]*<td>[^<]*<a href=[^>]+>([^<]+)<.a>([^<]*|[^<]*<a href=[\"|'].*guid=([^\"]*)\">([^<]*)</a>[^<]*)</td>" + - "[^<]*<td>[^<]*</td>" + - "[^<]*<td[^<]*<a href=[^>]+>[^<]+</a>[^<]*</td>[^<]*</tr>" + - "[^<]*<tr[^>]*>[^<]*<td[^>]*>(.*?)</td>[^<]*</tr>.*" + - ""); - // 1 filename == type - // 2 month - // 3 date - // 4 year - // 5 user - // 6 action dependent - // 7 cache guid - // 8 cache name - // 9 text - final String[] logs = matcherLogs.group(1).split("<tr class=\"Data BorderTop"); - final int logsCnt = logs.length; - - for (int k = 1; k < logsCnt; k++) { - final Matcher matcherLog = patternLog.matcher(logs[k]); - if (matcherLog.find()) { - final cgLog logDone = new cgLog(); - - String logTmp = matcherLog.group(9); - logTmp = Pattern.compile("<p>").matcher(logTmp).replaceAll("\n"); - logTmp = Pattern.compile("<br[^>]*>").matcher(logTmp).replaceAll("\n"); - logTmp = Pattern.compile("<\\/p>").matcher(logTmp).replaceAll(""); - logTmp = Pattern.compile("\r+").matcher(logTmp).replaceAll("\n"); - - int day = -1; - try { - day = Integer.parseInt(matcherLog.group(3)); - } catch (Exception e) { - Log.w(cgSettings.tag, "Failed to parse logs date (day): " + e.toString()); - } - - int month = -1; - try { - month = Integer.parseInt(matcherLog.group(2)); - month -= 1; - } catch (Exception e) { - Log.w(cgSettings.tag, "Failed to parse logs date (month): " + e.toString()); - } + try + { + final Matcher matcherLogs = PATTERN_TRACKABLE_Log.matcher(page); + /* + 1. Type (img) + 2. Date + 3. Author + 4. Cache-GUID + 5. Cache-name + 6. Logtext + */ + while (matcherLogs.find()) + { + final cgLog logDone = new cgLog(); - int year = -1; - try { - year = Integer.parseInt(matcherLog.group(4)); - } catch (Exception e) { - Log.w(cgSettings.tag, "Failed to parse logs date (year): " + e.toString()); - } + if (logTypes.containsKey(matcherLogs.group(1).toLowerCase())) + { + logDone.type = logTypes.get(matcherLogs.group(1).toLowerCase()); + } + else + { + logDone.type = logTypes.get("icon_note"); + } - long logDate; - if (year > 0 && month >= 0 && day > 0) { - Calendar date = Calendar.getInstance(); - date.set(year, month, day, 12, 0, 0); - logDate = date.getTimeInMillis(); - logDate = (logDate / 1000L) * 1000L; - } else { - logDate = 0; - } + logDone.author = Html.fromHtml(matcherLogs.group(3)).toString(); - if (logTypes.containsKey(matcherLog.group(1).toLowerCase())) { - logDone.type = logTypes.get(matcherLog.group(1).toLowerCase()); - } else { - logDone.type = logTypes.get("icon_note"); - } + try + { + logDone.date = parseGcCustomDate(matcherLogs.group(2)).getTime(); + } + catch (ParseException e) {} - logDone.author = Html.fromHtml(matcherLog.group(5)).toString(); - logDone.date = logDate; - logDone.log = logTmp; - if (matcherLog.group(7) != null && matcherLog.group(8) != null) { - logDone.cacheGuid = matcherLog.group(7); - logDone.cacheName = matcherLog.group(8); - } + logDone.log = matcherLogs.group(6).trim(); - trackable.logs.add(logDone); - } - } + if (matcherLogs.group(4) != null && matcherLogs.group(5) != null) + { + logDone.cacheGuid = matcherLogs.group(4); + logDone.cacheName = matcherLogs.group(5); } + + trackable.logs.add(logDone); } } catch (Exception e) { // failed to parse logs @@ -2725,46 +2613,38 @@ public class cgBase { return result; } - public static String formatCoordinate(Double coord, String latlon, boolean degrees) { - String formatted = ""; - - if (coord == null) { - return formatted; + private static String formatCoordinate(final Double coordIn, final boolean degrees, final String direction, final String digitsFormat) { + if (coordIn == null) { + return ""; } + StringBuilder formatted = new StringBuilder(direction); - String worldSide = ""; - if (latlon.equalsIgnoreCase("lat")) { - if (coord >= 0) { - // have the blanks here at the direction to avoid one String concatenation - worldSide = "N "; - } else { - worldSide = "S "; - } - } else if (latlon.equalsIgnoreCase("lon")) { - if (coord >= 0) { - worldSide = "E "; - } else { - worldSide = "W "; - } - } + double coordAbs = Math.abs(coordIn); + Locale locale = Locale.getDefault(); + double floor = Math.floor(coordAbs); - coord = Math.abs(coord); + formatted.append(String.format(locale, digitsFormat, floor)); - if (latlon.equalsIgnoreCase("lat")) { - if (degrees) { - formatted = worldSide + String.format(Locale.getDefault(), "%02.0f", Math.floor(coord)) + "° " + String.format(Locale.getDefault(), "%06.3f", ((coord - Math.floor(coord)) * 60)); - } else { - formatted = worldSide + String.format(Locale.getDefault(), "%02.0f", Math.floor(coord)) + " " + String.format(Locale.getDefault(), "%06.3f", ((coord - Math.floor(coord)) * 60)); - } + if (degrees) { + formatted.append("° "); } else { - if (degrees) { - formatted = worldSide + String.format(Locale.getDefault(), "%03.0f", Math.floor(coord)) + "° " + String.format(Locale.getDefault(), "%06.3f", ((coord - Math.floor(coord)) * 60)); - } else { - formatted = worldSide + String.format(Locale.getDefault(), "%03.0f", Math.floor(coord)) + " " + String.format(Locale.getDefault(), "%06.3f", ((coord - Math.floor(coord)) * 60)); - } + formatted.append(" "); } + formatted.append(String.format(locale, "%06.3f", ((coordAbs - floor) * 60))); + + return formatted.toString(); + } + + public static String formatLatitude(final Double coord, final boolean degrees) { + return formatCoordinate(coord, degrees, (coord >= 0) ? "N " : "S ", "%02.0f"); + } - return formatted; + public static String formatLongitude(final Double coord, final boolean degrees) { + return formatCoordinate(coord, degrees, (coord >= 0) ? "E " : "W ", "%03.0f"); + } + + public static String formatCoords(final Double latitude, final Double longitude, final boolean degrees) { + return formatLatitude(latitude, degrees) + " | " + formatLongitude(longitude, degrees); } public static HashMap<String, Object> parseCoordinate(String coord, String latlon) { @@ -3612,7 +3492,7 @@ public class cgBase { if (c > 300) { logUpdated.append("&#"); logUpdated.append(Integer.toString((int) c)); - logUpdated.append(";"); + logUpdated.append(';'); } else { logUpdated.append(c); } @@ -3652,7 +3532,7 @@ public class cgBase { if (tb.action > 0) { hdnSelected.append(action); - hdnSelected.append(","); + hdnSelected.append(','); } } @@ -3713,7 +3593,7 @@ public class cgBase { params.put("ctl00$ContentBody$LogBookPanel1$uxTrackables$repTravelBugs$ctl" + ctl + "$ddlAction", action); if (tb.action > 0) { hdnSelected.append(action); - hdnSelected.append(","); + hdnSelected.append(','); } } @@ -4410,7 +4290,11 @@ public class cgBase { return cookiesDone; } - private static void replaceWhitespace(final StringBuffer buffer) { + /** + * Replace the characters \n, \r and \t with a space + * @param buffer The data + */ + public static void replaceWhitespace(final StringBuffer buffer) { final int length = buffer.length(); final char[] chars = new char[length]; buffer.getChars(0, length, chars, 0); @@ -5030,8 +4914,84 @@ public class cgBase { return out; } - public static int getIcon(boolean cache, String type, boolean own, boolean found, boolean disabled) { + public static int getCacheIcon(final String type) { + fillIconsMap(); + Integer iconId = gcIcons.get("type_" + type); + if (iconId != null) { + return iconId; + } + // fallback to traditional if some icon type is not correct + return gcIcons.get("type_traditional"); + } + + public static int getMarkerIcon(final boolean cache, final String type, final boolean own, final boolean found, final boolean disabled) { + fillIconsMap(); + + if (wpIcons.isEmpty()) { + wpIcons.put("waypoint", R.drawable.marker_waypoint_waypoint); + wpIcons.put("flag", R.drawable.marker_waypoint_flag); + wpIcons.put("pkg", R.drawable.marker_waypoint_pkg); + wpIcons.put("puzzle", R.drawable.marker_waypoint_puzzle); + wpIcons.put("stage", R.drawable.marker_waypoint_stage); + wpIcons.put("trailhead", R.drawable.marker_waypoint_trailhead); + } + + int icon = -1; + String iconTxt = null; + + if (cache) { + if (type != null && type.length() > 0) { + if (own) { + iconTxt = type + "-own"; + } else if (found) { + iconTxt = type + "-found"; + } else if (disabled) { + iconTxt = type + "-disabled"; + } else { + iconTxt = type; + } + } else { + iconTxt = "traditional"; + } + + if (gcIcons.containsKey(iconTxt)) { + icon = gcIcons.get(iconTxt); + } else { + icon = gcIcons.get("traditional"); + } + } else { + if (type != null && type.length() > 0) { + iconTxt = type; + } else { + iconTxt = "waypoint"; + } + + if (wpIcons.containsKey(iconTxt)) { + icon = wpIcons.get(iconTxt); + } else { + icon = wpIcons.get("waypoint"); + } + } + + return icon; + } + + private static void fillIconsMap() { if (gcIcons.isEmpty()) { + gcIcons.put("type_ape", R.drawable.type_ape); + gcIcons.put("type_cito", R.drawable.type_cito); + gcIcons.put("type_earth", R.drawable.type_earth); + gcIcons.put("type_event", R.drawable.type_event); + gcIcons.put("type_letterbox", R.drawable.type_letterbox); + gcIcons.put("type_locationless", R.drawable.type_locationless); + gcIcons.put("type_mega", R.drawable.type_mega); + gcIcons.put("type_multi", R.drawable.type_multi); + gcIcons.put("type_traditional", R.drawable.type_traditional); + gcIcons.put("type_virtual", R.drawable.type_virtual); + gcIcons.put("type_webcam", R.drawable.type_webcam); + gcIcons.put("type_wherigo", R.drawable.type_wherigo); + gcIcons.put("type_mystery", R.drawable.type_mystery); + gcIcons.put("type_gchq", R.drawable.type_hq); // default markers gcIcons.put("ape", R.drawable.marker_cache_ape); gcIcons.put("cito", R.drawable.marker_cache_cito); @@ -5094,53 +5054,6 @@ public class cgBase { gcIcons.put("gchq-disabled", R.drawable.marker_cache_gchq_disabled); } - if (wpIcons.isEmpty()) { - wpIcons.put("waypoint", R.drawable.marker_waypoint_waypoint); - wpIcons.put("flag", R.drawable.marker_waypoint_flag); - wpIcons.put("pkg", R.drawable.marker_waypoint_pkg); - wpIcons.put("puzzle", R.drawable.marker_waypoint_puzzle); - wpIcons.put("stage", R.drawable.marker_waypoint_stage); - wpIcons.put("trailhead", R.drawable.marker_waypoint_trailhead); - } - - int icon = -1; - String iconTxt = null; - - if (cache) { - if (StringUtils.isNotBlank(type)) { - if (own) { - iconTxt = type + "-own"; - } else if (found) { - iconTxt = type + "-found"; - } else if (disabled) { - iconTxt = type + "-disabled"; - } else { - iconTxt = type; - } - } else { - iconTxt = "traditional"; - } - - if (gcIcons.containsKey(iconTxt)) { - icon = gcIcons.get(iconTxt); - } else { - icon = gcIcons.get("traditional"); - } - } else { - if (StringUtils.isNotBlank(type)) { - iconTxt = type; - } else { - iconTxt = "waypoint"; - } - - if (wpIcons.containsKey(iconTxt)) { - icon = wpIcons.get(iconTxt); - } else { - icon = wpIcons.get("waypoint"); - } - } - - return icon; } public static boolean runNavigation(Activity activity, Resources res, cgSettings settings, Double latitude, Double longitude) { diff --git a/src/cgeo/geocaching/cgCache.java b/src/cgeo/geocaching/cgCache.java index 0211039..336b3a3 100644 --- a/src/cgeo/geocaching/cgCache.java +++ b/src/cgeo/geocaching/cgCache.java @@ -19,13 +19,19 @@ import cgeo.geocaching.activity.IAbstractActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; -public class cgCache { +/** + * Internal c:geo representation of a "cache" + */ +public class cgCache implements ICache { public Long updated = null; public Long detailedUpdate = null; public Long visitedDate = null; public Integer reason = 0; public Boolean detailed = false; + /** + * Code of the cache like GCABCD + */ public String geocode = ""; public String cacheid = ""; public String guid = ""; @@ -277,7 +283,7 @@ public class cgCache { } public boolean isEventCache() { - return ("event".equalsIgnoreCase(type) || "mega".equalsIgnoreCase(type) || "cito".equalsIgnoreCase(type)); + return "event".equalsIgnoreCase(type) || "mega".equalsIgnoreCase(type) || "cito".equalsIgnoreCase(type); } public boolean logVisit(IAbstractActivity fromActivity) { @@ -295,9 +301,15 @@ public class cgCache { return true; } - public boolean logOffline(final IAbstractActivity fromActivity, final int logType) { - logOffline(fromActivity, "", Calendar.getInstance(), logType); - return true; + public boolean logOffline(final IAbstractActivity fromActivity, final int logType, final cgSettings settings, final cgBase base) { + String log = ""; + if (settings.getSignature() != null + && settings.signatureAutoinsert + && settings.getSignature().length() > 0) { + log = LogTemplateProvider.applyTemplates(settings.getSignature(), base); + } + logOffline(fromActivity, log, Calendar.getInstance(), logType); + return true; } void logOffline(final IAbstractActivity fromActivity, final String log, Calendar date, final int logType) { @@ -378,4 +390,96 @@ public class cgCache { return getConnector().supportsLogging(); } -} + @Override
+ public String getData() {
+ return null;
+ }
+
+ @Override
+ public Float getDifficulty() {
+ return difficulty;
+ }
+
+ @Override
+ public String getGeocode() {
+ return geocode;
+ }
+
+ @Override
+ public String getLatitute() {
+ return latitudeString;
+ }
+
+ @Override
+ public String getLongitude() {
+ return longitudeString;
+ }
+
+ @Override
+ public String getOwner() {
+ return owner;
+ }
+
+ @Override
+ public String getSize() {
+ return size;
+ }
+
+ @Override
+ public Float getTerrain() {
+ return terrain;
+ }
+
+ @Override
+ public String getType() {
+ return type;
+ }
+
+ @Override
+ public boolean isArchived() {
+ return archived;
+ }
+
+ @Override
+ public boolean isDisabled() {
+ return disabled;
+ }
+
+ @Override
+ public boolean isMembersOnly() {
+ return members;
+ }
+
+ @Override
+ public boolean isOwn() {
+ return own;
+ } + + @Override + public String getOwnerReal() { + return ownerReal; + } + + @Override + public String getHint() { + return hint; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getShortDescription() { + return shortdesc; + } + + @Override + public String getName() { + return name; + }
+
+}
+ +
diff --git a/src/cgeo/geocaching/cgCacheListAdapter.java b/src/cgeo/geocaching/cgCacheListAdapter.java index c2d9e52..c8bc8e0 100644 --- a/src/cgeo/geocaching/cgCacheListAdapter.java +++ b/src/cgeo/geocaching/cgCacheListAdapter.java @@ -54,11 +54,11 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> { private Double latitude = null; private Double longitude = null; private Double azimuth = Double.valueOf(0); - private long lastSort = 0l; + private long lastSort = 0L; private boolean sort = true; private int checked = 0; private boolean selectMode = false; - private HashMap<String, Drawable> gcIcons = new HashMap<String, Drawable>(); + private static HashMap<String, Drawable> gcIconDrawables = new HashMap<String, Drawable>(); private ArrayList<cgCompassMini> compasses = new ArrayList<cgCompassMini>(); private ArrayList<cgDistanceView> distances = new ArrayList<cgDistanceView>(); private int[] ratingBcgs = new int[3]; @@ -84,21 +84,10 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> { activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); pixelDensity = metrics.density; - if (gcIcons == null || gcIcons.isEmpty()) { - gcIcons.put("ape", (Drawable) activity.getResources().getDrawable(R.drawable.type_ape)); - gcIcons.put("cito", (Drawable) activity.getResources().getDrawable(R.drawable.type_cito)); - gcIcons.put("earth", (Drawable) activity.getResources().getDrawable(R.drawable.type_earth)); - gcIcons.put("event", (Drawable) activity.getResources().getDrawable(R.drawable.type_event)); - gcIcons.put("letterbox", (Drawable) activity.getResources().getDrawable(R.drawable.type_letterbox)); - gcIcons.put("locationless", (Drawable) activity.getResources().getDrawable(R.drawable.type_locationless)); - gcIcons.put("mega", (Drawable) activity.getResources().getDrawable(R.drawable.type_mega)); - gcIcons.put("multi", (Drawable) activity.getResources().getDrawable(R.drawable.type_multi)); - gcIcons.put("traditional", (Drawable) activity.getResources().getDrawable(R.drawable.type_traditional)); - gcIcons.put("virtual", (Drawable) activity.getResources().getDrawable(R.drawable.type_virtual)); - gcIcons.put("webcam", (Drawable) activity.getResources().getDrawable(R.drawable.type_webcam)); - gcIcons.put("wherigo", (Drawable) activity.getResources().getDrawable(R.drawable.type_wherigo)); - gcIcons.put("mystery", (Drawable) activity.getResources().getDrawable(R.drawable.type_mystery)); - gcIcons.put("gchq", (Drawable) activity.getResources().getDrawable(R.drawable.type_hq)); + if (gcIconDrawables == null || gcIconDrawables.isEmpty()) { + for (String cacheType : cgBase.cacheTypesInv.keySet()) { + gcIconDrawables.put(cacheType, (Drawable) activity.getResources().getDrawable(cgBase.getCacheIcon(cacheType))); + } } if (settings.skin == 0) { @@ -474,10 +463,10 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> { } holder.text.setText(cache.nameSp, TextView.BufferType.SPANNABLE); - if (gcIcons.containsKey(cache.type)) { // cache icon - holder.text.setCompoundDrawablesWithIntrinsicBounds(gcIcons.get(cache.type), null, null, null); + if (gcIconDrawables.containsKey(cache.type)) { // cache icon + holder.text.setCompoundDrawablesWithIntrinsicBounds(gcIconDrawables.get(cache.type), null, null, null); } else { // unknown cache type, "mystery" icon - holder.text.setCompoundDrawablesWithIntrinsicBounds(gcIcons.get("mystery"), null, null, null); + holder.text.setCompoundDrawablesWithIntrinsicBounds(gcIconDrawables.get("mystery"), null, null, null); } if (holder.inventory.getChildCount() > 0) { diff --git a/src/cgeo/geocaching/cgCacheWrap.java b/src/cgeo/geocaching/cgCacheWrap.java index 29b40c7..bfa5b8f 100644 --- a/src/cgeo/geocaching/cgCacheWrap.java +++ b/src/cgeo/geocaching/cgCacheWrap.java @@ -2,6 +2,9 @@ package cgeo.geocaching; import java.util.ArrayList; +/** + * List of caches + */ public class cgCacheWrap { public String error = null; public String url = ""; diff --git a/src/cgeo/geocaching/cgData.java b/src/cgeo/geocaching/cgData.java index 0c15718..80516a5 100644 --- a/src/cgeo/geocaching/cgData.java +++ b/src/cgeo/geocaching/cgData.java @@ -23,6 +23,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; +import android.database.DatabaseUtils.InsertHelper; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; @@ -38,7 +39,7 @@ public class cgData { private cgDbHelper dbHelper = null; private SQLiteDatabase databaseRO = null; private SQLiteDatabase databaseRW = null; - private static final int dbVersion = 55; + private static final int dbVersion = 56; private static final String dbName = "data"; private static final String dbTableCaches = "cg_caches"; private static final String dbTableLists = "cg_lists"; @@ -150,6 +151,14 @@ public class cgData { + "date long, " + "found integer not null default 0 " + "); "; + private final static int LOGS_GEOCODE = 2; + private final static int LOGS_UPDATED = 3; + private final static int LOGS_TYPE = 4; + private final static int LOGS_AUTHOR = 5; + private final static int LOGS_LOG = 6; + private final static int LOGS_DATE = 7; + private final static int LOGS_FOUND = 8; + private static final String dbCreateLogCount = "" + "create table " + dbTableLogCount + " (" + "_id integer primary key autoincrement, " @@ -781,6 +790,18 @@ public class cgData { } } + + // make all internal attribute names lowercase + // @see issue #299 + if (oldVersion < 56) { // update to 56 + try { + db.execSQL("update " + dbTableAttributes + " set attribute = " + + "lower(attribute) where attribute like \"%_yes\" " + + "or attribute like \"%_no\""); + } catch (Exception e) { + Log.e(cgSettings.tag, "Failed to upgrade to ver. 56: " + e.toString()); + } + } } db.setTransactionSuccessful(); @@ -1195,54 +1216,47 @@ public class cgData { values.put("inventoryunknown", cache.inventoryItems); values.put("onWatchlist", cache.onWatchlist ? 1 : 0); - boolean status = false; boolean statusOk = true; if (cache.attributes != null) { - status = saveAttributes(cache.geocode, cache.attributes); - if (status == false) { + if (!saveAttributes(cache.geocode, cache.attributes)) { statusOk = false; } } if (cache.waypoints != null) { - status = saveWaypoints(cache.geocode, cache.waypoints, true); - if (status == false) { + if (!saveWaypoints(cache.geocode, cache.waypoints, true)) { statusOk = false; } } if (cache.spoilers != null) { - status = saveSpoilers(cache.geocode, cache.spoilers); - if (status == false) { + if (!saveSpoilers(cache.geocode, cache.spoilers)) { statusOk = false; } } if (cache.logs != null) { - status = saveLogs(cache.geocode, cache.logs); - if (status == false) { + if (!saveLogs(cache.geocode, cache.logs)) { statusOk = false; } } if (cache.logCounts != null && cache.logCounts.isEmpty() == false) { - status = saveLogCount(cache.geocode, cache.logCounts); - if (status == false) { + if (!saveLogCount(cache.geocode, cache.logCounts)) { statusOk = false; } } if (cache.inventory != null) { - status = saveInventory(cache.geocode, cache.inventory); - if (status == false) { + if (!saveInventory(cache.geocode, cache.inventory)) { statusOk = false; } } if (statusOk == false) { cache.detailed = false; - cache.detailedUpdate = 0l; + cache.detailedUpdate = 0L; } init(); @@ -1498,21 +1512,23 @@ public class cgData { } if (!logs.isEmpty()) { - ContentValues values = new ContentValues(); - for (cgLog oneLog : logs) { - values.clear(); - values.put("geocode", geocode); - values.put("updated", System.currentTimeMillis()); - values.put("type", oneLog.type); - values.put("author", oneLog.author); - values.put("log", oneLog.log); - values.put("date", oneLog.date); - values.put("found", oneLog.found); - - long log_id = databaseRW.insert(dbTableLogs, null, values); - - if (CollectionUtils.isNotEmpty(oneLog.logImages)) { - for (cgImage img : oneLog.logImages) { + InsertHelper helper = new InsertHelper(databaseRW, dbTableLogs); + for (cgLog log : logs) { + helper.prepareForInsert(); + + helper.bind(LOGS_GEOCODE, geocode); + helper.bind(LOGS_UPDATED, System.currentTimeMillis()); + helper.bind(LOGS_TYPE, log.type); + helper.bind(LOGS_AUTHOR, log.author); + helper.bind(LOGS_LOG, log.log); + helper.bind(LOGS_DATE, log.date); + helper.bind(LOGS_FOUND, log.found); + + long log_id = helper.execute(); + + if (CollectionUtils.isNotEmpty(log.logImages)) { + ContentValues values = new ContentValues(); + for (cgImage img : log.logImages) { values.clear(); values.put("log_id", log_id); values.put("title", img.title); @@ -1521,6 +1537,7 @@ public class cgData { } } } + helper.close(); } databaseRW.setTransactionSuccessful(); } finally { @@ -1595,7 +1612,7 @@ public class cgData { if (oneTrackable.released != null) { values.put("released", oneTrackable.released.getTime()); } else { - values.put("released", 0l); + values.put("released", 0L); } values.put("goal", oneTrackable.goal); values.put("description", oneTrackable.details); @@ -1629,9 +1646,9 @@ public class cgData { if (all.length() > 0) { all.append(", "); } - all.append("\""); + all.append('"'); all.append((String) one); - all.append("\""); + all.append('"'); } if (where.length() > 0) { @@ -1639,7 +1656,7 @@ public class cgData { } where.append("geocode in ("); where.append(all); - where.append(")"); + where.append(')'); } cursor = databaseRO.query( @@ -1730,9 +1747,9 @@ public class cgData { if (all.length() > 0) { all.append(", "); } - all.append("\""); + all.append('"'); all.append((String) one); - all.append("\""); + all.append('"'); } if (where.length() > 0) { @@ -1740,16 +1757,16 @@ public class cgData { } where.append("geocode in ("); where.append(all); - where.append(")"); + where.append(')'); } else if (guids != null && guids.length > 0) { StringBuilder all = new StringBuilder(); for (Object one : guids) { if (all.length() > 0) { all.append(", "); } - all.append("\""); + all.append('"'); all.append((String) one); - all.append("\""); + all.append('"'); } if (where.length() > 0) { @@ -1757,7 +1774,7 @@ public class cgData { } where.append("guid in ("); where.append(all); - where.append(")"); + where.append(')'); } else { return caches; } @@ -1784,8 +1801,7 @@ public class cgData { if (where.length() > 0) { where.append(" and "); } - where.append("("); - where.append("latitude >= "); + where.append("(latitude >= "); where.append(String.format((Locale) null, "%.6f", latMin)); where.append(" and latitude <= "); where.append(String.format((Locale) null, "%.6f", latMax)); @@ -1793,7 +1809,7 @@ public class cgData { where.append(String.format((Locale) null, "%.6f", lonMin)); where.append(" and longitude <= "); where.append(String.format((Locale) null, "%.6f", lonMax)); - where.append(")"); + where.append(')'); } cursor = databaseRO.query( @@ -1879,13 +1895,13 @@ public class cgData { cache.rating = (Float) cursor.getFloat(cursor.getColumnIndex("rating")); cache.votes = (Integer) cursor.getInt(cursor.getColumnIndex("votes")); cache.myVote = (Float) cursor.getFloat(cursor.getColumnIndex("myvote")); - cache.disabled = cursor.getLong(cursor.getColumnIndex("disabled")) == 1l; - cache.archived = cursor.getLong(cursor.getColumnIndex("archived")) == 1l; - cache.members = cursor.getLong(cursor.getColumnIndex("members")) == 1l; - cache.found = cursor.getLong(cursor.getColumnIndex("found")) == 1l; - cache.favourite = cursor.getLong(cursor.getColumnIndex("favourite")) == 1l; + cache.disabled = cursor.getLong(cursor.getColumnIndex("disabled")) == 1L; + cache.archived = cursor.getLong(cursor.getColumnIndex("archived")) == 1L; + cache.members = cursor.getLong(cursor.getColumnIndex("members")) == 1L; + cache.found = cursor.getLong(cursor.getColumnIndex("found")) == 1L; + cache.favourite = cursor.getLong(cursor.getColumnIndex("favourite")) == 1L; cache.inventoryItems = (Integer) cursor.getInt(cursor.getColumnIndex("inventoryunknown")); - cache.onWatchlist = cursor.getLong(cursor.getColumnIndex("onWatchlist")) == 1l; + cache.onWatchlist = cursor.getLong(cursor.getColumnIndex("onWatchlist")) == 1L; if (loadA) { ArrayList<String> attributes = loadAttributes(cache.geocode); @@ -2471,7 +2487,7 @@ public class cgData { if (cachetype != null) { specifySql.append(" and type = \""); specifySql.append(cachetype); - specifySql.append("\""); + specifySql.append('"'); } try { @@ -2521,7 +2537,7 @@ public class cgData { if (cachetype != null) { specifySql.append(" and type = \""); specifySql.append(cachetype); - specifySql.append("\""); + specifySql.append('"'); } try { @@ -2605,7 +2621,7 @@ public class cgData { if (cachetype != null) { where.append(" and type = \""); where.append(cachetype); - where.append("\""); + where.append('"'); } // offline caches only @@ -2655,7 +2671,7 @@ public class cgData { // cachetype limitation if (cachetype != null) { where.append(cachetype); - where.append("\""); + where.append('"'); } // offline caches only diff --git a/src/cgeo/geocaching/cgDestination.java b/src/cgeo/geocaching/cgDestination.java index eb82889..0a2a493 100644 --- a/src/cgeo/geocaching/cgDestination.java +++ b/src/cgeo/geocaching/cgDestination.java @@ -1,13 +1,13 @@ package cgeo.geocaching; public class cgDestination { - + private long id; - + private long date; - + private double latitude; - + private double longitude; public cgDestination() { @@ -63,8 +63,9 @@ public class cgDestination { return true; if (obj == null) return false; - if (getClass() != obj.getClass()) + if (!(obj instanceof cgDestination)) { return false; + } cgDestination other = (cgDestination) obj; if (Double.doubleToLongBits(latitude) != Double .doubleToLongBits(other.latitude)) @@ -83,5 +84,5 @@ public class cgDestination { this.id = id; } - + } diff --git a/src/cgeo/geocaching/cgGeo.java b/src/cgeo/geocaching/cgGeo.java index 303fc49..52f92a1 100644 --- a/src/cgeo/geocaching/cgGeo.java +++ b/src/cgeo/geocaching/cgGeo.java @@ -32,7 +32,7 @@ public class cgGeo { private Integer distance = 0; private Location locGps = null; private Location locNet = null; - private long locGpsLast = 0l; + private long locGpsLast = 0L; private boolean g4cRunning = false; private Double lastGo4cacheLat = null; private Double lastGo4cacheLon = null; diff --git a/src/cgeo/geocaching/cgSettings.java b/src/cgeo/geocaching/cgSettings.java index e5a9027..404248c 100644 --- a/src/cgeo/geocaching/cgSettings.java +++ b/src/cgeo/geocaching/cgSettings.java @@ -19,6 +19,9 @@ import cgeo.geocaching.mapinterfaces.MapFactory; import cgeo.geocaching.mapsforge.mfMapFactory; import cgeo.geocaching.utils.CollectionUtils; +/** + * General c:geo preferences/settings set by the user + */ public class cgSettings { private static final String KEY_WEB_DEVICE_CODE = "webDeviceCode"; @@ -58,6 +61,7 @@ public class cgSettings { private static final String KEY_COORD_INPUT_FORMAT = "coordinputformat"; private static final String KEY_LOG_OFFLINE = "log_offline"; private static final String KEY_LOAD_DIRECTION_IMG = "loaddirectionimg"; + private static final String KEY_GC_CUSTOM_DATE = "gccustomdate"; private interface PrefRunnable { void edit(final Editor edit); @@ -153,7 +157,7 @@ public class cgSettings { // usable values public static final String tag = "c:geo"; - // preferences file + /** Name of the preferences file */ public static final String preferences = "cgeo.pref"; // private variables @@ -610,4 +614,18 @@ public class cgSettings { public boolean getLoadDirImg() { return prefs.getBoolean(KEY_LOAD_DIRECTION_IMG, true); } + + void setGcCustomDate(final String format) { + editSettings(new PrefRunnable() { + + @Override + public void edit(Editor edit) { + edit.putString(KEY_GC_CUSTOM_DATE, format); + } + }); + } + + public String getGcCustomDate() { + return prefs.getString(KEY_GC_CUSTOM_DATE, null); + } } diff --git a/src/cgeo/geocaching/cgeo.java b/src/cgeo/geocaching/cgeo.java index 6204fad..d64d6c8 100644 --- a/src/cgeo/geocaching/cgeo.java +++ b/src/cgeo/geocaching/cgeo.java @@ -26,7 +26,6 @@ import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import cgeo.geocaching.activity.AbstractActivity; @@ -41,8 +40,8 @@ public class cgeo extends AbstractActivity { private static final int MENU_SETTINGS = 2; private static final int MENU_HISTORY = 3; private static final int MENU_SCAN = 4; - private static final int SCAN_REQUEST_CODE = 1; + private static final int MENU_OPEN_LIST = 100; private Context context = null; private Integer version = null; @@ -253,7 +252,7 @@ public class cgeo extends AbstractActivity { final List<ResolveInfo> list = packageManager.queryIntentActivities( new Intent(intent), PackageManager.MATCH_DEFAULT_ONLY); - return (list.size() > 0); + return list.size() > 0; } @Override @@ -310,6 +309,20 @@ public class cgeo extends AbstractActivity { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); + + // context menu for offline button + if (v.getId() == R.id.search_offline) { + ArrayList<cgList> cacheLists = app.getLists(); + int listCount = cacheLists.size(); + menu.setHeaderTitle(res.getString(R.string.list_title)); + for (int i = 0; i < listCount; i++) { + cgList list = cacheLists.get(i); + menu.add(Menu.NONE, MENU_OPEN_LIST + list.id, Menu.NONE, list.title); + } + return; + } + + // standard context menu menu.setHeaderTitle(res.getString(R.string.menu_filter)); //first add the most used types @@ -359,6 +372,11 @@ public class cgeo extends AbstractActivity { setFilterTitle(); return true; + } else if (id > MENU_OPEN_LIST) { + int listId = id - MENU_OPEN_LIST; + settings.saveLastList(listId); + cgeocaches.startActivityOffline(context); + return true; } else if (id > 0) { String itemTitle = item.getTitle().toString(); String choice = null; @@ -431,25 +449,26 @@ public class cgeo extends AbstractActivity { navAccuracy = (TextView) findViewById(R.id.nav_accuracy); navLocation = (TextView) findViewById(R.id.nav_location); - final LinearLayout findOnMap = (LinearLayout) findViewById(R.id.map); + final View findOnMap = findViewById(R.id.map); findOnMap.setClickable(true); findOnMap.setOnClickListener(new cgeoFindOnMapListener()); - final RelativeLayout findByOffline = (RelativeLayout) findViewById(R.id.search_offline); + final View findByOffline = findViewById(R.id.search_offline); findByOffline.setClickable(true); findByOffline.setOnClickListener(new cgeoFindByOfflineListener()); + registerForContextMenu(findByOffline); (new countBubbleUpdate()).start(); - final LinearLayout advanced = (LinearLayout) findViewById(R.id.advanced_button); + final View advanced = findViewById(R.id.advanced_button); advanced.setClickable(true); advanced.setOnClickListener(new cgeoSearchListener()); - final LinearLayout any = (LinearLayout) findViewById(R.id.any_button); + final View any = findViewById(R.id.any_button); any.setClickable(true); any.setOnClickListener(new cgeoPointListener()); - final LinearLayout filter = (LinearLayout) findViewById(R.id.filter_button); + final View filter = findViewById(R.id.filter_button); registerForContextMenu(filter); filter.setOnClickListener(new View.OnClickListener() { @@ -479,11 +498,10 @@ public class cgeo extends AbstractActivity { } if (geo.latitudeNow != null && geo.longitudeNow != null) { - LinearLayout findNearest = (LinearLayout) findViewById(R.id.nearest); + View findNearest = findViewById(R.id.nearest); findNearest.setClickable(true); findNearest.setOnClickListener(new cgeoFindNearestListener()); - View findNearestView = (View)findNearest.findViewById(R.id.view_nearest); - findNearestView.setBackgroundResource(R.drawable.main_nearby); + findNearest.setBackgroundResource(R.drawable.main_nearby); String satellites = null; if (geo.satellitesVisible != null && geo.satellitesFixed != null && geo.satellitesFixed > 0) { @@ -528,18 +546,17 @@ public class cgeo extends AbstractActivity { } else { humanAlt = String.format("%.0f", geo.altitudeNow) + " m"; } - navLocation.setText(cgBase.formatCoordinate(geo.latitudeNow, "lat", true) + " | " + cgBase.formatCoordinate(geo.longitudeNow, "lon", true) + " | " + humanAlt); + navLocation.setText(cgBase.formatCoords(geo.latitudeNow, geo.longitudeNow, true) + " | " + humanAlt); } else { - navLocation.setText(cgBase.formatCoordinate(geo.latitudeNow, "lat", true) + " | " + cgBase.formatCoordinate(geo.longitudeNow, "lon", true)); + navLocation.setText(cgBase.formatCoords(geo.latitudeNow, geo.longitudeNow, true)); } } } else { - LinearLayout findNearest = (LinearLayout) findViewById(R.id.nearest); + View findNearest = findViewById(R.id.nearest); + findNearest.setFocusable(false); findNearest.setClickable(false); findNearest.setOnClickListener(null); - - View findNearestView = (View)findNearest.findViewById(R.id.view_nearest); - findNearestView.setBackgroundResource(R.drawable.main_nearby_disabled); + findNearest.setBackgroundResource(R.drawable.main_nearby_disabled); navType.setText(null); navAccuracy.setText(null); diff --git a/src/cgeo/geocaching/cgeoaddresses.java b/src/cgeo/geocaching/cgeoaddresses.java index a5e7f37..797c018 100644 --- a/src/cgeo/geocaching/cgeoaddresses.java +++ b/src/cgeo/geocaching/cgeoaddresses.java @@ -54,7 +54,7 @@ public class cgeoaddresses extends AbstractActivity { while (address.getAddressLine(index) != null) { if (allAdd.length() > 0) { - allAdd.append("\n"); + allAdd.append('\n'); } if (allAddLine.length() > 0) { allAddLine.append("; "); diff --git a/src/cgeo/geocaching/cgeoadvsearch.java b/src/cgeo/geocaching/cgeoadvsearch.java index ee118df..c7b98f5 100644 --- a/src/cgeo/geocaching/cgeoadvsearch.java +++ b/src/cgeo/geocaching/cgeoadvsearch.java @@ -212,8 +212,8 @@ public class cgeoadvsearch extends AbstractActivity { } if (geo.latitudeNow != null && geo.longitudeNow != null) { - latEdit.setHint(cgBase.formatCoordinate(geo.latitudeNow, "lat", false)); - lonEdit.setHint(cgBase.formatCoordinate(geo.longitudeNow, "lon", false)); + latEdit.setHint(cgBase.formatLatitude(geo.latitudeNow, false)); + lonEdit.setHint(cgBase.formatLongitude(geo.longitudeNow, false)); } } catch (Exception e) { Log.w(cgSettings.tag, "Failed to update location."); @@ -248,8 +248,8 @@ public class cgeoadvsearch extends AbstractActivity { final String lonText = lonView.getText().toString(); if (StringUtils.isEmpty(latText) || StringUtils.isEmpty(lonText)) { - latView.setText(cgBase.formatCoordinate(geo.latitudeNow, "lat", true)); - lonView.setText(cgBase.formatCoordinate(geo.longitudeNow, "lon", true)); + latView.setText(cgBase.formatLatitude(geo.latitudeNow, true)); + lonView.setText(cgBase.formatLongitude(geo.longitudeNow, true)); } else { HashMap<String, Object> latParsed = cgBase.parseCoordinate(latText, "lat"); HashMap<String, Object> lonParsed = cgBase.parseCoordinate(lonText, "lat"); diff --git a/src/cgeo/geocaching/cgeoapplication.java b/src/cgeo/geocaching/cgeoapplication.java index bb76d58..6095271 100644 --- a/src/cgeo/geocaching/cgeoapplication.java +++ b/src/cgeo/geocaching/cgeoapplication.java @@ -750,6 +750,10 @@ public class cgeoapplication extends Application { return storage.loadInventory(geocode); } + public HashMap<Integer,Integer> loadLogCounts(String geocode) { + return storage.loadLogCounts(geocode); + } + public ArrayList<cgImage> loadSpoilers(String geocode) { return storage.loadSpoilers(geocode); } diff --git a/src/cgeo/geocaching/cgeoauth.java b/src/cgeo/geocaching/cgeoauth.java index 31647df..6dc6aea 100644 --- a/src/cgeo/geocaching/cgeoauth.java +++ b/src/cgeo/geocaching/cgeoauth.java @@ -172,7 +172,7 @@ public class cgeoauth extends AbstractActivity { while ((lineOne = br.readLine()) != null) { sb.append(lineOne); - sb.append("\n"); + sb.append('\n'); } code = connection.getResponseCode(); @@ -277,7 +277,7 @@ public class cgeoauth extends AbstractActivity { while ((lineOne = br.readLine()) != null) { sb.append(lineOne); - sb.append("\n"); + sb.append('\n'); } code = connection.getResponseCode(); diff --git a/src/cgeo/geocaching/cgeocaches.java b/src/cgeo/geocaching/cgeocaches.java index 18fddfd..a6d7300 100644 --- a/src/cgeo/geocaching/cgeocaches.java +++ b/src/cgeo/geocaching/cgeocaches.java @@ -18,6 +18,7 @@ import org.apache.commons.lang3.StringUtils; import android.app.AlertDialog; import android.app.ProgressDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; @@ -41,6 +42,7 @@ import android.widget.EditText; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; +import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractListActivity; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; @@ -52,18 +54,21 @@ import cgeo.geocaching.filter.cgFilterByType; import cgeo.geocaching.sorting.CacheComparator; import cgeo.geocaching.sorting.DateComparator; import cgeo.geocaching.sorting.DifficultyComparator; +import cgeo.geocaching.sorting.FindsComparator; import cgeo.geocaching.sorting.GeocodeComparator; import cgeo.geocaching.sorting.InventoryComparator; import cgeo.geocaching.sorting.NameComparator; import cgeo.geocaching.sorting.PopularityComparator; import cgeo.geocaching.sorting.RatingComparator; import cgeo.geocaching.sorting.SizeComparator; +import cgeo.geocaching.sorting.StateComparator; import cgeo.geocaching.sorting.TerrainComparator; import cgeo.geocaching.sorting.VoteComparator; import cgeo.geocaching.utils.CollectionUtils; public class cgeocaches extends AbstractListActivity { + private static final String EXTRAS_LIST_TYPE = "type"; private static final int MENU_COMPASS = 1; private static final int MENU_REFRESH_STORED = 2; private static final int MENU_CACHE_DETAILS = 4; @@ -123,11 +128,12 @@ public class cgeocaches extends AbstractListActivity { private static final int SUBMENU_IMPORT = 59; private static final int SUBMENU_MANAGE_HISTORY = 60; private static final int MENU_SORT_DATE = 61; + private static final int MENU_SORT_FINDS = 62; + private static final int MENU_SORT_STATE = 63; private static final int CONTEXT_MENU_MOVE_TO_LIST = 1000; private static final int MENU_MOVE_SELECTED_OR_ALL_TO_LIST = 1200; - - + private String action = null; private String type = null; private Double latitude = null; @@ -151,7 +157,7 @@ public class cgeocaches extends AbstractListActivity { private String title = ""; private int detailTotal = 0; private int detailProgress = 0; - private long detailProgressTime = 0l; + private long detailProgressTime = 0L; private geocachesLoadDetails threadD = null; private geocachesLoadFromWeb threadW = null; private geocachesDropDetails threadR = null; @@ -345,7 +351,7 @@ public class cgeocaches extends AbstractListActivity { int secondsElapsed = (int)((System.currentTimeMillis() - detailProgressTime) / 1000); int minutesRemaining = (int) ((detailTotal - detailProgress) * secondsElapsed / ((detailProgress > 0) ? detailProgress : 1) / 60); - + waitDialog.setProgress(detailProgress); if (minutesRemaining < 1) { waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + res.getString(R.string.caches_eta_ltm)); @@ -401,9 +407,8 @@ public class cgeocaches extends AbstractListActivity { waitDialog.setMessage(res.getString(R.string.web_downloading)+" "+(String)msg.obj+"..."); } else if (msg.what == 2) { //Cache downloaded waitDialog.setMessage(res.getString(R.string.web_downloaded)+" "+(String)msg.obj+"."); - //Once a cache is downloaded I used switchList to refresh it. - switchList(listId, -1); - } else if (msg.what == -2) { + refreshCurrentList(); + } else if (msg.what == -2) { if (waitDialog != null) { waitDialog.dismiss(); waitDialog.setOnCancelListener(null); @@ -439,31 +444,25 @@ public class cgeocaches extends AbstractListActivity { @Override public void handleMessage(Message msg) { - setAdapter(); - - if (msg.what > -1) { - cacheList.get(msg.what).statusChecked = false; - } else { - if (adapter != null) { - adapter.setSelectMode(false, true); - } + if (adapter != null) { + adapter.setSelectMode(false, true); + } - switchList(listId, -1); + refreshCurrentList(); - cacheList.clear(); + cacheList.clear(); - final ArrayList<cgCache> cacheListTmp = app.getCaches(searchId); - if (CollectionUtils.isNotEmpty(cacheListTmp)) { - cacheList.addAll(cacheListTmp); - cacheListTmp.clear(); + final ArrayList<cgCache> cacheListTmp = app.getCaches(searchId); + if (CollectionUtils.isNotEmpty(cacheListTmp)) { + cacheList.addAll(cacheListTmp); + cacheListTmp.clear(); - Collections.sort((List<cgCache>)cacheList, gcComparator); - } + Collections.sort((List<cgCache>)cacheList, gcComparator); + } - if (waitDialog != null) { - waitDialog.dismiss(); - waitDialog.setOnCancelListener(null); - } + if (waitDialog != null) { + waitDialog.dismiss(); + waitDialog.setOnCancelListener(null); } } }; @@ -548,7 +547,7 @@ public class cgeocaches extends AbstractListActivity { // get parameters Bundle extras = getIntent().getExtras(); if (extras != null) { - type = extras.getString("type"); + type = extras.getString(EXTRAS_LIST_TYPE); latitude = extras.getDouble("latitude"); longitude = extras.getDouble("longitude"); cachetype = extras.getString("cachetype"); @@ -602,7 +601,7 @@ public class cgeocaches extends AbstractListActivity { thread.start(); } else if (type.equals("coordinate")) { action = "planning"; - title = cgBase.formatCoordinate(latitude, res.getString(R.string.search_lat), true) + " | " + cgBase.formatCoordinate(longitude, res.getString(R.string.search_lon), true); + title = cgBase.formatCoords(latitude, longitude, true); setTitle(title); showProgress(true); setLoadingCaches(); @@ -627,7 +626,7 @@ public class cgeocaches extends AbstractListActivity { showProgress(true); setLoadingCaches(); } else { - title = cgBase.formatCoordinate(latitude, res.getString(R.string.search_lat), true) + " | " + cgBase.formatCoordinate(longitude, res.getString(R.string.search_lon), true); + title = cgBase.formatCoords(latitude, longitude, true); setTitle(title); showProgress(true); setLoadingCaches(); @@ -757,6 +756,8 @@ public class cgeocaches extends AbstractListActivity { comparators.put(res.getString(R.string.caches_sort_vote), MENU_SORT_VOTE); comparators.put(res.getString(R.string.caches_sort_inventory), MENU_SORT_INVENTORY); comparators.put(res.getString(R.string.caches_sort_date), MENU_SORT_DATE); + comparators.put(res.getString(R.string.caches_sort_finds), MENU_SORT_FINDS); + comparators.put(res.getString(R.string.caches_sort_state), MENU_SORT_STATE); ArrayList<String> sortedLabels = new ArrayList<String>(comparators.keySet()); Collections.sort(sortedLabels); @@ -984,7 +985,13 @@ public class cgeocaches extends AbstractListActivity { return false; case MENU_SORT_DATE: setComparator(item, new DateComparator()); - return false; + return true; + case MENU_SORT_FINDS: + setComparator(item, new FindsComparator(app)); + return true; + case MENU_SORT_STATE: + setComparator(item, new StateComparator()); + return true; case SUBMENU_FILTER_TYPE: selectedFilter = res.getString(R.string.caches_filter_type); openContextMenu(getListView()); @@ -1035,7 +1042,7 @@ public class cgeocaches extends AbstractListActivity { if (adapter == null) { return; } - + if (contextMenuMoveToList) { createFakeContextMenuMoveToList(menu); return; @@ -1228,7 +1235,7 @@ public class cgeocaches extends AbstractListActivity { cgBase.dropCache(app, this, cache, new Handler() { @Override public void handleMessage(Message msg) { - switchList(listId, -1); // refresh + refreshCurrentList(); } }); return true; @@ -1239,8 +1246,7 @@ public class cgeocaches extends AbstractListActivity { } adapter.resetChecks(); - // refresh list by switching to the current list - switchListById(listId); + refreshCurrentList(); return true; } else if (id >= MENU_MOVE_SELECTED_OR_ALL_TO_LIST && id < MENU_MOVE_SELECTED_OR_ALL_TO_LIST + 100) { int newListId = id - MENU_MOVE_SELECTED_OR_ALL_TO_LIST; @@ -1253,8 +1259,7 @@ public class cgeocaches extends AbstractListActivity { } adapter.resetChecks(); - // refresh list by switching to the current list - switchListById(listId); + refreshCurrentList(); return true; } @@ -1268,14 +1273,14 @@ public class cgeocaches extends AbstractListActivity { HashMap<String, String> params = new HashMap<String, String>(); params.put("geocode", cache.geocode); Long singleSearchId = base.searchByGeocode(params, 0, false); - + if (NavigationAppFactory.onMenuItemSelected(item, geo, this, res, cache, singleSearchId, null, null)) { return true; } - + int logType = id - MENU_LOG_VISIT_OFFLINE; - cache.logOffline(this, logType); + cache.logOffline(this, logType, settings, base); } return true; } @@ -1417,11 +1422,13 @@ public class cgeocaches extends AbstractListActivity { } private void importGpx() { - final Intent intent = new Intent(this, cgeogpxes.class); - intent.putExtra("list", listId); - startActivity(intent); + cgeogpxes.startSubActivity(this, listId); + } - finish(); + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + refreshCurrentList(); } public void refreshStored() { @@ -1939,7 +1946,7 @@ public class cgeocaches extends AbstractListActivity { private int reason = 1; private volatile boolean needToStop = false; private int checked = 0; - private long last = 0l; + private long last = 0L; public geocachesLoadDetails(Handler handlerIn, int reasonIn) { setPriority(Thread.MIN_PRIORITY); @@ -2142,9 +2149,6 @@ public class cgeocaches extends AbstractListActivity { final ArrayList<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList); for (cgCache cache : cacheListTemp) { if (checked > 0 && cache.statusChecked == false) { - handler.sendEmptyMessage(0); - - yield(); continue; } @@ -2155,10 +2159,6 @@ public class cgeocaches extends AbstractListActivity { } app.markDropped(cache.geocode); - - handler.sendEmptyMessage(cacheList.indexOf(cache)); - - yield(); } catch (Exception e) { Log.e(cgSettings.tag, "cgeocaches.geocachesDropDetails: " + e.toString()); } @@ -2283,9 +2283,9 @@ public class cgeocaches extends AbstractListActivity { if (null != logTypes.get(log.type)) { fieldNoteBuffer.append(cache.geocode) - .append(",") + .append(',') .append(fieldNoteDateFormat.format(new Date(log.date))) - .append(",") + .append(',') .append(logTypes.get(log.type)) .append(",\"") .append(log.log.replaceAll("\"", "'")) @@ -2385,7 +2385,7 @@ public class cgeocaches extends AbstractListActivity { builder.setTitle(res.getString(R.string.list_title)); builder.setItems(listsTitle.toArray(items), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int item) { - switchListByOrder(item); + switchListById(lists.get(item).id); return; } @@ -2393,30 +2393,11 @@ public class cgeocaches extends AbstractListActivity { builder.create().show(); } - public void switchListByOrder(int order) { - switchList(-1, order); - } - public void switchListById(int id) { - switchList(id, -1); - } - - private class MoveHandler extends Handler { - @Override - public void handleMessage(Message msg) { - Thread threadPure = new geocachesLoadByOffline(loadCachesHandler, latitude, longitude, msg.what); - threadPure.start(); - } - } - - public void switchList(int id, int order) { cgList list = null; if (id >= 0) { list = app.getList(id); - } else if (order >= 0) { - lists = app.getLists(); - list = lists.get(order); } else { return; } @@ -2436,6 +2417,14 @@ public class cgeocaches extends AbstractListActivity { (new moveCachesToList(listId, new MoveHandler())).start(); } + private class MoveHandler extends Handler { + @Override + public void handleMessage(Message msg) { + Thread threadPure = new geocachesLoadByOffline(loadCachesHandler, latitude, longitude, msg.what); + threadPure.start(); + } + } + private class moveCachesToList extends Thread { int listId = -1; Handler handler = null; @@ -2496,21 +2485,33 @@ public class cgeocaches extends AbstractListActivity { alert.show(); } + private void removeListInternal() { + boolean status = app.removeList(listId); + + if (status) { + showToast(res.getString(R.string.list_dialog_remove_ok)); + switchListById(1); + } else { + showToast(res.getString(R.string.list_dialog_remove_err)); + } + } + private void removeList() { + // if there are no caches on this list, don't bother the user with questions. + // there is no harm in deleting the list, he could recreate it easily + if (cacheList != null && cacheList.isEmpty()) { + removeListInternal(); + return; + } + + // ask him, if there are caches on the list final AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle(R.string.list_dialog_remove_title); alert.setMessage(R.string.list_dialog_remove_description); alert.setPositiveButton(R.string.list_dialog_remove, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { - boolean status = app.removeList(listId); - - if (status) { - showToast(res.getString(R.string.list_dialog_remove_ok)); - switchListById(1); - } else { - showToast(res.getString(R.string.list_dialog_remove_err)); - } + removeListInternal(); } }); alert.setNegativeButton(res.getString(R.string.list_dialog_cancel), new DialogInterface.OnClickListener() { @@ -2545,4 +2546,46 @@ public class cgeocaches extends AbstractListActivity { ActivityMixin.goManual(this, "c:geo-nearby"); } } + + private void refreshCurrentList() { + switchListById(listId); + } + + public static void startActivityOffline(final Context context) { + final Intent cachesIntent = new Intent(context, cgeocaches.class); + cachesIntent.putExtra(EXTRAS_LIST_TYPE, "offline"); + context.startActivity(cachesIntent); + } + + public static void startActivityCachesAround(final AbstractActivity context, final Double latitude, final Double longitude) { + cgeocaches cachesActivity = new cgeocaches(); + + Intent cachesIntent = new Intent(context, cachesActivity.getClass()); + cachesIntent.putExtra("type", "coordinate"); + cachesIntent.putExtra("latitude", latitude); + cachesIntent.putExtra("longitude", longitude); + cachesIntent.putExtra("cachetype", context.getSettings().cacheType); + + context.startActivity(cachesIntent); + } + + public static void startActivityCacheOwner(final AbstractActivity context, final String userName) { + final Intent cachesIntent = new Intent(context, cgeocaches.class); + + cachesIntent.putExtra("type", "owner"); + cachesIntent.putExtra("username", userName); + cachesIntent.putExtra("cachetype", context.getSettings().cacheType); + + context.startActivity(cachesIntent); + } + + public static void startActivityCacheUser(final AbstractActivity context, final String userName) { + final Intent cachesIntent = new Intent(context, cgeocaches.class); + + cachesIntent.putExtra("type", "username"); + cachesIntent.putExtra("username", userName); + cachesIntent.putExtra("cachetype", context.getSettings().cacheType); + + context.startActivity(cachesIntent); + } } diff --git a/src/cgeo/geocaching/cgeocoords.java b/src/cgeo/geocaching/cgeocoords.java index 15944ae..ce62bd8 100644 --- a/src/cgeo/geocaching/cgeocoords.java +++ b/src/cgeo/geocaching/cgeocoords.java @@ -163,10 +163,10 @@ public class cgeocoords extends Dialog { eLat.setVisibility(View.VISIBLE); eLon.setVisibility(View.VISIBLE); if (latitude != null) { - eLat.setText(cgBase.formatCoordinate(latitude, "lat", true)); + eLat.setText(cgBase.formatLatitude(latitude, true)); } if (longitude != null) { - eLon.setText(cgBase.formatCoordinate(longitude, "lon", true)); + eLon.setText(cgBase.formatLongitude(longitude, true)); } break; case Deg: // DDD.DDDDD° diff --git a/src/cgeo/geocaching/cgeodetail.java b/src/cgeo/geocaching/cgeodetail.java index a9cef35..2075269 100644 --- a/src/cgeo/geocaching/cgeodetail.java +++ b/src/cgeo/geocaching/cgeodetail.java @@ -58,6 +58,10 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.utils.CollectionUtils; +/** + * Activity to display all details of a cache like owner, difficulty, description etc. + * + */ public class cgeodetail extends AbstractActivity { public cgeodetail() { @@ -83,16 +87,21 @@ public class cgeodetail extends AbstractActivity { private loadLongDesc threadLongDesc = null; private Thread storeThread = null; private Thread refreshThread = null; - private HashMap<String, Integer> gcIcons = new HashMap<String, Integer>(); private ProgressDialog storeDialog = null; private ProgressDialog refreshDialog = null; private ProgressDialog dropDialog = null; private ProgressDialog watchlistDialog = null; // progress dialog for watchlist add/remove private Thread watchlistThread = null; // thread for watchlist add/remove private HashMap<Integer, String> calendars = new HashMap<Integer, String>(); + private ViewGroup attributeIconsLayout; // layout for attribute icons private ViewGroup attributeDescriptionsLayout; // layout for attribute descriptions private boolean attributesShowAsIcons = true; // default: show icons + /** <code>noAttributeImagesFound</code> + * This will be the case if the cache was imported with an older version of c:geo. + * These older versions parsed the attribute description from the tooltip in the web + * page and put them into the DB. No icons can be matched for these. */ + private boolean noAttributeIconsFound = false; private int attributeBoxMaxWidth; private Handler storeCacheHandler = new Handler() { @@ -452,24 +461,10 @@ public class cgeodetail extends AbstractActivity { final int id = item.getItemId(); if (id == 1) { - final Intent cachesIntent = new Intent(this, cgeocaches.class); - - cachesIntent.putExtra("type", "owner"); - cachesIntent.putExtra("username", contextMenuUser); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); - + cgeocaches.startActivityCacheOwner(this, contextMenuUser); return true; } else if (id == 2) { - final Intent cachesIntent = new Intent(this, cgeocaches.class); - - cachesIntent.putExtra("type", "username"); - cachesIntent.putExtra("username", contextMenuUser); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); - + cgeocaches.startActivityCacheUser(this, contextMenuUser); return true; } else if (id == 3) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + URLEncoder.encode(contextMenuUser)))); @@ -551,7 +546,7 @@ public class cgeodetail extends AbstractActivity { } int logType = menuItem - MENU_LOG_VISIT_OFFLINE; - cache.logOffline(this, logType); + cache.logOffline(this, logType, settings, base); return true; } @@ -604,22 +599,6 @@ public class cgeodetail extends AbstractActivity { } try { - if (gcIcons == null || gcIcons.isEmpty()) { - gcIcons.put("ape", R.drawable.type_ape); - gcIcons.put("cito", R.drawable.type_cito); - gcIcons.put("earth", R.drawable.type_earth); - gcIcons.put("event", R.drawable.type_event); - gcIcons.put("letterbox", R.drawable.type_letterbox); - gcIcons.put("locationless", R.drawable.type_locationless); - gcIcons.put("mega", R.drawable.type_mega); - gcIcons.put("multi", R.drawable.type_multi); - gcIcons.put("traditional", R.drawable.type_traditional); - gcIcons.put("virtual", R.drawable.type_virtual); - gcIcons.put("webcam", R.drawable.type_webcam); - gcIcons.put("wherigo", R.drawable.type_wherigo); - gcIcons.put("gchq", R.drawable.type_hq); - gcIcons.put("mystery", R.drawable.type_mystery); - } if (StringUtils.isBlank(geocode)) { geocode = cache.geocode; @@ -640,11 +619,7 @@ public class cgeodetail extends AbstractActivity { detailsList.removeAllViews(); // actionbar icon, default myster< - String typeId = "mystery"; - if (cache.type != null && gcIcons.containsKey(cache.type)) { // cache icon - typeId = cache.type; - } - ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds((Drawable) getResources().getDrawable(gcIcons.get(typeId)), null, null, null); + ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds((Drawable) getResources().getDrawable(cgBase.getCacheIcon(cache.type)), null, null, null); // cache name (full name) itemLayout = (RelativeLayout) inflater.inflate(R.layout.cache_item, null); @@ -837,7 +812,8 @@ public class cgeodetail extends AbstractActivity { // cache attributes if (CollectionUtils.isNotEmpty(cache.attributes)) { - final LinearLayout attribBox = (LinearLayout) findViewById(R.id.attributes_innerbox); + final LinearLayout attribBox = (LinearLayout) findViewById( + R.id.attributes_innerbox); // maximum width for attribute icons is screen width - paddings of parents attributeBoxMaxWidth = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)) @@ -863,10 +839,18 @@ public class cgeodetail extends AbstractActivity { } ); // icons or text? - if (attributesShowAsIcons) + // + // also show icons when noAttributeImagesFound == true. Explanation: + // 1. no icons could be found in the first invocation of this method + // 2. user refreshes cache from web + // 3. now this method is called again + // 4. attributeShowAsIcons is false but noAttributeImagesFound is true + // => try to show them now + if (attributesShowAsIcons || noAttributeIconsFound) { showAttributeIcons(attribBox, attributeBoxMaxWidth); - else + } else { showAttributeDescriptions(attribBox); + } findViewById(R.id.attributes_box).setVisibility(View.VISIBLE); } @@ -879,7 +863,7 @@ public class cgeodetail extends AbstractActivity { StringBuilder inventoryString = new StringBuilder(); for (cgTrackable inventoryItem : cache.inventory) { if (inventoryString.length() > 0) { - inventoryString.append("\n"); + inventoryString.append('\n'); } // avoid HTML parsing where possible if (inventoryItem.name.indexOf('<') >= 0 || inventoryItem.name.indexOf('&') >= 0 ) { @@ -1042,7 +1026,7 @@ public class cgeodetail extends AbstractActivity { TextView nameView = (TextView) waypointView.findViewById(R.id.name); if (StringUtils.isBlank(wpt.name)) { - nameView.setText(cgBase.formatCoordinate(wpt.latitude, "lat", true) + " | " + cgBase.formatCoordinate(wpt.longitude, "lon", true)); + nameView.setText(cgBase.formatCoords(wpt.latitude, wpt.longitude, true)); } else { // avoid HTML parsing if (wpt.name.indexOf('<') >= 0 || wpt.name.indexOf('&') >= 0) { @@ -1427,15 +1411,7 @@ public class cgeodetail extends AbstractActivity { } private void cachesAround() { - cgeocaches cachesActivity = new cgeocaches(); - - Intent cachesIntent = new Intent(this, cachesActivity.getClass()); - cachesIntent.putExtra("type", "coordinate"); - cachesIntent.putExtra("latitude", cache.latitude); - cachesIntent.putExtra("longitude", cache.longitude); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); + cgeocaches.startActivityCachesAround(this, cache.latitude, cache.longitude); finish(); } @@ -1970,8 +1946,14 @@ public class cgeodetail extends AbstractActivity { * and makes it visible */ private void showAttributeIcons(LinearLayout attribBox, int parentWidth) { - if (attributeIconsLayout == null) + if (attributeIconsLayout == null) { attributeIconsLayout = createAttributeIconsLayout(parentWidth); + // no matching icons found? show text + if (noAttributeIconsFound) { + showAttributeDescriptions(attribBox); + return; + } + } attribBox.removeAllViews(); attribBox.addView(attributeIconsLayout); attributesShowAsIcons = true; @@ -1982,8 +1964,9 @@ public class cgeodetail extends AbstractActivity { * and makes it visible */ private void showAttributeDescriptions(LinearLayout attribBox) { - if (attributeDescriptionsLayout == null) + if (attributeDescriptionsLayout == null) { attributeDescriptionsLayout = createAttributeDescriptionsLayout(); + } attribBox.removeAllViews(); attribBox.addView(attributeDescriptionsLayout); attributesShowAsIcons = false; @@ -1993,10 +1976,17 @@ public class cgeodetail extends AbstractActivity { * toggle attribute descriptions and icons */ private void toggleAttributeDisplay(LinearLayout attribBox, int parentWidth) { - if (attributesShowAsIcons) + // Don't toggle when there are no icons to show. + if (noAttributeIconsFound) { + return; + } + + // toggle + if (attributesShowAsIcons) { showAttributeDescriptions(attribBox); - else + } else { showAttributeIcons(attribBox, parentWidth); + } } private ViewGroup createAttributeIconsLayout(int parentWidth) { @@ -2007,11 +1997,14 @@ public class cgeodetail extends AbstractActivity { LinearLayout attributeRow = newAttributeIconsRow(); rows.addView(attributeRow); + noAttributeIconsFound = true; + for(String attributeName : cache.attributes) { boolean strikethru = attributeName.endsWith("_no"); // cut off _yes / _no - if (attributeName.endsWith("_no") || attributeName.endsWith("_yes")) + if (attributeName.endsWith("_no") || attributeName.endsWith("_yes")) { attributeName = attributeName.substring(0, attributeName.lastIndexOf("_")); + } // check if another attribute icon fits in this row attributeRow.measure(0, 0); int rowWidth = attributeRow.getMeasuredWidth(); @@ -2025,26 +2018,30 @@ public class cgeodetail extends AbstractActivity { // dynamically search icon of the attribute Drawable d = null; - int id = res.getIdentifier("attribute_" + attributeName, "drawable", base.context.getPackageName()); - if (id > 0) + int id = res.getIdentifier("attribute_" + attributeName, "drawable", + base.context.getPackageName()); + if (id > 0) { + noAttributeIconsFound = false; d = res.getDrawable(id); - else + iv.setImageDrawable(d); + // strike through? + if (strikethru) { + // generate strikethru image with same properties as attribute image + ImageView strikethruImage = new ImageView(this); + strikethruImage.setLayoutParams(iv.getLayoutParams()); + d = res.getDrawable(R.drawable.attribute__strikethru); + strikethruImage.setImageDrawable(d); + fl.addView(strikethruImage); + } + } else { d = res.getDrawable(R.drawable.attribute_icon_not_found); - iv.setImageDrawable(d); - - // strike through? - if (strikethru) { - // generate strikethru image with same properties as attribute image - ImageView strikethruImage = new ImageView(this); - strikethruImage.setLayoutParams(iv.getLayoutParams()); - d = res.getDrawable(R.drawable.attribute__strikethru); - strikethruImage.setImageDrawable(d); - fl.addView(strikethruImage); - } + iv.setImageDrawable(d); + } + attributeRow.addView(fl); } - return rows; + return rows; } private LinearLayout newAttributeIconsRow() { @@ -2056,7 +2053,8 @@ public class cgeodetail extends AbstractActivity { } private ViewGroup createAttributeDescriptionsLayout() { - final LinearLayout descriptions = (LinearLayout) inflater.inflate(R.layout.attribute_descriptions, null); + final LinearLayout descriptions = (LinearLayout) inflater.inflate( + R.layout.attribute_descriptions, null); TextView attribView = (TextView) descriptions.getChildAt(0); StringBuilder buffer = new StringBuilder(); @@ -2065,19 +2063,21 @@ public class cgeodetail extends AbstractActivity { attribute = cache.attributes.get(i); // dynamically search for a translation of the attribute - int id = res.getIdentifier("attribute_" + attribute, "string", base.context.getPackageName()); + int id = res.getIdentifier("attribute_" + attribute, "string", + base.context.getPackageName()); if (id > 0) { String translated = res.getString(id); if (StringUtils.isNotBlank(translated)) { attribute = translated; } } - if (buffer.length() > 0) { - buffer.append('\n'); - } + if (buffer.length() > 0) buffer.append('\n'); buffer.append(attribute); } + if (noAttributeIconsFound) + buffer.append("\n\n").append(res.getString(R.string.cache_attributes_no_icons)); + attribView.setText(buffer); return descriptions; diff --git a/src/cgeo/geocaching/cgeogpxes.java b/src/cgeo/geocaching/cgeogpxes.java index 64d5bf8..db26a1f 100644 --- a/src/cgeo/geocaching/cgeogpxes.java +++ b/src/cgeo/geocaching/cgeogpxes.java @@ -3,21 +3,24 @@ package cgeo.geocaching; import java.io.File; import java.util.ArrayList; -import cgeo.geocaching.files.FileList; -import cgeo.geocaching.files.GPXParser; -import cgeo.geocaching.files.LocParser; - +import android.app.Activity; import android.app.ProgressDialog; +import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; +import cgeo.geocaching.files.FileList; +import cgeo.geocaching.files.GPXParser; +import cgeo.geocaching.files.LocParser; public class cgeogpxes extends FileList<cgGPXListAdapter> { + private static final String EXTRAS_LIST_ID = "list"; + public cgeogpxes() { super(new String[] {"gpx" - // TODO , "loc" + // TODO , "loc" }); } @@ -70,14 +73,14 @@ public class cgeogpxes extends FileList<cgGPXListAdapter> { Bundle extras = getIntent().getExtras(); if (extras != null) { - listId = extras.getInt("list"); + listId = extras.getInt(EXTRAS_LIST_ID); } if (listId <= 0) { listId = 1; } } - + @Override protected void setTitle() { setTitle(res.getString(R.string.gpx_import_title)); @@ -118,4 +121,10 @@ public class cgeogpxes extends FileList<cgGPXListAdapter> { loadCachesHandler.sendMessage(new Message()); } } + + public static void startSubActivity(Activity fromActivity, int listId) { + final Intent intent = new Intent(fromActivity, cgeogpxes.class); + intent.putExtra(EXTRAS_LIST_ID, listId); + fromActivity.startActivityForResult(intent, 0); + } } diff --git a/src/cgeo/geocaching/cgeoinit.java b/src/cgeo/geocaching/cgeoinit.java index afedec3..39b8e51 100644 --- a/src/cgeo/geocaching/cgeoinit.java +++ b/src/cgeo/geocaching/cgeoinit.java @@ -1026,7 +1026,12 @@ public class cgeoinit extends AbstractActivity { @Override public void run() { - logInHandler.sendEmptyMessage(base.login()); + final int loginResult = base.login(); + if (1 == loginResult) + { + base.detectGcCustomDate(); + } + logInHandler.sendEmptyMessage(loginResult); } }).start(); } diff --git a/src/cgeo/geocaching/cgeonavigate.java b/src/cgeo/geocaching/cgeonavigate.java index 3cb1371..5a6dcee 100644 --- a/src/cgeo/geocaching/cgeonavigate.java +++ b/src/cgeo/geocaching/cgeonavigate.java @@ -309,7 +309,7 @@ public class cgeonavigate extends AbstractActivity { return; } - ((TextView) findViewById(R.id.destination)).setText(cgBase.formatCoordinate(dstLatitude, "lat", true) + " | " + cgBase.formatCoordinate(dstLongitude, "lon", true)); + ((TextView) findViewById(R.id.destination)).setText(cgBase.formatCoords(dstLatitude, dstLongitude, true)); } public void setDest(Double lat, Double lon) { @@ -404,9 +404,9 @@ public class cgeonavigate extends AbstractActivity { } else { humanAlt = String.format("%.0f", geo.altitudeNow) + " m"; } - navLocation.setText(cgBase.formatCoordinate(geo.latitudeNow, "lat", true) + " | " + cgBase.formatCoordinate(geo.longitudeNow, "lon", true) + " | " + humanAlt); + navLocation.setText(cgBase.formatCoords(geo.latitudeNow, geo.longitudeNow, true) + " | " + humanAlt); } else { - navLocation.setText(cgBase.formatCoordinate(geo.latitudeNow, "lat", true) + " | " + cgBase.formatCoordinate(geo.longitudeNow, "lon", true)); + navLocation.setText(cgBase.formatCoords(geo.latitudeNow, geo.longitudeNow, true)); } updateDistanceInfo(); @@ -466,4 +466,4 @@ public class cgeonavigate extends AbstractActivity { } } } -}
\ No newline at end of file +} diff --git a/src/cgeo/geocaching/cgeopoint.java b/src/cgeo/geocaching/cgeopoint.java index d5f6434..907bc3d 100644 --- a/src/cgeo/geocaching/cgeopoint.java +++ b/src/cgeo/geocaching/cgeopoint.java @@ -61,10 +61,8 @@ public class cgeopoint extends AbstractActivity { .findViewById(R.id.simple_way_point_latitude); TextView date = (TextView) convertView.findViewById(R.id.date); - String lonString = cgBase.formatCoordinate(loc.getLongitude(), "lon", - true); - String latString = cgBase.formatCoordinate(loc.getLatitude(), "lat", - true); + String lonString = cgBase.formatLongitude(loc.getLongitude(), true); + String latString = cgBase.formatLatitude(loc.getLatitude(), true); longitude.setText(lonString); latitude.setText(latString); @@ -263,8 +261,8 @@ public class cgeopoint extends AbstractActivity { }); if (prefs.contains("anylatitude") && prefs.contains("anylongitude")) { - latitudeEdit.setText(cgBase.formatCoordinate(Double.valueOf(prefs.getFloat("anylatitude", 0f)), "lat", true)); - longitudeEdit.setText(cgBase.formatCoordinate(Double.valueOf(prefs.getFloat("anylongitude", 0f)), "lon", true)); + latitudeEdit.setText(cgBase.formatLatitude(Double.valueOf(prefs.getFloat("anylatitude", 0f)), true)); + longitudeEdit.setText(cgBase.formatLongitude(Double.valueOf(prefs.getFloat("anylongitude", 0f)), true)); } Button buttonCurrent = (Button) findViewById(R.id.current); @@ -454,8 +452,8 @@ public class cgeopoint extends AbstractActivity { lonEdit = (EditText) findViewById(R.id.longitude); } - latEdit.setHint(cgBase.formatCoordinate(geo.latitudeNow, "lat", false)); - lonEdit.setHint(cgBase.formatCoordinate(geo.longitudeNow, "lon", false)); + latEdit.setHint(cgBase.formatLatitude(geo.latitudeNow, false)); + lonEdit.setHint(cgBase.formatLongitude(geo.longitudeNow, false)); } catch (Exception e) { Log.w(cgSettings.tag, "Failed to update location."); } @@ -470,8 +468,8 @@ public class cgeopoint extends AbstractActivity { return; } - ((EditText) findViewById(R.id.latitude)).setText(cgBase.formatCoordinate(geo.latitudeNow, "lat", true)); - ((EditText) findViewById(R.id.longitude)).setText(cgBase.formatCoordinate(geo.longitudeNow, "lon", true)); + ((EditText) findViewById(R.id.latitude)).setText(cgBase.formatLatitude(geo.latitudeNow, true)); + ((EditText) findViewById(R.id.longitude)).setText(cgBase.formatLongitude(geo.longitudeNow, true)); changed = false; } diff --git a/src/cgeo/geocaching/cgeopopup.java b/src/cgeo/geocaching/cgeopopup.java index 701f576..c2f4f76 100644 --- a/src/cgeo/geocaching/cgeopopup.java +++ b/src/cgeo/geocaching/cgeopopup.java @@ -1,6 +1,5 @@ package cgeo.geocaching; -import java.util.HashMap; import java.util.Locale; import org.apache.commons.lang3.StringUtils; @@ -40,7 +39,6 @@ public class cgeopopup extends AbstractActivity { private ProgressDialog storeDialog = null; private ProgressDialog dropDialog = null; private TextView cacheDistance = null; - private HashMap<String, Integer> gcIcons = new HashMap<String, Integer>(); private Handler ratingHandler = new Handler() { @Override @@ -188,9 +186,9 @@ public class cgeopopup extends AbstractActivity { if (NavigationAppFactory.onMenuItemSelected(item, geo, this, res, cache, null, null, null)) { return true; } - + int logType = menuItem - MENU_LOG_VISIT_OFFLINE; - cache.logOffline(this, logType); + cache.logOffline(this, logType, settings, base); return true; } @@ -216,24 +214,7 @@ public class cgeopopup extends AbstractActivity { TextView itemValue; LinearLayout itemStars; - if (gcIcons == null || gcIcons.isEmpty()) { - gcIcons.put("ape", R.drawable.type_ape); - gcIcons.put("cito", R.drawable.type_cito); - gcIcons.put("earth", R.drawable.type_earth); - gcIcons.put("event", R.drawable.type_event); - gcIcons.put("letterbox", R.drawable.type_letterbox); - gcIcons.put("locationless", R.drawable.type_locationless); - gcIcons.put("mega", R.drawable.type_mega); - gcIcons.put("multi", R.drawable.type_multi); - gcIcons.put("traditional", R.drawable.type_traditional); - gcIcons.put("virtual", R.drawable.type_virtual); - gcIcons.put("webcam", R.drawable.type_webcam); - gcIcons.put("wherigo", R.drawable.type_wherigo); - gcIcons.put("mystery", R.drawable.type_mystery); - gcIcons.put("gchq", R.drawable.type_hq); - } - - if (StringUtils.isNotBlank(cache.name)) { + if (cache.name != null && cache.name.length() > 0) { setTitle(cache.name); } else { setTitle(geocode.toUpperCase()); @@ -247,11 +228,7 @@ public class cgeopopup extends AbstractActivity { detailsList.removeAllViews(); // actionbar icon - if (cache.type != null && gcIcons.containsKey(cache.type)) { // cache icon - ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds((Drawable) getResources().getDrawable(gcIcons.get(cache.type)), null, null, null); - } else { // unknown cache type, "mystery" icon - ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds((Drawable) getResources().getDrawable(gcIcons.get("mystery")), null, null, null); - } + ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds((Drawable) getResources().getDrawable(cgBase.getCacheIcon(cache.type)), null, null, null); // cache type itemLayout = (RelativeLayout) inflater.inflate(R.layout.cache_item, null); @@ -563,16 +540,7 @@ public class cgeopopup extends AbstractActivity { showToast(res.getString(R.string.err_location_unknown)); } - cgeocaches cachesActivity = new cgeocaches(); - - Intent cachesIntent = new Intent(this, cachesActivity.getClass()); - - cachesIntent.putExtra("type", "coordinate"); - cachesIntent.putExtra("latitude", cache.latitude); - cachesIntent.putExtra("longitude", cache.longitude); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); + cgeocaches.startActivityCachesAround(this, cache.latitude, cache.longitude); finish(); } @@ -696,4 +664,4 @@ public class cgeopopup extends AbstractActivity { super.goManual(view); finish(); } -}
\ No newline at end of file +} diff --git a/src/cgeo/geocaching/cgeotrackable.java b/src/cgeo/geocaching/cgeotrackable.java index c96b344..8959771 100644 --- a/src/cgeo/geocaching/cgeotrackable.java +++ b/src/cgeo/geocaching/cgeotrackable.java @@ -421,24 +421,10 @@ public class cgeotrackable extends AbstractActivity { final int id = item.getItemId(); if (id == 1) { - final Intent cachesIntent = new Intent(this, cgeocaches.class); - - cachesIntent.putExtra("type", "owner"); - cachesIntent.putExtra("username", contextMenuUser); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); - + cgeocaches.startActivityCacheOwner(this, contextMenuUser); return true; } else if (id == 2) { - final Intent cachesIntent = new Intent(this, cgeocaches.class); - - cachesIntent.putExtra("type", "username"); - cachesIntent.putExtra("username", contextMenuUser); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); - + cgeocaches.startActivityCacheUser(this, contextMenuUser); return true; } else if (id == 3) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + URLEncoder.encode(contextMenuUser)))); diff --git a/src/cgeo/geocaching/cgeowaypoint.java b/src/cgeo/geocaching/cgeowaypoint.java index 797b134..d623bb9 100644 --- a/src/cgeo/geocaching/cgeowaypoint.java +++ b/src/cgeo/geocaching/cgeowaypoint.java @@ -73,7 +73,7 @@ public class cgeowaypoint extends AbstractActivity { waypoint.setIcon(res, base, identification); if (waypoint.latitude != null && waypoint.longitude != null) { - coords.setText(Html.fromHtml(cgBase.formatCoordinate(waypoint.latitude, "lat", true) + " | " + cgBase.formatCoordinate(waypoint.longitude, "lon", true)), TextView.BufferType.SPANNABLE); + coords.setText(Html.fromHtml(cgBase.formatCoords(waypoint.latitude, waypoint.longitude, true)), TextView.BufferType.SPANNABLE); compass.setVisibility(View.VISIBLE); separator.setVisibility(View.VISIBLE); } else { @@ -259,15 +259,7 @@ public class cgeowaypoint extends AbstractActivity { showToast(res.getString(R.string.err_location_unknown)); } - cgeocaches cachesActivity = new cgeocaches(); - - Intent cachesIntent = new Intent(this, cachesActivity.getClass()); - cachesIntent.putExtra("type", "coordinate"); - cachesIntent.putExtra("latitude", waypoint.latitude); - cachesIntent.putExtra("longitude", waypoint.longitude); - cachesIntent.putExtra("cachetype", settings.cacheType); - - startActivity(cachesIntent); + cgeocaches.startActivityCachesAround(this, waypoint.latitude, waypoint.longitude); finish(); } @@ -354,4 +346,4 @@ public class cgeowaypoint extends AbstractActivity { public boolean onContextItemSelected(MenuItem item) { return onOptionsItemSelected(item); } -}
\ No newline at end of file +} diff --git a/src/cgeo/geocaching/cgeowaypointadd.java b/src/cgeo/geocaching/cgeowaypointadd.java index 6caf14b..3b6c3eb 100644 --- a/src/cgeo/geocaching/cgeowaypointadd.java +++ b/src/cgeo/geocaching/cgeowaypointadd.java @@ -56,8 +56,8 @@ public class cgeowaypointadd extends AbstractActivity { app.setAction(geocode); - ((Button) findViewById(R.id.buttonLatitude)).setText(cgBase.formatCoordinate(waypoint.latitude, "lat", true)); - ((Button) findViewById(R.id.buttonLongitude)).setText(cgBase.formatCoordinate(waypoint.longitude, "lon", true)); + ((Button) findViewById(R.id.buttonLatitude)).setText(cgBase.formatLatitude(waypoint.latitude, true)); + ((Button) findViewById(R.id.buttonLongitude)).setText(cgBase.formatLongitude(waypoint.longitude, true)); ((EditText) findViewById(R.id.name)).setText(Html.fromHtml(waypoint.name.trim()).toString()); ((EditText) findViewById(R.id.note)).setText(Html.fromHtml(waypoint.note.trim()).toString()); @@ -193,8 +193,8 @@ public class cgeowaypointadd extends AbstractActivity { try { Button bLat = (Button) findViewById(R.id.buttonLatitude); Button bLon = (Button) findViewById(R.id.buttonLongitude); - bLat.setHint(cgBase.formatCoordinate(geo.latitudeNow, "lat", false)); - bLon.setHint(cgBase.formatCoordinate(geo.longitudeNow, "lon", false)); + bLat.setHint(cgBase.formatLatitude(geo.latitudeNow, false)); + bLon.setHint(cgBase.formatLongitude(geo.longitudeNow, false)); } catch (Exception e) { Log.w(cgSettings.tag, "Failed to update location."); } @@ -223,8 +223,8 @@ public class cgeowaypointadd extends AbstractActivity { coordsDialog.setOnCoordinateUpdate(new cgeocoords.CoordinateUpdate() { @Override public void update(ArrayList<Double> coords) { - ((Button) findViewById(R.id.buttonLatitude)).setText(cgBase.formatCoordinate(coords.get(0), "lat", true)); - ((Button) findViewById(R.id.buttonLongitude)).setText(cgBase.formatCoordinate(coords.get(1), "lon", true)); + ((Button) findViewById(R.id.buttonLatitude)).setText(cgBase.formatLatitude(coords.get(0), true)); + ((Button) findViewById(R.id.buttonLongitude)).setText(cgBase.formatLongitude(coords.get(1), true)); if (waypoint != null) { waypoint.latitude = coords.get(0); waypoint.longitude = coords.get(1); @@ -372,8 +372,8 @@ public class cgeowaypointadd extends AbstractActivity { waypoint.name = name; waypoint.latitude = coords.get(0); waypoint.longitude = coords.get(1); - waypoint.latitudeString = cgBase.formatCoordinate(coords.get(0), "lat", true); - waypoint.longitudeString = cgBase.formatCoordinate(coords.get(1), "lon", true); + waypoint.latitudeString = cgBase.formatLatitude(coords.get(0), true); + waypoint.longitudeString = cgBase.formatLongitude(coords.get(1), true); waypoint.note = note; if (app.saveOwnWaypoint(id, geocode, waypoint)) { @@ -394,4 +394,4 @@ public class cgeowaypointadd extends AbstractActivity { ActivityMixin.goManual(this, "c:geo-waypoint-new"); } } -}
\ No newline at end of file +} diff --git a/src/cgeo/geocaching/files/FileList.java b/src/cgeo/geocaching/files/FileList.java index be808a3..ceb17a7 100644 --- a/src/cgeo/geocaching/files/FileList.java +++ b/src/cgeo/geocaching/files/FileList.java @@ -129,7 +129,7 @@ public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractLis * @return The folder to start the recursive search in */ protected abstract String[] getBaseFolders(); - + /** * Triggers the deriving class to set the title */ @@ -223,18 +223,18 @@ public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractLis return; } - - public FileList(final String extension) { + + protected FileList(final String extension) { setExtensions(new String[] {extension}); } - public FileList(final String[] extensions) { + protected FileList(final String[] extensions) { setExtensions(extensions); } private void setExtensions(String[] extensionsIn) { for (String extension : extensionsIn) { - if (!extension.startsWith(".")) { + if (extension.length() == 0 || extension.charAt(0) != '.') { extension = "." + extension; } } diff --git a/src/cgeo/geocaching/files/FileParser.java b/src/cgeo/geocaching/files/FileParser.java index 4e6cdf7..cc83cd1 100644 --- a/src/cgeo/geocaching/files/FileParser.java +++ b/src/cgeo/geocaching/files/FileParser.java @@ -7,13 +7,12 @@ import java.io.FileReader; import java.io.IOException;
import java.util.Date;
+import android.os.Handler;
+import android.os.Message;
import cgeo.geocaching.cgBase;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgSearch;
-import android.os.Handler;
-import android.os.Message;
-
public abstract class FileParser {
protected static StringBuilder readFile(File file)
throws FileNotFoundException, IOException {
@@ -30,7 +29,7 @@ public abstract class FileParser { }
return buffer;
}
-
+
static void showFinishedMessage(Handler handler, cgSearch search) {
if (handler != null) {
final Message msg = new Message();
@@ -40,8 +39,8 @@ public abstract class FileParser { }
protected static void fixCache(cgCache cache) {
- cache.latitudeString = cgBase.formatCoordinate(cache.latitude, "lat", true);
- cache.longitudeString = cgBase.formatCoordinate(cache.longitude, "lon", true);
+ cache.latitudeString = cgBase.formatLatitude(cache.latitude, true);
+ cache.longitudeString = cgBase.formatLongitude(cache.longitude, true);
if (cache.inventory != null) {
cache.inventoryItems = cache.inventory.size();
} else {
diff --git a/src/cgeo/geocaching/files/GPXParser.java b/src/cgeo/geocaching/files/GPXParser.java index 881f186..ebeb38e 100644 --- a/src/cgeo/geocaching/files/GPXParser.java +++ b/src/cgeo/geocaching/files/GPXParser.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -21,9 +22,9 @@ import android.sax.EndElementListener; import android.sax.EndTextElementListener; import android.sax.RootElement; import android.sax.StartElementListener; -import android.text.Html; import android.util.Log; import android.util.Xml; +import cgeo.geocaching.R; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgLog; @@ -39,32 +40,147 @@ public abstract class GPXParser extends FileParser { private static final SimpleDateFormat formatTimezone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000'Z"); // 2010-04-20T01:01:03.000-04:00 private static final Pattern patternGeocode = Pattern.compile("([A-Z]{2}[0-9A-Z]+)", Pattern.CASE_INSENSITIVE); + private static final Pattern patternGuid = Pattern.compile(".*" + Pattern.quote("guid=") + "([0-9a-z\\-]+)", Pattern.CASE_INSENSITIVE); private static final String[] nsGCList = new String[] { "http://www.groundspeak.com/cache/1/1", // PQ 1.1 "http://www.groundspeak.com/cache/1/0/1", // PQ 1.0.1 "http://www.groundspeak.com/cache/1/0", // PQ 1.0 }; - private cgeoapplication app = null; + private static cgeoapplication app = null; private int listId = 1; private cgSearch search = null; - protected String namespace = null; - private String version; + final protected String namespace; + final private String version; private Handler handler = null; private cgCache cache = new cgCache(); private cgTrackable trackable = new cgTrackable(); private cgLog log = new cgLog(); - private boolean shortDescIsHtml = true; - private boolean longDescIsHtml = true; private String type = null; private String sym = null; private String name = null; private String cmt = null; private String desc = null; - public GPXParser(cgeoapplication appIn, int listIdIn, cgSearch searchIn, String namespaceIn, String versionIn) { + private static final class CacheAttributeTranslator { + // List of cache attributes matching IDs used in GPX files. + // The ID is represented by the position of the String in the array. + // Strings are not used as text but as resource IDs of strings, just to be aware of changes + // made in strings.xml which then will lead to compile errors here and not to runtime errors. + private static final int[] CACHE_ATTRIBUTES = { + -1, // 0 + R.string.attribute_dogs_yes, // 1 + R.string.attribute_fee_yes, // 2 + R.string.attribute_rappelling_yes, // 3 + R.string.attribute_boat_yes, // 4 + R.string.attribute_scuba_yes, // 5 + R.string.attribute_kids_yes, // 6 + R.string.attribute_onehour_yes, // 7 + R.string.attribute_scenic_yes, // 8 + R.string.attribute_hiking_yes, // 9 + R.string.attribute_climbing_yes, // 10 + R.string.attribute_wading_yes, // 11 + R.string.attribute_swimming_yes, // 12 + R.string.attribute_available_yes, // 13 + R.string.attribute_night_yes, // 14 + R.string.attribute_winter_yes, // 15 + -1, // 16 + R.string.attribute_poisonoak_yes, // 17 + R.string.attribute_dangerousanimals_yes, // 18 + R.string.attribute_ticks_yes, // 19 + R.string.attribute_mine_yes, // 20 + R.string.attribute_cliff_yes, // 21 + R.string.attribute_hunting_yes, // 22 + R.string.attribute_danger_yes, // 23 + R.string.attribute_wheelchair_yes, // 24 + R.string.attribute_parking_yes, // 25 + R.string.attribute_public_yes, // 26 + R.string.attribute_water_yes, // 27 + R.string.attribute_restrooms_yes, // 28 + R.string.attribute_phone_yes, // 29 + R.string.attribute_picnic_yes, // 30 + R.string.attribute_camping_yes, // 31 + R.string.attribute_bicycles_yes, // 32 + R.string.attribute_motorcycles_yes, // 33 + R.string.attribute_quads_yes, // 34 + R.string.attribute_jeeps_yes, // 35 + R.string.attribute_snowmobiles_yes, // 36 + R.string.attribute_horses_yes, // 37 + R.string.attribute_campfires_yes, // 38 + R.string.attribute_thorn_yes, // 39 + R.string.attribute_stealth_yes, // 40 + R.string.attribute_stroller_yes, // 41 + R.string.attribute_firstaid_yes, // 42 + R.string.attribute_cow_yes, // 43 + R.string.attribute_flashlight_yes, // 44 + R.string.attribute_landf_yes, // 45 + R.string.attribute_rv_yes, // 46 + R.string.attribute_field_puzzle_yes, // 47 + R.string.attribute_uv_yes, // 48 + R.string.attribute_snowshoes_yes, // 49 + R.string.attribute_skiis_yes, // 50 + R.string.attribute_s_tool_yes, // 51 + R.string.attribute_nightcache_yes, // 52 + R.string.attribute_parkngrab_yes, // 53 + R.string.attribute_abandonedbuilding_yes, // 54 + R.string.attribute_hike_short_yes, // 55 + R.string.attribute_hike_med_yes, // 56 + R.string.attribute_hike_long_yes, // 57 + R.string.attribute_fuel_yes, // 58 + R.string.attribute_food_yes, // 59 + R.string.attribute_wirelessbeacon_yes, // 60 + R.string.attribute_partnership_yes, // 61 + R.string.attribute_seasonal_yes, // 62 + R.string.attribute_touristok_yes, // 63 + R.string.attribute_treeclimbing_yes, // 64 + R.string.attribute_frontyard_yes, // 65 + R.string.attribute_teamwork_yes, // 66 + }; + private static final String YES = "_yes"; + private static final String NO = "_no"; + private static final Pattern BASENAME_PATTERN = Pattern.compile("^.*attribute_(.*)(_yes|_no)"); + + // map GPX-Attribute-Id to baseName + public static String getBaseName(final int id) { + // get String out of array + if (CACHE_ATTRIBUTES.length <= id) { + return null; + } + final int stringId = CACHE_ATTRIBUTES[id]; + if (stringId == -1) { + return null; // id not found + } + // get text for string + String stringName = null; + try { + stringName = app.getResources().getResourceName(stringId); + } catch (NullPointerException e) { + return null; + } + if (stringName == null) { + return null; + } + // cut out baseName + final Matcher m = BASENAME_PATTERN.matcher(stringName); + if (! m.matches()) { + return null; + } + return m.group(1); + } + + // @return baseName + "_yes" or "_no" e.g. "food_no" or "uv_yes" + public static String getInternalId(final int attributeId, final boolean active) { + final String baseName = CacheAttributeTranslator.getBaseName(attributeId); + if (baseName == null) { + return null; + } + return baseName + (active ? YES : NO); + } + } + + protected GPXParser(cgeoapplication appIn, int listIdIn, cgSearch searchIn, String namespaceIn, String versionIn) { app = appIn; listId = listIdIn; search = searchIn; @@ -72,20 +188,17 @@ public abstract class GPXParser extends FileParser { version = versionIn; } - private static Date parseDate(String input) throws ParseException { - input = input.trim(); + private static Date parseDate(String inputUntrimmed) throws ParseException { + final String input = inputUntrimmed.trim(); if (input.length() >= 3 && input.charAt(input.length() - 3) == ':') { - String removeColon = input.substring(0, input.length() - 3) + input.substring(input.length() - 2); + final String removeColon = input.substring(0, input.length() - 3) + input.substring(input.length() - 2); return formatTimezone.parse(removeColon); } return formatSimple.parse(input); } - public long parse(File file, Handler handlerIn) { + public long parse(final InputStream stream, Handler handlerIn) { handler = handlerIn; - if (file == null) { - return 0l; - } final RootElement root = new RootElement(namespace, "gpx"); final Element waypoint = root.getChild(namespace, "wpt"); @@ -134,8 +247,6 @@ public abstract class GPXParser extends FileParser { showFinishedMessage(handler, search); - shortDescIsHtml = true; - longDescIsHtml = true; type = null; sym = null; name = null; @@ -167,7 +278,7 @@ public abstract class GPXParser extends FileParser { public void end(String body) { name = body; - final String content = Html.fromHtml(body).toString().trim(); + final String content = body.trim(); cache.name = content; findGeoCode(cache.name); @@ -182,8 +293,7 @@ public abstract class GPXParser extends FileParser { public void end(String body) { desc = body; - final String content = Html.fromHtml(body).toString().trim(); - cache.shortdesc = content; + cache.shortdesc = validate(body); } }); @@ -194,8 +304,7 @@ public abstract class GPXParser extends FileParser { public void end(String body) { cmt = body; - final String content = Html.fromHtml(body).toString().trim(); - cache.description = content; + cache.description = validate(body); } }); @@ -224,6 +333,21 @@ public abstract class GPXParser extends FileParser { } }); + // waypoint.url + waypoint.getChild(namespace, "url").setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String url) { + final Matcher matcher = patternGuid.matcher(url); + if (matcher.matches()) { + String guid = matcher.group(1); + if (guid.length() > 0) { + cache.guid = guid; + } + } + } + }); + // for GPX 1.0, cache info comes from waypoint node (so called private children, // for GPX 1.1 from extensions node final Element cacheParent = getCacheParent(waypoint); @@ -256,8 +380,8 @@ public abstract class GPXParser extends FileParser { gcCache.getChild(nsGC, "name").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - cache.name = validate(Html.fromHtml(body).toString().trim()); + public void end(String cacheName) { + cache.name = validate(cacheName); } }); @@ -265,8 +389,8 @@ public abstract class GPXParser extends FileParser { gcCache.getChild(nsGC, "owner").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - cache.owner = validate(Html.fromHtml(body).toString().trim()); + public void end(String cacheOwner) { + cache.owner = validate(cacheOwner); } }); @@ -288,7 +412,41 @@ public abstract class GPXParser extends FileParser { } }); - // waypoint.cache.difficulty + // waypoint.cache.attributes + // @see issue #299 + + // <groundspeak:attributes> + // <groundspeak:attribute id="32" inc="1">Bicycles</groundspeak:attribute> + // <groundspeak:attribute id="13" inc="1">Available at all times</groundspeak:attribute> + // where inc = 0 => _no, inc = 1 => _yes + // IDs see array CACHE_ATTRIBUTES + final Element gcAttributes = gcCache.getChild(nsGC, "attributes"); + + // waypoint.cache.attribute + final Element gcAttribute = gcAttributes.getChild(nsGC, "attribute"); + + gcAttribute.setStartElementListener(new StartElementListener() { + @Override + public void start(Attributes attrs) { + try { + if (attrs.getIndex("id") > -1 && attrs.getIndex("inc") > -1) { + int attributeId = Integer.parseInt(attrs.getValue("id")); + boolean attributeActive = Integer.parseInt(attrs.getValue("inc")) != 0; + String internalId = CacheAttributeTranslator.getInternalId(attributeId, attributeActive); + if (internalId != null) { + if (cache.attributes == null) { + cache.attributes = new ArrayList<String>(); + } + cache.attributes.add(internalId); + } + } + } catch (NumberFormatException e) { + // nothing + } + } + }); + + // waypoint.cache.difficulty gcCache.getChild(nsGC, "difficulty").setEndTextElementListener(new EndTextElementListener() { @Override @@ -318,11 +476,11 @@ public abstract class GPXParser extends FileParser { gcCache.getChild(nsGC, "country").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { + public void end(String country) { if (StringUtils.isBlank(cache.location)) { - cache.location = validate(body.trim()); + cache.location = validate(country); } else { - cache.location = cache.location + ", " + body.trim(); + cache.location = cache.location + ", " + country.trim(); } } }); @@ -331,11 +489,11 @@ public abstract class GPXParser extends FileParser { gcCache.getChild(nsGC, "state").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - if (StringUtils.isBlank(cache.location)) { - cache.location = validate(body.trim()); + public void end(String state) { + if (StringUtils.isBlank(cache.location)) { + cache.location = validate(state); } else { - cache.location = body.trim() + ", " + cache.location; + cache.location = state.trim() + ", " + cache.location; } } }); @@ -344,67 +502,24 @@ public abstract class GPXParser extends FileParser { gcCache.getChild(nsGC, "encoded_hints").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - cache.hint = validate(body.trim()); - } - }); - - // waypoint.cache.short_description - gcCache.getChild(nsGC, "short_description").setStartElementListener(new StartElementListener() { - - @Override - public void start(Attributes attrs) { - try { - if (attrs.getIndex("html") > -1) { - final String at = attrs.getValue("html"); - if (at.equalsIgnoreCase("false")) { - shortDescIsHtml = false; - } - } - } catch (Exception e) { - // nothing - } + public void end(String encoded) { + cache.hint = validate(encoded); } }); gcCache.getChild(nsGC, "short_description").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - if (shortDescIsHtml) { - cache.shortdesc = body.trim(); - } else { - cache.shortdesc = Html.fromHtml(body).toString(); - } - } - }); - - // waypoint.cache.long_description - gcCache.getChild(nsGC, "long_description").setStartElementListener(new StartElementListener() { - - @Override - public void start(Attributes attrs) { - try { - if (attrs.getIndex("html") > -1) { - if (attrs.getValue("html").equalsIgnoreCase("false")) { - longDescIsHtml = false; - } - } - } catch (Exception e) { - // nothing - } + public void end(String shortDesc) { + cache.shortdesc = validate(shortDesc); } }); gcCache.getChild(nsGC, "long_description").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - if (longDescIsHtml) { - cache.description = body.trim(); - } else { - cache.description = Html.fromHtml(body).toString().trim(); - } + public void end(String desc) { + cache.description = validate(desc); } }); @@ -448,8 +563,8 @@ public abstract class GPXParser extends FileParser { gcTB.getChild(nsGC, "name").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - trackable.name = Html.fromHtml(body).toString(); + public void end(String tbName) { + trackable.name = validate(tbName); } }); @@ -506,7 +621,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(String body) { - final String logType = body.trim().toLowerCase(); + final String logType = validate(body).toLowerCase(); if (cgBase.logTypes0.containsKey(logType)) { log.type = cgBase.logTypes0.get(logType); } else { @@ -519,34 +634,44 @@ public abstract class GPXParser extends FileParser { gcLog.getChild(nsGC, "finder").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - log.author = Html.fromHtml(body).toString(); + public void end(String finderName) { + log.author = validate(finderName); } }); - // waypoint.cache.logs.log.finder + // waypoint.cache.logs.log.text gcLog.getChild(nsGC, "text").setEndTextElementListener(new EndTextElementListener() { @Override - public void end(String body) { - log.log = Html.fromHtml(body).toString(); + public void end(String logText) { + log.log = validate(logText); } }); } - FileInputStream fis = null; boolean parsed = false; try { - fis = new FileInputStream(file); - } catch (FileNotFoundException e) { - Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": file not found!"); - } - try { - Xml.parse(fis, Xml.Encoding.UTF_8, root.getContentHandler()); + Xml.parse(stream, Xml.Encoding.UTF_8, root.getContentHandler()); parsed = true; } catch (IOException e) { - Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not read file!"); + Log.e(cgSettings.tag, "Cannot parse .gpx file as GPX " + version + ": could not read file!"); } catch (SAXException e) { - Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not parse XML - " + e.toString()); + Log.e(cgSettings.tag, "Cannot parse .gpx file as GPX " + version + ": could not parse XML - " + e.toString()); + } + return parsed ? search.getCurrentId() : 0L; + } + + private long parse(final File file, final Handler handlerIn) { + if (file == null) { + return 0L; + } + + FileInputStream fis = null; + long result = 0L; + try { + fis = new FileInputStream(file); + result = parse(fis, handlerIn); + } catch (FileNotFoundException e) { + Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": file not found!"); } try { if (fis != null) { @@ -555,7 +680,7 @@ public abstract class GPXParser extends FileParser { } catch (IOException e) { Log.e(cgSettings.tag, "Error after parsing .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not close file!"); } - return parsed ? search.getCurrentId() : 0l; + return result; } protected abstract Element getCacheParent(Element waypoint); @@ -564,7 +689,7 @@ public abstract class GPXParser extends FileParser { if ("nil".equalsIgnoreCase(input)) { return ""; } - return input; + return input.trim(); } private void setType(String parsedString) { @@ -583,10 +708,10 @@ public abstract class GPXParser extends FileParser { if (input == null || StringUtils.isNotBlank(cache.geocode)) { return; } - Matcher matcherGeocode = patternGeocode.matcher(input); + final Matcher matcherGeocode = patternGeocode.matcher(input); if (matcherGeocode.find()) { if (matcherGeocode.groupCount() > 0) { - String geocode = matcherGeocode.group(1); + final String geocode = matcherGeocode.group(1); if (ConnectorFactory.canHandle(geocode)) { cache.geocode = geocode; } @@ -595,13 +720,13 @@ public abstract class GPXParser extends FileParser { } public static Long parseGPX(cgeoapplication app, File file, int listId, Handler handler) { - cgSearch search = new cgSearch(); - long searchId = 0l; + final cgSearch search = new cgSearch(); + long searchId = 0L; try { GPXParser parser = new GPX10Parser(app, listId, search); searchId = parser.parse(file, handler); - if (searchId == 0l) { + if (searchId == 0L) { parser = new GPX11Parser(app, listId, search); searchId = parser.parse(file, handler); } @@ -613,4 +738,4 @@ public abstract class GPXParser extends FileParser { return search.getCurrentId(); } -}
\ No newline at end of file +} diff --git a/src/cgeo/geocaching/files/LocParser.java b/src/cgeo/geocaching/files/LocParser.java index da21ed2..e12e795 100644 --- a/src/cgeo/geocaching/files/LocParser.java +++ b/src/cgeo/geocaching/files/LocParser.java @@ -146,7 +146,7 @@ public final class LocParser extends FileParser { public static long parseLoc(cgeoapplication app, File file, int listId,
Handler handler) {
cgSearch search = new cgSearch();
- long searchId = 0l;
+ long searchId = 0L;
try {
HashMap<String, cgCoord> coords = parseCoordinates(readFile(file).toString());
diff --git a/src/cgeo/geocaching/geopoint/Geopoint.java b/src/cgeo/geocaching/geopoint/Geopoint.java index 533854b..85149be 100644 --- a/src/cgeo/geocaching/geopoint/Geopoint.java +++ b/src/cgeo/geocaching/geopoint/Geopoint.java @@ -9,7 +9,7 @@ public class Geopoint public static final double deg2rad = Math.PI / 180; public static final double rad2deg = 180 / Math.PI; public static final float erad = 6371.0f; - + private double latitude; private double longitude; @@ -76,7 +76,7 @@ public class Geopoint return this; } - + /** * Set latitude in microdegree. * @@ -113,7 +113,7 @@ public class Geopoint { return latitude; } - + /** * Get latitude in microdegree. * @@ -144,7 +144,7 @@ public class Geopoint return this; } - + /** * Set longitude in microdegree. * @@ -181,7 +181,7 @@ public class Geopoint { return longitude; } - + /** * Get longitude in microdegree. * @@ -268,7 +268,7 @@ public class Geopoint double c = Math.acos(Math.sin(lat2) * Math.sin(lat1) + Math.cos(lat2) * Math.cos(lat1) * Math.cos(lon2 - lon1)); double A = Math.asin(Math.cos(lat2) * Math.sin(lon2 - lon1) / Math.sin(c)); double result = A * rad2deg; - + if (ilat2 > ilat1 && ilon2 > ilon1) { // result don't need change @@ -285,7 +285,7 @@ public class Geopoint { result += 360f; } - + return result; } } @@ -318,7 +318,7 @@ public class Geopoint */ public boolean isEqualTo(Geopoint gp) { - return (null != gp && gp.getLatitude() == latitude && gp.getLongitude() == longitude); + return null != gp && gp.getLatitude() == latitude && gp.getLongitude() == longitude; } /** @@ -330,7 +330,7 @@ public class Geopoint */ public boolean isEqualTo(Geopoint gp, double tolerance) { - return (null != gp && distanceTo(gp) <= tolerance); + return null != gp && distanceTo(gp) <= tolerance; } /** diff --git a/src/cgeo/geocaching/googlemaps/googleMapView.java b/src/cgeo/geocaching/googlemaps/googleMapView.java index 6fa1eb7..8a06edb 100644 --- a/src/cgeo/geocaching/googlemaps/googleMapView.java +++ b/src/cgeo/geocaching/googlemaps/googleMapView.java @@ -6,6 +6,9 @@ import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.GestureDetector.SimpleOnGestureListener; import cgeo.geocaching.cgSettings; import cgeo.geocaching.mapcommon.cgMapMyOverlay; import cgeo.geocaching.mapcommon.cgMapOverlay; @@ -24,17 +27,21 @@ import com.google.android.maps.MapView; import com.google.android.maps.Overlay; public class googleMapView extends MapView implements MapViewImpl{ + private GestureDetector gestureDetector; public googleMapView(Context context, AttributeSet attrs) { super(context, attrs); + gestureDetector = new GestureDetector(context, new GestureListener()); } public googleMapView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + gestureDetector = new GestureDetector(context, new GestureListener()); } public googleMapView(Context context, String apiKey) { super(context, apiKey); + gestureDetector = new GestureDetector(context, new GestureListener()); } @Override @@ -150,4 +157,18 @@ public class googleMapView extends MapView implements MapViewImpl{ public void repaintRequired(OverlayBase overlay) { invalidate(); } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + gestureDetector.onTouchEvent(ev); + return super.onTouchEvent(ev); + } + + private class GestureListener extends SimpleOnGestureListener { + @Override + public boolean onDoubleTap(MotionEvent e) { + getController().zoomInFixing((int) e.getX(), (int) e.getY()); + return true; + } + } } diff --git a/src/cgeo/geocaching/mapcommon/ItemizedOverlayBase.java b/src/cgeo/geocaching/mapcommon/ItemizedOverlayBase.java index 4e0379c..99bf2fd 100644 --- a/src/cgeo/geocaching/mapcommon/ItemizedOverlayBase.java +++ b/src/cgeo/geocaching/mapcommon/ItemizedOverlayBase.java @@ -20,7 +20,7 @@ public abstract class ItemizedOverlayBase implements OverlayBase { private ItemizedOverlayImpl ovlImpl; - public ItemizedOverlayBase(ItemizedOverlayImpl ovlImplIn) { + protected ItemizedOverlayBase(ItemizedOverlayImpl ovlImplIn) { ovlImpl = ovlImplIn; } diff --git a/src/cgeo/geocaching/mapcommon/MapBase.java b/src/cgeo/geocaching/mapcommon/MapBase.java index 1f967a0..1f2d769 100644 --- a/src/cgeo/geocaching/mapcommon/MapBase.java +++ b/src/cgeo/geocaching/mapcommon/MapBase.java @@ -18,7 +18,7 @@ public abstract class MapBase { ActivityImpl mapActivity; - public MapBase(ActivityImpl activity) { + protected MapBase(ActivityImpl activity) { mapActivity = activity; } diff --git a/src/cgeo/geocaching/mapcommon/cgOverlayScale.java b/src/cgeo/geocaching/mapcommon/cgOverlayScale.java index b8d6f09..cb73c75 100644 --- a/src/cgeo/geocaching/mapcommon/cgOverlayScale.java +++ b/src/cgeo/geocaching/mapcommon/cgOverlayScale.java @@ -21,7 +21,7 @@ public class cgOverlayScale implements OverlayBase { private Paint scale = null; private Paint scaleShadow = null; private BlurMaskFilter blur = null; - private float pixelDensity = 0l; + private float pixelDensity = 0L; private double pixels = 0d; private int bottom = 0; private double distance = 0d; diff --git a/src/cgeo/geocaching/mapcommon/cgeomap.java b/src/cgeo/geocaching/mapcommon/cgeomap.java index 8fbf2bc..7d7d51e 100644 --- a/src/cgeo/geocaching/mapcommon/cgeomap.java +++ b/src/cgeo/geocaching/mapcommon/cgeomap.java @@ -6,6 +6,7 @@ import java.util.Locale; import android.app.Activity; import android.app.ProgressDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -102,8 +103,8 @@ public class cgeomap extends MapBase { private UsersThread usersThread = null; private DisplayUsersThread displayUsersThread = null; private LoadDetails loadDetailsThread = null; - private volatile long loadThreadRun = 0l; - private volatile long usersThreadRun = 0l; + private volatile long loadThreadRun = 0L; + private volatile long usersThreadRun = 0L; private volatile boolean downloaded = false; // overlays private cgMapOverlay overlayCaches = null; @@ -120,7 +121,7 @@ public class cgeomap extends MapBase { private ProgressDialog waitDialog = null; private int detailTotal = 0; private int detailProgress = 0; - private Long detailProgressTime = 0l; + private Long detailProgressTime = 0L; // views private ImageView myLocSwitch = null; // other things @@ -146,10 +147,9 @@ public class cgeomap extends MapBase { } if (caches != null && cachesCnt > 0) { - title.append(" "); - title.append("["); + title.append(" ["); title.append(caches.size()); - title.append("]"); + title.append(']'); } ActivityMixin.setTitle(activity, title.toString()); @@ -233,9 +233,9 @@ public class cgeomap extends MapBase { activity = this.getActivity(); app = (cgeoapplication) activity.getApplication(); app.setAction(null); - settings = new cgSettings(activity, activity.getSharedPreferences(cgSettings.preferences, 0)); - base = new cgBase(app, settings, activity.getSharedPreferences(cgSettings.preferences, 0)); - prefsEdit = activity.getSharedPreferences(cgSettings.preferences, 0).edit(); + settings = new cgSettings(activity, activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE)); + base = new cgBase(app, settings, activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE)); + prefsEdit = activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE).edit(); MapFactory mapFactory = settings.getMapFactory(); // reset status @@ -309,7 +309,7 @@ public class cgeomap extends MapBase { waypointTypeIntent = extras.getString("wpttype"); mapStateIntent = extras.getIntArray("mapstate"); - if (searchIdIntent == 0l) { + if (searchIdIntent == 0L) { searchIdIntent = null; } if (latitudeIntent == 0.0) { @@ -327,11 +327,14 @@ public class cgeomap extends MapBase { live = false; } - // google analytics - if (live) { - followMyLocation = true; + if (null == mapStateIntent) { + if (live) { + followMyLocation = true; + } else { + followMyLocation = false; + } } else { - followMyLocation = false; + followMyLocation = 1 == mapStateIntent[3] ? true : false; } if (geocodeIntent != null || searchIdIntent != null || (latitudeIntent != null && longitudeIntent != null) || mapStateIntent != null) { centerMap(geocodeIntent, searchIdIntent, latitudeIntent, longitudeIntent, mapStateIntent); @@ -656,11 +659,12 @@ public class cgeomap extends MapBase { mapIntent.putExtra("latitude", latitudeIntent); mapIntent.putExtra("longitude", longitudeIntent); mapIntent.putExtra("wpttype", waypointTypeIntent); - int[] mapState = new int[3]; + int[] mapState = new int[4]; GeoPointImpl mapCenter = mapView.getMapViewCenter(); mapState[0] = mapCenter.getLatitudeE6(); mapState[1] = mapCenter.getLongitudeE6(); mapState[2] = mapView.getMapZoomLevel(); + mapState[3] = followMyLocation ? 1 : 0; mapIntent.putExtra("mapstate", mapState); // start the new map @@ -717,7 +721,7 @@ public class cgeomap extends MapBase { } if (prefsEdit == null) { - prefsEdit = activity.getSharedPreferences(cgSettings.preferences, 0).edit(); + prefsEdit = activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE).edit(); } prefsEdit.putInt("mapzoom", mapView.getMapZoomLevel()); @@ -747,7 +751,7 @@ public class cgeomap extends MapBase { try { boolean repaintRequired = false; - + if (overlayMyLoc == null && mapView != null) { overlayMyLoc = mapView.createAddPositionOverlay(activity, settings); } @@ -772,11 +776,11 @@ public class cgeomap extends MapBase { } repaintRequired = true; } - + if (repaintRequired) { mapView.repaintRequired(overlayMyLoc); } - + } catch (Exception e) { Log.w(cgSettings.tag, "Failed to update location."); } @@ -943,7 +947,7 @@ public class cgeomap extends MapBase { } catch (Exception e) { Log.w(cgSettings.tag, "cgeomap.LoadTimer.run: " + e.toString()); } - }; + } } } @@ -1025,7 +1029,7 @@ public class cgeomap extends MapBase { } catch (Exception e) { Log.w(cgSettings.tag, "cgeomap.LoadUsersTimer.run: " + e.toString()); } - }; + } } } @@ -1081,24 +1085,14 @@ public class cgeomap extends MapBase { //if in live map and stored caches are found / disables are also shown. if (live && settings.maplive >= 1) { - // I know code is crude, but temporary fix - int i = 0; - boolean excludeMine = settings.excludeMine > 0; - boolean excludeDisabled = settings.excludeDisabled > 0; - - while (i < caches.size()) - { - boolean remove = false; - if ((caches.get(i).found) && (excludeMine)) - remove = true; - if ((caches.get(i).own) && (excludeMine)) - remove = true; - if ((caches.get(i).disabled) && (excludeDisabled)) - remove = true; - if (remove) + final boolean excludeMine = settings.excludeMine > 0; + final boolean excludeDisabled = settings.excludeDisabled > 0; + + for (int i = caches.size() - 1; i >= 0; i--) { + cgCache cache = caches.get(i); + if ((cache.found && excludeMine) || (cache.own && excludeMine) || (cache.disabled && excludeDisabled)) { caches.remove(i); - else - i++; + } } } @@ -1281,7 +1275,7 @@ public class cgeomap extends MapBase { coordinates.add(coord); item = settings.getMapFactory().getCacheOverlayItem(coord, cacheOne.type); - icon = cgBase.getIcon(true, cacheOne.type, cacheOne.own, cacheOne.found, cacheOne.disabled || cacheOne.archived); + icon = cgBase.getMarkerIcon(true, cacheOne.type, cacheOne.own, cacheOne.found, cacheOne.disabled || cacheOne.archived); pin = null; if (iconsCache.containsKey(icon)) { @@ -1325,7 +1319,7 @@ public class cgeomap extends MapBase { coordinates.add(coord); item = settings.getMapFactory().getCacheOverlayItem(coord, null); - icon = cgBase.getIcon(false, oneWaypoint.type, false, false, false); + icon = cgBase.getMarkerIcon(false, oneWaypoint.type, false, false, false); if (iconsCache.containsKey(icon)) { pin = iconsCache.get(icon); } else { @@ -1481,7 +1475,7 @@ public class cgeomap extends MapBase { coordinates.add(coord); CacheOverlayItemImpl item = settings.getMapFactory().getCacheOverlayItem(coord, null); - final int icon = cgBase.getIcon(false, waypointTypeIntent, false, false, false); + final int icon = cgBase.getMarkerIcon(false, waypointTypeIntent, false, false, false); Drawable pin = null; if (iconsCache.containsKey(icon)) { pin = iconsCache.get(icon); @@ -1509,10 +1503,10 @@ public class cgeomap extends MapBase { protected boolean working = true; protected boolean stop = false; - protected long centerLat = 0l; - protected long centerLon = 0l; - protected long spanLat = 0l; - protected long spanLon = 0l; + protected long centerLat = 0L; + protected long centerLon = 0L; + protected long spanLat = 0L; + protected long spanLon = 0L; public DoThread(long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) { centerLat = centerLatIn; @@ -1551,7 +1545,7 @@ public class cgeomap extends MapBase { private Handler handler = null; private ArrayList<String> geocodes = null; private volatile boolean stop = false; - private long last = 0l; + private long last = 0L; public LoadDetails(Handler handlerIn, ArrayList<String> geocodesIn) { handler = handlerIn; @@ -1733,15 +1727,15 @@ public class cgeomap extends MapBase { if (status == null) { if (followMyLocation) { - myLocSwitch.setImageResource(R.drawable.my_location_on); + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_on); } else { - myLocSwitch.setImageResource(R.drawable.my_location_off); + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_off); } } else { if (status) { - myLocSwitch.setImageResource(R.drawable.my_location_on); + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_on); } else { - myLocSwitch.setImageResource(R.drawable.my_location_off); + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_off); } } @@ -1759,12 +1753,12 @@ public class cgeomap extends MapBase { if (followMyLocation) { followMyLocation = false; - myLocSwitch.setImageResource(R.drawable.my_location_off); + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_off); } else { followMyLocation = true; myLocationInMiddle(); - myLocSwitch.setImageResource(R.drawable.my_location_on); + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_on); } } } diff --git a/src/cgeo/geocaching/sorting/FindsComparator.java b/src/cgeo/geocaching/sorting/FindsComparator.java new file mode 100644 index 0000000..8553f4b --- /dev/null +++ b/src/cgeo/geocaching/sorting/FindsComparator.java @@ -0,0 +1,40 @@ +package cgeo.geocaching.sorting; + +import cgeo.geocaching.cgBase; +import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgeoapplication; + +public class FindsComparator extends AbstractCacheComparator implements + CacheComparator { + + private cgeoapplication app; + + public FindsComparator(cgeoapplication app) { + this.app = app; + } + + @Override + protected boolean canCompare(cgCache cache1, cgCache cache2) { + return cache1.logCounts != null && cache2.logCounts != null; + } + + @Override + protected int compareCaches(cgCache cache1, cgCache cache2) { + int finds1 = getFindsCount(cache1); + int finds2 = getFindsCount(cache2); + return finds2 - finds1; + } + + private int getFindsCount(cgCache cache) { + int finds = 0; + if (cache.logCounts.isEmpty()) { + cache.logCounts = app.loadLogCounts(cache.geocode); + } + Integer logged = cache.logCounts.get(cgBase.LOG_FOUND_IT); + if (logged != null) { + finds = logged; + } + return finds; + } + +} diff --git a/src/cgeo/geocaching/sorting/StateComparator.java b/src/cgeo/geocaching/sorting/StateComparator.java new file mode 100644 index 0000000..787af5a --- /dev/null +++ b/src/cgeo/geocaching/sorting/StateComparator.java @@ -0,0 +1,32 @@ +package cgeo.geocaching.sorting; + +import cgeo.geocaching.cgCache; + +/** + * sort caches by state (normal, disabled, archived) + * + */ +public class StateComparator extends AbstractCacheComparator implements + CacheComparator { + + @Override + protected boolean canCompare(final cgCache cache1, final cgCache cache2) { + return true; + } + + @Override + protected int compareCaches(final cgCache cache1, final cgCache cache2) { + return getState(cache1) - getState(cache2); + } + + private static int getState(final cgCache cache) { + if (cache.disabled) { + return 1; + } + if (cache.archived) { + return 2; + } + return 0; + } + +} diff --git a/tests/src/cgeo/geocaching/test/cgDestinationTest.java b/tests/src/cgeo/geocaching/test/cgDestinationTest.java new file mode 100644 index 0000000..27fd433 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/cgDestinationTest.java @@ -0,0 +1,23 @@ +package cgeo.geocaching.test;
+
+import junit.framework.Assert;
+import android.test.AndroidTestCase;
+import cgeo.geocaching.cgDestination;
+
+public class cgDestinationTest extends AndroidTestCase {
+
+ cgDestination dest = null;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ dest = new cgDestination(1, 10000, 52.5, 9.33);
+ }
+
+ public void testSomething() throws Throwable {
+ Assert.assertEquals(1, dest.getId());
+ Assert.assertEquals(10000, dest.getDate());
+ Assert.assertEquals(52.5, dest.getLatitude());
+ Assert.assertEquals(9.33, dest.getLongitude());
+ }
+}
\ No newline at end of file diff --git a/tests/src/cgeo/geocaching/test/cgSettingsTest.java b/tests/src/cgeo/geocaching/test/cgSettingsTest.java new file mode 100644 index 0000000..e017de2 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/cgSettingsTest.java @@ -0,0 +1,30 @@ +package cgeo.geocaching.test; + +import android.test.ActivityInstrumentationTestCase2; +import cgeo.geocaching.cgSettings; +import cgeo.geocaching.cgeo; + +public class cgSettingsTest extends ActivityInstrumentationTestCase2<cgeo> { + + private cgeo activity; + + public cgSettingsTest() { + super("cgeo.geocaching", cgeo.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + activity = getActivity(); + } + + /** + * loads new empty settings, this should work fine without an exception (once there was an exception because of the empty map file string) + */ + public void testSettingsException() { + cgSettings settings = new cgSettings(activity, activity.getSharedPreferences("not existing preferences", 0)); + + // assert that we really created new settings + assertNull(settings.getMapFile()); + } +} diff --git a/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java new file mode 100644 index 0000000..7eabb13 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java @@ -0,0 +1,106 @@ +package cgeo.geocaching.test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import junit.framework.Assert;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.test.ApplicationTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import cgeo.geocaching.ICache;
+import cgeo.geocaching.cgBase;
+import cgeo.geocaching.cgCache;
+import cgeo.geocaching.cgCacheWrap;
+import cgeo.geocaching.cgSettings;
+import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.test.mock.GC1ZXX2;
+import cgeo.geocaching.test.mock.GC2CJPF;
+
+/**
+ * The c:geo application test.
+ * It can be used for tests that require an application and/or context.
+ */
+
+public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
+
+ private cgSettings settings = null;
+ private cgBase base = null;
+
+ public cgeoApplicationTest() {
+ super(cgeoapplication.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // init environment
+ createApplication();
+ Context context = this.getContext();
+ SharedPreferences prefs = context.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE);
+
+ // create required c:geo objects
+ settings = new cgSettings(context, prefs);
+ base = new cgBase(this.getApplication(), settings, prefs);
+ }
+
+ /**
+ * The name 'test preconditions' is a convention to signal that if this
+ * test doesn't pass, the test case was not set up properly and it might
+ * explain any and all failures in other tests. This is not guaranteed
+ * to run before other tests, as junit uses reflection to find the tests.
+ */
+ @SmallTest
+ public void testPreconditions() {
+ }
+
+ /**
+ * Test {@link cgBase#searchByGeocode(HashMap, int, boolean)}
+ * @param base
+ */
+ @MediumTest
+ public void testSearchByGeocode() {
+ HashMap<String, String> params = new HashMap<String, String>();
+ params.put("geocode", "GC1RMM2");
+
+ Long id = base.searchByGeocode(params, 0, true);
+ Assert.assertNotNull(id);
+ }
+
+ /**
+ * Test {@link cgBase#parseCache(String, int) with "mocked" data
+ * @param base
+ */
+ @MediumTest
+ public void testParseCache() {
+ List<ICache> cachesToTest = new ArrayList<ICache>();
+ cachesToTest.add(new GC2CJPF());
+ cachesToTest.add(new GC1ZXX2());
+
+ for (ICache cache : cachesToTest) {
+ cgCacheWrap caches = base.parseCache(cache.getData(),0);
+ cgCache cacheParsed = caches.cacheList.get(0);
+ Assert.assertEquals(cacheParsed.getGeocode(), cache.getGeocode());
+ Assert.assertEquals(cacheParsed.getType(), cache.getType());
+ Assert.assertEquals(cacheParsed.getOwner(), cache.getOwner());
+ Assert.assertEquals(cacheParsed.getDifficulty(), cache.getDifficulty());
+ Assert.assertEquals(cacheParsed.getTerrain(), cache.getTerrain());
+ Assert.assertEquals(cacheParsed.getLatitute(), cache.getLatitute());
+ Assert.assertEquals(cacheParsed.getLongitude(), cache.getLongitude());
+ Assert.assertEquals(cacheParsed.isDisabled(), cache.isDisabled());
+ Assert.assertEquals(cacheParsed.isOwn(), cache.isOwn());
+ Assert.assertEquals(cacheParsed.isArchived(), cache.isArchived());
+ Assert.assertEquals(cacheParsed.isMembersOnly(), cache.isMembersOnly());
+ Assert.assertEquals(cacheParsed.getOwnerReal(), cache.getOwnerReal());
+ Assert.assertEquals(cacheParsed.getSize(), cache.getSize());
+ Assert.assertEquals(cacheParsed.getHint(), cache.getHint());
+ Assert.assertTrue(cacheParsed.getDescription().startsWith(cache.getDescription()));
+ Assert.assertEquals(cacheParsed.getShortDescription(), cache.getShortDescription());
+ Assert.assertEquals(cacheParsed.getName(), cache.getName());
+ }
+ }
+
+}
\ No newline at end of file diff --git a/tests/src/cgeo/geocaching/test/cgeoTestSuite.java b/tests/src/cgeo/geocaching/test/cgeoTestSuite.java new file mode 100644 index 0000000..998bfc4 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/cgeoTestSuite.java @@ -0,0 +1,19 @@ +package cgeo.geocaching.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import android.test.suitebuilder.TestSuiteBuilder;
+
+/**
+ * The c:geo unit test suite. Based on http://marakana.com/tutorials/android/junit-test-example.html
+ * All tests below this package will get executed
+ * It can be used for unit testing which requires no application and/or context.
+ * For further informations have a look at http://developer.android.com/guide/topics/testing/testing_android.html
+ */
+
+public class cgeoTestSuite extends TestSuite {
+
+ public static Test suite() {
+ return new TestSuiteBuilder(cgeoTestSuite.class).includeAllPackagesUnderHere().build();
+ }
+}
diff --git a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html new file mode 100644 index 0000000..14d3abd --- /dev/null +++ b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html @@ -0,0 +1,1670 @@ +<!DOCTYPE html>
+<html lang="en" class="no-js">
+ <head id="ctl00_Head1"><meta charset="utf-8" />
+ <!--[if IE]><![endif]-->
+ <title>
+ GC1ZXX2 Hannopoly: Eislisenstrasse (Traditional Cache) in Niedersachsen, Germany created by Rich Uncle Pennybags
+</title><meta name="DC.title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta property="og:title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta property="og:site_name" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta property="og:type" content="website" /><meta 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-2011 Groundspeak, Inc. All Rights Reserved." /><!-- Copyright (c) 2000-2011 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 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="/favicon.ico" /><link rel="shortcut icon" href="/favicon.ico" /><link rel="apple-touch-icon" href="/apple-touch-icon.png" /><link rel="image_src" href="/preview.png" /><meta property="og:image" content="/preview.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 rel="stylesheet" type="text/css" media="screen,projection" href="../css/tlnMasterScreen.css" /><link rel="stylesheet" type="text/css" media="all" href="../css/tlnMain.css" /><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.6.1/jquery.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/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/silk/note.png') no-repeat 0 0;
+ padding-left:18px;
+ }
+ legend.warning{
+ background:url('../images/silk/exclamation.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;
+ }
+ #tiptip_content{
+ *background-color:#000;
+ }
+ .maxed {
+ color:#992a2a;
+ }
+ .Hidden
+ {
+ display: none;
+ }
+
+ </style>
+ <script type="text/javascript">
+ <!--
+ var ad_display_count = 0;
+ function ShowListings(showCount) {
+ document.write('<br /><table border=0 cellpadding=2 cellspacing=0 width=100% bgcolor="#C0CEE3">');
+ var i = 6 + (ad_display_count * 6); ad_display_count = ad_display_count + showCount
+ while (i < (zSr.length)) {
+ var descr = zSr[i++], unused1 = zSr[i++], clickURL = zSr[i++], title = zSr[i++], sitehost = zSr[i++], unused2 = zSr[i++];
+ document.write('<tr bgcolor="#ffffff"><td width="' + (100 / showCount) + '%" valign=top align=left class="clsCell"><div class=clsResult><a TARGET="_new" HREF="' + clickURL + '" class="clsResultTitle">' + title + '</a></div><div class=clsResultDescription>' + descr + '</div><div class=clsURL>' + sitehost + '</div></td></tr>');
+ if (i >= ((ad_display_count * 6) + 6)) break;
+ }
+ document.write('<tr><td align=right><a href="http://searchmarketing.yahoo.com/srch/cm.php?" target="_blank" class="title" style="text-decoration:underline">Ads by Yahoo!</a></td></tr>');
+ document.write('</table>');
+ //write the yahoo logo
+ }
+
+ function dht(linkVar) {
+ linkVar = $(linkVar);
+
+ try {
+
+ $('#div_hint')
+ .html(
+ convertROTStringWithBrackets(
+ $('#div_hint').html()
+ )
+ );
+ linkVar.html((linkVar.html() == 'Decrypt') ? 'Encrypt' : 'Decrypt');
+ }
+ catch (e) {
+ alert(e);
+ return false;
+ }
+ return false;
+ }
+ // -->
+ </script>
+ <script>
+ var mapLatLng = null,
+ cmapAdditionalWaypoints = [];
+ </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="100167303362705" property="fb:app_id" /><meta name="og:url" content="http://coord.info/GC1ZXX2" property="og:url" /><meta name="og:description" property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/2.png" property="og:image" /><meta name="og:title" content="Hannopoly: Eislisenstrasse " property="og:title" /><meta name="description" content="Hannopoly: Eislisenstrasse (GC1ZXX2) was created by daniel354 on 10/16/2009. It's a Other size geocache, with difficulty of 3, terrain of 1.5. It's located in Niedersachsen, Germany. &nbsp; 1.Finde die Besitzrechtkarte im Cache&nbsp; 2. Notiere Dir die drei Grundstückspreise&nbsp; 3. Beachte die Informationen vor Ort&nbsp; 4. Finde die Bonus-Caches&nbsp; 5." /></head>
+ <body >
+ <form name="aspnetForm" method="post" action="cache_details.aspx?log=y&wp=GC1ZXX2&numlogs=35&decrypt=y" 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="/wEPDwUKMTY4Njc0NTYxMA8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE0MzM5MDkWAmYPZBYGZg9kFgYCCg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMSBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgsPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMSBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAicPFgIeB1Zpc2libGVoZAIBD2QWEgIFDxYCHwEFzgI8ZGl2IGNsYXNzPSJXYXJuaW5nTWVzc2FnZSBEb3duVGltZSI+PGRpdj48cD5HZW9jYWNoaW5nLmNvbSB3aWxsIGJlIGdvaW5nIG9mZmxpbmUgdGVtcG9yYXJpbHkgZm9yIGEgc2l0ZSB1cGRhdGUgb24gVGh1cnNkYXksIFNlcHRlbWJlciAwMSwgMjAxMSBhdCBhcHByb3hpbWF0ZWx5IDExYW0gUERUIChjb252ZXJ0IHRvIHlvdXIgbG9jYWwgdGltZSA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXNlcnZlci5jb20vY29udmVydF90aW1lX2luX1VTLVdBLmFzcHg/eT0yMDExJm1vPTkmZD0xJmg9MTEmbW49MCIgdGFyZ2V0PSJfYmxhbmsiPmhlcmU8L2E+KS48L3A+PC9kaXY+PC9kaXY+ZAIIDxYCHwJnFgoCAQ8PFgIeCEltYWdlVXJsBU5odHRwOi8vaW1nLmdlb2NhY2hpbmcuY29tL3VzZXIvYXZhdGFyLzc3MWJjYTMzLTlkM2EtNGRkNS1hMWYyLWU2N2NmY2I5Zjk0MS5qcGdkZAIDDxYCHwEFaEhlbGxvLCA8YSBocmVmPSIvbXkvZGVmYXVsdC5hc3B4IiB0aXRsZT0iVmlldyBQcm9maWxlIGZvciBibGFmb28iIGNsYXNzPSJTaWduZWRJblByb2ZpbGVMaW5rIj5ibGFmb288L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFrQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmxvZyUzZHklMjZ3cCUzZEdDMVpYWDIlMjZudW1sb2dzJTNkMzUlMjZkZWNyeXB0JTNkeWRkAgcPFgIfAQWtATxpbWcgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fc21pbGUucG5nIiB0aXRsZT0iQ2FjaGVzIEZvdW5kIiAvPiA0MDgmbmJzcDsmbWlkZG90OyZuYnNwOzxpbWcgc3JjPSIvaW1hZ2VzL2NoYWxsZW5nZXMvdHlwZXMvc20vY2hhbGxlbmdlLnBuZyIgdGl0bGU9IkNoYWxsZW5nZXMgQ29tcGxldGVkIiAvPiAxZAILDxYCHwJnFgJmDw8WAh8CaGRkAg8PFgIfAmcWAgINDw8WAh8EBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9MDU2NGE5NDAtODMxMS00MGVlLThlNzYtN2U5MWIyY2Y2Mjg0ZGQCIQ8WAh8CZ2QCIw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBZMAgMPFgIfAQUBQWQCBQ8WAh8CZ2QCCA8WAh8CaGQCDw9kFgQCAQ8WAh8BBQI0OGQCAw8PFgIfBAVEL3NlZWsvY2FjaGVfZmF2b3JpdGVkLmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOThkZAIQDw8WAh8CaGRkAhIPFgQfAQXKATxwIGNsYXNzPSJPbGRXYXJuaW5nIE5vQm90dG9tU3BhY2luZyI+PHN0cm9uZz5DYWNoZSBJc3N1ZXM6PC9zdHJvbmc+PC9wPjx1bCBjbGFzcz0iT2xkV2FybmluZyI+PGxpPlRoaXMgY2FjaGUgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFJlYWQgdGhlIGxvZ3MgYmVsb3cgdG8gcmVhZCB0aGUgc3RhdHVzIGZvciB0aGlzIGNhY2hlLjwvbGk+PC91bD4fAmdkAhMPFgIfAmhkAhQPFgIfAmhkAhcPFgIeBXN0eWxlBQ9kaXNwbGF5OmlubGluZTsWAgIBDxYCHwEFG1VUTTogMzJVIEUgNTQ4Mzg5IE4gNTgwMjc4N2QCGg8PFgIfBAUzY2RwZi5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4ZGQCGw8PFgIfBAU4Y2RwZi5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4JmxjPTVkZAIcDw8WAh8EBTljZHBmLmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOTgmbGM9MTBkZAIdDw8WBB8EBYIBaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2Y9ZCZobD1lbiZzYWRkcj01Mi40MTYyLDkuNTk0MTE3IChIb21lIExvY2F0aW9uKSZkYWRkcj01Mi4zNzMyMTcsOS43MTA4KEhhbm5vcG9seSUzYStFaXNsaXNlbnN0cmFzc2UrKR4GVGFyZ2V0BQZfYmxhbmtkZAIhD2QWCAIBDw8WBB4JRm9yZUNvbG9yDB4EXyFTQgIEZGQCAw8PFgQfCAwfCQIEZGQCBQ8PFgIfAmcWAh4Hb25jbGljawU7czJncHMoJzM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OCcpO3JldHVybiBmYWxzZTtkAgcPDxYCHwJnFgIfCgUgczJwaG9uZSgnR0MxWlhYMicpO3JldHVybiBmYWxzZTtkAiMPFgIfAmdkAiYPZBYIZg8WAh8CaGQCAQ8PFgIfAmhkZAICDw8WAh8CaGRkAgMPFgIfAmhkAigPDxYCHwEFE05vIGhpbnRzIGF2YWlsYWJsZS4WAh8KBQ1yZXR1cm4gZmFsc2U7ZAIpDxYCHwJoZAIrD2QWAgIBDw8WAh8BBQdHQzFaWFgyZGQCLQ8WAh8CaGQCLw8WAh8CZ2QCMA8WAh8CaGQCNA9kFgICAQ9kFgQCAQ8PFgIfAQX/AzxpZnJhbWUgdHlwZT0iaWZyYW1lIiBzcmM9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUdldCZTaXRlSUQ9MSZYPSdlNTRmZTIxMzZkNTY0ZWVhODhmZjI3NmZjYWVhNGFkMSciIHdpZHRoPSIxMjAiIGhlaWdodD0iMjQwIiBNYXJnaW53aWR0aD0iMCIgTWFyZ2luaGVpZ2h0PSIwIiBIc3BhY2U9IjAiIFZzcGFjZT0iMCIgRnJhbWVib3JkZXI9IjAiIFNjcm9sbGluZz0ibm8iIHN0eWxlPSJ3aWR0aDoxMjBweDtIZWlnaHQ6MjQwcHg7Ij48YSBocmVmPSJodHRwOi8vYWRzLmdyb3VuZHNwZWFrLmNvbS9hLmFzcHg/Wm9uZUlEPTkmVGFzaz1DbGljayY7TW9kZT1IVE1MJlNpdGVJRD0xIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUdldCZNb2RlPUhUTUwmU2l0ZUlEPTEiIHdpZHRoPSIxMjAiIGhlaWdodD0iMjQwIiBib3JkZXI9IjAiIGFsdD0iIiAvPjwvYT48L2lmcmFtZT5kZAIDDxYCHglpbm5lcmh0bWwFE0FkdmVydGlzaW5nIHdpdGggVXNkAjgPZBYEAgMPDxYCHwJnZGQCBQ8PFgIfBAU8fi90cmFjay9zZWFyY2guYXNweD93aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4ZGQCOQ8PFgIfAmdkFgJmDxYCHgtfIUl0ZW1Db3VudAIDFgYCAQ9kFgRmDxUDAFdodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD00MWNkNTZiNi0wMGYxLTQ3MDItYjg2Ni0xYTI2OGM2NDlkMTMVQWxsZSBIYW5ub3BvbHkgQ2FjaGVzZAICDxUCTGh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD1kZjIxODRhYi1hOWVhLTRkMzAtOThlZC1lYzRlODUxYzM3MDYKR3VtbWlzZWVsZWQCAg9kFgRmDxUDDkFsdGVybmF0aW5nUm93V2h0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTBkY2YzZjg2LTkzNzItNDk5Yy04YjU3LWVkNDE5YmQ0OGUyMRBNZWluZSBFbXBmZWhsdW5nZAICDxUCTGh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD1jNDY1NDFmYy02YWU5LTQ0NTItODgzMy00NzBkZGZiZTljZWUGc2tyZWxsZAIDD2QWBGYPFQMAV2h0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTlhMjQ4ZGI5LTMwNjMtNDQ1Ny05MjA1LTg1MWZiZTA2YTAzZQlIYW5ub3BvbHlkAgIPFQJM" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="aHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTVjNGIwOTE1LTVjZWMtNGZhMS04YWZkLTRiM2NhNjdlMDA0ZQdrYWkyNzA3ZAI7Dw8WAh8CaGRkAjwPZBYCAgEPDxYCHwQFRS9oaWRlL3dwdGxpc3QuYXNweD9SZWZXcHRJRD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOTgmRFM9MWRkAj4PDxYGHgZSRFMuSUQLKXZHcm91bmRzcGVhay5XZWIuR1BYLldwdERhdGFTb3VyY2VzLCBUdWNzb24uQ29tbW9uLkxlZ2FjeSwgVmVyc2lvbj0zLjAuNDI1NS4xNjM0OSwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsAR4HUldQVC5JRCgrBAcxNDMzOTA5HwJoZGQCPw8PFgIfAmdkFgICAQ8PFgQfBAUvL21hcC9iZXRhL2RlZmF1bHQuYXNweD9sYXQ9NTIuMzczMjE3JmxuZz05LjcxMDgfAmdkZAJDDw8WAh8EBR4vc2Vlay9uZWFyZXN0LmFzcHg/dT1kYW5pZWwzNTRkZAJFDw8WAh8EBR8vc2Vlay9uZWFyZXN0LmFzcHg/dWw9ZGFuaWVsMzU0ZGQCRw9kFgoCAw8PFgIfBAVVL3NlZWsvbmVhcmVzdC5hc3B4P3R4PTMyYmM5MzMzLTVlNTItNDk1Ny1iMGY2LTVhMmM4ZmM3YjI1NyZsYXQ9NTIuMzczMjE3JmxuZz05LjcxMDgwMGRkAgUPDxYCHwQFWS9zZWVrL25lYXJlc3QuYXNweD90eD0zMmJjOTMzMy01ZTUyLTQ5NTctYjBmNi01YTJjOGZjN2IyNTcmbGF0PTUyLjM3MzIxNyZsbmc9OS43MTA4MDAmZj0xZGQCCQ8PFgIfBAUtL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi4zNzMyMTcmbG5nPTkuNzEwODAwZGQCCw8PFgIfBAUxL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi4zNzMyMTcmbG5nPTkuNzEwODAwJmY9MWRkAg8PDxYCHwQFR2h0dHA6Ly93d3cud2F5bWFya2luZy5jb20vZGlyZWN0b3J5LmFzcHg/Zj0xJmxhdD01Mi4zNzMyMTcmbG9uPTkuNzEwODAwZGQCSA8WAh8CaGQCSg8PFgIfBAUlL3Jldmlld3MvaG90ZWxzLWNvb3Jkcy01Mi4zNzMyLDkuNzEwOGRkAkwPZBYCAgEPDxYEHwEFlQc8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9tYXAvYmV0YS9kZWZhdWx0LmFzcHg/bGF0PTUyLjM3MzIxNyZsbmc9OS43MTA4IiB0YXJnZXQ9Il9ibGFuayI+R2VvY2FjaGluZy5jb20gR29vZ2xlIE1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/cT1OKzUyJWMyJWIwKzIyLjM5MytFKzAwOSVjMiViMCs0Mi42NDgrKEdDMVpYWDIpKyIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubWFwcXVlc3QuY29tL21hcHMvbWFwLmFkcD9zZWFyY2h0eXBlPWFkZHJlc3MmZm9ybXR5cGU9bGF0bG9uZyZsYXRsb25ndHlwZT1kZWNpbWFsJmxhdGl0dWRlPTUyLjM3MzIxNyZsb25naXR1ZGU9OS43MTA4Jnpvb209MTAiIHRhcmdldD0iX2JsYW5rIj5NYXBRdWVzdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy55YWhvby5jb20vbWFwc19yZXN1bHQ/bGF0PTUyLjM3MzIxNyZsb249OS43MTA4IiB0YXJnZXQ9Il9ibGFuayI+WWFob28gTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmJpbmcuY29tL21hcHMvZGVmYXVsdC5hc3B4P3Y9MiZzcD1wb2ludC41Mi4zNzMyMTdfOS43MTA4X0dDMVpYWDIiIHRhcmdldD0iX2JsYW5rIj5CaW5nIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnLz96b29tPTEyJmxhdD01Mi4zNzMyMTcmbG9uPTkuNzEwOCIgdGFyZ2V0PSJfYmxhbmsiPk9wZW4gQ3ljbGUgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnLz9tbGF0PTUyLjM3MzIxNyZtbG9uPTkuNzEwOCZ6b29tPTEyIiB0YXJnZXQ9Il9ibGFuayI+T3BlbiBTdHJlZXQgTWFwczwvYT48L2xpPh8CZ2RkAk4PZBYIAgEPFgIfAQURMzk2IExvZ2dlZCBWaXNpdHNkAgIPFgIfAmdkAgMPDxYEHwQFPX4vc2Vlay9nYWxsZXJ5LmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOTgfAQUWVmlldyB0aGUgSW1hZ2UgR2FsbGVyeWRkAgsPFgQfAQWNAVRoZXJlIGFyZSAzNjEgYWRkaXRpb25hbCBsb2dzLiA8YSBocmVmPSIvc2Vlay9jYWNoZV9kZXRhaWxzLmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOTgmbG9nPXkmZGVjcnlwdD15Ij5WaWV3IHRoZW0gYWxsPC9hPh8CaGQCTw8WAh8BBQR0cnVlZAJQDxYCHwEFSWxhdD01Mi4zNzMyMTc7IGxuZz05LjcxMDg7IGd1aWQ9JzM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OCc7DQpkAiQPFgIfAmhkAiUPZBYEAgEPFgIfAQUHRW5nbGlzaGQCAw8WAh8MAg4WHGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHw8FBWRlLURFHxAFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8RaGRkAgIPZBYCAgEPDxYIHw8FBWZyLUZSHxAFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHxFoZGQCAw9kFgICAQ8PFggfDwUFcHQtUFQfEAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHxFoZGQCBA9kFgICAQ8PFggfDwUFY3MtQ1ofEAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfEWhkZAIFD2QWAgIBDw8WCB8PBQVzdi1TRR8QBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfEWhkZAIGD2QWAgIBDw8WCB8PBQVubC1OTB8QBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfEWhkZAIHD2QWAgIBDw8WCB8PBQVjYS1FUx8QBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfEWhkZAIID2QWAgIBDw8WCB8PBQVwbC1QTB8QBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8RaGRkAgkPZBYCAgEPDxYIHw8FBWV0LUVFHxAFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfEWhkZAIKD2QWAgIBDw8WCB8PBQVuYi1OTx8QBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHxFoZGQCCw9kFgICAQ8PFggfDwUFa28tS1IfEAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfEWhkZAIMD2QWAgIBDw8WCB8PBQVlcy1FUx8QBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHxFoZGQCDQ9kFgICAQ8PFggfDwUFaHUtSFUfEAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfEWhkZAIyDxYCHwJnZAJGDxYCHwJnZAIDDxYCHwEFJ1NlcnZlcjogV0VCMTE7IEJ1aWxkOiBTMjVfSEZfMjAxMTA4MTkuNGRkc9vTvDEDIfCKoo6VXh6aAVvKF1E=" />
+</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=634320874095713794" 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=WxEs7-rTj_x5QVOKYJx9I9sJ1ujJNZaKaIuNNxy1QjvTDbJspPf_vt_rXjv59cUK8jZU16roHJUOK_16kjmQJS9wo63ekdYQf4LUbfNwLKbVQ6_T2RO7GcQMXj-AgXeXD2iExV1hztaiyaKh5oULFIcmtKmwzbF6256mq53kUzALRR4tKQXsLTK4KhQWOuHrc6may0DU4-ClEBinV-xZeqqgeEU1" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=1jhoW--B30uVuFpqsVSiKh9zxN7o0UTrj9Q1Rfl49wfVtiHypKcPQbXPbc0YIhn2wjWkb_gJTFMxREv0caCbIa7CkWLw2Bi0Rb1Gnq3GArgsx7oAvrF9h-TX7wMc05pvVcwF14ThMFGnmU14kfgfOawojVRaXjbx17YWj1H0WIdTPt6GYEWDM_7hDhRSD8XDH86jE4L1llgE_uFMU3IGWtuczEM86I-0Os9cfYpcUy3E8JFiHS_JDde8EnGl9wbrYkRYe52uTinDnfzBk6iEM_0MwNvkWA1lCFVL9vZXLNQnhYZWA8wZf40PnR7h2vsrGgVyEw9tDd5LNj-Nw2NxJoe6y37htJpIKlaX7eSPrw8r-aQU3diBl1uzTw057LpP9S3UrVkEyC4ieK_3s2l_NIyr1GaEX-wN3HfGrDgrxYZPea4dEW-wZniiFOVq-Flw9UXMeEm9aSH_wx8hRKcuaFsfhshkb4Cjj-rLCdESVz7rwC7_wUzl1QPkVSDi5R-EGRHb1dCclebVRjuwy7vE-Xyk7bTzUHsO15kYNYZimFKxNlew0hSUfLz_CeZ9YtjbzqjJDjTdu1eFrVU7v4t8YE9Fwmvh2Tt5hirDoTmEb4y3Mc9A0" type="text/javascript"></script>
+<script src="js/cachedetails.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">Knowledge Books</a> for more information.</p>
+
+ </div>
+ <![endif]-->
+
+ <div class="WarningMessage DownTime"><div><p>Geocaching.com will be going offline temporarily for a site update on Thursday, September 01, 2011 at approximately 11am PDT (convert to your local time <a href="http://www.worldtimeserver.com/convert_time_in_US-WA.aspx?y=2011&mo=9&d=1&h=11&mn=0" target="_blank">here</a>).</p></div></div>
+ <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="../default.aspx" 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/default.aspx"><img title="Your Profile" src="http://img.geocaching.com/user/avatar/771bca33-9d3a-4dd5-a1f2-e67cfcb9f941.jpg" alt="" style="border-width:0px;" /></a></p>
+ <p class="SignedInText">
+ <strong>Hello, <a href="/my/default.aspx" title="View Profile for blafoo" class="SignedInProfileLink">blafoo</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%3flog%3dy%26wp%3dGC1ZXX2%26numlogs%3d35%26decrypt%3dy">Sign Out</a>)<br />
+
+ <strong><img src="/images/icons/icon_smile.png" title="Caches Found" /> 408 · <img src="/images/challenges/types/sm/challenge.png" title="Challenges Completed" /> 1</strong>
+
+ <span id="ctl00_litPMLevel" style="display: block;">Premium Member</span>
+ </p>
+
+ </div>
+
+ </div>
+ <nav id="Navigation" class="span-24 last">
+
+
+ <ul class="Menu">
+ <li>
+ <a id="ctl00_hlNavPlay" accesskey="1" title="Play" href="../play/default.aspx">Play ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavGuide" accesskey="i" title="Guide" href="../guide/default.aspx">Guide</a></li>
+ <li><a id="ctl00_hlSubNavHide" accesskey="d" title="Hide & Seek a Cache" href="default.aspx">Hide & Seek a Cache</a></li>
+ <li><a id="ctl00_hlSubNavChallenges" title="Find Challenges" href="../challenges/default.aspx">Find Challenges</a></li>
+
+ <li><a id="ctl00_hlSubNavTrackables" accesskey="e" title="Find Trackables" href="../track/default.aspx">Find Trackables</a></li>
+ </ul>
+ </li>
+
+ <li id="ctl00_liNavProfile">
+ <a id="ctl00_hlNavProfile" accesskey="2" title="Your Profile" title="[Your Profile ▼]" href="../my/default.aspx">Your Profile ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavQuickView" accesskey="p" title="Quick View" href="../my/default.aspx">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_hlSubNavTrackables2" accesskey="7" title="Find Trackables" class="NoRightPadding" href="../my/travelbugs.aspx">Find Trackables</a> (<a id="ctl00_hlSubNavTrackablesYours" accesskey="8" title="Yours" class="NoSidePadding" href="../track/search.aspx?o=1&uid=0564a940-8311-40ee-8e76-7e91b2cf6284">Yours</a>)</li>
+
+ <li><a id="ctl00_hlSubNavPocketQueries" accesskey="9" title="Pocket Queries" href="../pocket/default.aspx">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_hlSubNavProfileChallenges" title="Challenges" href="../my/challenges.aspx">Challenges</a></li>
+ <li><a id="ctl00_hlSubNavAccount" accesskey="a" title="Account Details" href="../account/default.aspx">Account Details</a></li>
+ </ul>
+ </li>
+ <li>
+
+ <a id="ctl00_hlNavCommunity" accesskey="3" title="Community" href="../community/default.aspx">Community ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavForums" accesskey="f" title="Forums" href="../forums/default.aspx">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/default.aspx">Events</a></li>
+ <li><a id="ctl00_hlSubNavLocal" accesskey="z" title="Local Organizations" href="../organizations/default.aspx">Local Organizations</a></li>
+
+ </ul>
+ </li>
+ <li><a id="ctl00_hlNavVideos" accesskey="4" title="Videos" href="../videos/default.aspx">Videos</a></li>
+ <li>
+ <a id="ctl00_hlNavResources" accesskey="5" title="Resources" href="../resources/default.aspx">Resources ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavGPSReviews" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+
+ <li><a id="ctl00_hlSubNavTools" accesskey="o" title="Tools and Downloads" href="../tools/default.aspx">Tools and Downloads</a></li>
+ <li><a id="ctl00_hlSubNavTellaFriend" accesskey="-" title="Tell a Friend" href="../account/SendReferral.aspx">Tell a Friend</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavShop" accesskey="6" title="Shop" href="../shop/default.aspx">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_hlSubNavGPSGuide" accesskey="k" title="Guide to Buying a GPS Device" href="../about/buying.aspx">Guide to Buying a GPS Device</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p class="SocialMediaIcons NoBottomSpacing right">
+ <a id="ctl00_hlFacebook" title="Follow Us on Facebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts"><img id="ctl00_imgFacebook" title="Follow Us on Facebook" src="../images/home/icon_facebook.png" alt="Follow Us on Facebook" style="border-width:0px;" /></a> <a id="ctl00_hlTwitter" title="Follow Us on Twitter" href="http://twitter.com/GoGeocaching"><img id="ctl00_imgTwitter" title="Follow Us on Twitter" src="../images/home/icon_twitter.png" alt="Follow Us on Twitter" style="border-width:0px;" /></a> <a id="ctl00_hlFlickr" title="Follow Us on Flickr" href="http://www.flickr.com/photos/geocaching_com/"><img id="ctl00_imgFlickr" title="Follow Us on Flickr" src="../images/home/icon_flickr.png" alt="Follow Us on Flickr" style="border-width:0px;" /></a> <a id="ctl00_hlYouTube" title="Follow Us on YouTube" href="http://www.youtube.com/user/GoGeocaching"><img id="ctl00_imgYouTube" title="Follow Us on YouTube" src="../images/home/icon_youtube.png" alt="Follow Us on YouTube" style="border-width:0px;" /></a></p>
+
+ </nav>
+
+
+ </div>
+
+</header>
+ <section id="Content">
+
+
+ <div id="feedback-tab">
+ <a href="http://feedback.geocaching.com" onclick="UserVoice.Popin.show(uservoiceOptions); return false;">
+ <span id="text">Feedback</span><img id="uv-icon" src="/images/masters/uv-icon-green.png" height="29" width="25" alt="feedback" />
+ </a>
+ </div>
+
+
+ <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 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/2.gif" alt="Traditional Cache" title="Traditional Cache" width="32" height="32" /></a></p>
+
+ <h2 class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_CacheName">Hannopoly: Eislisenstrasse </span></h2>
+ <span class="minorCacheDetails">
+ A
+ cache
+ by <a href="http://www.geocaching.com/profile/?guid=8186d342-6f46-4d9e-8ba3-2e7b51426798&wid=36d45871-b99d-46d6-95fc-ff86ab564c98&ds=2">Rich Uncle Pennybags </a></span> <span class="minorCacheDetails">
+
+ Hidden
+ :
+ 10/16/2009</span>
+
+ </div>
+ <div class="CacheStarLabels span-3 BottomSpacing">
+
+ Difficulty:
+ <br />
+ Terrain:
+
+ </div>
+
+ <div 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_Localize6" 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 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 class="favorite" class="right">
+
+ <a id="uxFavContainerLink" href="javascript:void(0);">
+ <div class="favorite-container">
+ <span class="favorite-value">
+ 48</span><br />
+ Favorites
+ <img id="imgFavoriteArrow" src="/images/arrow-down.png" alt="Expand" title="Expand" />
+ </div>
+ </a>
+ <div class="favorite-dropdown">
+
+ <dl class="top">
+ <dt>
+ <img id="imgFavoriteScore" src="/images/loading3.gif" width="20" height="20" alt="Loading" title="Loading" /></dt>
+ <dd>
+ <span id="uxFavoriteScore"> </span></dd>
+ </dl>
+ <dl class="bottom">
+ <dt>
+ <img src="/images/silk/group_go.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="/seek/cache_favorited.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98">View Who Favorited this Cache</a></dd>
+ <dt>
+ <img src="/images/silk/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>
+
+ <p class="OldWarning NoBottomSpacing"><strong>Cache Issues:</strong></p><ul class="OldWarning"><li>This cache is temporarily unavailable. Read the logs below to read the status for this cache.</li></ul>
+
+
+ <div class="CacheInformationTable">
+ <div class="LocationData">
+ <p class="NoBottomSpacing">
+
+ <span id="ctl00_ContentBody_LatLon" style="font-weight:bold;">N 52° 22.393 E 009° 42.648</span>
+ <small>
+ <a id="ctl00_ContentBody_lnkConversions" title="Other Conversions" href="/wpt/?lat=52.373217&lon=9.7108&detail=1" target="_blank">Other Conversions</a>
+ </small>
+ <br />
+ <span id="ctl00_ContentBody_LocationSubPanel" style="display:inline;"><small>
+ UTM: 32U E 548389 N 5802787
+ </small>
+
+ <br />
+ <span id="ctl00_ContentBody_lblDistFromHome"><img src="/images/icons/compass/SE.gif" alt="SE" /> SE 9.2km from your home location</span>
+ <br />
+ </span>
+ <span id="ctl00_ContentBody_Location">In Niedersachsen, Germany</span>
+ </p>
+ </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="cdpf.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98" target="_blank">
+ <img src="/images/silk/printer.png" alt="Print" title="Print" width="16" height="16" /> <span>
+ No Logs
+ </span>
+ </a>
+
+ <a id="ctl00_ContentBody_lnkPrintFriendly5Logs" href="cdpf.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98&lc=5" target="_blank">5 Logs</a>
+ <a id="ctl00_ContentBody_lnkPrintFriendly10Logs" href="cdpf.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98&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=52.4162,9.594117 (Home Location)&daddr=52.373217,9.7108(Hannopoly%3a+Eislisenstrasse+)" target="_blank">
+ <img src="/images/silk/car.png" alt="Driving Directions" title="Driving Directions" width="16" height="16" /> <span>
+ Driving Directions
+ </span>
+ </a></small></p>
+ <div id="ctl00_ContentBody_uxPrintPDFSection" style="display: none;">
+
+ <p>
+ <img src="/images/pdf_icon.gif" width="16" height="16" alt="PDF" title="PDF" /> <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="/software/default.aspx">Read about waypoint downloads</a>
+ </small>
+ </p>
+
+ <p class="NoBottomSpacing TopSpacing">
+ <input type="submit" name="ctl00$ContentBody$btnLocDL" value="LOC waypoint file" id="ctl00_ContentBody_btnLocDL" />
+ |
+ <input type="submit" name="ctl00$ContentBody$btnGPXDL" value="GPX file" id="ctl00_ContentBody_btnGPXDL" />
+ |
+ <input type="submit" name="ctl00$ContentBody$btnSendToGPS" value="Send to My GPS" onclick="s2gps('36d45871-b99d-46d6-95fc-ff86ab564c98');return false;" id="ctl00_ContentBody_btnSendToGPS" />
+
+ |
+ <input type="submit" name="ctl00$ContentBody$btnSendToPhone" value="Send to My Phone" onclick="s2phone('GC1ZXX2');return false;" id="ctl00_ContentBody_btnSendToPhone" />
+ </p>
+
+ </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="/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="/images/silk/help.png" id="pcn_help" class="CacheNoteHelpImg" />
+ <p id="cache_note" class="NoBottomSpacing">
+
+ </p>
+ </fieldset>
+
+ <div class="UserSuppliedContent">
+
+
+
+ </div>
+
+ <br />
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_LongDescription"><center><img width="500" src=
+"http://img.geocaching.com/cache/5df239fe-92ea-4f18-ad9d-35910cfa5ea3.jpg"
+border="0" /><br />
+<br />
+<table width="510" border="0" cellpadding="0" cellspacing="0"
+align="center">
+<tr>
+
+<td colspan="1" rowspan="6" bgcolor="#000000" width="1"></td>
+<td colspan="3" rowspan="1" bgcolor="#000000" width="498" height=
+"2"></td>
+<td colspan="1" rowspan="6" bgcolor="#000000" width="1"></td>
+</tr>
+<tr>
+<td colspan="1" rowspan="4" bgcolor="#FFFFFF" width="10"></td>
+<td colspan="1" rowspan="1" bgcolor="#FFFFFF" width="478" height=
+"10"></td>
+<td colspan="1" rowspan="4" bgcolor="#FFFFFF" width="10"></td>
+</tr>
+<tr>
+<td align="left">
+<center><img src=
+"http://img.geocaching.com/cache/369dc80f-8d31-4528-b82d-f0f0b3828837.jpg"
+border="0" /><br />
+<br />
+<img src=
+"http://img.geocaching.com/cache/796d8063-4403-49a0-80d4-59f4bbf0d95f.jpg" />
+<br />
+<br /></center>
+<font face="Arial, Verdana" size="5" color="#000000"><b> 1.
+Finde die Besitzrechtkarte im Cache<br />
+
+ 2. Notiere Dir die drei Grundstückspreise<br />
+ 3. Beachte die Informationen vor Ort<br />
+ 4. Finde die Bonus-Caches<br />
+ 5. Werde König von Hannover!<br /></b></font><br />
+<center><img src=
+"http://img.geocaching.com/cache/796d8063-4403-49a0-80d4-59f4bbf0d95f.jpg" /><br />
+
+<br />
+<font face="Arial, Verdana" size="5" color=
+"#000000"><b>Informationen zum Cache:</b></font></center>
+
+</td>
+</tr>
+<tr>
+<td align="center"><font face="Arial, Verdana" size="4" color=
+"#000000"><b>So billig wie auf dem Monopolyspielbrett ist es in der
+Elisenstraße in Hannover nicht. Dafür aber sehr schön, denn sie
+liegt in Linden Nord!<br />
+Man weiß hier Bescheid. Dieser Cache ist rund um die Uhr zu finden,
+ohne ein Geschäft zu betreten oder mit einem Angestellten Kontakt
+aufzunehmen. Bitte vorsichtig öffnen!</b></font><br />
+<br />
+<center><img src=
+"http://img.geocaching.com/cache/796d8063-4403-49a0-80d4-59f4bbf0d95f.jpg" /><br />
+
+<br /></center>
+<table border="0">
+<tr>
+<td><a href=
+"http://www.geocaching.com/profile/?u=Rich%20Uncle%20Pennybags"
+target="_blank"><img src=
+"http://www.gummiseele.de/statbarfrosch/index.php?cacherid=ac5a08be-5454-4bc0-8bca-232e39131887&spruch=Reicher+Onkel+aus+Hannover&bild=http://www.gummiseele.de/bilder/statbar/ropb.jpg"
+border="0" /></a></td>
+<td><a href=
+"http://www.geocaching.com/profile/?u=tuermchenhausbewohner"
+target="_blank"><img src=
+"http://www.gummiseele.de/statbarfrosch/index.php?cacherid=ae754b67-d419-4d3e-ab16-33fe115a7502&spruch=A-Tribe-On-Their-Way&bild=http://www.gummiseele.de/bilder/statbar/thb.jpg"
+border="0" /></a></td>
+</tr>
+<tr>
+
+<td><a href="http://www.geocaching.com/profile/?u=Gummiseele"
+target="_blank"><img src=
+"http://www.gummiseele.de/statbarfrosch/index.php?spruch=Das+Team+mit+dem+Lachgas&cacherid=df2184ab-a9ea-4d30-98ed-ec4e851c3706&bild=http://www.gummiseele.de/bilder/statbar/gummiseele.jpg"
+border="0" /></a></td>
+<td><a href="http://www.geocaching.com/profile/?u=daniel354"
+target="_blank"><img src=
+"http://www.gummiseele.de/statbarfrosch/index.php?cacherid=8186d342-6f46-4d9e-8ba3-2e7b51426798&spruch=Nicht+1,2,3+sondern+354&bild=http://www.gummiseele.de/bilder/statbar/daniel354-k.jpg"
+border="0" /></a><br /></td>
+</tr>
+</table>
+</td>
+</tr>
+<tr>
+<td colspan="1" rowspan="1" bgcolor="#FFFFFF" width="478" height=
+"10"></td>
+</tr>
+<tr>
+<td colspan="3" rowspan="1" bgcolor="#000000" width="498" height=
+"2"></td>
+</tr>
+</table>
+</center></span>
+
+ </div>
+
+ <p>
+
+
+
+ </p>
+ <p>
+ <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 id="ctl00_ContentBody_cacheCodeWidget" class="CacheCodeWidget">
+
+ <p>
+
+ <a href="#" class="CacheCodeLink">
+ <span id="ctl00_ContentBody_uxWaypointName" class="GCCode">GC1ZXX2</span>
+ <span class="arrow">▼</span> </a>
+ </p>
+
+</div>
+
+<div class="CacheDetailNavigationWidget NoPrint">
+
+ <h3 class="WidgetHeader">
+ <img id="ctl00_ContentBody_GeoNav2_uxHeaderImage" src="../images/stockholm/16x16/home.gif" alt="Navigation" style="border-width:0px;" />
+
+ Navigation
+ </h3>
+ <div class="WidgetBody">
+
+ <ul>
+ <li><a href="/seek/log.aspx?ID=1433909" class="lnk"><img src="/images/stockholm/16x16/comment_add.gif" /> <span>Log your visit</span></a></li>
+<li><a href="/seek/gallery.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98" class="lnk"><img src="/images/stockholm/16x16/photos.gif" /> <span>View Gallery</span></a></li>
+<li><a href="/my/watchlist.aspx?w=1433909" class="lnk"><img src="/images/stockholm/16x16/icon_watchlist.gif" /> <span>Watch Listing</span></a></li>
+<li><a href="/bookmarks/ignore.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98&WptTypeID=2" class="lnk"><img src="/images/stockholm/16x16/cross.gif" /> <span>Ignore Listing</span></a></li>
+<li><a href="/bookmarks/mark.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98&WptTypeID=2" class="lnk"><img src="/images/stockholm/16x16/book_open_mark.gif" /> <span>Bookmark Listing</span></a></li>
+
+ </ul>
+
+ </div>
+
+
+</div>
+
+
+ <div id="ctl00_ContentBody_uxStatusInformation" class="StatusInformationWidget">
+
+
+
+ <div id="ctl00_ContentBody_pnlWatchedCount">
+
+ <p>
+ <img src="/images/icons/icon_watchlist.gif" alt="Watching" /> 13 user(s) watching this cache.</p>
+
+
+ </div>
+
+
+</div>
+
+ <p class="TopSpacing">
+
+ <a href="#" id="lnkSmallMap">
+ <img id="mapPreview" src='http://maps.google.com/maps/api/staticmap?zoom=10&size=228x150&markers=icon:http://www.geocaching.com/images/wpttypes/pins/2.png|52.373217,9.7108&sensor=false'
+ style="border: solid 1px #4D6180;" alt="Map Image" title="Map Image" width="228" height="150" />
+ </a>
+
+ </p>
+
+
+ <div class="CacheDetailNavigationWidget BottomSpacing">
+
+ <h3 class="WidgetHeader">
+
+
+ <img src="/images/icon_Boardattention.gif" height="16" width="16" alt="Info" title="Info" />
+ 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/stroller-yes.gif" alt="stroller accessible" title="stroller accessible" 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" /> <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"></span>
+ </p>
+ <p class="AlignCenter">
+ <small></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">
+
+ <img id="ctl00_ContentBody_uxTravelBugList_uxInventoryIcon" src="../images/WptTypes/sm/tb_coin.gif" alt="Inventory" style="height:16px;width:16px;border-width:0px;" />
+ <span id="ctl00_ContentBody_uxTravelBugList_uxInventoryLabel">Inventory</span>
+ </h3>
+ <div class="WidgetBody">
+
+
+ <p class="NoBottomSpacing">
+
+ <div id="ctl00_ContentBody_uxTravelBugList_uxNoTrackableItems">
+
+ <span id="ctl00_ContentBody_uxTravelBugList_uxNoTrackableItemsLabel">There are no Trackables in this cache.</span>
+
+
+</div>
+
+ <a id="ctl00_ContentBody_uxTravelBugList_uxTrackableItemsHistory" href="../track/search.aspx?wid=36d45871-b99d-46d6-95fc-ff86ab564c98">View past Trackables</a>
+ </p>
+ <p class="NoBottomSpacing">
+ <a id="ctl00_ContentBody_uxTravelBugList_uxWhatIsATravelBug" title="What is a Travel Bug?" href="../track/faq.aspx">What is a Travel Bug?</a>
+ </p>
+
+ </div>
+
+
+</div>
+
+
+<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">
+ <img src="/images/stockholm/16x16/pages.gif" width="16" height="16" alt="" /> Bookmark Lists</h3>
+ <div class="WidgetBody">
+
+
+ <ul>
+
+ <li style='padding: .5em;' class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=41cd56b6-00f1-4702-b866-1a268c649d13">
+ Alle Hannopoly Caches</a><br />
+
+ <small><em>
+ by
+ <a href="http://www.geocaching.com/profile/?guid=df2184ab-a9ea-4d30-98ed-ec4e851c3706">
+ Gummiseele</a> </em></small>
+ </li>
+
+ <li style='padding: .5em;' class='AlternatingRow'>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=0dcf3f86-9372-499c-8b57-ed419bd48e21">
+ Meine Empfehlung</a><br />
+
+ <small><em>
+ by
+ <a href="http://www.geocaching.com/profile/?guid=c46541fc-6ae9-4452-8833-470ddfbe9cee">
+ skrell</a> </em></small>
+ </li>
+
+ <li style='padding: .5em;' class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=9a248db9-3063-4457-9205-851fbe06a03e">
+ Hannopoly</a><br />
+
+ <small><em>
+ by
+ <a href="http://www.geocaching.com/profile/?guid=5c4b0915-5cec-4fa1-8afd-4b3ca67e004e">
+ kai2707</a> </em></small>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+ <a href="/bookmarks/default.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98&WptTypeID=2" title="View all 9 bookmark lists...">View all 9 bookmark lists...</a>
+
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
+
+
+ </div>
+
+
+ <div class="span-24 last">
+
+ <p>
+
+
+ <br />
+
+
+ <p>
+
+ <div id="uxlrgMap" class="fr">
+
+ <div class="CDMapWidget">
+ <p class="WidgetHeader NoBottomSpacing">
+ <a id="ctl00_ContentBody_uxViewLargerMap" title="View Larger Map" class="lnk" href="/map/beta/default.aspx?lat=52.373217&lng=9.7108" target="_blank"><img src="/images/silk/map_go.png" /> <span>View Larger Map</span></a>
+ | <a href="#" id="lnk_slippyMap">View Dynamic Map</a>
+
+ </p>
+ <div style="border: 1px solid #B0B0B0; width: 325px; height: 325px;">
+ <img id="staticMap" src="/images/blank.gif" style="width: 325px; height: 325px;" />
+ </div>
+ <div id="map_canvas" style="width: 325px; height: 325px; display: none;">
+ </div>
+ <p class="WidgetFooter">
+ <a id="ctl00_ContentBody_uxNotesAboutPrinting" href="#mapPrintingNotes">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="/seek/nearest.aspx?u=daniel354">hidden</a>
+ or
+ <a id="ctl00_ContentBody_uxFindLinksFoundByThisUser" href="/seek/nearest.aspx?ul=daniel354">found</a>
+ by this user
+ </li>
+
+ <li>
+ ...nearby <a id="ctl00_ContentBody_uxFindLinksNearbyCachesOfType" href="/seek/nearest.aspx?tx=32bc9333-5e52-4957-b0f6-5a2c8fc7b257&lat=52.373217&lng=9.710800">caches of this type</a>,
+ <a id="ctl00_ContentBody_uxFindLinksNearbyNotFound" href="/seek/nearest.aspx?tx=32bc9333-5e52-4957-b0f6-5a2c8fc7b257&lat=52.373217&lng=9.710800&f=1">that I haven't found</a>
+
+ </li>
+ <li>
+ ...all nearby <a id="ctl00_ContentBody_uxFindLinksAllNearbyCaches" href="/seek/nearest.aspx?lat=52.373217&lng=9.710800">caches</a>,
+ <a id="ctl00_ContentBody_uxFindLinksAllNearbyNotFound" href="/seek/nearest.aspx?lat=52.373217&lng=9.710800&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=52.373217&lon=9.710800">waymarks on Waymarking.com</a>
+
+ </li>
+
+
+ <li>
+ ...nearby <a id="ctl00_ContentBody_uxFindLinksHotels" href="/reviews/hotels-coords-52.3732,9.7108">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/beta/default.aspx?lat=52.373217&lng=9.7108" target="_blank">Geocaching.com Google Map</a></li><li><a href="http://maps.google.com/maps?q=N+52%c2%b0+22.393+E+009%c2%b0+42.648+(GC1ZXX2)+" target="_blank">Google Maps</a></li><li><a href="http://www.mapquest.com/maps/map.adp?searchtype=address&formtype=latlong&latlongtype=decimal&latitude=52.373217&longitude=9.7108&zoom=10" target="_blank">MapQuest</a></li><li><a href="http://maps.yahoo.com/maps_result?lat=52.373217&lon=9.7108" target="_blank">Yahoo Maps</a></li><li><a href="http://www.bing.com/maps/default.aspx?v=2&sp=point.52.373217_9.7108_GC1ZXX2" target="_blank">Bing Maps</a></li><li><a href="http://www.opencyclemap.org/?zoom=12&lat=52.373217&lon=9.7108" target="_blank">Open Cycle Maps</a></li><li><a href="http://www.openstreetmap.org/?mlat=52.373217&mlon=9.7108&zoom=12" target="_blank">Open Street Maps</a></li></span>
+</ul>
+
+ </span>
+ <p class="NoPrint">
+ <span id="ctl00_ContentBody_Images"></span>
+ </p>
+
+ <h3 class="clear">
+ 396 Logged Visits · <a id="ctl00_ContentBody_uxGalleryImagesLink" DisplayFormatPlural="View the Image Gallery of {0:#,###} images" DisplayFormatSingular="View the Image Gallery" href="gallery.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98">View the Image Gallery</a>
+ </h3>
+ <div class="InformationWidget">
+
+ <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> 367 <img src="/images/icons/icon_sad.gif" alt="Didn't find it" title="Didn't find it" /> 7 <img src="/images/icons/icon_note.gif" alt="Write note" title="Write note" /> 8 <img src="/images/icons/icon_disabled.gif" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> 3 <img src="/images/icons/icon_enabled.gif" alt="Enable Listing" title="Enable Listing" /> 2 <img src="/images/icons/icon_greenlight.gif" alt="Publish Listing" title="Publish Listing" /> 1 <img src="/images/icons/icon_maint.gif" alt="Owner Maintenance" title="Owner Maintenance" /> 7 <img src="/images/icons/big_smile.gif" alt="Post Reviewer Note" title="Post Reviewer Note" /> 1 </p></span>
+
+ <p class='NoBottomSpacing'>
+ <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>
+
+ <table class="LogsTable"><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=86281f53-49a2-4051-bc15-394d43724d65" id="171398380">Steinbreit</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=86281f53-49a2-4051-bc15-394d43724d65"><img src="http://img.geocaching.com/user/avatar/90f468a9-7059-43a7-a3c5-256879458a63.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 150</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_note.gif" alt="Write note" title="Write note" /> Write note</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/08/2011</span></div><div class="Clear LogContent"><p class="LogText">Daniel, du sprichst uns aus der Seele.. gestern Nacht dagewesen, um ihn ENDLICH zu heben, aber ohne Erfolg.. SCHNIEF</p><div class="AlignRight"><small><a href="log.aspx?LUID=845e6ead-bf44-4dd8-900e-81a78afc0887" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=8186d342-6f46-4d9e-8ba3-2e7b51426798" id="171063566">daniel354</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=8186d342-6f46-4d9e-8ba3-2e7b51426798"><img src="http://img.geocaching.com/user/avatar/b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 4,020 · <img src="/images/challenges/types/sm/challenge.png" align="absmiddle" /> 2</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_disabled.gif" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> Temporarily Disable Listing</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/06/2011</span></div><div class="Clear LogContent"><p class="LogText">Mist...</p><div class="AlignRight"><small><a href="log.aspx?LUID=fc463b7b-ce41-4d16-a7a4-2107b8454a91" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=1f223c0d-d9ee-44c4-b411-35eee724b868" id="170116614">urbannature</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=1f223c0d-d9ee-44c4-b411-35eee724b868"><img src="http://img.geocaching.com/user/avatar/476ea58f-a917-46c4-8e5a-b99484b514f6.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,360</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/01/2011</span></div><div class="Clear LogContent"><p class="LogText">Ging schneller als gedacht. :-)<br/><br/>TFTC</p><div class="AlignRight"><small><a href="log.aspx?LUID=09c89c9c-ec9f-4387-a6ae-05fe6d11d9bf" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=c6d0f76b-df41-44d0-9d1f-e60b0ffa4f0a" id="168683009">anady</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=c6d0f76b-df41-44d0-9d1f-e60b0ffa4f0a"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 71</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/24/2011</span></div><div class="Clear LogContent"><p class="LogText">Erster Hanopoly-Cach! Nach langem suchen und richtig lesen gefunden! ;)</p><div class="AlignRight"><small><a href="log.aspx?LUID=53e3436d-3bbc-4b46-aa34-ca28bbd0723a" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=78aeaa8b-044d-40ac-8a80-656a1c7f85c1" id="168640932">CriDi</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=78aeaa8b-044d-40ac-8a80-656a1c7f85c1"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 549</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/24/2011</span></div><div class="Clear LogContent"><p class="LogText">Zusammen mit anady hier gewesen und die bald Karte gefunden. Doch irgendwie war kein Logbuch auffindbar. Während wir noch etwas hin und her hantierten wurde es uns überraschend übergeben. Ob das so sein soll?<br/><br/>Die Idee aber ist prima.<br/><br/>TFTC! :-)</p><div class="AlignRight"><small><a href="log.aspx?LUID=fc364b9d-8ddb-4d0e-aa42-09b4dce93c94" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=e6a84779-ad63-4ba1-93fa-558a7190c8b4" id="167383966">2bupa</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=e6a84779-ad63-4ba1-93fa-558a7190c8b4"><img src="http://img.geocaching.com/user/avatar/e30c21ec-8bce-4b90-9c6f-ee7e618da9fe.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 2,324</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/18/2011</span></div><div class="Clear LogContent"><p class="LogText">Interessantes Geschehen am Sonnabendvormittag; die Müllabfuhr kommt, die Post bringt Neuigkeiten ins Haus, Nachbarn treffen sich auf der Straße und klönen eine Runde, ein Auto aus SFA blockiert die Kreuzung, ein Radfahrer entsorgt den Müll aus dem Fahrradkorb direkt am Baum und unser Team vergisst fast die Suche ...<br/><br/>DfdC!</p><div class="AlignRight"><small><a href="log.aspx?LUID=6a4c21a6-c795-4d8e-8f0c-a4d7a357f837" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=07449e94-85c8-4d2f-b387-cb0910b2d854" id="167163052">Weltallputze</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=07449e94-85c8-4d2f-b387-cb0910b2d854"><img src="http://img.geocaching.com/user/avatar/0b9746f6-1fd4-47b9-8f07-5b2bb3b21cc0.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 208</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/15/2011</span></div><div class="Clear LogContent"><p class="LogText">War schon öfters hier, aber die Muggels saßen da nur so rum. Heute früh aufgestanden....<br/><br/>DFDC grüße Putze</p><div class="AlignRight"><small><a href="log.aspx?LUID=2d51d81f-1581-4ae6-9254-0a5ffa163585" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=fcc7da31-928a-418f-ae3e-9f015b41ead6" id="166633564">Lumisch</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=fcc7da31-928a-418f-ae3e-9f015b41ead6"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 45</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/13/2011</span></div><div class="Clear LogContent"><p class="LogText">Voll geil. Juhu und danke</p><div class="AlignRight"><small><a href="log.aspx?LUID=f6c8b6f6-527b-4ea0-ba85-8637cf47bd73" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=3c66a437-1bbc-4cb1-bda0-8f609ac6efef" id="165707570">Nico Rohrssen</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=3c66a437-1bbc-4cb1-bda0-8f609ac6efef"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 26</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/09/2011</span></div><div class="Clear LogContent"><p class="LogText">lecker eis :)</p><div class="AlignRight"><small><a href="log.aspx?LUID=1adb0f76-9bfa-47a4-a7f2-4b3aab0ffcfb" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=116149cb-3e0f-4c50-b51e-95b756d64da4" id="164530395">Deistermonster</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=116149cb-3e0f-4c50-b51e-95b756d64da4"><img src="http://img.geocaching.com/user/avatar/54fe057c-f79a-4d82-b587-53c5b2b9386f.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 597</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/03/2011</span></div><div class="Clear LogContent"><p class="LogText">Nach langer sorgfältiger Vorplanung (an welchem Tag lohnt sich das frühe Aufstehen?) bei Sonnenaufgang angeschlichen und... gefunden! Gotcha! DfdC!</p><div class="AlignRight"><small><a href="log.aspx?LUID=477f0186-9c2a-40f9-8696-98afb9868205" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=399bef0c-1cdd-4024-a00e-3199484131af" id="164413372">Soukousa</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=399bef0c-1cdd-4024-a00e-3199484131af"><img src="http://img.geocaching.com/user/avatar/8480d5e4-f43e-48e5-a449-c01ce424ff05.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 597</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/03/2011</span></div><div class="Clear LogContent"><p class="LogText">Morgens um 6 Uhr muggelfrei geloggt.<img src="/images/icons/icon_smile_big.gif" border="0" align="middle" ></img>Endlich! Der war schon ewig geplant, aber um unserer Idee nachzugehen, fehlte zur "normalen" Tageszeit der Mut. Ist schon ein lustiges Versteck... TFTC sagt Soukousa</p><div class="AlignRight"><small><a href="log.aspx?LUID=e2c9bdad-9282-49f2-aba4-7e2ac058afa5" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=80970931-2e97-4291-abfd-564635f5d86f" id="163515249">Don Canallie</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=80970931-2e97-4291-abfd-564635f5d86f"><img src="http://img.geocaching.com/user/avatar/36c0f8e8-d7b6-469e-af8d-495a39baf8b3.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 555</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/29/2011</span></div><div class="Clear LogContent"><p class="LogText">Bei einem leckerem Eis das Logbuch siegniert.<br/><br/>TFTC<br/>Don Canallie</p><div class="AlignRight"><small><a href="log.aspx?LUID=cda47e99-cd5f-4fc1-aa40-cb3bccff4f46" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=2fe34526-d72d-478e-9b7f-9dc5c3e1d6c1" id="163307833">rimini08</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=2fe34526-d72d-478e-9b7f-9dc5c3e1d6c1"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 191</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/28/2011</span></div><div class="Clear LogContent"><p class="LogText">Während einer schönen Li-Li-Ahlem Fahrrad Cachingtour gesucht und geborgen, danach wieder korrekt versteckt, damit es nicht zu einfach wird. dfdc <img src="/images/icons/icon_smile.gif" border="0" align="middle" ></img></p><div class="AlignRight"><small><a href="log.aspx?LUID=caad1abc-eb5c-4b99-ae92-232057825f41" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=05f9d911-9cdc-4224-84b3-8e4923228958" id="163325464">Johansibär</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=05f9d911-9cdc-4224-84b3-8e4923228958"><img src="http://img.geocaching.com/user/avatar/4d235c2f-81b6-42c4-a28c-5df2182a289d.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 931</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/22/2011</span></div><div class="Clear LogContent"><p class="LogText"><i>gut gefunden, danke fürs verstecken!</i> <br/><br/><b> <font color='red'>TFTC<br/><br/><b> <font color='green'>...sprechenden Cachern kann geholfen werden <img src="/images/icons/icon_smile.gif" border="0" align="middle" ></img><br/><br/><img src="/images/icons/icon_smile.gif" border="0" align="middle" ></img> <b> <font size='3'> <font color='green'>J<font color='black'>o<font color='green'>h<font color='black'>a<font color='green'>n<font color='black'>s<font color='green'>i<font color='black'>b<font color='green'>ä<font color='black'>r <font color='orange'>2011</font> <img src="/images/icons/icon_smile.gif" border="0" align="middle" ></img></b></p><div class="AlignRight"><small><a href="log.aspx?LUID=c3475f2f-1e55-43aa-89a8-3a1ce8ddc525" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=4c851b2a-967c-427d-91eb-268b5ffb0f0a" id="162246062">Flunin</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=4c851b2a-967c-427d-91eb-268b5ffb0f0a"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 237</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/22/2011</span></div><div class="Clear LogContent"><p class="LogText">Schon vor ein paar Tagen die Karte entdeckt aber das loggen war uns nicht so klar...nun haben wir uns heute auch im Logbuch verewigt. Nette Idee, DfdC.</p><div class="AlignRight"><small><a href="log.aspx?LUID=e9eec580-6831-40ba-8530-c9722017a142" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=37bd64d5-a74f-4a12-b040-460f83652198" id="161705502">Leafhoppers</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=37bd64d5-a74f-4a12-b040-460f83652198"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 321</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/20/2011</span></div><div class="Clear LogContent"><p class="LogText">Nach nem kleinen Tipp dann doch noch loggen können :-)<br/>DFDC</p><div class="AlignRight"><small><a href="log.aspx?LUID=0b303d23-fb26-4b29-b5d2-2bb8828682ae" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=af49ff9e-5331-4565-97e8-5f5bf45e33b2" id="161990811">justify-jay</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=af49ff9e-5331-4565-97e8-5f5bf45e33b2"><img src="http://img.geocaching.com/user/avatar/198d173a-7efa-416c-b495-b15ed30f94a1.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,032 · <img src="/images/challenges/types/sm/challenge.png" align="absmiddle" /> 1</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/19/2011</span></div><div class="Clear LogContent"><p class="LogText">Zusammen mit i-teg um 15:25 Uhr geloggt. <br/>TFTC!<br/>#488</p><div class="AlignRight"><small><a href="log.aspx?LUID=1ac63b3e-075a-48b7-9a1f-222b19c71868" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=a30caa8b-0ba4-4a20-875f-ac825eacbf41" id="161988577">i-teg</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=a30caa8b-0ba4-4a20-875f-ac825eacbf41"><img src="http://img.geocaching.com/user/avatar/533a43c0-8416-452f-8011-f575dee42268.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,032 · <img src="/images/challenges/types/sm/challenge.png" align="absmiddle" /> 1</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/19/2011</span></div><div class="Clear LogContent"><p class="LogText">Auf Spontantour zusammen mit justify-jay um 15:25 Uhr zum Logbuch durchgedrungen :-) ! <br/>TFTC!<br/>#488</p><div class="AlignRight"><small><a href="log.aspx?LUID=19a1ae8a-e3d7-492c-a866-002064968183" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=344121a1-10f3-443a-9ff6-f90fc43ba8be" id="161489085">Kartoffelhunter</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=344121a1-10f3-443a-9ff6-f90fc43ba8be"><img src="http://img.geocaching.com/user/avatar/61105259-e319-4793-9bc3-51aae0eb9e10.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 732</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/18/2011</span></div><div class="Clear LogContent"><p class="LogText">Schnell gefunden da unsere Vorlogger scheinbar den Cache nicht wieder ganz genau plaziert hatten. Weils so schnell ging ne leckeres Eis in der Sonne genossen.<br/>Ein super Cache, vielen Dank dafür.<br/>Kartoffelhunter</p><div class="AlignRight"><small><a href="log.aspx?LUID=0686f7dd-e12b-4b99-b7c7-24df895f48fb" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=bc9f2cab-dad8-465f-8b73-0d7d420e043c" id="160254911">janko74</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=bc9f2cab-dad8-465f-8b73-0d7d420e043c"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 4</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/11/2011</span></div><div class="Clear LogContent"><p class="LogText">Unsere erste gefundene Hannopoly-Karte, bei bestem Wetter. Und zur Belohnung ein Lecker Eis für Leona, Tomke und mich.</p><div class="AlignRight"><small><a href="log.aspx?LUID=f315eb63-43e2-48ad-a3b9-fc775dfc9e27" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=bb8bc75b-c2b1-45fb-aca5-268bb3df3fa4" id="160049084">Niane</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=bb8bc75b-c2b1-45fb-aca5-268bb3df3fa4"><img src="http://img.geocaching.com/user/avatar/b805ee26-4562-4f1c-ae10-3a8219b6cab9.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 602</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/09/2011</span></div><div class="Clear LogContent"><p class="LogText">Den hatten wir vorm Tanzkurz noch kurz geloggt. Er ist nicht mehr wie er sein soll, aber man hat versucht uns zu erklären wie er mal gewesen ist. So richtig verstanden haben wir es aber nicht....! :-) Auch eine nette Idee so an sich - das Umfeld dagegen garnicht!</p><div class="AlignRight"><small><a href="log.aspx?LUID=1a45b830-b892-441a-a23c-ab117330dba2" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=96d1cd05-30d7-4623-9a74-864b62cc3c86" id="159934228">Ascarii</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=96d1cd05-30d7-4623-9a74-864b62cc3c86"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 212</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/08/2011</span></div><div class="Clear LogContent"><p class="LogText">Zusammen mit nite74 gesucht, gelesen, weiter gesucht.....nochmal gelesen. Dank nite74 das eigenartige Versteck dann auch gefunden. Danke für den netten Cache der ja eigentlich gar nicht direkt getarnt ist ;)</p><div class="AlignRight"><small><a href="log.aspx?LUID=54a6917d-49f5-43a6-a7f7-1f8c296d54fe" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=e5e42073-2ce3-4370-8d8e-97623bf1b24a" id="159768952">Nite74</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=e5e42073-2ce3-4370-8d8e-97623bf1b24a"><img src="http://img.geocaching.com/user/avatar/66bdf1e5-671e-4faa-a2f2-1796b54d9e30.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 665</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/08/2011</span></div><div class="Clear LogContent"><p class="LogText">Auf einer schönen Radtour bei sonnigen Wetter gefunden. Irgendwie hatten wir das Gefühl permanent unter Beobachtung zu stehen. Danke für den Cache.</p><div class="AlignRight"><small><a href="log.aspx?LUID=e2f40c79-2529-4b49-95de-e4dd4c60cd87" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=78d8d8d5-0f90-4512-8fa4-a7a669b24d81" id="159360791">Freaka</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=78d8d8d5-0f90-4512-8fa4-a7a669b24d81"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 372</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/06/2011</span></div><div class="Clear LogContent"><p class="LogText">Man das hat echt Überwindung gekostet….<br/>Gruß Freaka</p><div class="AlignRight"><small><a href="log.aspx?LUID=1bf4ba26-eb40-4edf-9965-267c4c0ff3a2" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=a08d6eb9-099d-4060-b04d-dbb85f9a8d0a" id="158889742">AJ02</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=a08d6eb9-099d-4060-b04d-dbb85f9a8d0a"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 310</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Was haben wir gesucht....!<br/>Männer, geht einfach eurer Natur nach, dann findet Ihr ihn auch!:-)</p><div class="AlignRight"><small><a href="log.aspx?LUID=612a9a53-9dab-450a-a846-f883b8e2d812" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a9221ab-91b1-4596-8770-0f06f71c0aef" id="158771231">Dani & Stefan</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a9221ab-91b1-4596-8770-0f06f71c0aef"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 310</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Was für ein Cache! Erst als der Durst zu groß wurde endlich fündig geworden! Zusammen mit AJ02, Honeys2004, Amod und AJ02 gefunden! TFTC</p><div class="AlignRight"><small><a href="log.aspx?LUID=aff7ff04-2f73-4097-a7e7-314539f006da" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=e1152205-8dae-44cc-b6a0-f43416a037d4" id="158753353">amod</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=e1152205-8dae-44cc-b6a0-f43416a037d4"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 44</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">O-Ton: "Sonst ist in unserer Straße ja auch nichts los!"<br/>Super Cache! Tftc!</p><div class="AlignRight"><small><a href="log.aspx?LUID=41d829f9-4c8c-44fb-bad7-f011baa9be2a" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=4e897b47-c73f-42a4-8116-d22b8795bb12" id="158747140">toolking</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=4e897b47-c73f-42a4-8116-d22b8795bb12"><img src="http://img.geocaching.com/user/avatar/08c912b7-540b-4119-a18c-ebd42b126927.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 207</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Auf ner regnerischen Runde mit Dani&Stefan, honeys2004, amod und aj02 gefunden! TFTC</p><div class="AlignRight"><small><a href="log.aspx?LUID=0787a62c-a3f8-4fbb-a61a-5b1d9c107d19" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9abf5420-0bb3-4d64-864f-767a6bcb8e5c" id="158747089">Honeys2004</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9abf5420-0bb3-4d64-864f-767a6bcb8e5c"><img src="http://img.geocaching.com/user/avatar/19a2a750-3248-46b8-aca0-251ddbbae232.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 175</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Heute auf kleiner Tour mit aj02, amod, dani & Stefan und toolking gut gefunden... Tftc</p><div class="AlignRight"><small><a href="log.aspx?LUID=bdb1b48b-2151-410e-b746-478039b1e4b1" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=c8effd64-6f9a-4231-a6b2-6c7f1a75c4f1" id="158014067">Gamina</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=c8effd64-6f9a-4231-a6b2-6c7f1a75c4f1"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 14</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/28/2011</span></div><div class="Clear LogContent"><p class="LogText">ich bin mit loewenkind und erzengel2010 unterwegs gewesen, zusammen haben wir es gut gefunden<br/>gamina</p><div class="AlignRight"><small><a href="log.aspx?LUID=aabe500a-810d-4898-857c-86a5b7c925d1" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9623149e-9df9-46a0-8fa4-ca3413ab472c" id="158012843">erzengel2010</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9623149e-9df9-46a0-8fa4-ca3413ab472c"><img src="http://img.geocaching.com/user/avatar/9e1c13d1-9dab-4960-9220-620077f2405e.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 119</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/28/2011</span></div><div class="Clear LogContent"><p class="LogText">Hallo,<br/><br/>zusammen mit loewenkind und gamina haben wir endlich mal wieder eine weitere Straße des Hannopolys geholt :)<br/><br/>TFTC</p><div class="AlignRight"><small><a href="log.aspx?LUID=db0f276f-6a19-49e2-8fb3-5a937dae1eef" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=550f670d-b1fb-4343-828f-15cc4af4c527" id="157716943">Loewenkind</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=550f670d-b1fb-4343-828f-15cc4af4c527"><img src="http://img.geocaching.com/user/avatar/05546461-7ffc-445e-b367-6a1b59a17b8d.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 234</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/28/2011</span></div><div class="Clear LogContent"><p class="LogText">da scheint die gesamte Zuschauertruppe gewusst zu haben um was es ging....erst ein wenig zum Affen gemacht, dann gut gefunden. dfdc, Loewenkind.</p><div class="AlignRight"><small><a href="log.aspx?LUID=dc7ddc9b-9074-469a-ac35-49097fd161d7" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=ca3b3800-cce1-4aff-ae20-e22532373efd" id="156033894">eddie514</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=ca3b3800-cce1-4aff-ae20-e22532373efd"><img src="http://img.geocaching.com/user/avatar/b2100258-8e44-403d-b3a3-bc4d4129fa60.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 552 · <img src="/images/challenges/types/sm/challenge.png" align="absmiddle" /> 2</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/21/2011</span></div><div class="Clear LogContent"><p class="LogText">Hier interessierte keinen auch nur die Bohne, dass ich hier rum stand und nach Geistesblitz dieses Versteck entblößte [23:15h]. Obwohl Versteck? <img src="/images/icons/icon_smile_wink.gif" border="0" align="middle" ></img> Naja, jedenfalls im bekannten Style, sehr nett und wieder mal mit Aha-Effekt <img src="/images/icons/icon_smile_big.gif" border="0" align="middle" ></img> DfdC.</p><div class="AlignRight"><small><a href="log.aspx?LUID=12106a73-3f79-4896-921e-0c5faef24f8a" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=6ad1fccc-1b4c-4cd3-a41d-8cac36fb6dcc" id="155787633">hoshiclan</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=6ad1fccc-1b4c-4cd3-a41d-8cac36fb6dcc"><img src="http://img.geocaching.com/user/avatar/f4be057e-cfaf-471a-bdd6-100e9a8d5b96.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 97</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/20/2011</span></div><div class="Clear LogContent"><p class="LogText">schön improvsiert ;-)<br/><br/>dfdc hoshiclan</p><div class="AlignRight"><small><a href="log.aspx?LUID=244971c3-f761-4df4-a95d-9db6c7018833" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=d2426a2d-946b-42b0-b593-58c571810f70" id="155741728">busseclan</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=d2426a2d-946b-42b0-b593-58c571810f70"><img src="http://img.geocaching.com/user/avatar/c1e9297e-1776-4b90-98ac-340511a1c3be.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 244</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/20/2011</span></div><div class="Clear LogContent"><p class="LogText">heute war genau das richtige wetter dafür <img src="/images/icons/icon_smile_tongue.gif" border="0" align="middle" ></img> wieder ein super kreativer hannopoly.<br/><br/>dfdc</p><div class="AlignRight"><small><a href="log.aspx?LUID=eaecae75-d83b-45bd-a4e7-3c00eb4aaeda" title="View Log">View Log</a></small> </div></div></div></td></tr></table>
+
+
+ <p>
+
+ </p>
+ <p>
+ <small>
+ Current Time: <time datetime="2011-09-01T07:51:52Z">09/01/2011 07:51:52 Pacific Daylight Time (14:51 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2011-07-10T10:50:01Z">2011-07-10T10:50:01Z</time> on 07/10/2011 03:50:01 Pacific Daylight Time (10:50 GMT) <br/>Rendered From:Database<br />Coordinates are in the WGS84 datum
+ </small>
+
+ </p>
+
+
+ <div id="dlgClipboard">
+ <input type="text" class="TextFormat" />
+ <a href="#" onclick="$('#dlgClipboard').hide();return false;">
+ <img src="/images/stockholm/mini/close.gif" alt="Close" title="Close" /></a>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ <!--
+ var dh, lat, lng, guid;
+
+ dh = 'true';
+
+ lat=52.373217; lng=9.7108; guid='36d45871-b99d-46d6-95fc-ff86ab564c98';
+
+
+ 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;
+
+ $("#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: "GET",
+ cache: false,
+ url: '/datastore/favorites.svc/update/' + userToken + '/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: "GET",
+ cache: false,
+ url: '/datastore/favorites.svc/update/' + userToken + '/false',
+ success: function () {
+ canUpdateFavoriteStatus = true;
+ gotScore = false;
+ showFavoriteScore();
+ }
+ });
+
+ return false;
+ }
+ });
+
+ $("#lnkSmallMap").click(function(e) {
+ e.preventDefault();
+
+ document.getElementById("uxlrgMap").scrollIntoView(true);
+
+ return false;
+ });
+
+ $(function () {
+
+ 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...'
+ };
+
+ $("#staticMap").lazyload();
+
+ $("time.timeago").timeago();
+
+ $("a.tb_images").fancybox({'type': 'image', 'titlePosition': 'inside'});
+
+ var sn = Cookie.get('sn');
+
+ if ($('#trNotPM')) {
+ $('#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.CacheCodeLink").click(function (e) {
+ e.preventDefault();
+
+ $("#dlgClipboard")
+ .show()
+ .position({
+ of: $("a.CacheCodeLink"),
+ my: "right top",
+ at: "right bottom",
+ offset: "0 5"
+ })
+ .find("input")
+ .val('http://coord.info/' + $('.GCCode').text())
+ .focus()
+ .select();
+
+ });
+
+ $(document).mouseup(function (e) {
+ if ($(e.target).parent("div#dlgClipboard").length == 0) {
+ $("div#dlgClipboard").hide();
+ }
+ });
+
+ if (mapLatLng != null) {
+
+ $("#ctl00_ContentBody_uxNotesAboutPrinting").fancybox({
+ overlayShow: false
+ });
+
+ var staticUrl = [];
+ var markers=[];
+
+ staticUrl.push("http://maps.google.com/maps/api/staticmap?size=325x325&sensor=false");
+ staticUrl.push("&markers=icon:http://www.geocaching.com/images/wpttypes/pins/" + mapLatLng.type + ".png|" + mapLatLng.lat + "," + mapLatLng.lng);
+ markers.push({lat:mapLatLng.lat, lng:mapLatLng.lng, marker:"http://www.geocaching.com/images/wpttypes/pins/" + mapLatLng.type + ".png", primary:true});
+ if (cmapAdditionalWaypoints != null && cmapAdditionalWaypoints.length > 0) {
+ for (var x = 0, len = cmapAdditionalWaypoints.length; x < len; x++) {
+ var item = cmapAdditionalWaypoints[x]
+ staticUrl.push("&markers=icon:http://www.geocaching.com/images/wpttypes/pins/" + item.type + ".png|" + item.lat + "," + item.lng);
+ markers.push({lat:item.lat, lng:item.lng, marker: "http://www.geocaching.com/images/wpttypes/pins/" + item.type + ".png",primary:false});
+ }
+ } else {
+ staticUrl.push("&zoom=14");
+ }
+ $("#staticMap")
+ .data("markers", markers )
+ .attr("original", staticUrl.join(""));
+ }
+ });
+
+ function loadDynamicMap() {
+ if (typeof google !== 'undefined' && typeof google.maps !== 'undefined') {
+ displayDynamicMap();
+ } else {
+ var script = document.createElement("script");
+ script.type = "text/javascript";
+ script.src = "http://maps.google.com/maps/api/js?v=3&sensor=false&indexing=false&callback=displayDynamicMap";
+ document.documentElement.firstChild.appendChild(script);
+ }
+ }
+
+ function displayDynamicMap() {
+ $sm = $("#staticMap");
+ $map = $('<div />').addClass('map').css({ height: 325, width: 325 });
+ $("#lnk_slippyMap").replaceWith($("<span>Showing Dynamic Map</span>"));
+
+ var items = $sm.data("markers");
+ console.log(items);
+ // walk the array to find the full bounds
+ var bounds = new google.maps.LatLngBounds();
+ var markers = [];
+
+ for (var x = 0, len=items.length; x < len; x++) {
+ var item = items[x];
+ var ll = new google.maps.LatLng(item.lat, item.lng);
+ bounds.extend(ll);
+ markers.push(new google.maps.Marker( {
+ clickable:false,
+ icon: item.marker,
+ position: ll, zIndex: google.maps.Marker.MAX_ZINDEX + (item.primary ? 1 : 0)
+ }));
+ }
+
+ $sm.replaceWith($map);
+
+ var map = new google.maps.Map($map.get(0), {
+ zoom: 14,
+ center: bounds.getCenter(),
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
+ mapTypeControl: true,
+ navigationControlOptions: {
+ style: google.maps.NavigationControlStyle.SMALL
+ }
+ });
+
+ for(var x=0, len=markers.length; x<len;x++) {
+ markers[x].setMap(map);
+ }
+
+ if (bounds.length>1)
+ map.fitBounds(bounds);
+ }
+
+ </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 id="selected_language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul id="locale_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','')">Nederlands</a></li>
+
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl07$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl08$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl09$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl10$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl11$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl12$uxLocaleItem','')">Español</a></li>
+
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl13$uxLocaleItem','')">Magyar</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function() {
+ jQuery("#selected_language a").click(function (e) {
+ e.preventDefault();
+ jQuery("#locale_list").show().position({
+ of: $("#selected_language"),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 3",
+ collision: "fit fit"
+ });
+ jQuery(document).click(function () {
+ jQuery("#locale_list").fadeOut("fast");
+ });
+ return false;
+ });
+ });
+</script>
+
+ </div>
+ <div class="span-6">
+
+ <p class="FooterHeader"><strong>Resources</strong></p>
+ <ul class="FooterLinks">
+
+ <li><a id="ctl00_hlFooterGuide" accesskey="i" title="Guide" href="../guide/default.aspx">Guide</a></li>
+ <li><a id="ctl00_hlFooterHistory" title="History" href="../about/history.aspx">History</a></li>
+ <li><a id="ctl00_hlFooterBrochures" title="Brochures" href="../tools/default.aspx#Guide">Brochures</a></li>
+ <li><a id="ctl00_hlFooterGlossary" title="Glossary of Terms" href="../about/glossary.aspx">Glossary of Terms</a></li>
+ <li><a id="ctl00_hlFooterTools" accesskey="o" title="Tools and Downloads" href="../tools/default.aspx">Tools and Downloads</a></li>
+
+ <li><a id="ctl00_hlFooterReferral" title="Tell A Friend About Geocaching" href="../account/SendReferral.aspx">Tell A Friend About Geocaching</a></li>
+
+
+ </ul>
+
+ </div>
+ <div class="span-6">
+
+ <p class="FooterHeader"><strong>Questions & Suggestions</strong></p>
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterKnowledge" title="Knowledge Books Support" rel="external" href="http://support.groundspeak.com/index.php">Knowledge Books Support</a></li>
+ <li><a id="ctl00_hlFooterEmail" title="Email Support" rel="external" href="http://support.groundspeak.com/index.php?pg=request">Email Support</a></li>
+
+ <li><a id="ctl00_hlFooterForums" accesskey="f" title="Forums" href="../forums/default.aspx">Forums</a></li>
+
+ <li id="ctl00_liUserVoice"><a id="ctl00_hlFooterFeedback2" title="Feedback Site" rel="external" href="http://feedback.geocaching.com/">Feedback Site</a></li>
+ <li><a id="ctl00_hlFooterContact" title="Contact" href="../contact/default.aspx">Contact</a></li>
+ </ul>
+
+ </div>
+ <div class="span-6">
+
+ <p class="FooterHeader"><strong>Press</strong></p>
+
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterNews" title="News Articles" href="../press/default.aspx">News Articles</a></li>
+ <li><a id="ctl00_hlFooterGCFactSheet" title="Geocaching Fact Sheet" rel="document" href="../articles/Brochures/footer/FactSheet_Geocaching.pdf">Geocaching Fact Sheet</a></li>
+ <li><a id="ctl00_hlFooterGCCOMFactSheet" title="Geocaching.com Fact Sheet" rel="document" href="../articles/Brochures/footer/FactSheet_GeocachingCom.pdf">Geocaching.com Fact Sheet</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-6 last">
+
+ <p class="FooterHeader"><strong>More</strong></p>
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterAbout" title="About Groundspeak" href="../about/groundspeak.aspx">About Groundspeak</a></li>
+ <li></li>
+ <li><a id="ctl00_hlFooterHotels" title="Hotels" href="/reviews/hotels">Hotels</a></li>
+
+ <li><a id="ctl00_hlFooterGPS" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+ <li><a id="ctl00_hlFooterBenchmarks" title="Find a Benchmark" href="../mark/default.aspx">Find a Benchmark</a></li>
+ </ul>
+
+ </div>
+ <p class="span-24 last FooterBottom">Copyright © 2000-2011 <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></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">
+ //jquery method
+ var uservoiceOptions = {};
+ jQuery(function ($) {
+ $.extend(uservoiceOptions, {
+ key: 'geocaching',
+ host: 'feedback.geocaching.com',
+ forum: '75775',
+ //alignment: 'left',
+ //background_color: '#c1caa8',
+ //text_color: 'white',
+ //hover_color: '#acb88d',
+ lang: 'en',
+ showTab: false
+ });
+ if (typeof (uvtoken) != "undefined") {
+ $.extend(uservoiceOptions, { params: { sso: uvtoken} });
+ }
+ var uv = document.createElement('script');
+ uv.setAttribute('type', 'text/javascript');
+ uv.setAttribute('src', ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js");
+ uv.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(uv);
+ });
+
+ $('#feedback-tab a').hover(function () {
+ $('#feedback-tab a span#text').toggle();
+ });
+ </script>
+
+
+
+<script type="text/javascript">
+//<![CDATA[
+var uvtoken = 'DbFDfIrSTaXyfNf74lbdopy%2bTw%2fC84Gn87pU%2b3r69toc4lYTKyii0cXY42BXT7amAeAEUCcV1MyzYH%2f69bWOOPpoeX%2bbieAcbR42VWJ0ozDji%2bGxnD7m24tFSz5IO1xdsQNZJhBlwv62wiJusWRs4vQiHVWgnFAU01mmk9eDst2V61w69Ts3ncrtnyFXWKDynrx4baZG9Q3f8MAQSumx8V87SkXQQxARV0DlC2KyTSyyezAJlFY8mgS2FvPgkfZokYSsIukAfxYzp%2bWJalH%2fr1%2b7qgX%2bE8o%2bLEY4Lf7kmL8uXAaI%2beI9pu%2fI9UMNt5f32X0ekYRvCfQbhGsPSH%2fKuMfpO6MwopcZwdZ4Rc5lRIyqJYg2fb7DORwL5O8I%2fN7Lbd56XjaZGigv3JjJZq9OMOuAgOvMLtNkrLbx4hdThQQ%3d';mapLatLng = { lat:52.373217, lng:9.710800, type:2 };var userToken = 'FOUTFKOKLELXOHWTCXQ5OPFWCPDJUY2MZWCQGTLEP77CQWU62XB7AO63HIA7M4BLX32AYJHR23WE4CEOZFIDVH3DUJLLMNLHNGCUDZLD7WMJCJCBFWNQ';//]]>
+</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');
+ });
+ // 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();
+ }
+ });
+ </script>
+
+
+
+
+ <script type="text/javascript" language="javascript">
+ <!--
+
+ $('#uxFavPointsWhatsThis').qtip({
+ content: {
+ text: $("#loc_favPointsWhatsThisDesc").html(),
+ title: {
+ text: $("#loc_favPointsWhatsThisTitle").html(),
+ button: true
+ }
+ },
+ position: {
+ my: 'top center',
+ at: 'bottom center'
+ },
+ show: {
+ event: 'click'
+ },
+ hide: 'click unfocus',
+ style: {
+ classes: 'ui-tooltip'
+ }
+ })
+
+ 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: "GET",
+ cache: false,
+ url: '/datastore/favorites.svc/score/' + 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>
+
+
+
+ <script type="text/javascript">
+ _qoptions = {
+ qacct: "p-f6VPrfmR4cujU"
+ };
+ (function () {
+ var quant = document.createElement('script');
+ quant.src = ('https:' == document.location.protocol ?
+ 'https://' : 'http://') +
+ 'edge.quantserve.com/quant.js';
+ quant.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(quant);
+ })();
+ </script>
+ <noscript>
+ <img src="http://pixel.quantserve.com/pixel/p-f6VPrfmR4cujU.gif" style="display: none;" height="1" width="1" alt="Quantcast" />
+ </noscript>
+
+ <!-- Server: WEB11; Build: S25_HF_20110819.4 -->
+ </body>
+</html>
diff --git a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java new file mode 100644 index 0000000..6c6c48a --- /dev/null +++ b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java @@ -0,0 +1,92 @@ +package cgeo.geocaching.test.mock;
+
+
+public class GC1ZXX2 extends GCBase {
+
+ @Override
+ public Float getDifficulty() {
+ return 3.0f;
+ }
+
+ @Override
+ public String getGeocode() {
+ return "GC1ZXX2";
+ }
+
+ @Override
+ public String getLatitute() {
+ return "N 52° 22.393";
+ }
+
+ @Override
+ public String getLongitude() {
+ return "E 009° 42.648";
+ }
+
+ @Override
+ public String getOwner() {
+ return "Rich Uncle Pennybags ";
+ }
+
+ @Override
+ public String getSize() {
+ return "other";
+ }
+
+ @Override
+ public Float getTerrain() {
+ return 1.5f;
+ }
+
+ @Override
+ public String getType() {
+ return "traditional";
+ }
+
+ @Override
+ public boolean isArchived() {
+ return false;
+ }
+
+ @Override
+ public boolean isDisabled() {
+ return true;
+ }
+
+ @Override
+ public boolean isMembersOnly() {
+ return false;
+ }
+
+ @Override
+ public boolean isOwn() {
+ return false;
+ }
+
+ @Override
+ public String getOwnerReal() {
+ return "daniel354";
+ }
+
+ @Override
+ public String getHint() {
+ return "";
+ }
+
+ @Override
+ public String getDescription() {
+ return "<center><img width=\"500\"";
+ }
+
+ @Override
+ public String getShortDescription() {
+ return "";
+ }
+
+ @Override
+ public String getName() {
+ return "Hannopoly: Eislisenstrasse ";
+ }
+
+}
+
\ No newline at end of file diff --git a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html new file mode 100644 index 0000000..1a9ab61 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html @@ -0,0 +1,1850 @@ +
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+ <head id="ctl00_Head1"><meta charset="utf-8" />
+ <!--[if IE]><![endif]-->
+ <title>
+ GC2CJPF Kinderwald KiC (Multi-cache) in Niedersachsen, Germany created by Tom03
+</title><meta name="DC.title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta property="og:title" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta property="og:site_name" content="Geocaching - The Official Global GPS Cache Hunt Site" /><meta property="og:type" content="website" /><meta 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-2011 Groundspeak, Inc. All Rights Reserved." /><!-- Copyright (c) 2000-2011 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 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="/favicon.ico" /><link rel="shortcut icon" href="/favicon.ico" /><link rel="apple-touch-icon" href="/apple-touch-icon.png" /><link rel="image_src" href="/preview.png" /><meta property="og:image" content="/preview.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 rel="stylesheet" type="text/css" media="screen,projection" href="../css/tlnMasterScreen.css" /><link rel="stylesheet" type="text/css" media="all" href="../css/tlnMain.css" /><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.6.1/jquery.min.js"></script>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/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/silk/note.png') no-repeat 0 0;
+ padding-left:18px;
+ }
+ legend.warning{
+ background:url('../images/silk/exclamation.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;
+ }
+ #tiptip_content{
+ *background-color:#000;
+ }
+ .maxed {
+ color:#992a2a;
+ }
+ .Hidden
+ {
+ display: none;
+ }
+
+ </style>
+ <script type="text/javascript">
+ <!--
+ var ad_display_count = 0;
+ function ShowListings(showCount) {
+ document.write('<br /><table border=0 cellpadding=2 cellspacing=0 width=100% bgcolor="#C0CEE3">');
+ var i = 6 + (ad_display_count * 6); ad_display_count = ad_display_count + showCount
+ while (i < (zSr.length)) {
+ var descr = zSr[i++], unused1 = zSr[i++], clickURL = zSr[i++], title = zSr[i++], sitehost = zSr[i++], unused2 = zSr[i++];
+ document.write('<tr bgcolor="#ffffff"><td width="' + (100 / showCount) + '%" valign=top align=left class="clsCell"><div class=clsResult><a TARGET="_new" HREF="' + clickURL + '" class="clsResultTitle">' + title + '</a></div><div class=clsResultDescription>' + descr + '</div><div class=clsURL>' + sitehost + '</div></td></tr>');
+ if (i >= ((ad_display_count * 6) + 6)) break;
+ }
+ document.write('<tr><td align=right><a href="http://searchmarketing.yahoo.com/srch/cm.php?" target="_blank" class="title" style="text-decoration:underline">Ads by Yahoo!</a></td></tr>');
+ document.write('</table>');
+ //write the yahoo logo
+ }
+
+ function dht(linkVar) {
+ linkVar = $(linkVar);
+
+ try {
+
+ $('#div_hint')
+ .html(
+ convertROTStringWithBrackets(
+ $('#div_hint').html()
+ )
+ );
+ linkVar.html((linkVar.html() == 'Decrypt') ? 'Encrypt' : 'Decrypt');
+ }
+ catch (e) {
+ alert(e);
+ return false;
+ }
+ return false;
+ }
+ // -->
+ </script>
+ <script>
+ var mapLatLng = null,
+ cmapAdditionalWaypoints = [];
+ </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="100167303362705" property="fb:app_id" /><meta name="og:url" content="http://coord.info/GC2CJPF" property="og:url" /><meta name="og:description" content="Von Nachwuchs-Cachern für Nachwuchs-Cacher." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/3.png" property="og:image" /><meta name="og:title" content="Kinderwald KiC" property="og:title" /><meta name="description" content="Kinderwald KiC (GC2CJPF) was created by Tom03 on 7/31/2010. It's a Small size geocache, with difficulty of 2.5, terrain of 2. It's located in Niedersachsen, Germany. Von Nachwuchs-Cachern für Nachwuchs-Cacher. Kleiner Multi über 7 Stationen. Länge ca. 1 km + 1km für den Rückweg. Die ZS befinden sich alle am KLEINEN BACH innerhalb des Kinderwaldes." /><link rel="alternate" href="../datastore/rss_galleryimages.ashx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376" type="application/rss+xml" title="[Gallery Images]" id="GalleryImages" /></head>
+ <body background="http://www.blafoo.de/images/Kinderwald.jpg" class="CacheDetailsPage">
+ <form name="aspnetForm" method="post" action="cache_details.aspx?log=y&wp=GC2CJPF&numlogs=35&decrypt=y" 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="/wEPDwUKMTY4Njc0NTYxMA8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE4MTE0MDkWAmYPZBYGZg9kFgYCCg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMSBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgsPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMSBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAicPFgIeB1Zpc2libGVoZAIBD2QWEgIFDxYCHwFkZAIIDxYCHwJnFgoCAQ8PFgIeCEltYWdlVXJsBU5odHRwOi8vaW1nLmdlb2NhY2hpbmcuY29tL3VzZXIvYXZhdGFyLzc3MWJjYTMzLTlkM2EtNGRkNS1hMWYyLWU2N2NmY2I5Zjk0MS5qcGdkZAIDDxYCHwEFaEhlbGxvLCA8YSBocmVmPSIvbXkvZGVmYXVsdC5hc3B4IiB0aXRsZT0iVmlldyBQcm9maWxlIGZvciBibGFmb28iIGNsYXNzPSJTaWduZWRJblByb2ZpbGVMaW5rIj5ibGFmb288L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFrQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmxvZyUzZHklMjZ3cCUzZEdDMkNKUEYlMjZudW1sb2dzJTNkMzUlMjZkZWNyeXB0JTNkeWRkAgcPFgIfAQWtATxpbWcgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fc21pbGUucG5nIiB0aXRsZT0iQ2FjaGVzIEZvdW5kIiAvPiA0MDgmbmJzcDsmbWlkZG90OyZuYnNwOzxpbWcgc3JjPSIvaW1hZ2VzL2NoYWxsZW5nZXMvdHlwZXMvc20vY2hhbGxlbmdlLnBuZyIgdGl0bGU9IkNoYWxsZW5nZXMgQ29tcGxldGVkIiAvPiAxZAILDxYCHwJnFgJmDw8WAh8CaGRkAg8PFgIfAmcWAgINDw8WAh8EBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9MDU2NGE5NDAtODMxMS00MGVlLThlNzYtN2U5MWIyY2Y2Mjg0ZGQCIQ8WAh8CZ2QCIw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBZIAgMPFgIfAQUBQWQCBQ8WAh8CZ2QCCA8WAh8CaGQCDw9kFgQCAQ8WAh8BBQE2ZAIDDw8WAh8EBUQvc2Vlay9jYWNoZV9mYXZvcml0ZWQuYXNweD9ndWlkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NmRkAhAPDxYCHwJoZGQCEw8WAh8CaGQCFA8WAh8CaGQCFw8WAh4Fc3R5bGUFD2Rpc3BsYXk6aW5saW5lOxYCAgEPFgIfAQUbVVRNOiAzMlUgRSA1NDUxNjQgTiA1ODA4NTI0ZAIaDw8WAh8EBTNjZHBmLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzZkZAIbDw8WAh8EBThjZHBmLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYmbGM9NWRkAhwPDxYCHwQFOWNkcGYuYXNweD9ndWlkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZsYz0xMGRkAh0PDxYEHwQFc2h0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9mPWQmaGw9ZW4mc2FkZHI9NTIuNDE2Miw5LjU5NDExNyAoSG9tZSBMb2NhdGlvbikmZGFkZHI9NTIuNDI1MDY3LDkuNjY0MihLaW5kZXJ3YWxkK0tpQykeBlRhcmdldAUGX2JsYW5rZGQCIQ9kFggCAQ8PFgQeCUZvcmVDb2xvcgweBF8hU0ICBGRkAgMPDxYEHwgMHwkCBGRkAgUPDxYCHwJnFgIeB29uY2xpY2sFO3MyZ3BzKCc3MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYnKTtyZXR1cm4gZmFsc2U7ZAIHDw8WAh8CZxYCHwoFIHMycGhvbmUoJ0dDMkNKUEYnKTtyZXR1cm4gZmFsc2U7ZAIjDxYCHwJnZAImD2QWCGYPFgIfAmhkAgEPDxYCHwJoZGQCAg8PFgIfAmhkZAIDDxYCHwJoZAIoDw8WAh8BBQdFbmNyeXB0ZGQCKQ8WAh8BBTREYXMgRmluYWwgKHVudGVyIFN0ZWluZW4pIGlzdCBtaXQgR0MgZ2VrZW5uemVpY2huZXQuZAIrD2QWAgIBDw8WAh8BBQdHQzJDSlBGZGQCLQ9kFgQCAQ8PFgQeCENzc0NsYXNzZB8JAgJkZAIEDxYCHwEFAjIyZAIuD2QWAgIBDxYCHwJnFgICAQ8PFgIfBAU4L3NlZWsvbG9nLmFzcHg/TFVJRD03YzZmMDg5MS03MDAzLTRhZTUtOTIzMS1jMmU0MTdkMWM1ZTRkZAIvDxYCHwJnZAIwDxYCHwJoZAI0D2QWAgIBD2QWBAIBDw8WAh8BBf8DPGlmcmFtZSB0eXBlPSJpZnJhbWUiIHNyYz0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9R2V0JlNpdGVJRD0xJlg9JzQ1NmVkY2VjNWNiNzRiZGRhOTc4MDMzZGJkMGEyNTFhJyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyNDAiIE1hcmdpbndpZHRoPSIwIiBNYXJnaW5oZWlnaHQ9IjAiIEhzcGFjZT0iMCIgVnNwYWNlPSIwIiBGcmFtZWJvcmRlcj0iMCIgU2Nyb2xsaW5nPSJubyIgc3R5bGU9IndpZHRoOjEyMHB4O0hlaWdodDoyNDBweDsiPjxhIGhyZWY9Imh0dHA6Ly9hZHMuZ3JvdW5kc3BlYWsuY29tL2EuYXNweD9ab25lSUQ9OSZUYXNrPUNsaWNrJjtNb2RlPUhUTUwmU2l0ZUlEPTEiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cDovL2Fkcy5ncm91bmRzcGVhay5jb20vYS5hc3B4P1pvbmVJRD05JlRhc2s9R2V0Jk1vZGU9SFRNTCZTaXRlSUQ9MSIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyNDAiIGJvcmRlcj0iMCIgYWx0PSIiIC8+PC9hPjwvaWZyYW1lPmRkAgMPFgIeCWlubmVyaHRtbAUTQWR2ZXJ0aXNpbmcgd2l0aCBVc2QCOA9kFgYCAg8WAh4LXyFJdGVtQ291bnQCARYCAgEPZBYCZg8VA1ZodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3RyYWNrL2RldGFpbHMuYXNweD9ndWlkPTM2YjM2OTlkLTQ5MzItNDZhMC05ZjQ0LTA4ZDM1ZmJiOGYwYTVodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2ltYWdlcy93cHR0eXBlcy9zbS8zMjIyLmdpZhFad2Vkc2NoZ2EgR2VvY29pbmQCBA8PFgIfAmdkFgICAQ8PFgQfAQUTVmlldyBhbGwgVHJhY2thYmxlcx8EBUl+L3RyYWNrL3NlYXJjaC5hc3B4P3dpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYmY2NpZD0xODExNDA5ZGQCBQ8PFgIfBAU8fi90cmFjay9zZWFyY2guYXNweD93aWQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2ZGQCPA9kFgICAQ8PFgIfBAVFL2hpZGUvd3B0bGlzdC5hc3B4P1JlZldwdElEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZEUz0xZGQCPg8PFgQeBlJEUy5JRAspdkdyb3VuZHNwZWFrLldlYi5HUFguV3B0RGF0YVNvdXJjZXMsIFR1Y3Nvbi5Db21tb24uTGVnYWN5LCBWZXJzaW9uPTMuMC40MjU1LjE2MzQ5LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwBHgdSV1BULklEKCsEBzE4MTE0MDlkFgJmDxYCHw0CBBYKZg9kFgJmDw8WAh8CaGRkAgEPZBYMZg8VAgAFZmFsc2VkAgIPFQhZPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iL2ltYWdlcy9pY29ucy9pY29uX25vY29vcmRzLmpwZyIgYWx0PSJubyBjb29yZGluYXRlcyIgLz41aHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vZmxhZy5qcGcORmluYWwgTG9jYXRpb24CRk4CRk4FRklOQUywATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9MzBmMWIzN2MtZDM5NS00YzdhLTk0ZTItMGM2NDlkNWYyMzFiJlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5HQzJDSlBGIEZpbmFsPC9hPiAoRmluYWwgTG9jYXRpb24pAz8/P2QCBQ8PFgIeB1Rvb2xUaXAFBEVkaXRkZAIHDw8WAh8QBQNNYXBkZAILDw8WAh8QBQhbUmVtb3ZlXRYCHwoFQHJldHVy" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="biBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgd2F5cG9pbnQ/JylkAgwPFQIAAGQCAg9kFgxmDxUCDkFsdGVybmF0aW5nUm93BWZhbHNlZAICDxUIVDxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzcmM9Ii9pbWFnZXMvaWNvbnMvaWNvbl92aWV3YWJsZS5qcGciIGFsdD0iYXZhaWxhYmxlIiAvPjRodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2ltYWdlcy93cHR0eXBlcy9zbS9wa2cuanBnDFBhcmtpbmcgQXJlYQJQSwJQSwZQQVJLTkewATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9OThjYjEzODctNDljZS00Zjk0LTliMDUtNWNiMDc5ZDMzMmIxJlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5HQzJDSlBGIFBhcmtpbmc8L2E+IChQYXJraW5nIEFyZWEpHE4gNTLCsCAyNS4zODQgRSAwMDnCsCAzOS4wMjNkAgUPDxYCHxAFBEVkaXRkZAIHDw8WAh8QBQNNYXBkZAILDw8WAh8QBQhbUmVtb3ZlXRYCHwoFQHJldHVybiBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgd2F5cG9pbnQ/JylkAgwPFQIOQWx0ZXJuYXRpbmdSb3c3S2VpbiAib2ZmaXppZWxsZXIiIFBhcmtwbGF0eiwgUGFya2VuIHRyb3R6ZGVtIG3DtmdsaWNoLmQCAw9kFgxmDxUCAAVmYWxzZWQCAg8VCFQ8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fdmlld2FibGUuanBnIiBhbHQ9ImF2YWlsYWJsZSIgLz43aHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vcHV6emxlLmpwZxJRdWVzdGlvbiB0byBBbnN3ZXICU1QCU1QFU1RBUlS0ATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9MDQxMTNiYWQtNjRjYS00OTlhLTk4NDgtYjU5MzdlMTNkYTFiJlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5HQzJDSlBGIFN0YXJ0PC9hPiAoUXVlc3Rpb24gdG8gQW5zd2VyKRxOIDUywrAgMjUuNTA0IEUgMDA5wrAgMzkuODUyZAIFDw8WAh8QBQRFZGl0ZGQCBw8PFgIfEAUDTWFwZGQCCw8PFgIfEAUIW1JlbW92ZV0WAh8KBUByZXR1cm4gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHdheXBvaW50PycpZAIMDxUCAABkAgQPZBYMZg8VAg5BbHRlcm5hdGluZ1JvdwVmYWxzZWQCAg8VCFQ8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fdmlld2FibGUuanBnIiBhbHQ9ImF2YWlsYWJsZSIgLz45aHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vd2F5cG9pbnQuanBnD1JlZmVyZW5jZSBQb2ludAJXTwJXTwZTQ0VOSUOyATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9YjI4YzU4NzktMzE4MS00NTEwLTk0ZmEtNmVjNWUzMGZkMDU2JlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5BdXNzaWNodHNwdW5rdDwvYT4gKFJlZmVyZW5jZSBQb2ludCkcTiA1MsKwIDI1LjQ4OCBFIDAwOcKwIDM5LjQzMmQCBQ8PFgIfEAUERWRpdGRkAgcPDxYCHxAFA01hcGRkAgsPDxYCHxAFCFtSZW1vdmVdFgIfCgVAcmV0dXJuIGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyB3YXlwb2ludD8nKWQCDA8VAg5BbHRlcm5hdGluZ1Jvd09FaGVtYWxpZ2UgRmluYWxsb2NhdGlvbiB3byBlcyBnZWJyYW5udCBoYXQuIEdsZWljaHplaXRpZyBuZXR0ZXIgQXVzc2ljaHRzcHVua3QuZAI/Dw8WAh8CZ2QWAgIBDw8WBB8EBS8vbWFwL2JldGEvZGVmYXVsdC5hc3B4P2xhdD01Mi40MjUwNjcmbG5nPTkuNjY0Mh8CZ2RkAkMPDxYCHwQFGi9zZWVrL25lYXJlc3QuYXNweD91PVRvbTAzZGQCRQ8PFgIfBAUbL3NlZWsvbmVhcmVzdC5hc3B4P3VsPVRvbTAzZGQCRw9kFgoCAw8PFgIfBAVVL3NlZWsvbmVhcmVzdC5hc3B4P3R4PWE1ZjZkMGFkLWQyZjItNDAxMS04YzE0LTk0MGE5ZWJmM2M3NCZsYXQ9NTIuNDI1MDY3JmxuZz05LjY2NDIwMGRkAgUPDxYCHwQFWS9zZWVrL25lYXJlc3QuYXNweD90eD1hNWY2ZDBhZC1kMmYyLTQwMTEtOGMxNC05NDBhOWViZjNjNzQmbGF0PTUyLjQyNTA2NyZsbmc9OS42NjQyMDAmZj0xZGQCCQ8PFgIfBAUtL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi40MjUwNjcmbG5nPTkuNjY0MjAwZGQCCw8PFgIfBAUxL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi40MjUwNjcmbG5nPTkuNjY0MjAwJmY9MWRkAg8PDxYCHwQFR2h0dHA6Ly93d3cud2F5bWFya2luZy5jb20vZGlyZWN0b3J5LmFzcHg/Zj0xJmxhdD01Mi40MjUwNjcmbG9uPTkuNjY0MjAwZGQCSA8WAh8CaGQCSg8PFgIfBAUlL3Jldmlld3MvaG90ZWxzLWNvb3Jkcy01Mi40MjUxLDkuNjY0MmRkAkwPZBYCAgEPDxYEHwEFlQc8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9tYXAvYmV0YS9kZWZhdWx0LmFzcHg/bGF0PTUyLjQyNTA2NyZsbmc9OS42NjQyIiB0YXJnZXQ9Il9ibGFuayI+R2VvY2FjaGluZy5jb20gR29vZ2xlIE1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/cT1OKzUyJWMyJWIwKzI1LjUwNCtFKzAwOSVjMiViMCszOS44NTIrKEdDMkNKUEYpKyIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubWFwcXVlc3QuY29tL21hcHMvbWFwLmFkcD9zZWFyY2h0eXBlPWFkZHJlc3MmZm9ybXR5cGU9bGF0bG9uZyZsYXRsb25ndHlwZT1kZWNpbWFsJmxhdGl0dWRlPTUyLjQyNTA2NyZsb25naXR1ZGU9OS42NjQyJnpvb209MTAiIHRhcmdldD0iX2JsYW5rIj5NYXBRdWVzdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy55YWhvby5jb20vbWFwc19yZXN1bHQ/bGF0PTUyLjQyNTA2NyZsb249OS42NjQyIiB0YXJnZXQ9Il9ibGFuayI+WWFob28gTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmJpbmcuY29tL21hcHMvZGVmYXVsdC5hc3B4P3Y9MiZzcD1wb2ludC41Mi40MjUwNjdfOS42NjQyX0dDMkNKUEYiIHRhcmdldD0iX2JsYW5rIj5CaW5nIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnLz96b29tPTEyJmxhdD01Mi40MjUwNjcmbG9uPTkuNjY0MiIgdGFyZ2V0PSJfYmxhbmsiPk9wZW4gQ3ljbGUgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnLz9tbGF0PTUyLjQyNTA2NyZtbG9uPTkuNjY0MiZ6b29tPTEyIiB0YXJnZXQ9Il9ibGFuayI+T3BlbiBTdHJlZXQgTWFwczwvYT48L2xpPh8CZ2RkAk4PZBYIAgEPFgIfAQUQNjYgTG9nZ2VkIFZpc2l0c2QCAg8WAh8CZ2QCAw8PFgQfBAU9fi9zZWVrL2dhbGxlcnkuYXNweD9ndWlkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3Nh8BBSNWaWV3IHRoZSBJbWFnZSBHYWxsZXJ5IG9mIDEyIGltYWdlc2RkAgsPFgQfAQWMAVRoZXJlIGFyZSAzMSBhZGRpdGlvbmFsIGxvZ3MuIDxhIGhyZWY9Ii9zZWVrL2NhY2hlX2RldGFpbHMuYXNweD9ndWlkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZsb2c9eSZkZWNyeXB0PXkiPlZpZXcgdGhlbSBhbGw8L2E+HwJoZAJPDxYCHwEFBHRydWVkAlAPFgIfAQVJbGF0PTUyLjQyNTA2NzsgbG5nPTkuNjY0MjsgZ3VpZD0nNzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JzsNCmQCJA8WAh8CaGQCJQ9kFgQCAQ8WAh8BBQdFbmdsaXNoZAID" />
+<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="DxYCHw0CDhYcZg9kFgICAQ8PFggeD0NvbW1hbmRBcmd1bWVudAUFZW4tVVMeC0NvbW1hbmROYW1lBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2geEENhdXNlc1ZhbGlkYXRpb25oZGQCAQ9kFgICAQ8PFggfEQUFZGUtREUfEgUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHxNoZGQCAg9kFgICAQ8PFggfEQUFZnItRlIfEgUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfE2hkZAIDD2QWAgIBDw8WCB8RBQVwdC1QVB8SBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfE2hkZAIED2QWAgIBDw8WCB8RBQVjcy1DWh8SBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8TaGRkAgUPZBYCAgEPDxYIHxEFBXN2LVNFHxIFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8TaGRkAgYPZBYCAgEPDxYIHxEFBW5sLU5MHxIFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8TaGRkAgcPZBYCAgEPDxYIHxEFBWNhLUVTHxIFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8TaGRkAggPZBYCAgEPDxYIHxEFBXBsLVBMHxIFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHxNoZGQCCQ9kFgICAQ8PFggfEQUFZXQtRUUfEgUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8TaGRkAgoPZBYCAgEPDxYIHxEFBW5iLU5PHxIFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfE2hkZAILD2QWAgIBDw8WCB8RBQVrby1LUh8SBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8TaGRkAgwPZBYCAgEPDxYIHxEFBWVzLUVTHxIFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfE2hkZAIND2QWAgIBDw8WCB8RBQVodS1IVR8SBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8TaGRkAjIPFgIfAmdkAkYPFgIfAmdkAgMPFgIfAQUnU2VydmVyOiBXRUIwODsgQnVpbGQ6IFMyNV9IRl8yMDExMDgxOS40ZGS7cRSbK+B0IYlTcMka2TIzEJfJfg==" />
+</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=634501408438608315" 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=qwcmXmpiNRnL_E7YHWnzERZFR3nKyxx1qlszTbydloajOsFSsUqpPa8z7FkJhDelcUMvxk_HT_yMdVVwc-3mTpKEYjPpUY_qUpjRdbtQiWLXsmZ6WAVSeMV66K36RN-qcwDxpE2vtP979OEYW85mWJGgljAL12WfPJlF4F-aaN71aIRKEBD4fIDHjkDRHG3ErczSPzqHdQonTaTvMvOBcLKgxcU1" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=fMH-h6hzawJX4bwqfY9SwE6zBABexlYz3N0jKWeq2C-90qybG7t46qJ6prTnEH1Z2xFaOsXnOuKdk3sp_OKtwPGPaG3WGyfcFE5C4VzWZNMEQhNbZpMGCljLVuNF3TWiw7lSDS-oMSLnBo9EBxJip08YqJT7l3wyLBVQIwFg3IE2X4pKg-Aq-trsLIIZKjr3Q3BBNXcstz-q99IyQEMqBxYuq2vlU71QX8YRYFUn5YsN9QzfeaQcUB6-L3gQUPwekqeA5TzKcQ9WwWltefX6SIQD2dt6BGrCnSXTIaJX4RbHyjgbcoMDiaY1cS2Lv8lRTZ_lUO4O_eWGQC8b1a1x7BYczYu8SWtoVV7rv-ayW1O49btzmIS9iowd2KdTW7rFlVYpGZbwfZA1-N03z9K6S8-6H95IQa8-1x4Rvt9g2z-DrWrNe5Xc6pSrqoafR4DRjfpnK5nv3pIyAKpyCAcRJvRACIgz9DFzis9RHV7AgHxAa03J74vSItQR1cJO0PfQ8PWYo0PzlrJo474ww1TszCP0VHFV0SUpuqUyBmUDzjE1Iq00bZk9PrJ35B20-tVEJE7Co6nZf0gk3vSJKxZoODHG6zUUsrSkJ4PXdhp8hO2z1zhE0" type="text/javascript"></script>
+<script src="js/cachedetails.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">Knowledge Books</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="../default.aspx" 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/default.aspx"><img title="Your Profile" src="http://img.geocaching.com/user/avatar/771bca33-9d3a-4dd5-a1f2-e67cfcb9f941.jpg" alt="" style="border-width:0px;" /></a></p>
+ <p class="SignedInText">
+ <strong>Hello, <a href="/my/default.aspx" title="View Profile for blafoo" class="SignedInProfileLink">blafoo</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%3flog%3dy%26wp%3dGC2CJPF%26numlogs%3d35%26decrypt%3dy">Sign Out</a>)<br />
+ <strong><img src="/images/icons/icon_smile.png" title="Caches Found" /> 408 · <img src="/images/challenges/types/sm/challenge.png" title="Challenges Completed" /> 1</strong>
+
+ <span id="ctl00_litPMLevel" style="display: block;">Premium Member</span>
+ </p>
+
+ </div>
+
+ </div>
+ <nav id="Navigation" class="span-24 last">
+
+ <ul class="Menu">
+ <li>
+ <a id="ctl00_hlNavPlay" accesskey="1" title="Play" href="../play/default.aspx">Play ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavGuide" accesskey="i" title="Guide" href="../guide/default.aspx">Guide</a></li>
+ <li><a id="ctl00_hlSubNavHide" accesskey="d" title="Hide & Seek a Cache" href="default.aspx">Hide & Seek a Cache</a></li>
+ <li><a id="ctl00_hlSubNavChallenges" title="Find Challenges" href="../challenges/default.aspx">Find Challenges</a></li>
+ <li><a id="ctl00_hlSubNavTrackables" accesskey="e" title="Find Trackables" href="../track/default.aspx">Find Trackables</a></li>
+ </ul>
+ </li>
+
+ <li id="ctl00_liNavProfile">
+ <a id="ctl00_hlNavProfile" accesskey="2" title="Your Profile" title="[Your Profile ▼]" href="../my/default.aspx">Your Profile ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavQuickView" accesskey="p" title="Quick View" href="../my/default.aspx">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_hlSubNavTrackables2" accesskey="7" title="Find Trackables" class="NoRightPadding" href="../my/travelbugs.aspx">Find Trackables</a> (<a id="ctl00_hlSubNavTrackablesYours" accesskey="8" title="Yours" class="NoSidePadding" href="../track/search.aspx?o=1&uid=0564a940-8311-40ee-8e76-7e91b2cf6284">Yours</a>)</li>
+ <li><a id="ctl00_hlSubNavPocketQueries" accesskey="9" title="Pocket Queries" href="../pocket/default.aspx">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_hlSubNavProfileChallenges" title="Challenges" href="../my/challenges.aspx">Challenges</a></li>
+ <li><a id="ctl00_hlSubNavAccount" accesskey="a" title="Account Details" href="../account/default.aspx">Account Details</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavCommunity" accesskey="3" title="Community" href="../community/default.aspx">Community ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavForums" accesskey="f" title="Forums" href="../forums/default.aspx">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/default.aspx">Events</a></li>
+ <li><a id="ctl00_hlSubNavLocal" accesskey="z" title="Local Organizations" href="../organizations/default.aspx">Local Organizations</a></li>
+ </ul>
+ </li>
+ <li><a id="ctl00_hlNavVideos" accesskey="4" title="Videos" href="../videos/default.aspx">Videos</a></li>
+ <li>
+ <a id="ctl00_hlNavResources" accesskey="5" title="Resources" href="../resources/default.aspx">Resources ▼</a>
+ <ul class="SubMenu">
+ <li><a id="ctl00_hlSubNavGPSReviews" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+ <li><a id="ctl00_hlSubNavTools" accesskey="o" title="Tools and Downloads" href="../tools/default.aspx">Tools and Downloads</a></li>
+ <li><a id="ctl00_hlSubNavTellaFriend" accesskey="-" title="Tell a Friend" href="../account/SendReferral.aspx">Tell a Friend</a></li>
+ </ul>
+ </li>
+ <li>
+ <a id="ctl00_hlNavShop" accesskey="6" title="Shop" href="../shop/default.aspx">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_hlSubNavGPSGuide" accesskey="k" title="Guide to Buying a GPS Device" href="../about/buying.aspx">Guide to Buying a GPS Device</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p class="SocialMediaIcons NoBottomSpacing right">
+ <a id="ctl00_hlFacebook" title="Follow Us on Facebook" href="http://www.facebook.com/pages/Geocachingcom/45625464679?ref=ts"><img id="ctl00_imgFacebook" title="Follow Us on Facebook" src="../images/home/icon_facebook.png" alt="Follow Us on Facebook" style="border-width:0px;" /></a> <a id="ctl00_hlTwitter" title="Follow Us on Twitter" href="http://twitter.com/GoGeocaching"><img id="ctl00_imgTwitter" title="Follow Us on Twitter" src="../images/home/icon_twitter.png" alt="Follow Us on Twitter" style="border-width:0px;" /></a> <a id="ctl00_hlFlickr" title="Follow Us on Flickr" href="http://www.flickr.com/photos/geocaching_com/"><img id="ctl00_imgFlickr" title="Follow Us on Flickr" src="../images/home/icon_flickr.png" alt="Follow Us on Flickr" style="border-width:0px;" /></a> <a id="ctl00_hlYouTube" title="Follow Us on YouTube" href="http://www.youtube.com/user/GoGeocaching"><img id="ctl00_imgYouTube" title="Follow Us on YouTube" src="../images/home/icon_youtube.png" alt="Follow Us on YouTube" style="border-width:0px;" /></a></p>
+
+ </nav>
+
+ </div>
+
+</header>
+ <section id="Content">
+
+
+ <div id="feedback-tab">
+ <a href="http://feedback.geocaching.com" onclick="UserVoice.Popin.show(uservoiceOptions); return false;">
+ <span id="text">Feedback</span><img id="uv-icon" src="/images/masters/uv-icon-green.png" height="29" width="25" alt="feedback" />
+ </a>
+ </div>
+
+ <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 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/3.gif" alt="Multi-cache" title="Multi-cache" width="32" height="32" /></a></p>
+
+ <h2 class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_CacheName">Kinderwald KiC</span></h2>
+ <span class="minorCacheDetails">
+ A
+ cache
+ by <a href="http://www.geocaching.com/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723&wid=73246a5a-ebb9-4d4f-8db9-a951036f5376&ds=2">Tom03</a></span> <span class="minorCacheDetails">
+ Hidden
+ :
+ 07/31/2010</span>
+
+ </div>
+ <div class="CacheStarLabels span-3 BottomSpacing">
+
+ Difficulty:
+ <br />
+ Terrain:
+
+ </div>
+
+ <div class="CacheStarImgs span-2">
+
+ <span id="ctl00_ContentBody_uxLegendScale" title="(1 is easiest, 5 is hardest)"><img src="http://www.geocaching.com/images/stars/stars2_5.gif" alt="2.5 out of 5" /></span>
+ <span id="ctl00_ContentBody_Localize6" title="(1 is easiest, 5 is hardest)"><img src="http://www.geocaching.com/images/stars/stars2.gif" alt="2 out of 5" /></span>
+
+ </div>
+
+ <div class="CacheSize span-9">
+
+ <p style="text-align: center;">
+ Size: <span class="minorCacheDetails"><img src="/images/icons/container/small.gif" alt="Size: Small" title="Size: Small" /> <small>(Small)</small></span></p>
+
+ </div>
+
+ <div class="span-3 right last">
+
+
+ <div class="favorite" class="right">
+ <a id="uxFavContainerLink" href="javascript:void(0);">
+ <div class="favorite-container">
+ <span class="favorite-value">
+ 6</span><br />
+ Favorites
+ <img id="imgFavoriteArrow" src="/images/arrow-down.png" alt="Expand" title="Expand" />
+ </div>
+ </a>
+ <div class="favorite-dropdown">
+ <dl class="top">
+ <dt>
+ <img id="imgFavoriteScore" src="/images/loading3.gif" width="20" height="20" alt="Loading" title="Loading" /></dt>
+ <dd>
+ <span id="uxFavoriteScore"> </span></dd>
+ </dl>
+ <dl class="bottom">
+ <dt>
+ <img src="/images/silk/group_go.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="/seek/cache_favorited.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376">View Who Favorited this Cache</a></dd>
+ <dt>
+ <img src="/images/silk/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 class="CacheInformationTable">
+ <div class="LocationData">
+ <p class="NoBottomSpacing">
+ <span id="ctl00_ContentBody_LatLon" style="font-weight:bold;">N 52° 25.504 E 009° 39.852</span>
+ <small>
+ <a id="ctl00_ContentBody_lnkConversions" title="Other Conversions" href="/wpt/?lat=52.425067&lon=9.6642&detail=1" target="_blank">Other Conversions</a>
+ </small>
+ <br />
+ <span id="ctl00_ContentBody_LocationSubPanel" style="display:inline;"><small>
+ UTM: 32U E 545164 N 5808524
+ </small>
+ <br />
+ <span id="ctl00_ContentBody_lblDistFromHome"><img src="/images/icons/compass/E.gif" alt="E" /> E 4.8km from your home location</span>
+ <br />
+ </span>
+ <span id="ctl00_ContentBody_Location">In Niedersachsen, Germany</span>
+ </p>
+ </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="cdpf.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376" target="_blank">
+ <img src="/images/silk/printer.png" alt="Print" title="Print" width="16" height="16" /> <span>
+ No Logs
+ </span>
+ </a>
+ <a id="ctl00_ContentBody_lnkPrintFriendly5Logs" href="cdpf.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376&lc=5" target="_blank">5 Logs</a>
+ <a id="ctl00_ContentBody_lnkPrintFriendly10Logs" href="cdpf.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376&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=52.4162,9.594117 (Home Location)&daddr=52.425067,9.6642(Kinderwald+KiC)" target="_blank">
+ <img src="/images/silk/car.png" alt="Driving Directions" title="Driving Directions" width="16" height="16" /> <span>
+ Driving Directions
+ </span>
+ </a></small></p>
+ <div id="ctl00_ContentBody_uxPrintPDFSection" style="display: none;">
+ <p>
+ <img src="/images/pdf_icon.gif" width="16" height="16" alt="PDF" title="PDF" /> <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="/software/default.aspx">Read about waypoint downloads</a>
+ </small>
+ </p>
+
+ <p class="NoBottomSpacing TopSpacing">
+ <input type="submit" name="ctl00$ContentBody$btnLocDL" value="LOC waypoint file" id="ctl00_ContentBody_btnLocDL" />
+ |
+ <input type="submit" name="ctl00$ContentBody$btnGPXDL" value="GPX file" id="ctl00_ContentBody_btnGPXDL" />
+ |
+ <input type="submit" name="ctl00$ContentBody$btnSendToGPS" value="Send to My GPS" onclick="s2gps('73246a5a-ebb9-4d4f-8db9-a951036f5376');return false;" id="ctl00_ContentBody_btnSendToGPS" />
+ |
+ <input type="submit" name="ctl00$ContentBody$btnSendToPhone" value="Send to My Phone" onclick="s2phone('GC2CJPF');return false;" id="ctl00_ContentBody_btnSendToPhone" />
+ </p>
+
+ </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="/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="/images/silk/help.png" id="pcn_help" class="CacheNoteHelpImg" />
+ <p id="cache_note" class="NoBottomSpacing">
+ </p>
+ </fieldset>
+
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_ShortDescription">Von Nachwuchs-Cachern für Nachwuchs-Cacher.
+</span>
+
+ </div>
+
+ <br />
+ <div class="UserSuppliedContent">
+
+ <span id="ctl00_ContentBody_LongDescription">Kleiner Multi über 7 Stationen. Länge ca. 1 km + 1km für den
+Rückweg. Die ZS befinden sich alle am KLEINEN BACH innerhalb des
+Kinderwaldes. Die Fragen müssen nicht in der aufgeführten
+Reihenfolge beantwortet werden, ihr könnt auch mit der letzten
+Frage anfangen !
+<p>Nähere Infos zum Kinderwald gibt es unter <a href=
+"http://www.kinderwald.de/" target="_blank" rel=
+"nofollow">www.kinderwald.de</a></p>
+<p><br />
+A. Am Start findet ihr einige Tiere. Wieviele blau-gelbe Punkte hat
+die grüne Eidechse ?</p>
+<p>B. Folgt dem Weg in Richtung Norden und biegt hinter der Brücke
+gleich links ab. Nach ein paar Metern könnt ihr auf der rechten
+Seite mehrere Tipis sehen. Wieviele Tipis zählt ihr ? Schaut genau
+hin ! Die Verbindungsgänge zählen nicht dazu.</p>
+<p>C. Geht nun nach ein paar Metern links über die Brücke auf die
+kleine Insel wo das Wasser gestaut wird. Auf der Insel könnt ihr
+beim großen Zelt einen "Marterpfahl" finden, dort seht ihr eine
+lachende Blume mit roten Blättern. Wieviele Blätter hat die Blume
+?</p>
+<p>D. Folgt dem Weg ein Stück. Ihr kommt nach kurzer Zeit zur Villa
+Kunterbunt. Wieviele kleine, runde Holzstücke sind aktuell an der
+Wand befestigt ?</p>
+<p>E. Weiter geht es. Links findet ihr eine weitere (bunte) Brücke.
+Dort sind wieviele Kindergesichter zu finden ?</p>
+<p>F. Nach ca. 200 Metern kommt ihr zur Seilfähre. An der Seilfähre
+findet ihr die Antwort (GC= ?)</p>
+<p>G. Nach weiteren 250 Metern gelangt ihr zur Schafherde. Aus
+wievielen Mitgliedern besteht die Schafherde ?</p>
+<p>Das Final könnt ihr nun nach einem kleinem Spaziergang unter</p>
+<p>52° 25.(C-A+1)(B-2)(C-A) / 009° 39.(D-G)(F+1)(E+1) finden.</p>
+<p>Kontrolle: Die Quersumme von ABCDEFG beträgt 48.</p>
+<p>Über Fotos würde ich mich freuen !</p>
+<p>Viel Spaß !</p>
+<p>P.S. An warmen Tagen Badesachen und Handtuch mitnehmen.</p></span>
+
+ </div>
+
+ <p>
+
+
+ </p>
+ <p>
+ <strong>
+ Additional Hints</strong>
+ (<a id="ctl00_ContentBody_lnkDH" onclick="dht(this);return false;" title="Decrypt" href="#">Encrypt</a>)</p>
+ <div id="div_hint" class="span-8 WrapFix">
+ Das Final (unter Steinen) ist mit GC gekennzeichnet.</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 id="ctl00_ContentBody_cacheCodeWidget" class="CacheCodeWidget">
+
+ <p>
+ <a href="#" class="CacheCodeLink">
+ <span id="ctl00_ContentBody_uxWaypointName" class="GCCode">GC2CJPF</span>
+ <span class="arrow">▼</span> </a>
+ </p>
+
+</div>
+
+<div class="CacheDetailNavigationWidget NoPrint">
+
+ <h3 class="WidgetHeader">
+ <img id="ctl00_ContentBody_GeoNav2_uxHeaderImage" src="../images/stockholm/16x16/home.gif" alt="Navigation" style="border-width:0px;" />
+ Navigation
+ </h3>
+ <div class="WidgetBody">
+
+ <ul>
+ <li><a href="/seek/log.aspx?ID=1811409" class="lnk"><img src="/images/stockholm/16x16/comment_add_found.gif" /> <span>Log your visit</span></a></li>
+<li><a href="/seek/gallery.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376" class="lnk"><img src="/images/stockholm/16x16/photos.gif" /> <span>View Gallery</span></a></li>
+<li><a href="/my/watchlist.aspx?w=1811409" class="lnk"><img src="/images/stockholm/16x16/icon_watchlist.gif" /> <span>Watch Listing</span></a></li>
+<li><a href="/bookmarks/ignore.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376&WptTypeID=3" class="lnk"><img src="/images/stockholm/16x16/cross.gif" /> <span>Ignore Listing</span></a></li>
+<li><a href="/bookmarks/mark.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376&WptTypeID=3" class="lnk"><img src="/images/stockholm/16x16/book_open_mark.gif" /> <span>Bookmark Listing</span></a></li>
+
+ </ul>
+
+ </div>
+
+
+</div>
+
+
+ <div class="StatusInformationWidget FavoriteWidget" style="font-size: 85%;">
+ <div id="pnlFavoriteCache">
+
+ <p>
+ <a href="javascript:void(0);" id="remove_from_favorites">
+ <img src="/images/icons/icon_favDelete.png" alt="Remove from your Favorites" title="Remove from your Favorites" />Remove from your Favorites</a>
+ </p>
+
+</div><div id="pnlNonfavoriteCache" class="Hidden">
+
+ <p>
+ <a href="javascript:void(0);" id="add_to_favorites">
+ <img src="/images/icons/icon_favAdd.png" alt="Add to your Favorites" title="Add to your Favorites" />Add to your Favorites</a></p>
+
+</div>
+ <p>
+ <span class="favorite-rank Clear">
+ 22
+ </span>
+ <a id="ctl00_ContentBody_hlFavoritePointsRemaining" href="/my/favorites.aspx">Favorite points remaining</a>
+ </p>
+ </div>
+
+ <div id="ctl00_ContentBody_uxStatusInformation" class="StatusInformationWidget">
+
+
+
+ <p>
+ <a id="ctl00_ContentBody_hlFoundItLog" href="/seek/log.aspx?LUID=7c6f0891-7003-4ae5-9231-c2e417d1c5e4">
+ <img src="/images/stockholm/16x16/check.gif" alt="Found It" title="Found It" />You logged this as Found on Thursday, August 19, 2010.</a></p>
+
+ <div id="ctl00_ContentBody_pnlWatchedCount">
+
+ <p>
+ <img src="/images/icons/icon_watchlist.gif" alt="Watching" /> 2 user(s) watching this cache.</p>
+
+ </div>
+
+
+</div>
+
+ <p class="TopSpacing">
+
+ <a href="#" id="lnkSmallMap">
+ <img id="mapPreview" src='http://maps.google.com/maps/api/staticmap?zoom=10&size=228x150&markers=icon:http://www.geocaching.com/images/wpttypes/pins/3.png|52.425067,9.6642&sensor=false'
+ style="border: solid 1px #4D6180;" alt="Map Image" title="Map Image" width="228" height="150" />
+ </a>
+
+ </p>
+
+
+ <div class="CacheDetailNavigationWidget BottomSpacing">
+
+ <h3 class="WidgetHeader">
+
+ <img src="/images/icon_Boardattention.gif" height="16" width="16" alt="Info" title="Info" />
+ Attributes</h3>
+ <div class="WidgetBody">
+ <img src="/images/attributes/motorcycles-no.gif" alt="no motorcycles" title="no motorcycles" width="30" height="30" /> <img src="/images/attributes/wheelchair-no.gif" alt="not wheelchair accessible" title="not wheelchair accessible" width="30" height="30" /> <img src="/images/attributes/winter-yes.gif" alt="available in winter" title="available in winter" 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/wading-yes.gif" alt="may require wading" title="may require wading" width="30" height="30" /> <img src="/images/attributes/scenic-yes.gif" alt="scenic view" title="scenic view" 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/bicycles-yes.gif" alt="bikes allowed" title="bikes allowed" 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" /> <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='456edcec5cb74bdda978033dbd0a251a'" 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">
+ <img id="ctl00_ContentBody_uxTravelBugList_uxInventoryIcon" src="../images/WptTypes/sm/tb_coin.gif" alt="Inventory" style="height:16px;width:16px;border-width:0px;" />
+ <span id="ctl00_ContentBody_uxTravelBugList_uxInventoryLabel">Inventory</span>
+ </h3>
+ <div class="WidgetBody">
+
+
+ <ul>
+
+ <li>
+ <a href="http://www.geocaching.com/track/details.aspx?guid=36b3699d-4932-46a0-9f44-08d35fbb8f0a" class="lnk">
+ <img src="http://www.geocaching.com/images/wpttypes/sm/3222.gif" width="16" /><span>Zwedschga Geocoin</span></a>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+
+
+ <div id="ctl00_ContentBody_uxTravelBugList_uxTrackableItemsLinks">
+
+ <a id="ctl00_ContentBody_uxTravelBugList_uxViewAllTrackableItems" href="../track/search.aspx?wid=73246a5a-ebb9-4d4f-8db9-a951036f5376&ccid=1811409">View all Trackables</a>
+
+</div>
+ <a id="ctl00_ContentBody_uxTravelBugList_uxTrackableItemsHistory" href="../track/search.aspx?wid=73246a5a-ebb9-4d4f-8db9-a951036f5376">View past Trackables</a>
+ </p>
+ <p class="NoBottomSpacing">
+ <a id="ctl00_ContentBody_uxTravelBugList_uxWhatIsATravelBug" title="What is a Travel Bug?" href="../track/faq.aspx">What is a Travel Bug?</a>
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
+
+ </div>
+
+
+ <div class="span-24 last">
+
+ <p>
+ <span id="ctl00_ContentBody_WaypointsInfo" style="font-weight:bold;">Additional Waypoints</span>
+ <br />
+
+
+<script type="text/javascript">
+ <!--
+ var checkflag = false;
+ function checkAll(obj) {
+ if (checkflag == false) {
+ checkflag = true;
+ } else {
+ checkflag = false;
+ }
+ var arrInput = document.getElementsByTagName("input");
+ for (i = 0; i < arrInput.length; i++) {
+ if (arrInput[i].type == 'checkbox') {
+ arrInput[i].checked = checkflag;
+ }
+ }
+ }
+
+ // End -->
+</script>
+
+ <table class="Table" id="ctl00_ContentBody_Waypoints">
+ <thead>
+ <tr>
+ <th scope="col" class="AlignCenter">
+ <a href="javascript:checkAll(this);">
+ </a>
+ </th>
+ <th scope="col">
+
+ </th>
+ <th scope="col">
+
+ </th>
+ <th scope="col">
+ Prefix
+ </th>
+ <th scope="col">
+ Lookup
+ </th>
+ <th scope="col">
+ Name
+ </th>
+ <th scope="col">
+ Coordinate
+ </th>
+ <th scope="col">
+
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr class="BorderBottom " ishidden="false">
+ <td class="AlignCenter">
+
+ </td>
+ <td>
+ <img width="16" height="16" src="/images/icons/icon_nocoords.jpg" alt="no coordinates" />
+ </td>
+ <td>
+ <img src="http://www.geocaching.com/images/wpttypes/sm/flag.jpg" width="16" height="16" alt="Final Location">
+ </td>
+ <td>
+ <span id="awpt_FN">
+ FN</span>
+ </td>
+ <td>
+ FINAL
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/seek/wpt.aspx?WID=30f1b37c-d395-4c7a-94e2-0c649d5f231b&RefID=73246a5a-ebb9-4d4f-8db9-a951036f5376&RefDS=1">GC2CJPF Final</a> (Final Location)
+ </td>
+ <td>
+ ???
+
+ </td>
+ <td>
+
+
+
+
+ </td>
+ </tr>
+ <tr class="BorderBottom ">
+ <td>
+
+ </td>
+ <td>
+ Note:
+ </td>
+ <td colspan="6">
+
+ </td>
+ </tr>
+
+ <tr class="BorderBottom AlternatingRow" ishidden="false">
+ <td class="AlignCenter">
+
+ </td>
+ <td>
+ <img width="16" height="16" src="/images/icons/icon_viewable.jpg" alt="available" />
+ </td>
+ <td>
+ <img src="http://www.geocaching.com/images/wpttypes/sm/pkg.jpg" width="16" height="16" alt="Parking Area">
+ </td>
+ <td>
+ <span id="awpt_PK">
+ PK</span>
+ </td>
+ <td>
+ PARKNG
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/seek/wpt.aspx?WID=98cb1387-49ce-4f94-9b05-5cb079d332b1&RefID=73246a5a-ebb9-4d4f-8db9-a951036f5376&RefDS=1">GC2CJPF Parking</a> (Parking Area)
+ </td>
+ <td>
+ N 52° 25.384 E 009° 39.023
+
+ </td>
+ <td>
+
+
+
+
+ </td>
+ </tr>
+ <tr class="BorderBottom AlternatingRow">
+ <td>
+
+ </td>
+ <td>
+ Note:
+ </td>
+ <td colspan="6">
+ Kein "offizieller" Parkplatz, Parken trotzdem möglich.
+ </td>
+ </tr>
+
+ <tr class="BorderBottom " ishidden="false">
+ <td class="AlignCenter">
+
+ </td>
+ <td>
+ <img width="16" height="16" src="/images/icons/icon_viewable.jpg" alt="available" />
+ </td>
+ <td>
+ <img src="http://www.geocaching.com/images/wpttypes/sm/puzzle.jpg" width="16" height="16" alt="Question to Answer">
+ </td>
+ <td>
+ <span id="awpt_ST">
+ ST</span>
+ </td>
+ <td>
+ START
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/seek/wpt.aspx?WID=04113bad-64ca-499a-9848-b5937e13da1b&RefID=73246a5a-ebb9-4d4f-8db9-a951036f5376&RefDS=1">GC2CJPF Start</a> (Question to Answer)
+ </td>
+ <td>
+ N 52° 25.504 E 009° 39.852
+
+ </td>
+ <td>
+
+
+
+
+ </td>
+ </tr>
+ <tr class="BorderBottom ">
+ <td>
+
+ </td>
+ <td>
+ Note:
+ </td>
+ <td colspan="6">
+
+ </td>
+ </tr>
+
+ <tr class="BorderBottom AlternatingRow" ishidden="false">
+ <td class="AlignCenter">
+
+ </td>
+ <td>
+ <img width="16" height="16" src="/images/icons/icon_viewable.jpg" alt="available" />
+ </td>
+ <td>
+ <img src="http://www.geocaching.com/images/wpttypes/sm/waypoint.jpg" width="16" height="16" alt="Reference Point">
+ </td>
+ <td>
+ <span id="awpt_WO">
+ WO</span>
+ </td>
+ <td>
+ SCENIC
+ </td>
+ <td>
+ <a href="http://www.geocaching.com/seek/wpt.aspx?WID=b28c5879-3181-4510-94fa-6ec5e30fd056&RefID=73246a5a-ebb9-4d4f-8db9-a951036f5376&RefDS=1">Aussichtspunkt</a> (Reference Point)
+ </td>
+ <td>
+ N 52° 25.488 E 009° 39.432
+
+ </td>
+ <td>
+
+
+
+
+ </td>
+ </tr>
+ <tr class="BorderBottom AlternatingRow">
+ <td>
+
+ </td>
+ <td>
+ Note:
+ </td>
+ <td colspan="6">
+ Ehemalige Finallocation wo es gebrannt hat. Gleichzeitig netter Aussichtspunkt.
+ </td>
+ </tr>
+
+ </tbody> </table>
+
+<p>
+
+ <span id="ShowHideLink">|
+ <a id="ctl00_ContentBody_Waypoints_uxShowHiddenCoordinates" href="../controls/#">Show Hidden Waypoints</a>
+ <a id="ctl00_ContentBody_Waypoints_uxHideHiddenCoordinates" href="../controls/#">Hide Hidden Waypoints</a></span>
+</p>
+
+<script type="text/javascript" language="javascript">
+ var hiddenLinkCookieName = "hiddenlinks";
+
+ jQuery(function () {
+ var $ = jQuery;
+ var hiddenLinkCookie = jQuery.cookie(hiddenLinkCookieName);
+
+ $('#ctl00_ContentBody_Waypoints_uxShowHiddenCoordinates').click(function (e) {
+ setHiddenCoordState(true);
+ return false;
+ });
+
+ $('#ctl00_ContentBody_Waypoints_uxHideHiddenCoordinates').click(function (e) {
+ setHiddenCoordState(false);
+ return false;
+ });
+
+ if ($("#ctl00_ContentBody_Waypoints tbody tr[ishidden='true']").length > 0) {
+ $("#ShowHideLink").show();
+ } else {
+ $("#ShowHideLink").hide();
+ }
+
+ if (hiddenLinkCookie == null || hiddenLinkCookie == "false") {
+ setHiddenCoordState(false);
+ } else {
+ setHiddenCoordState(true);
+ }
+
+ });
+
+
+
+ function setHiddenCoordState(show) {
+ var $ = jQuery;
+ if (show) {
+ $('#ctl00_ContentBody_Waypoints tbody')
+ .find("tr.AlternatingRow")
+ .removeClass("AlternatingRow")
+ .end()
+ .find("tr")
+ .show()
+ .end()
+ .find("tr:even:visible")
+ .each(function(i) {
+ if (i % 2 == 1)
+ $(this).addClass("AlternatingRow").next().addClass("AlternatingRow");
+ })
+ .end();
+
+ $("#ctl00_ContentBody_Waypoints_uxShowHiddenCoordinates").hide();
+ $("#ctl00_ContentBody_Waypoints_uxHideHiddenCoordinates").show();
+
+ $.cookie(hiddenLinkCookieName, "true");
+
+ } else {
+ $('#ctl00_ContentBody_Waypoints tbody')
+ .find("tr.AlternatingRow")
+ .removeClass("AlternatingRow")
+ .end()
+ .find("tr[ishidden='true']").each(function() {
+ $(this).hide().next().hide();
+ })
+ .end()
+ .find("tr:even:visible")
+ .each(function(i) {
+ if (i % 2 == 1)
+ $(this).addClass("AlternatingRow").next().addClass("AlternatingRow");
+ })
+ .end();
+
+ $("#ctl00_ContentBody_Waypoints_uxShowHiddenCoordinates").show();
+ $("#ctl00_ContentBody_Waypoints_uxHideHiddenCoordinates").hide();
+
+ $.cookie(hiddenLinkCookieName, "false");
+ }
+
+ return false;
+ }
+</script>
+
+ <p>
+
+ <div id="uxlrgMap" class="fr">
+
+ <div class="CDMapWidget">
+ <p class="WidgetHeader NoBottomSpacing">
+ <a id="ctl00_ContentBody_uxViewLargerMap" title="View Larger Map" class="lnk" href="/map/beta/default.aspx?lat=52.425067&lng=9.6642" target="_blank"><img src="/images/silk/map_go.png" /> <span>View Larger Map</span></a>
+ | <a href="#" id="lnk_slippyMap">View Dynamic Map</a>
+ </p>
+ <div style="border: 1px solid #B0B0B0; width: 325px; height: 325px;">
+ <img id="staticMap" src="/images/blank.gif" style="width: 325px; height: 325px;" />
+ </div>
+ <div id="map_canvas" style="width: 325px; height: 325px; display: none;">
+ </div>
+ <p class="WidgetFooter">
+ <a id="ctl00_ContentBody_uxNotesAboutPrinting" href="#mapPrintingNotes">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="/seek/nearest.aspx?u=Tom03">hidden</a>
+ or
+ <a id="ctl00_ContentBody_uxFindLinksFoundByThisUser" href="/seek/nearest.aspx?ul=Tom03">found</a>
+ by this user
+ </li>
+
+ <li>
+ ...nearby <a id="ctl00_ContentBody_uxFindLinksNearbyCachesOfType" href="/seek/nearest.aspx?tx=a5f6d0ad-d2f2-4011-8c14-940a9ebf3c74&lat=52.425067&lng=9.664200">caches of this type</a>,
+ <a id="ctl00_ContentBody_uxFindLinksNearbyNotFound" href="/seek/nearest.aspx?tx=a5f6d0ad-d2f2-4011-8c14-940a9ebf3c74&lat=52.425067&lng=9.664200&f=1">that I haven't found</a>
+ </li>
+ <li>
+ ...all nearby <a id="ctl00_ContentBody_uxFindLinksAllNearbyCaches" href="/seek/nearest.aspx?lat=52.425067&lng=9.664200">caches</a>,
+ <a id="ctl00_ContentBody_uxFindLinksAllNearbyNotFound" href="/seek/nearest.aspx?lat=52.425067&lng=9.664200&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=52.425067&lon=9.664200">waymarks on Waymarking.com</a>
+ </li>
+
+
+ <li>
+ ...nearby <a id="ctl00_ContentBody_uxFindLinksHotels" href="/reviews/hotels-coords-52.4251,9.6642">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/beta/default.aspx?lat=52.425067&lng=9.6642" target="_blank">Geocaching.com Google Map</a></li><li><a href="http://maps.google.com/maps?q=N+52%c2%b0+25.504+E+009%c2%b0+39.852+(GC2CJPF)+" target="_blank">Google Maps</a></li><li><a href="http://www.mapquest.com/maps/map.adp?searchtype=address&formtype=latlong&latlongtype=decimal&latitude=52.425067&longitude=9.6642&zoom=10" target="_blank">MapQuest</a></li><li><a href="http://maps.yahoo.com/maps_result?lat=52.425067&lon=9.6642" target="_blank">Yahoo Maps</a></li><li><a href="http://www.bing.com/maps/default.aspx?v=2&sp=point.52.425067_9.6642_GC2CJPF" target="_blank">Bing Maps</a></li><li><a href="http://www.opencyclemap.org/?zoom=12&lat=52.425067&lon=9.6642" target="_blank">Open Cycle Maps</a></li><li><a href="http://www.openstreetmap.org/?mlat=52.425067&mlon=9.6642&zoom=12" target="_blank">Open Street Maps</a></li></span>
+</ul>
+
+ </span>
+ <p class="NoPrint">
+ <span id="ctl00_ContentBody_Images"></span>
+ </p>
+
+ <h3 class="clear">
+ 66 Logged Visits · <a id="ctl00_ContentBody_uxGalleryImagesLink" DisplayFormatPlural="View the Image Gallery of {0:#,###} images" DisplayFormatSingular="View the Image Gallery" href="gallery.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376">View the Image Gallery of 12 images</a>
+ </h3>
+ <div class="InformationWidget">
+ <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> 52 <img src="/images/icons/icon_note.gif" alt="Write note" title="Write note" /> 5 <img src="/images/icons/icon_disabled.gif" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> 2 <img src="/images/icons/icon_enabled.gif" alt="Enable Listing" title="Enable Listing" /> 2 <img src="/images/icons/icon_greenlight.gif" alt="Publish Listing" title="Publish Listing" /> 1 <img src="/images/icons/icon_needsmaint.gif" alt="Needs Maintenance" title="Needs Maintenance" /> 2 <img src="/images/icons/icon_maint.gif" alt="Owner Maintenance" title="Owner Maintenance" /> 2 </p></span>
+ <p class='NoBottomSpacing'>
+ <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>
+
+ <table class="LogsTable"><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=6723adb7-2aff-4d9b-836b-87df888a61d0" id="181250482">L8aube</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=6723adb7-2aff-4d9b-836b-87df888a61d0"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 5</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">08/21/2011</span></div><div class="Clear LogContent"><p class="LogText">hab ihn mit der familie und freundin gefunden...<br/>war echt toll...habe sogar einen kleinen tauchgang von der seilfähre runter gemacht <img src="/images/icons/icon_smile_big.gif" border="0" align="middle" ></img> <br/>DFDC !!!</p><table class="LogImagesTable" cellpadding="3" cellspacing="0"><tr><td><a href="http://img.geocaching.com/cache/log/9ac96f8f-6e63-4087-be94-48a96ffaba67.jpg" rel="tb_images[grp181250482]" title="<span class="LogImgTitle">seilfähre </span><span class="LogImgLink"><a href="log.aspx?IID=9ac96f8f-6e63-4087-be94-48a96ffaba67&LID=181250482">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/9ac96f8f-6e63-4087-be94-48a96ffaba67.jpg');">Print Picture</a></span><br /><p class="LogImgDescription">kurz vorm tauchgang xD</p>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>seilfähre </span></a><br /></td></tr></table><div class="AlignRight"><small><a href="log.aspx?LUID=1b1a53e3-50df-4881-8700-1e9bbec50635" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=66de7735-1888-479b-8dbd-ada710747374" id="181220910">Sir5al</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=66de7735-1888-479b-8dbd-ada710747374"><img src="http://img.geocaching.com/user/avatar/9da1d6ed-3a3f-47cb-aba3-f5550abe7d11.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 350</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">08/21/2011</span></div><div class="Clear LogContent"><p class="LogText">den haben miss4tune und ich im team mit l8aube und gastcacher auf schöner kleiner vormittagsrunde gefunden und geloggt ;-)<br/><br/>dfdc</p><table class="LogImagesTable" cellpadding="3" cellspacing="0"><tr><td><a href="http://img.geocaching.com/cache/log/bfda9eb7-a4ae-4b59-b4d3-7deb3e08cd79.jpg" rel="tb_images[grp181220910]" title="<span class="LogImgTitle">Upside Down </span><span class="LogImgLink"><a href="log.aspx?IID=bfda9eb7-a4ae-4b59-b4d3-7deb3e08cd79&LID=181220910">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/bfda9eb7-a4ae-4b59-b4d3-7deb3e08cd79.jpg');">Print Picture</a></span><br /><p class="LogImgDescription">kein Spoiler ;-)</p>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>Upside Down</span></a><br /></td></tr></table><div class="AlignRight"><small><a href="log.aspx?LUID=4b88db68-a5e8-4b37-9d5a-8cc406611457" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="177793540">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_maint.gif" alt="Owner Maintenance" title="Owner Maintenance" /> Owner Maintenance</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">08/06/2011</span></div><div class="Clear LogContent"><p class="LogText">So, das Final ist jetzt besser versteckt ! Keine Brennesseln mehr... Die Quersumme stimmt jetzt auch, danke für den Hinweis. Das Original-Logbuch ist jetzt auch wieder in der Dose.... Und um den Spaß-Faktor zu erhöhen habe ich Station F. überarbeitet, hehehe.</p><div class="AlignRight"><small><a href="log.aspx?LUID=20b859cf-216f-48c2-a0b7-d63caadb8086" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=2cb6a31e-1da7-4b90-b844-962c5b76023f" id="175386549">Sopranette</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=2cb6a31e-1da7-4b90-b844-962c5b76023f"><img src="http://img.geocaching.com/user/avatar/bd85f298-3276-4d19-a5f2-0cb8187a075c.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,080</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/26/2011</span></div><div class="Clear LogContent"><p class="LogText">Kurzer Fahrradausflug mit Opa und den Kids (Schlenzer2000 und Sopranettchen). Wir haben gezählt, sind ins Wasser gefallen, haben uns nicht beirren lassen und am Final gesucht - nix. Tourdaten nochmal abgefahren, nachgerechnet - stimmt alles. Suchradius ausgeweitet und dann tatsächlich fündig geworden. Leider dem Regenguss nicht entkommen.<br/>DFDC, Sopranette<br/>#1008</p><div class="AlignRight"><small><a href="log.aspx?LUID=673321ec-75e9-4b1f-89d3-1c568f2f1352" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=54b15127-29a6-4749-9a56-5a782a90954d" id="173168272">euroberlin</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=54b15127-29a6-4749-9a56-5a782a90954d"><img src="http://img.geocaching.com/user/avatar/d1ea7c15-cd92-417b-a33e-a6ba286ad04f.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 337</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_needsmaint.gif" alt="Needs Maintenance" title="Needs Maintenance" /> Needs Maintenance</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/16/2011</span></div><div class="Clear LogContent"><p class="LogText">Ja, stimmt...hatte ich in meinem Log vergessen zu notieren. Ich fand auch nur einen Notizzettel mit diversen Einträgen. Kein Logbuch vorhanden. Wäre schön, wenn das nachgeholt werdenkönnte bzw. ein möglicherweise abhanden gekommenes ersetzt würde.<br/><br/>MfG</p><div class="AlignRight"><small><a href="log.aspx?LUID=a3ec8dfc-fee3-4ea7-939d-147558f68c14" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=6062f301-7690-4f38-9772-4f94de5e5f56" id="173093539">LFW-Schnüffler</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=6062f301-7690-4f38-9772-4f94de5e5f56"><img src="http://img.geocaching.com/user/avatar/84f540c8-61a8-4630-90cb-5015830cb397.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 242</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/16/2011</span></div><div class="Clear LogContent"><p class="LogText">Heute wollten wir mal Oma zeigen, was Geocachen ist... Dafür bot sich dieser Kindercache an und wir zogen los, diesen großen Spielplatz unsicher zu machen. Alles lief wie am Schnürchen - bis zum Finale. Die Quersumme stimmte, die Final-KO`s waren eingegeben, doch wo war die Dose??? Es brauchte einige Zeit bis diese ausgemacht war und einige Überwindung sich mit kurzen Hosen durch die Brennessel zu schlagen. Die Dose passte dann irgendwie nicht zu diesem wirklich schönen Cache. Für einen Kindercache war die Dose recht klein und ein richtiges Log-Buch war nicht vorhanden. Schade eigentlich. Daher kleine Abzüge in der B-Note. Trotzdem kommt Oma bestimmt nochmal mit ;-) ......<br/><br/>Die LFW-Schnüffler</p><div class="AlignRight"><small><a href="log.aspx?LUID=c3858175-ba9d-47b2-a7f7-03bd22f510ff" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=54b15127-29a6-4749-9a56-5a782a90954d" id="173063969">euroberlin</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=54b15127-29a6-4749-9a56-5a782a90954d"><img src="http://img.geocaching.com/user/avatar/d1ea7c15-cd92-417b-a33e-a6ba286ad04f.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 337</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">07/16/2011</span></div><div class="Clear LogContent"><p class="LogText">Mhh Wochenende, gutes Wetter und Ferien...ja, das sind ja gleich drei Dinge auf einmal..das geht nun wirklich nicht - doch! geht wohl! Diesen wollte ich heute abgehen und bemerkte doch sogleich, dass sich eine Familie (Vater, Mutter, zwei Kinder) auffällig unauffällig in bester Geocacher Weise durch den Kinderwald bewegten. Ich tat dies in gebührendem Abstand ebenfalls und so unauffällig, dass die hier überall "herumstreunenden" Kinder nichts mitbekamen :) Am Final musste ich mit meinem zweirädrigen Cachemobil zunächst unauffällig weiterfahren, da besagte "Konkurrenz" wie wild in der Botanik am Suchen war :) ca. 20 Minuten später erfolgte ein erneutes Heranpirschen meinerseits, doch die Konkurrenz war noch nicht so weit - ich konnte aber schon das Eintragen ins Logbuch beobachten. Spätestens jetzt wusste ich, dass die errechneten KO´s stimmig sind (auch wenn meine Quersumme 48 ergibt!). Nach einer weiteren kurzen Wartezeit konnte ich das kleine Döschen dann auch endlich suchen. Und es war dank einer recht eindeutigen "Cacherautobahn" auch ganz fix gefunden. Ich habe die Tarnung ein bisschen verstärkt. Ein sehr angenehmer Multicache, der mir jedoch an der "Villa Kunterbunt"-Station ein bisschen Sorgen machte. Ich brauchte hier doch glatt drei Anläufe um besagte Villa als solche zu identifizieren. Ob der Name so passend ist...ich weiß nicht. Die Villa trägt ja noch einen anderen weit hin sichtbaren Namen, der ist viel passender und auch der Grund, warum ich die Villa nicht sofort erkannt habe :-)<br/><br/>Vielen Dank für den Cache... endlich mal wieder einer hier... nachdem der NC, der hier mal lag, von mir leider nicht beendet werden konnte.<br/><br/>Viele Grüße!</p><div class="AlignRight"><small><a href="log.aspx?LUID=2ac5515f-da8a-4e4f-9797-f682cf119f7a" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=88965e17-b4d4-4c28-9359-170b72e8c9c8" id="168242205">Sunrise79</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=88965e17-b4d4-4c28-9359-170b72e8c9c8"><img src="http://img.geocaching.com/user/avatar/4d9018e7-66d9-4eed-a0b4-a9050242fcb2.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 392</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/22/2011</span></div><div class="Clear LogContent"><p class="LogText">Wunderbar, ein echter Kindermulti, Kinder, sowie Erwachsene hatten viel Spaß auf dieser Runde! Schöne und gut erreichbare ZS, auch die Dose war gut für die Kinder zu finden und die Freude war groß;-) ein Erfolgserlebnis! DfdC </p><div class="AlignRight"><small><a href="log.aspx?LUID=e675ecb7-4527-444c-a20b-99ed331bff79" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=a81c7e22-508a-4089-9a79-bc1fae83f773" id="168209731">-Snuffler-</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=a81c7e22-508a-4089-9a79-bc1fae83f773"><img src="http://img.geocaching.com/user/avatar/da7cd3a0-6ad0-4922-b9b1-93e14b51ab30.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 386</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/22/2011</span></div><div class="Clear LogContent"><p class="LogText">Wir hatten eine kleine Nachwuchscacherin in unserer Runde und mussten von Multi's und Mystery's etwas Abstand nehmen. So wurde dieser Cache angegangen und enttäuschte uns überhaupt nicht! Schön, wenn das Kind im Manne mal wieder zum Vorschein kommen kann! Die Seilfähre war der Favorit, inkl. trockener Füße! Nur ein kleiner Tip. Die Quersumme unserer Ergebnisse lag deutlich über der Kontroll-QS?! Aber es funktionierte dennoch wunderbar, das Döschen wurde gefunden und fleißig getauscht. Out: Sanduhr & Medaille In: 2x Bären. Im MiniCacherMobil auf MaxiCacherTour gemeinsam mit Sunrise79 geloggt. DfdC! -Snuffler-<br/><br/>This entry was edited by -Snuffler- on Thursday, 21 July 2011 at 11:55:01 UTC.</p><div class="AlignRight"><small><a href="log.aspx?LUID=1ed32133-4ce1-4b9c-a7c4-ed656959921b" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=841444ef-9621-4b65-a7be-699605c44920" id="166744495">GrünSchnecke</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=841444ef-9621-4b65-a7be-699605c44920"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 4</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/13/2011</span></div><div class="Clear LogContent"><p class="LogText">GEOcaching macht zum zweiten mal Spaß. Die Villerkunterbunt, die Schafe, die Tipis und der Marternpfahl zu entdecken hat Spaß gemacht. Habe getauscht - Armband gegen Anti-AKW-Button</p><div class="AlignRight"><small><a href="log.aspx?LUID=337ecc8b-74e3-4157-b2d9-cd2c9da8cb47" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=b6e3a6fe-eab7-42aa-adde-be9a6e1023f8" id="166644437">5Sachensucher</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=b6e3a6fe-eab7-42aa-adde-be9a6e1023f8"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 651</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">06/13/2011</span></div><div class="Clear LogContent"><p class="LogText">Heute bin ich mit dem kleinen Sachensucher bei schönstem Wetter eine Runde durch den Kinderwald geradelt. Ein echter Kindercache. Nur am Finale haben wir uns etwas schwer getan, sind dann aber doch noch fündig geworden. DFDC</p><div class="AlignRight"><small><a href="log.aspx?LUID=4ce0648d-e0e3-42fd-baef-b53fa794675b" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=49ea2d3e-a64b-44e5-8c4e-445248aac515" id="162474027">ATAMO</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=49ea2d3e-a64b-44e5-8c4e-445248aac515"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 46</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/23/2011</span></div><div class="Clear LogContent"><p class="LogText">Auf einer Fahrradtour hatte unser Sohn viel Spaß und hat den Cache alleine gefunden. Auch wenn wir regelmäßig hier sind, hat es mit Cache noch mehr Spaß gemacht. Danke!</p><div class="AlignRight"><small><a href="log.aspx?LUID=b13e9f14-07e6-4aef-bb1b-6218d5e3a0d7" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=5c9ebb53-ffea-42e2-a43e-1559cedb99dd" id="161898867">svzi</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=5c9ebb53-ffea-42e2-a43e-1559cedb99dd"><img src="http://img.geocaching.com/user/avatar/f819b6b7-442d-4c85-8ee5-1c7a185a4381.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 355</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/21/2011</span></div><div class="Clear LogContent"><p class="LogText">Diesen heute zusammen mit Sohnemann gefunden! Toller Spielplatz, Danke fürs Zeigen! :-)</p><div class="AlignRight"><small><a href="log.aspx?LUID=c3fa0a46-ff77-4070-9aa0-ad8b963d2a58" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=c077733c-9fe4-4916-a466-ea53b0b3b20e" id="160982748">Becks1007</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=c077733c-9fe4-4916-a466-ea53b0b3b20e"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 143</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/15/2011</span></div><div class="Clear LogContent"><p class="LogText">Auf Sonntags-Fahrradtour hier vorbeigekommen und den tollen Spielplatz bewundert :-D Klasse Sache, DFDC!</p><div class="AlignRight"><small><a href="log.aspx?LUID=f6112f9c-bbce-4961-a1d9-7009a4cbd303" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=a2817ae8-d49d-4956-bf14-d8fee278033d" id="159627104">tanima04</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=a2817ae8-d49d-4956-bf14-d8fee278033d"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 505</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/08/2011</span></div><div class="Clear LogContent"><p class="LogText">Bei wunderschönem Sommerwetter hatten klein und GROSS Spaß bei der Suche. TFTC</p><table class="LogImagesTable" cellpadding="3" cellspacing="0"><tr><td><a href="http://img.geocaching.com/cache/log/9da7a5ae-9a4c-400e-ae82-b6bf19b538ad.jpg" rel="tb_images[grp159627104]" title="<span class="LogImgTitle">Foto0164 </span><span class="LogImgLink"><a href="log.aspx?IID=9da7a5ae-9a4c-400e-ae82-b6bf19b538ad&LID=159627104">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/9da7a5ae-9a4c-400e-ae82-b6bf19b538ad.jpg');">Print Picture</a></span>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>Foto0164</span></a><br /></td></tr></table><div class="AlignRight"><small><a href="log.aspx?LUID=62d1d904-073e-49e3-b2e3-f79e88e1afed" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="158751500">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_note.gif" alt="Write note" title="Write note" /> Write note</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Ups, ganz vergessen. Das Logbuch habe ich zum Trocknen nach Hause mitgenommen, temporär ist nur ein kleiner Zettel drin.</p><div class="AlignRight"><small><a href="log.aspx?LUID=d32af176-91cb-4aa9-afd8-16d404544770" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=11d14784-9f00-4f84-8e16-2e800720392f" id="158749311">Satinav</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=11d14784-9f00-4f84-8e16-2e800720392f"><img src="http://img.geocaching.com/user/avatar/f63228e7-4039-45db-b084-3d2d701c6521.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 810</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">05/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Die Runde hat mir gut gefallen. Allerdings war nur ein kleiner Zettel als Logbuch drin.<br/>Danke für den Cache.<br/>Gruß Satinav<br/>in: 2TB</p><div class="AlignRight"><small><a href="log.aspx?LUID=8fc65b53-72af-40e7-8665-30de494ac9f1" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9b871b2a-3b58-46a6-8b47-e26769906afc" id="157993943">Tijer</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9b871b2a-3b58-46a6-8b47-e26769906afc"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 2</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/29/2011</span></div><div class="Clear LogContent"><p class="LogText">Es hat uns sehr viel Spass gemacht, in der schönen Gegend einen Cache zu suchen.<br/>DFDC<br/><br/>Tijer</p><div class="AlignRight"><small><a href="log.aspx?LUID=bb8427ed-17c1-4c84-9f5e-9afbd0d66f0e" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=83edcb9f-551c-44ef-b2c3-c68cc6d383e1" id="155936974">diebärenbande</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=83edcb9f-551c-44ef-b2c3-c68cc6d383e1"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 32</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/21/2011</span></div><div class="Clear LogContent"><p class="LogText">DAS hat richtig Spass gemacht! Unsere Kinder waren begeistert! Vielen vielen Dank!!! <img src="/images/icons/icon_smile.gif" border="0" align="middle" ></img></p><div class="AlignRight"><small><a href="log.aspx?LUID=cd66a920-2796-4c95-adc3-6f39a9d0031a" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9e468b04-e50d-42f7-9f24-08a547e80a69" id="153865995">razorback09</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9e468b04-e50d-42f7-9f24-08a547e80a69"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 182</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/10/2011</span></div><div class="Clear LogContent"><p class="LogText">Hier haben wir uns heute auf die Spuren unserer Kindheit begeben - zumindest ein Teil von uns hat hier früher viel freie Zeit verbacht, und wenn man sich das Gelände so ansieht, dann würde man wirklich gerne nochmal Kind sein :)<br/>Der Cache war sehr schön gemacht. Das Ende hat uns allerdings etwas verwirrt. Nachdem wir aber die verschmorrte Dose ohne Logbuch in den Händen hielten, haben wir nocheinmal genauer die Beschreibung gelesen und unsere errechneten Koordinaten herangezogen. Die richtige Dose war dann auch sehr schnell gefunden. !! Leider lag die Dose im Wasser und das Logbuch ist völlig durchnässt!!<br/>Ein toller Cache und ein sehr schönes Gelände!</p><div class="AlignRight"><small><a href="log.aspx?LUID=94bd55c7-bd76-4f6c-abcf-32a98f754023" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=a01a9429-ceb7-4def-b18e-0739172b126a" id="153232717">Raffizack</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=a01a9429-ceb7-4def-b18e-0739172b126a"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,525</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/07/2011</span></div><div class="Clear LogContent"><p class="LogText">13:55 # 1421<br/><br/>Wenn der Verkehrslärm hier nicht wäre, dann wäre das ja ein richtig toller Spielplatz.<br/>Schönes Gelände, schöner Cache <img src="/images/icons/icon_smile.gif" border="0" align="middle" ></img><br/><br/>Nichts getauscht<br/><br/>Vielen Dank&Grüße<br/><br/>Raffizack</p><div class="AlignRight"><small><a href="log.aspx?LUID=96f7d2c8-bfe0-4be6-a614-e50fd88e447f" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="153015696">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_maint.gif" alt="Owner Maintenance" title="Owner Maintenance" /> Owner Maintenance</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/05/2011</span></div><div class="Clear LogContent"><p class="LogText">Maitenance durchgeführt.</p><div class="AlignRight"><small><a href="log.aspx?LUID=dc70f2f7-8c90-45ef-ad26-b0fa46c28aef" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="153015296">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_enabled.gif" alt="Enable Listing" title="Enable Listing" /> Enable Listing</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">04/05/2011</span></div><div class="Clear LogContent"><p class="LogText">So, weiter gehts. Achtung: neue Formel da sich die Final Location geändert hat. Die Werte an sich sind gleich geblieben.</p><div class="AlignRight"><small><a href="log.aspx?LUID=f3ec9c98-4415-43f8-8105-ca9896943284" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="148133304">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_disabled.gif" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> Temporarily Disable Listing</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">03/08/2011</span></div><div class="Clear LogContent"><p class="LogText">Final Gegend abgebrannt, Dose angeschmorrt. Suche am Wochenende eine neue Location.<br/><br/>Vielen Dank an den busseclan für die Fotos und die Infos !<br/><br/>This entry was edited by Tom03 on Tuesday, 08 March 2011 at 10:05:57.</p><table class="LogImagesTable" cellpadding="3" cellspacing="0"><tr><td><a href="http://img.geocaching.com/cache/log/b21d3680-6842-4b46-bd14-d98efc948c3c.jpg" rel="tb_images[grp148133304]" title="<span class="LogImgTitle">tn_P3060088 </span><span class="LogImgLink"><a href="log.aspx?IID=b21d3680-6842-4b46-bd14-d98efc948c3c&LID=148133304">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/b21d3680-6842-4b46-bd14-d98efc948c3c.jpg');">Print Picture</a></span><br /><p class="LogImgDescription">Die Final Gegend.</p>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>tn_P3060088</span></a><br /><a href="http://img.geocaching.com/cache/log/69abd968-31eb-4717-b3cd-c80d7264c18e.jpg" rel="tb_images[grp148133304]" title="<span class="LogImgTitle">tn_P3060089 </span><span class="LogImgLink"><a href="log.aspx?IID=69abd968-31eb-4717-b3cd-c80d7264c18e&LID=148133304">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/69abd968-31eb-4717-b3cd-c80d7264c18e.jpg');">Print Picture</a></span><br /><p class="LogImgDescription">Die angeschmorrte Dose.</p>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>tn_P3060089</span></a><br /></td></tr></table><div class="AlignRight"><small><a href="log.aspx?LUID=bd30781f-3f0e-403e-97b4-6d22b9c3c2b0" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=b15ae343-cfff-4dd2-99d8-4e02b22db507" id="148089564">sunny-family</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=b15ae343-cfff-4dd2-99d8-4e02b22db507"><img src="http://img.geocaching.com/user/avatar/9237b3cb-6f6f-4847-812c-761f0e980d67.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 185 · <img src="/images/challenges/types/sm/challenge.png" align="absmiddle" /> 2</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">03/08/2011</span></div><div class="Clear LogContent"><p class="LogText">Was für ein trauriger Abschluss für diesen Cache! Vor einigen Wochen sind wir hier im tiefsten Eis und Schnee stecken geblieben, die Kiddies haben sich geweigert auch nur einen weiteren Schritt zu tun. Dann waren wir diejenigen die feststellen mussten, dass die ZS "Villa Kunterbunt" nicht mehr funktionierte... dieses Mal blieben wir im dichten Brombeergestrüpp stecken. Dank der Nachhilfe vom Owner das nächste Mal mit den richtigen KOs hier, verbarg sich der Cache irgendwo im Unterholz und wir zogen wieder unverrichteter Dinge ab. Nun hat ihn die "Brandrodung" offenbart.... Hier sieht es wüst aus...<img src="/images/icons/icon_smile_sad.gif" border="0" align="middle" ></img> Da die Dose "verschweißt" ist, Log via Foto...</p><table class="LogImagesTable" cellpadding="3" cellspacing="0"><tr><td><a href="http://img.geocaching.com/cache/log/7de9a88b-580a-4474-a681-aab1f78305ab.jpg" rel="tb_images[grp148089564]" title="<span class="LogImgTitle">Den Brand überlebt </span><span class="LogImgLink"><a href="log.aspx?IID=7de9a88b-580a-4474-a681-aab1f78305ab&LID=148089564">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/7de9a88b-580a-4474-a681-aab1f78305ab.jpg');">Print Picture</a></span>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>Den Brand überlebt</span></a><br /><a href="http://img.geocaching.com/cache/log/65c96e7a-1ad2-4ce1-b950-b1817a58bd2d.jpg" rel="tb_images[grp148089564]" title="<span class="LogImgTitle">Das Ende einer Dose </span><span class="LogImgLink"><a href="log.aspx?IID=65c96e7a-1ad2-4ce1-b950-b1817a58bd2d&LID=148089564">View Log</a> <a href="javascript:pp('http://img.geocaching.com/cache/log/65c96e7a-1ad2-4ce1-b950-b1817a58bd2d.jpg');">Print Picture</a></span>" class="tb_images lnk"><img src="/images/silk/photo.png" alt="Photo" title="Photo" /> <span>Das Ende einer Dose</span></a><br /></td></tr></table><div class="AlignRight"><small><a href="log.aspx?LUID=d3420720-7789-4f91-99dd-d811d32a677e" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=d2426a2d-946b-42b0-b593-58c571810f70" id="147739963">busseclan</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=d2426a2d-946b-42b0-b593-58c571810f70"><img src="http://img.geocaching.com/user/avatar/c1e9297e-1776-4b90-98ac-340511a1c3be.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 244</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_needsmaint.gif" alt="Needs Maintenance" title="Needs Maintenance" /> Needs Maintenance</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">03/06/2011</span></div><div class="Clear LogContent"><p class="LogText">siehe unten</p><div class="AlignRight"><small><a href="log.aspx?LUID=cbc9e7f3-4b6e-40f3-9bd7-32b22117d2e9" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=d2426a2d-946b-42b0-b593-58c571810f70" id="147732588">busseclan</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=d2426a2d-946b-42b0-b593-58c571810f70"><img src="http://img.geocaching.com/user/avatar/c1e9297e-1776-4b90-98ac-340511a1c3be.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 244</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">03/06/2011</span></div><div class="Clear LogContent"><p class="LogText">achtung hier hat es gebrannt!!<br/>dies war eigentlich unser erster chache. wir waren hier vor einem halben jahr schon mal als gäste, ohne eigenes gerät und ohne account.<br/>wegen diesem cache haben wir mit dem hobby angefangen.<br/>nun wollten wir uns heute bei diesem super multi auch endlich mal eintragen.<br/>vor ort trafen wir dann auf polizei und feuerwehr. genau am final ist ein tennisfeld großer bereich abgebrannt.<br/>als die einsatzkräfte weg waren haben wir nach der dose geschaut. sie ist zusammengeschmolzen, der inhalt sah aber von aussen noch "ganz gut" aus.<br/>wir haben die dose an dem busch gelassen wo sie war, aber mit steinen zugedeckt damit sie nich sofort entdeckt wird.<br/>das ganze ist jetzt ne halbe stunde her.<br/><br/>foto via email an den owner</p><div class="AlignRight"><small><a href="log.aspx?LUID=8e5b3d47-7efa-49f8-a844-388a412bd1ed" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=ac4a8bd4-905b-4d8f-a5cf-fdc07ef42421" id="146753479">DieLangschläfer</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=ac4a8bd4-905b-4d8f-a5cf-fdc07ef42421"><img src="http://img.geocaching.com/user/avatar/705becbf-0655-4495-b6b7-7e977a1e9f5b.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 480</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">02/27/2011</span></div><div class="Clear LogContent"><p class="LogText">Ein wirklich schön gemachter Kindercache, der der ganzen Familie Langschläfer viel Spaß gemacht hat. Wir sind recht spontan aufgebrochen, obwohl das Listing disabled war. Nachdem wir das Glück hatten, unterwegs Owners Papa auf Kontrolltour zu anzutreffen, wurde uns auch schnell klar, warum das Listing disabled war - wir sind nichts-ahnend glatt an einer Station vorbeigelaufen, da sie winterlich abgebaut war. Egal! Dank freundlicher Unterstützung konnten wir die Final-KOs dann doch ausrechnen. Ein TJ ist immer Gold wert :-)<br/><br/>Nur mit der Checksumme gab es eine Unstimmigkeit. Hier sollte es besser heißen: "Die Quersumme aller einzelnen Quersummen..."<br/><br/>Danke für den schön gemachten Familiennachmittag sagen<br/><br/>DieLangschläfer<br/><br/>PS: für diesen gibt's nen Favoritenpunkt...</p><div class="AlignRight"><small><a href="log.aspx?LUID=6fea18a7-064f-4ecb-ab18-bf3e241d9062" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="146751981">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_enabled.gif" alt="Enable Listing" title="Enable Listing" /> Enable Listing</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">02/27/2011</span></div><div class="Clear LogContent"><p class="LogText">Cache heute kontrolliert, Listing aktualisiert und dabei eine nette Cacher-Familie getroffen.</p><div class="AlignRight"><small><a href="log.aspx?LUID=a231a5a5-a6a2-47fe-8ed0-cc24e39c13b8" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="141741024">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_disabled.gif" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> Temporarily Disable Listing</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">01/17/2011</span></div><div class="Clear LogContent"><p class="LogText">Anscheinend gab es bei der Villa Kunterbunt eine Änderung, dass muss ich mir mal anschauen. Für das richtige Ergebnis den Hint beachten.</p><div class="AlignRight"><small><a href="log.aspx?LUID=935015de-d97f-4cca-96a7-a07f88425ba1" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723" id="140025134">Tom03</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=9a28b2fb-bce9-481f-87bc-7c5f4bafe723"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 120</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_note.gif" alt="Write note" title="Write note" /> Write note</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">01/02/2011</span></div><div class="Clear LogContent"><p class="LogText">Kurze Final-Kontrolle heute - alles i.O.</p><div class="AlignRight"><small><a href="log.aspx?LUID=27f520cd-8703-4a2e-80cc-7a9dd25cb14c" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=076ed979-b0b6-408e-8f0a-a941a7b22bc3" id="133907391">TheCookies</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=076ed979-b0b6-408e-8f0a-a941a7b22bc3"><img src="http://img.geocaching.com/user/avatar/a73b504a-f083-4278-ba1d-5ee8f5d23c5d.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 472</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">10/31/2010</span></div><div class="Clear LogContent"><p class="LogText">Schöne Runde, die wir heute mit einer Neu-Cacher Familie machen durften. Leider ist die ZS mit dem Seil z.Zt. nicht aktiv, so dass uns da schon mal eine Zahl fehlte.<br/>Zum Glück trafen wir aber noch Krisenkai, der dieses Problem dank Quersumme gut gemeistert hatte und bereits den Final gefunden hatte.<br/>Dank ihm und dem Hinweis war es dann auch nicht mehr so schwer, das Final zu finden.<br/><br/>In: Zahreiche Figuren<br/>Out: Figur,Portemonnaie,Halsband<br/><br/>TFTC TheCookies</p><div class="AlignRight"><small><a href="log.aspx?LUID=25f485a5-83fa-4356-9a45-94c634e19bc6" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=6fe86b75-e464-456a-82f7-dc84e3ebab77" id="133875300">krisenkai</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=6fe86b75-e464-456a-82f7-dc84e3ebab77"><img src="http://img.geocaching.com/user/avatar/08ee978d-4199-4f23-8ad8-73daaa7c58a2.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,397</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">10/31/2010</span></div><div class="Clear LogContent"><p class="LogText">Heute sind wir hier im Kinderwald mal wieder unterwegs gewesen und haben schön frische Luft geschnappt.<br/>Danke für diesen Ausflug zu Fuß<br/><br/>krisenkai</p><div class="AlignRight"><small><a href="log.aspx?LUID=9777fcb5-74b3-4bad-aa08-5cb00f375805" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="AlternatingRow"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=aa85f069-fc8b-4271-bc5f-a7a2e9f7d180" id="160850564">passi9999</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/reg_user.gif' title='Member' /> Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=aa85f069-fc8b-4271-bc5f-a7a2e9f7d180"><img src="/images/default_avatar.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 133</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">10/15/2010</span></div><div class="Clear LogContent"><p class="LogText">schöner cach für kinder mit dem fahrrad echt gut danke</p><div class="AlignRight"><small><a href="log.aspx?LUID=246b7c58-0d33-4735-9592-3e99ca9a08d3" title="View Log">View Log</a></small> </div></div></div></td></tr><tr><td class="Nothing"><div class="FloatLeft LogDisplayLeft"><p class="logOwnerProfileName"><strong><a href="/profile/?guid=ec7c2430-4552-48d2-85f0-f031b8221c6a" id="130112379">cookiemonsterfamily</a></strong></p><p class="logOwnerBadge"><img src='/images/icons/prem_user.gif' title='Premium Member' /> Premium Member</p><p class="logOwnerAvatar"><a href="/profile/?guid=ec7c2430-4552-48d2-85f0-f031b8221c6a"><img src="http://img.geocaching.com/user/avatar/cd6d81b1-6388-4b36-9417-5cf6644a7654.jpg" height='48' width='48' /></a></p><p class="logOwnerStats"><img src="/images/icons/icon_smile.png" align="absmiddle" /> 1,885</div><div class="FloatLeft LogDisplayRight"><div class="HalfLeft LogType"><strong><img src="http://www.geocaching.com/images/icons/icon_smile.gif" alt="Found it" title="Found it" /> Found it</strong></div><div class="HalfRight AlignRight"><span class="minorDetails LogDate">10/07/2010</span></div><div class="Clear LogContent"><p class="LogText">Schööööönnn. Aber könnte mal jemand die Dingsens nachzählen ;-))) Haben uns ganz schön verwirrt. Dank kleinem Nachzählunterricht vom owner heute dann die Runde beendet und das Final bei Sonnenuntergang genossen!!<br/>Hier waren wir vor ein paar Jahren schon mal, da waren die Kinder klein und ich hatte Angst, dass sie mir alle ins Wasser fallen... diesmal war ich mit einem hier, es war deutlich größer als damals und ist wirklich ins Wasser gefallen. Hat aber trotzdem großen Spaß gemacht. War ja schönes Wetter. Schönes Fleckchen Erde hier...Ausgleich für das drumherum.<br/>TFTC und Grüße an die netten owner!<br/>In: TB</p><div class="AlignRight"><small><a href="log.aspx?LUID=8f659e96-4ab1-4d49-a8aa-b527c57e46e2" title="View Log">View Log</a></small> </div></div></div></td></tr></table>
+
+ <p>
+
+ </p>
+ <p>
+ <small>
+ Current Time: <time datetime="2011-08-30T11:16:32Z">8/30/2011 11:16:32 AM Pacific Daylight Time (6:16 PM GMT)</time><br/>Last Updated: <time class="timeago" datetime="2011-08-21T14:53:47Z">2011-08-21T14:53:47Z</time> on 8/21/2011 7:53:47 AM Pacific Daylight Time (2:53 PM GMT) <br/>Rendered From:Database<br />Coordinates are in the WGS84 datum
+ </small>
+ </p>
+
+
+ <div id="dlgClipboard">
+ <input type="text" class="TextFormat" />
+ <a href="#" onclick="$('#dlgClipboard').hide();return false;">
+ <img src="/images/stockholm/mini/close.gif" alt="Close" title="Close" /></a>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ <!--
+ var dh, lat, lng, guid;
+
+ dh = 'true';
+
+ lat=52.425067; lng=9.6642; guid='73246a5a-ebb9-4d4f-8db9-a951036f5376';
+
+
+ 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;
+
+ $("#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: "GET",
+ cache: false,
+ url: '/datastore/favorites.svc/update/' + userToken + '/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: "GET",
+ cache: false,
+ url: '/datastore/favorites.svc/update/' + userToken + '/false',
+ success: function () {
+ canUpdateFavoriteStatus = true;
+ gotScore = false;
+ showFavoriteScore();
+ }
+ });
+
+ return false;
+ }
+ });
+
+ $("#lnkSmallMap").click(function(e) {
+ e.preventDefault();
+
+ document.getElementById("uxlrgMap").scrollIntoView(true);
+
+ return false;
+ });
+
+ $(function () {
+
+ 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...'
+ };
+
+ $("#staticMap").lazyload();
+
+ $("time.timeago").timeago();
+
+ $("a.tb_images").fancybox({'type': 'image', 'titlePosition': 'inside'});
+
+ var sn = Cookie.get('sn');
+
+ if ($('#trNotPM')) {
+ $('#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.CacheCodeLink").click(function (e) {
+ e.preventDefault();
+
+ $("#dlgClipboard")
+ .show()
+ .position({
+ of: $("a.CacheCodeLink"),
+ my: "right top",
+ at: "right bottom",
+ offset: "0 5"
+ })
+ .find("input")
+ .val('http://coord.info/' + $('.GCCode').text())
+ .focus()
+ .select();
+
+ });
+
+ $(document).mouseup(function (e) {
+ if ($(e.target).parent("div#dlgClipboard").length == 0) {
+ $("div#dlgClipboard").hide();
+ }
+ });
+
+ if (mapLatLng != null) {
+
+ $("#ctl00_ContentBody_uxNotesAboutPrinting").fancybox({
+ overlayShow: false
+ });
+
+ var staticUrl = [];
+ var markers=[];
+
+ staticUrl.push("http://maps.google.com/maps/api/staticmap?size=325x325&sensor=false");
+ staticUrl.push("&markers=icon:http://www.geocaching.com/images/wpttypes/pins/" + mapLatLng.type + ".png|" + mapLatLng.lat + "," + mapLatLng.lng);
+ markers.push({lat:mapLatLng.lat, lng:mapLatLng.lng, marker:"http://www.geocaching.com/images/wpttypes/pins/" + mapLatLng.type + ".png", primary:true});
+ if (cmapAdditionalWaypoints != null && cmapAdditionalWaypoints.length > 0) {
+ for (var x = 0, len = cmapAdditionalWaypoints.length; x < len; x++) {
+ var item = cmapAdditionalWaypoints[x]
+ staticUrl.push("&markers=icon:http://www.geocaching.com/images/wpttypes/pins/" + item.type + ".png|" + item.lat + "," + item.lng);
+ markers.push({lat:item.lat, lng:item.lng, marker: "http://www.geocaching.com/images/wpttypes/pins/" + item.type + ".png",primary:false});
+ }
+ } else {
+ staticUrl.push("&zoom=14");
+ }
+ $("#staticMap")
+ .data("markers", markers )
+ .attr("original", staticUrl.join(""));
+ }
+ });
+
+ function loadDynamicMap() {
+ if (typeof google !== 'undefined' && typeof google.maps !== 'undefined') {
+ displayDynamicMap();
+ } else {
+ var script = document.createElement("script");
+ script.type = "text/javascript";
+ script.src = "http://maps.google.com/maps/api/js?v=3&sensor=false&indexing=false&callback=displayDynamicMap";
+ document.documentElement.firstChild.appendChild(script);
+ }
+ }
+
+ function displayDynamicMap() {
+ $sm = $("#staticMap");
+ $map = $('<div />').addClass('map').css({ height: 325, width: 325 });
+ $("#lnk_slippyMap").replaceWith($("<span>Showing Dynamic Map</span>"));
+
+ var items = $sm.data("markers");
+ console.log(items);
+ // walk the array to find the full bounds
+ var bounds = new google.maps.LatLngBounds();
+ var markers = [];
+
+ for (var x = 0, len=items.length; x < len; x++) {
+ var item = items[x];
+ var ll = new google.maps.LatLng(item.lat, item.lng);
+ bounds.extend(ll);
+ markers.push(new google.maps.Marker( {
+ clickable:false,
+ icon: item.marker,
+ position: ll, zIndex: google.maps.Marker.MAX_ZINDEX + (item.primary ? 1 : 0)
+ }));
+ }
+
+ $sm.replaceWith($map);
+
+ var map = new google.maps.Map($map.get(0), {
+ zoom: 14,
+ center: bounds.getCenter(),
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
+ mapTypeControl: true,
+ navigationControlOptions: {
+ style: google.maps.NavigationControlStyle.SMALL
+ }
+ });
+
+ for(var x=0, len=markers.length; x<len;x++) {
+ markers[x].setMap(map);
+ }
+
+ if (bounds.length>1)
+ map.fitBounds(bounds);
+ }
+
+ </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 id="selected_language">
+
+ <a href="#">English▼</a>
+
+ </div>
+ <ul id="locale_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','')">Nederlands</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl07_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl07$uxLocaleItem','')">Català</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl08_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl08$uxLocaleItem','')">Polski</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl09_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl09$uxLocaleItem','')">Eesti</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl10_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl10$uxLocaleItem','')">Norsk, Bokmål</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl11_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl11$uxLocaleItem','')">한국어</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl12_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl12$uxLocaleItem','')">Español</a></li>
+
+ <li><a id="ctl00_uxLocaleList_uxLocaleList_ctl13_uxLocaleItem" href="javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl13$uxLocaleItem','')">Magyar</a></li>
+
+ </ul>
+
+</div>
+<script type="text/javascript">
+
+ jQuery(document).ready(function() {
+ jQuery("#selected_language a").click(function (e) {
+ e.preventDefault();
+ jQuery("#locale_list").show().position({
+ of: $("#selected_language"),
+ my: "left top",
+ at: "left bottom",
+ offset: "0 3",
+ collision: "fit fit"
+ });
+ jQuery(document).click(function () {
+ jQuery("#locale_list").fadeOut("fast");
+ });
+ return false;
+ });
+ });
+</script>
+
+ </div>
+ <div class="span-6">
+
+ <p class="FooterHeader"><strong>Resources</strong></p>
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterGuide" accesskey="i" title="Guide" href="../guide/default.aspx">Guide</a></li>
+ <li><a id="ctl00_hlFooterHistory" title="History" href="../about/history.aspx">History</a></li>
+ <li><a id="ctl00_hlFooterBrochures" title="Brochures" href="../tools/default.aspx#Guide">Brochures</a></li>
+ <li><a id="ctl00_hlFooterGlossary" title="Glossary of Terms" href="../about/glossary.aspx">Glossary of Terms</a></li>
+ <li><a id="ctl00_hlFooterTools" accesskey="o" title="Tools and Downloads" href="../tools/default.aspx">Tools and Downloads</a></li>
+
+ <li><a id="ctl00_hlFooterReferral" title="Tell A Friend About Geocaching" href="../account/SendReferral.aspx">Tell A Friend About Geocaching</a></li>
+
+ </ul>
+
+ </div>
+ <div class="span-6">
+
+ <p class="FooterHeader"><strong>Questions & Suggestions</strong></p>
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterKnowledge" title="Knowledge Books Support" rel="external" href="http://support.groundspeak.com/index.php">Knowledge Books Support</a></li>
+ <li><a id="ctl00_hlFooterEmail" title="Email Support" rel="external" href="http://support.groundspeak.com/index.php?pg=request">Email Support</a></li>
+ <li><a id="ctl00_hlFooterForums" accesskey="f" title="Forums" href="../forums/default.aspx">Forums</a></li>
+
+ <li id="ctl00_liUserVoice"><a id="ctl00_hlFooterFeedback2" title="Feedback Site" rel="external" href="http://feedback.geocaching.com/">Feedback Site</a></li>
+ <li><a id="ctl00_hlFooterContact" title="Contact" href="../contact/default.aspx">Contact</a></li>
+ </ul>
+
+ </div>
+ <div class="span-6">
+
+ <p class="FooterHeader"><strong>Press</strong></p>
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterNews" title="News Articles" href="../press/default.aspx">News Articles</a></li>
+ <li><a id="ctl00_hlFooterGCFactSheet" title="Geocaching Fact Sheet" rel="document" href="../articles/Brochures/footer/FactSheet_Geocaching.pdf">Geocaching Fact Sheet</a></li>
+ <li><a id="ctl00_hlFooterGCCOMFactSheet" title="Geocaching.com Fact Sheet" rel="document" href="../articles/Brochures/footer/FactSheet_GeocachingCom.pdf">Geocaching.com Fact Sheet</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-6 last">
+
+ <p class="FooterHeader"><strong>More</strong></p>
+ <ul class="FooterLinks">
+ <li><a id="ctl00_hlFooterAbout" title="About Groundspeak" href="../about/groundspeak.aspx">About Groundspeak</a></li>
+ <li><a id="ctl00_hlFooterAdvertise" title="Advertising with Us" href="../about/advertising.aspx">Advertising with Us</a></li>
+ <li><a id="ctl00_hlFooterHotels" title="Hotels" href="/reviews/hotels">Hotels</a></li>
+ <li><a id="ctl00_hlFooterGPS" accesskey="w" title="GPS Reviews" href="/reviews/gps">GPS Reviews</a></li>
+ <li><a id="ctl00_hlFooterBenchmarks" title="Find a Benchmark" href="../mark/default.aspx">Find a Benchmark</a></li>
+ </ul>
+
+ </div>
+ <p class="span-24 last FooterBottom">Copyright © 2000-2011 <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></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">
+ //jquery method
+ var uservoiceOptions = {};
+ jQuery(function ($) {
+ $.extend(uservoiceOptions, {
+ key: 'geocaching',
+ host: 'feedback.geocaching.com',
+ forum: '75775',
+ //alignment: 'left',
+ //background_color: '#c1caa8',
+ //text_color: 'white',
+ //hover_color: '#acb88d',
+ lang: 'en',
+ showTab: false
+ });
+ if (typeof (uvtoken) != "undefined") {
+ $.extend(uservoiceOptions, { params: { sso: uvtoken} });
+ }
+ var uv = document.createElement('script');
+ uv.setAttribute('type', 'text/javascript');
+ uv.setAttribute('src', ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js");
+ uv.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(uv);
+ });
+
+ $('#feedback-tab a').hover(function () {
+ $('#feedback-tab a span#text').toggle();
+ });
+ </script>
+
+
+
+<script type="text/javascript">
+//<![CDATA[
+var uvtoken = 'DbFDfIrSTaXyfNf74lbdopy%2bTw%2fC84Gn87pU%2b3r69toc4lYTKyii0cXY42BXT7amAeAEUCcV1MyzYH%2f69bWOOJms2Ao%2b0aNitb%2fwQiySsav%2bbdnHUF1Pl58lpSsX5HuDhKY4OflTwpp8lZOQDhoHiha6dK4WHksenFuBR0uJk5wnImWNVreNmDN0ZJSX01ixZuGVq342MV%2bhzJEqWOef9ObHsAjeKvEnlUWeqt2zbaoj5xBcagGKxpPSS3i1DVq7YkT84yLw5bCBT2CafECW%2fkXgRlP7uCj%2fkZXW%2bSI%2bjOkGVcswHukve9%2fAKGcrWdYtf%2bnrsJJovT3J2nqjsbrNSQge09TD3dc4Bq%2fxPFE9Gf4Bfx%2fcgx9WZ5wNK2DDckZ2JL4JYULKD79jSfcntjIpU70Jfwajm0MhSgqRJk2hKDk%3d';cmapAdditionalWaypoints.push({ lat:52.423067, lng:9.650383, name:'GC2CJPF Parking', pf:'PK', type:217 });
+cmapAdditionalWaypoints.push({ lat:52.425067, lng:9.6642, name:'GC2CJPF Start', pf:'ST', type:218 });
+cmapAdditionalWaypoints.push({ lat:52.4248, lng:9.6572, name:'Aussichtspunkt', pf:'WO', type:452 });
+mapLatLng = { lat:52.425067, lng:9.664200, type:3 };var userToken = 'FOUTFKOKLELXOHWTCXQ5OPFWCPDJUY2MZWCQGTMBSLJZISEFFYL2UGYLYMUHKG5MNUB7V5ESC4WRG6FEF3KR4OQHMA76C7TN7NL2QSM4O6PUUVLIFD3Q';//]]>
+</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');
+ });
+ // 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();
+ }
+ });
+ </script>
+
+ <script id="loc_favPointsWhatsThisDesc" type="text/html">
+ Geocaching Favorites is a simple way to track and share the caches that you enjoyed the most. For every 10 distinct caches that you have found, you will be able to Favorite 1 exceptional cache in your find history. The Favorites accumulated by a cache are displayed in search results and on the cache page so everyone can see which caches stand above the rest.
+ </script>
+ <script id="loc_favPointsWhatsThisTitle" type="text/html">
+ About Favorite Points
+ </script>
+ <script id="loc_favPointsScoreDesc" type="text/html">
+ Favorites/Premium Logs
+ </script>
+ <script type="text/javascript" language="javascript">
+ <!--
+
+ $('#uxFavPointsWhatsThis').qtip({
+ content: {
+ text: $("#loc_favPointsWhatsThisDesc").html(),
+ title: {
+ text: $("#loc_favPointsWhatsThisTitle").html(),
+ button: true
+ }
+ },
+ position: {
+ my: 'top center',
+ at: 'bottom center'
+ },
+ show: {
+ event: 'click'
+ },
+ hide: 'click unfocus',
+ style: {
+ classes: 'ui-tooltip'
+ }
+ })
+
+ 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: "GET",
+ cache: false,
+ url: '/datastore/favorites.svc/score/' + 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>
+
+
+ <script type="text/javascript">
+ _qoptions = {
+ qacct: "p-f6VPrfmR4cujU"
+ };
+ (function () {
+ var quant = document.createElement('script');
+ quant.src = ('https:' == document.location.protocol ?
+ 'https://' : 'http://') +
+ 'edge.quantserve.com/quant.js';
+ quant.setAttribute('async', 'true');
+ document.documentElement.firstChild.appendChild(quant);
+ })();
+ </script>
+ <noscript>
+ <img src="http://pixel.quantserve.com/pixel/p-f6VPrfmR4cujU.gif" style="display: none;" height="1" width="1" alt="Quantcast" />
+ </noscript>
+
+ <!-- Server: WEB08; Build: S25_HF_20110819.4 -->
+ </body>
+</html>
diff --git a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java new file mode 100644 index 0000000..9fa86e1 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java @@ -0,0 +1,92 @@ +package cgeo.geocaching.test.mock;
+
+
+public class GC2CJPF extends GCBase {
+
+ @Override
+ public Float getDifficulty() {
+ return 2.5f;
+ }
+
+ @Override
+ public String getGeocode() {
+ return "GC2CJPF";
+ }
+
+ @Override
+ public String getLatitute() {
+ return "N 52° 25.504";
+ }
+
+ @Override
+ public String getLongitude() {
+ return "E 009° 39.852";
+ }
+
+ @Override
+ public String getOwner() {
+ return "Tom03";
+ }
+ @Override
+ public String getOwnerReal() {
+ return getOwner();
+ }
+
+ @Override
+ public String getSize() {
+ return "small";
+ }
+
+ @Override
+ public Float getTerrain() {
+ return 2.0f;
+ }
+
+ @Override
+ public String getType() {
+ return "multi";
+ }
+
+ @Override
+ public boolean isArchived() {
+ return false;
+ }
+
+ @Override
+ public boolean isDisabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isMembersOnly() {
+ return false;
+ }
+
+ @Override
+ public boolean isOwn() {
+ return false;
+ }
+
+
+ @Override
+ public String getHint() {
+ return "Das Final (unter Steinen) ist mit GC gekennzeichnet.";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Kleiner Multi über 7 Stationen";
+ }
+
+ @Override
+ public String getShortDescription() {
+ return "Von Nachwuchs-Cachern für Nachwuchs-Cacher. ";
+ }
+
+ @Override
+ public String getName() {
+ return "Kinderwald KiC";
+ }
+
+}
+
\ No newline at end of file diff --git a/tests/src/cgeo/geocaching/test/mock/GCBase.java b/tests/src/cgeo/geocaching/test/mock/GCBase.java new file mode 100644 index 0000000..328c993 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/mock/GCBase.java @@ -0,0 +1,43 @@ +package cgeo.geocaching.test.mock;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import cgeo.geocaching.ICache;
+import cgeo.geocaching.cgBase;
+
+public abstract class GCBase implements ICache {
+
+ /*
+ * The data for the caches can be generated by entering the url
+ * http://www.geocaching.com/seek/cache_details.aspx?log=y&wp=GCxxxx&numlogs=35&decrypt=y
+ * into a browser and saving the file
+ */
+ @Override
+ public String getData() {
+ try {
+ InputStream is = this.getClass().getResourceAsStream("/cgeo/geocaching/test/mock/"+getGeocode()+".html");
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+
+ int nRead;
+ byte[] data = new byte[16384];
+
+ while ((nRead = is.read(data, 0, data.length)) != -1) {
+ buffer.write(data, 0, nRead);
+ }
+
+ buffer.flush();
+ StringBuffer sb = new StringBuffer(buffer.toString());
+ cgBase.replaceWhitespace(sb);
+ return sb.toString();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
+
+}
|
