diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-05-10 09:10:44 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-05-10 09:11:28 +0200 |
| commit | d6e525eeba8fbd066138a9d6b98bb5683c18f449 (patch) | |
| tree | 071eeb0ebd1d59f462d944555ad29d99c30a1423 | |
| parent | 7aad1b422c9a06bf82283c5069be74b5fafea351 (diff) | |
| parent | ab6f4537d74b228ca2620abba571f5ae8bb71706 (diff) | |
| download | cgeo-d6e525eeba8fbd066138a9d6b98bb5683c18f449.zip cgeo-d6e525eeba8fbd066138a9d6b98bb5683c18f449.tar.gz cgeo-d6e525eeba8fbd066138a9d6b98bb5683c18f449.tar.bz2 | |
Merge remote-tracking branch 'origin/release'
192 files changed, 3185 insertions, 3259 deletions
@@ -1,14 +1,16 @@ bin/ gen/ /main/project/localization/*.missing -/main/project/attributes/drawable/* +/main/project/attributes/drawable-mdpi/ /main/project/attributes/iconlist1res.html /main/local.properties /main/private.properties /main/res/values/mapsapikey.xml /tests/local.properties /tests/private.properties +/tests/hs_err_pid*.log /cgeo-calendar/local.properties /cgeo-calendar/private.properties .directory -org.moreunit.prefs
\ No newline at end of file +org.moreunit.prefs +annotation_gen/ @@ -4,6 +4,8 @@ You want to contribute? ----------------------- Perfect! Please **tell us in the [issue tracker](https://github.com/cgeo/c-geo-opensource/issues) before hacking** on your great new feature. It would be bad if you have implemented something great, but we can't include it because it doesn't fit the remaining architecture and code. You might also want to chat with the developers on channel #cgeo on the freenode IRC network. +[](http://ci.cgeo.org/job/c-geo/) + Get the source -------------- diff --git a/main/.classpath b/main/.classpath index 79a19e9..d7bcabc 100644 --- a/main/.classpath +++ b/main/.classpath @@ -6,6 +6,16 @@ <attribute name="ignore_optional_problems" value="true"/> </attributes> </classpathentry> + <classpathentry kind="src" path="thirdparty"> + <attributes> + <attribute name="ignore_optional_problems" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="src" path="annotation_gen"> + <attributes> + <attribute name="ignore_optional_problems" value="true"/> + </attributes> + </classpathentry> <classpathentry exported="true" kind="lib" path="libs/commons-lang3-3.1.jar"/> <classpathentry kind="lib" path="libs/locus-api-4.0.jar"/> <classpathentry kind="lib" path="libs/commons-collections-3.2.1.jar"/> diff --git a/main/.factorypath b/main/.factorypath new file mode 100644 index 0000000..d54f9b4 --- /dev/null +++ b/main/.factorypath @@ -0,0 +1,3 @@ +<factorypath> + <factorypathentry kind="WKSPJAR" id="/cgeo/libs/butterknife-1.3.2.jar" enabled="true" runInBatchMode="false"/> +</factorypath> diff --git a/main/.settings/org.eclipse.jdt.apt.core.prefs b/main/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..813e822 --- /dev/null +++ b/main/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=annotation_gen +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/main/.settings/org.eclipse.jdt.core.prefs b/main/.settings/org.eclipse.jdt.core.prefs index 3c08e45..41c73f0 100644 --- a/main/.settings/org.eclipse.jdt.core.prefs +++ b/main/.settings/org.eclipse.jdt.core.prefs @@ -1,367 +1,368 @@ -eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=no_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=true
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=120
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=false
-org.eclipse.jdt.core.formatter.join_wrapped_lines=false
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=no_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=true +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=false +org.eclipse.jdt.core.formatter.join_wrapped_lines=false +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index e69af11..0c6c4a0 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -31,7 +31,7 @@ android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIsvD_aUSDMwWOf9NkwwxZ4kJJI_AG2EaxjSu2jw" /> <activity - android:name=".cgeo" + android:name=".MainActivity" android:label="@string/app_name" android:windowSoftInputMode="stateHidden" android:theme="@style/cgeo_main" @@ -43,7 +43,7 @@ </activity> <activity android:name=".SearchActivity" - android:label="@string/app_name" + android:label="@string/search" android:launchMode="singleTop" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > @@ -63,49 +63,49 @@ </activity> <activity android:name=".AboutActivity" - android:label="@string/app_name" + android:label="@string/about" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".UsefulAppsActivity" - android:label="@string/app_name" + android:label="@string/helpers" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".twitter.TwitterAuthorizationActivity" - android:label="@string/app_name" + android:label="@string/auth_twitter" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".EditWaypointActivity" - android:label="@string/app_name" + android:label="@string/waypoint_edit_title" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".NavigateAnyPointActivity" - android:label="@string/app_name" + android:label="@string/search_destination" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".AddressListActivity" - android:label="@string/app_name" + android:label="@string/search_address_result" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".SettingsActivity" - android:label="@string/app_name" + android:label="@string/settings" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".cgeocaches" - android:label="@string/app_name" + android:label="@string/stored_caches_button" android:configChanges="keyboardHidden|orientation|screenSize" > <intent-filter> <action android:name="android.intent.action.VIEW" /> @@ -124,27 +124,27 @@ </activity> <activity android:name=".maps.google.GoogleMapActivity" - android:label="@string/app_name" > + android:label="@string/map_map" > </activity> <activity android:name=".maps.mapsforge.MapsforgeMapActivity" - android:label="@string/app_name" > + android:label="@string/map_map" > </activity> <activity android:name=".maps.mapsforge.v024.MapsforgeMapActivity024" - android:label="@string/app_name" > + android:label="@string/map_map" > </activity> <activity android:name=".StaticMapsActivity" - android:label="@string/app_name" > + android:label="@string/map_static_title" > </activity> <activity android:name=".VisitCacheActivity" - android:label="@string/app_name"> + android:label="@string/log_new_log"> </activity> <activity android:name=".LogTrackableActivity" - android:label="@string/app_name" + android:label="@string/trackable_touch" android:configChanges="keyboardHidden|orientation" > </activity> <activity @@ -154,7 +154,7 @@ </activity> <activity android:name=".CacheDetailActivity" - android:label="@string/app_name" + android:label="@string/cache" android:configChanges="keyboardHidden|orientation" > <intent-filter> <action android:name="wikitudeapi.arcallback" /> @@ -181,7 +181,7 @@ </activity> <activity android:name="cgeo.geocaching.TrackableActivity" - android:label="@string/app_name" + android:label="@string/trackable" android:configChanges="keyboardHidden|orientation" > <intent-filter> <action android:name="android.intent.action.VIEW" /> @@ -204,32 +204,32 @@ </activity> <activity android:name=".cgeonavigate" - android:label="@string/app_name_compass"> + android:label="@string/compass_title"> </activity> <activity android:name=".GpxFileListActivity" - android:label="@string/app_name" + android:label="@string/gpx_import_title" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".SelectMapfileActivity" - android:label="@string/app_name" + android:label="@string/map_file_select_title" android:configChanges="keyboardHidden|orientation" > </activity> <provider android:name=".apps.LocusDataStorageProvider" android:authorities="cgeo.geocaching.apps.locusdatastorageprovider" /> <activity android:name="WaypointPopup" - android:label="@string/app_name" + android:label="@string/waypoint" android:windowSoftInputMode="stateHidden" android:theme="@style/popup_dark" android:configChanges="keyboardHidden|orientation" > </activity> <activity android:name=".files.SimpleDirChooser" - android:label="@string/app_name"> + android:label="@string/simple_dir_chooser_title"> </activity> <activity android:name=".ImageSelectActivity" - android:label="@string/app_name"> + android:label="@string/log_image"> </activity> </application> </manifest> diff --git a/main/ant.properties b/main/ant.properties index c26774c..8216a77 100644 --- a/main/ant.properties +++ b/main/ant.properties @@ -17,3 +17,4 @@ proguard.config=proguard.cfg proguard.jar=support/proguard.jar +source.dir=src;thirdparty
\ No newline at end of file diff --git a/main/libs/butterknife-1.3.2.jar b/main/libs/butterknife-1.3.2.jar Binary files differnew file mode 100644 index 0000000..1bd6fe6 --- /dev/null +++ b/main/libs/butterknife-1.3.2.jar diff --git a/main/lint.xml b/main/lint.xml index c5b2b18..b165280 100644 --- a/main/lint.xml +++ b/main/lint.xml @@ -2,6 +2,7 @@ <lint> <issue id="ContentDescription" severity="ignore" /> <issue id="ExportedContentProvider" severity="ignore" /> + <issue id="InvalidPackage" severity="ignore" /> <issue id="MissingTranslation" severity="ignore" /> <issue id="Registered" severity="ignore" /> </lint>
\ No newline at end of file diff --git a/main/proguard.cfg b/main/proguard.cfg index ee4d81a..23d603d 100644 --- a/main/proguard.cfg +++ b/main/proguard.cfg @@ -63,3 +63,7 @@ -keepclassmembers class cgeo.geocaching.compatibility.AndroidLevel8 { public static <methods>; } + +# Butter knife view injection, see http://jakewharton.github.io/butterknife/ +-dontwarn butterknife.Views$InjectViewProcessor +-keepclassmembers class **$$ViewInjector {*;}
\ No newline at end of file diff --git a/main/project/attributes/iconlist.txt b/main/project/attributes/iconlist.txt index 046add1..8b75ab6 100644 --- a/main/project/attributes/iconlist.txt +++ b/main/project/attributes/iconlist.txt @@ -27,7 +27,7 @@ kids | 6 | 59 | x | PD | | ht onehour | 7 | | x | CC0 | The Noun Project | http://thenounproject.com/noun/clock/#icon-No2306 scenic | 8 | | | PD | USA National Park Service | http://thenounproject.com/noun/binoculars/#icon-No112 hiking | 9 | 25 | | PD | USA National Park Service | http://thenounproject.com/noun/hiker/#icon-No562 -climbing | 10 | 28 | | PD | USA National Park Service | http://thenounproject.com/noun/climbing/#icon-No526 +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 | 29 | | PD | USA National Park Service | http://thenounproject.com/noun/swimming/#icon-No226 available | 13 | 38 | x | PD | koem | selfmade @@ -86,6 +86,7 @@ railway | | 10 | | CC0 | | ht syringe | | 23 | | CC0 | Betovarg Jabib | http://thenounproject.com/noun/syringe/#icon-No1508 swamp | | 26 | x | CC0 | Megan Strickland | http://thenounproject.com/noun/hand/#icon-No1477 hills | | 27 | x | PD | koem | selfmade +easy_climbing | | 28 | x | PD | USA National Park Service | http://thenounproject.com/noun/climbing/#icon-No526 poi | | 30 | | PD | | http://thenounproject.com/noun/point-of-interest/#icon-No522 moving_target | | 31 | x | PD | | http://thenounproject.com/noun/running/#icon-No246 webcam | | 32 | | PD | | http://thenounproject.com/noun/video-camera/#icon-No637 diff --git a/main/project/attributes/svgs/easy_climbing.svg b/main/project/attributes/svgs/easy_climbing.svg new file mode 100644 index 0000000..682b053 --- /dev/null +++ b/main/project/attributes/svgs/easy_climbing.svg @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + id="Layer_1" + x="0px" + y="0px" + width="96.114998" + height="94.002548" + viewBox="0 0 96.114999 94.002552" + enable-background="new 0 0 99.572 99.993" + xml:space="preserve" + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="easy_climbing.svg"><metadata + id="metadata2876"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs2874"><inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 49.996498 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="99.571999 : 49.996498 : 1" + inkscape:persp3d-origin="49.785999 : 33.330999 : 1" + id="perspective2878" /></defs><sodipodi:namedview + pagecolor="#009674" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:window-width="1317" + inkscape:window-height="744" + id="namedview2872" + showgrid="false" + inkscape:zoom="3.3377778" + inkscape:cx="46.452495" + inkscape:cy="45.214888" + inkscape:window-x="49" + inkscape:window-y="24" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + +<path + d="m 77.215999,51.217552 7.57,-1.002 6.642,-27.295 4.687,0.25 0,66.571 c 0,2.356 -1.904,4.261003 -4.26,4.261003 L 2.1299988,93.927555 -1.1822193e-6,84.804552 23.584999,79.566552 l 3.685,-8.748 21.756,-7.77 16.636,7.369 6.392,-2.081 5.162,-17.119 z" + id="path2866" + style="fill:#ffffff" + inkscape:connector-curvature="0" /> +<g + id="g2986" + transform="matrix(0.74143286,0,0,0.74143286,0.25199462,0)"><path + style="fill:#ffffff" + id="path2864" + d="m 11.271,42.81 c -0.451,0.927 -0.777,1.955 -0.952,3.058 -0.075,0.552 -0.126,1.103 -0.126,1.654 l 0.401,25.259 -8.723,18.798 c -0.301,0.552 -0.526,1.203 -0.626,1.88 -0.477,3.107 1.654,5.99 4.762,6.467 2.406,0.376 4.712,-0.853 5.815,-2.883 l 9.6,-20.553 c 0.2,-0.477 0.376,-0.978 0.451,-1.529 0.024,-0.25 0.05,-0.525 0.05,-0.776 l -0.075,-15.608 14.738,6.435 2.381,15.265 c 0.477,2.23 2.306,4.01 4.688,4.386 3.107,0.451 5.99,-1.679 6.466,-4.763 0.075,-0.525 0.075,-1.053 0.025,-1.553 L 47.238,59.93 c -0.352,-1.78 -1.529,-3.309 -3.184,-4.086 l -13.184,-5.865 8.396,-14.613 4.161,5.289 c 0.426,0.477 0.977,0.877 1.604,1.128 l 15.866,4.637 c 2.105,0.451 4.261,-0.652 5.088,-2.682 0.928,-2.306 -0.176,-4.913 -2.456,-5.84 -0.075,-0.025 -0.15,-0.05 -0.226,-0.075 L 49.517,33.762 39.143,21.305 C 37.588,19.651 35.508,18.473 33.102,18.097 28.891,17.47 24.906,19.475 22.8,22.884 L 11.271,42.81 z" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff" + id="path2868" + d="m 38.24,16.994 c 4.687,0 8.496,-3.81 8.496,-8.497 C 46.736,3.81 42.927,0 38.24,0 c -4.688,0 -8.497,3.81 -8.497,8.497 0,4.687 3.81,8.497 8.497,8.497 z" + inkscape:connector-curvature="0" /></g> + +<g + transform="matrix(0.44375412,0,0,0.44375412,51.851618,11.258457)" + id="g2986-6"><path + inkscape:connector-curvature="0" + style="fill:#ffffff" + id="path2864-9" + d="m 11.271,42.81 c -0.451,0.927 -0.777,1.955 -0.952,3.058 -0.075,0.552 -0.126,1.103 -0.126,1.654 l 0.401,25.259 -8.723,18.798 c -0.301,0.552 -0.526,1.203 -0.626,1.88 -0.477,3.107 1.654,5.99 4.762,6.467 2.406,0.376 4.712,-0.853 5.815,-2.883 l 9.6,-20.553 c 0.2,-0.477 0.376,-0.978 0.451,-1.529 0.024,-0.25 0.05,-0.525 0.05,-0.776 l -0.075,-15.608 14.738,6.435 2.381,15.265 c 0.477,2.23 2.306,4.01 4.688,4.386 3.107,0.451 5.99,-1.679 6.466,-4.763 0.075,-0.525 0.075,-1.053 0.025,-1.553 L 47.238,59.93 c -0.352,-1.78 -1.529,-3.309 -3.184,-4.086 l -13.184,-5.865 8.396,-14.613 4.161,5.289 c 0.426,0.477 0.977,0.877 1.604,1.128 l 15.866,4.637 c 2.105,0.451 4.261,-0.652 5.088,-2.682 0.928,-2.306 -0.176,-4.913 -2.456,-5.84 -0.075,-0.025 -0.15,-0.05 -0.226,-0.075 L 49.517,33.762 39.143,21.305 C 37.588,19.651 35.508,18.473 33.102,18.097 28.891,17.47 24.906,19.475 22.8,22.884 L 11.271,42.81 z" /><path + inkscape:connector-curvature="0" + style="fill:#ffffff" + id="path2868-3" + d="m 38.24,16.994 c 4.687,0 8.496,-3.81 8.496,-8.497 C 46.736,3.81 42.927,0 38.24,0 c -4.688,0 -8.497,3.81 -8.497,8.497 0,4.687 3.81,8.497 8.497,8.497 z" /></g></svg>
\ No newline at end of file diff --git a/main/res/drawable-hdpi/actionbar_manual.png b/main/res/drawable-hdpi/actionbar_manual.png Binary files differdeleted file mode 100644 index 0b0c93c..0000000 --- a/main/res/drawable-hdpi/actionbar_manual.png +++ /dev/null diff --git a/main/res/drawable-ldpi/actionbar_manual.png b/main/res/drawable-ldpi/actionbar_manual.png Binary files differdeleted file mode 100644 index 14af11d..0000000 --- a/main/res/drawable-ldpi/actionbar_manual.png +++ /dev/null diff --git a/main/res/drawable-mdpi/actionbar_manual.png b/main/res/drawable-mdpi/actionbar_manual.png Binary files differdeleted file mode 100644 index a71acb3..0000000 --- a/main/res/drawable-mdpi/actionbar_manual.png +++ /dev/null diff --git a/main/res/drawable-mdpi/attribute_easy_climbing.png b/main/res/drawable-mdpi/attribute_easy_climbing.png Binary files differnew file mode 100644 index 0000000..ecf10b8 --- /dev/null +++ b/main/res/drawable-mdpi/attribute_easy_climbing.png diff --git a/main/res/drawable-mdpi/helper_manual.png b/main/res/drawable-mdpi/helper_manual.png Binary files differdeleted file mode 100644 index c3c43db..0000000 --- a/main/res/drawable-mdpi/helper_manual.png +++ /dev/null diff --git a/main/res/drawable/favourite_background_dark.xml b/main/res/drawable/favorite_background_dark.xml index b8aa8d3..b8aa8d3 100644 --- a/main/res/drawable/favourite_background_dark.xml +++ b/main/res/drawable/favorite_background_dark.xml diff --git a/main/res/drawable/favourite_background_green_dark.xml b/main/res/drawable/favorite_background_green_dark.xml index 3e1b545..3e1b545 100644 --- a/main/res/drawable/favourite_background_green_dark.xml +++ b/main/res/drawable/favorite_background_green_dark.xml diff --git a/main/res/drawable/favourite_background_green_light.xml b/main/res/drawable/favorite_background_green_light.xml index a2070e7..a2070e7 100644 --- a/main/res/drawable/favourite_background_green_light.xml +++ b/main/res/drawable/favorite_background_green_light.xml diff --git a/main/res/drawable/favourite_background_light.xml b/main/res/drawable/favorite_background_light.xml index 60c0b2c..60c0b2c 100644 --- a/main/res/drawable/favourite_background_light.xml +++ b/main/res/drawable/favorite_background_light.xml diff --git a/main/res/drawable/favourite_background_orange_dark.xml b/main/res/drawable/favorite_background_orange_dark.xml index 8730487..8730487 100644 --- a/main/res/drawable/favourite_background_orange_dark.xml +++ b/main/res/drawable/favorite_background_orange_dark.xml diff --git a/main/res/drawable/favourite_background_orange_light.xml b/main/res/drawable/favorite_background_orange_light.xml index 89ef726..89ef726 100644 --- a/main/res/drawable/favourite_background_orange_light.xml +++ b/main/res/drawable/favorite_background_orange_light.xml diff --git a/main/res/drawable/favourite_background_red_dark.xml b/main/res/drawable/favorite_background_red_dark.xml index 2fb580e..2fb580e 100644 --- a/main/res/drawable/favourite_background_red_dark.xml +++ b/main/res/drawable/favorite_background_red_dark.xml diff --git a/main/res/drawable/favourite_background_red_light.xml b/main/res/drawable/favorite_background_red_light.xml index b16cb92..b16cb92 100644 --- a/main/res/drawable/favourite_background_red_light.xml +++ b/main/res/drawable/favorite_background_red_light.xml diff --git a/main/res/layout-land/coords.xml b/main/res/layout-land/coords.xml index 1388187..88e5e76 100644 --- a/main/res/layout-land/coords.xml +++ b/main/res/layout-land/coords.xml @@ -10,13 +10,6 @@ <TextView style="@style/action_bar_title" android:text="@string/cache_coordinates" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - android:id="@+id/actionBarManualbutton" - style="@style/action_bar_action" - android:src="@drawable/actionbar_manual" /> </LinearLayout> <ScrollView diff --git a/main/res/layout-land/navigate.xml b/main/res/layout-land/navigate.xml index aa8b2b4..5965128 100644 --- a/main/res/layout-land/navigate.xml +++ b/main/res/layout-land/navigate.xml @@ -5,23 +5,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> + <include layout="@layout/actionbar" /> <LinearLayout android:layout_width="fill_parent" diff --git a/main/res/layout/about_activity.xml b/main/res/layout/about_activity.xml index 9325ea0..b0de7ea 100644 --- a/main/res/layout/about_activity.xml +++ b/main/res/layout/about_activity.xml @@ -5,16 +5,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> + <include layout="@layout/actionbar"/> <ScrollView android:layout_width="fill_parent" diff --git a/main/res/layout/actionbar.xml b/main/res/layout/actionbar.xml new file mode 100644 index 0000000..9a3efa0 --- /dev/null +++ b/main/res/layout/actionbar.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + style="@style/action_bar" > + + <include layout="@layout/actionbar_title"/> +</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/actionbar_button_compass.xml b/main/res/layout/actionbar_button_compass.xml new file mode 100644 index 0000000..932444b --- /dev/null +++ b/main/res/layout/actionbar_button_compass.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <View style="@style/action_bar_separator" /> + + <ImageView + android:id="@+id/defaultNavigation" + style="@style/action_bar_action" + android:longClickable="true" + android:onClick="goDefaultNavigation" + android:src="@drawable/actionbar_compass_dark" /> + +</merge>
\ No newline at end of file diff --git a/main/res/layout/actionbar_button_map.xml b/main/res/layout/actionbar_button_map.xml new file mode 100644 index 0000000..9b2138a --- /dev/null +++ b/main/res/layout/actionbar_button_map.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <View style="@style/action_bar_separator" /> + + <ImageView + style="@style/action_bar_action" + android:onClick="goMap" + android:src="@drawable/actionbar_map" /> + +</merge>
\ No newline at end of file diff --git a/main/res/layout/actionbar_button_myposition.xml b/main/res/layout/actionbar_button_myposition.xml new file mode 100644 index 0000000..3604345 --- /dev/null +++ b/main/res/layout/actionbar_button_myposition.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <View style="@style/action_bar_separator" /> + + <ImageSwitcher + android:id="@+id/my_position" + style="@style/action_bar_action" /> + +</merge>
\ No newline at end of file diff --git a/main/res/layout/actionbar_button_search.xml b/main/res/layout/actionbar_button_search.xml new file mode 100644 index 0000000..2aa1a50 --- /dev/null +++ b/main/res/layout/actionbar_button_search.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <View style="@style/action_bar_separator" /> + + <ImageView + style="@style/action_bar_action" + android:onClick="goSearch" + android:src="@drawable/actionbar_search" /> + +</merge>
\ No newline at end of file diff --git a/main/res/layout/actionbar_progress.xml b/main/res/layout/actionbar_progress.xml new file mode 100644 index 0000000..a39d103 --- /dev/null +++ b/main/res/layout/actionbar_progress.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" + style="@style/action_bar_progress" + android:visibility="gone" android:id="@+id/actionbar_progress"/>
\ No newline at end of file diff --git a/main/res/layout/actionbar_title.xml b/main/res/layout/actionbar_title.xml new file mode 100644 index 0000000..4fa5348 --- /dev/null +++ b/main/res/layout/actionbar_title.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <ImageView + style="@style/action_bar_action" + android:onClick="goHome" /> + + <View style="@style/action_bar_separator" /> + + <TextView + android:id="@+id/actionbar_title" + style="@style/action_bar_title" /> + +</merge>
\ No newline at end of file diff --git a/main/res/layout/addresses.xml b/main/res/layout/addresses.xml index 2be131d..08f5bc1 100644 --- a/main/res/layout/addresses.xml +++ b/main/res/layout/addresses.xml @@ -4,16 +4,7 @@ android:layout_height="fill_parent" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> + <include layout="@layout/actionbar"/> <ListView android:id="@android:id/list" diff --git a/main/res/layout/cache_image_item.xml b/main/res/layout/cache_image_item.xml index 7ed4782..3e025e1 100644 --- a/main/res/layout/cache_image_item.xml +++ b/main/res/layout/cache_image_item.xml @@ -27,4 +27,10 @@ android:textSize="14dip" android:visibility="gone" /> + <ProgressBar + android:id="@+id/progress_bar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + style="@android:style/Widget.ProgressBar.Small"/> + </LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/caches.xml b/main/res/layout/caches.xml index 147a596..5c3abbc 100644 --- a/main/res/layout/caches.xml +++ b/main/res/layout/caches.xml @@ -6,34 +6,11 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <View style="@style/action_bar_separator" /> + <include layout="@layout/actionbar_progress" /> - <TextView - style="@style/action_bar_title" - android:clickable="true" - 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:onClick="goMap" - android:src="@drawable/actionbar_map" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_map" /> </LinearLayout> <include layout="@layout/filter_bar" /> diff --git a/main/res/layout/caches_item.xml b/main/res/layout/caches_item.xml index e3b861c..d4e7b27 100644 --- a/main/res/layout/caches_item.xml +++ b/main/res/layout/caches_item.xml @@ -159,14 +159,14 @@ android:src="@drawable/trackable_all" /> <TextView - android:id="@+id/favourite" + android:id="@+id/favorite" android:layout_width="35dip" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_gravity="center" android:layout_marginTop="22dip" - android:background="?favourite" + android:background="?favorite" android:ellipsize="marquee" android:gravity="center" android:lines="1" diff --git a/main/res/layout/cacheview.xml b/main/res/layout/cacheview.xml index 89d7152..44765dc 100644 --- a/main/res/layout/cacheview.xml +++ b/main/res/layout/cacheview.xml @@ -8,29 +8,9 @@ <LinearLayout style="@style/action_bar" >
- <ImageView
- style="@style/action_bar_action"
- android:onClick="goHome" />
+ <include layout="@layout/actionbar_title" />
- <View style="@style/action_bar_separator" />
-
- <TextView style="@style/action_bar_title" />
-
- <View style="@style/action_bar_separator" />
-
- <ImageView
- android:id="@+id/defaultNavigation"
- style="@style/action_bar_action"
- android:longClickable="true"
- android:onClick="startDefaultNavigation"
- android:src="@drawable/actionbar_compass_dark" />
-
- <View style="@style/action_bar_separator" />
-
- <ImageView
- style="@style/action_bar_action"
- android:onClick="goManual"
- android:src="@drawable/actionbar_manual" />
+ <include layout="@layout/actionbar_button_compass" />
</LinearLayout>
<android.support.v4.view.ViewPager
diff --git a/main/res/layout/coords.xml b/main/res/layout/coords.xml index ddb2f4e..6da453e 100644 --- a/main/res/layout/coords.xml +++ b/main/res/layout/coords.xml @@ -5,19 +5,7 @@ android:layout_height="wrap_content" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <TextView - style="@style/action_bar_title" - android:text="@string/cache_coordinates" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - android:id="@+id/actionBarManualbutton" - style="@style/action_bar_action" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> + <include layout="@layout/actionbar" /> <ScrollView android:id="@+id/scroller" diff --git a/main/res/layout/edit_waypoint_activity.xml b/main/res/layout/edit_waypoint_activity.xml index 3fbd19e..657e9f4 100644 --- a/main/res/layout/edit_waypoint_activity.xml +++ b/main/res/layout/edit_waypoint_activity.xml @@ -5,23 +5,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> + <include layout="@layout/actionbar" /> <ScrollView android:layout_width="fill_parent" diff --git a/main/res/layout/editor.xml b/main/res/layout/editor.xml deleted file mode 100644 index d556836..0000000 --- a/main/res/layout/editor.xml +++ /dev/null @@ -1,25 +0,0 @@ -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/linearLayout1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - - <EditText - android:id="@+id/editorEditText" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:inputType="textMultiLine" - android:scrollbars="vertical" > - - <requestFocus /> - </EditText> - - <Button - android:id="@+id/editorSave" - style="@style/button_full" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/editor_save" /> - -</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/fragment_edit_note.xml b/main/res/layout/fragment_edit_note.xml new file mode 100644 index 0000000..68e2b2c --- /dev/null +++ b/main/res/layout/fragment_edit_note.xml @@ -0,0 +1,15 @@ +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/edit_note" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:orientation="vertical"> + + <EditText + android:id="@+id/note" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:inputType="text" + android:imeOptions="actionDone"/> +</LinearLayout> diff --git a/main/res/layout/gpx.xml b/main/res/layout/gpx.xml index 2be131d..08f5bc1 100644 --- a/main/res/layout/gpx.xml +++ b/main/res/layout/gpx.xml @@ -4,16 +4,7 @@ android:layout_height="fill_parent" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> + <include layout="@layout/actionbar"/> <ListView android:id="@android:id/list" diff --git a/main/res/layout/init.xml b/main/res/layout/init.xml index 26137fc..ab38fb6 100644 --- a/main/res/layout/init.xml +++ b/main/res/layout/init.xml @@ -5,23 +5,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> + <include layout="@layout/actionbar" /> <ScrollView android:layout_width="fill_parent" diff --git a/main/res/layout/main.xml b/main/res/layout/main.xml index 0f9aff0..e90cd37 100644 --- a/main/res/layout/main.xml +++ b/main/res/layout/main.xml @@ -13,19 +13,7 @@ <TextView style="@style/action_bar_title" /> - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goSearch" - android:src="@drawable/actionbar_search" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_search" /> </LinearLayout> <fragment @@ -178,41 +166,6 @@ </LinearLayout> <!-- ** --> - <RelativeLayout - android:id="@+id/helper" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_alignParentBottom="true" - android:layout_marginBottom="64dip" - android:layout_marginLeft="16dip" - android:layout_marginRight="16dip" - android:background="@drawable/helper_bcg" - android:visibility="gone" > - - <ImageView - android:layout_width="32dip" - android:layout_height="32dip" - android:layout_alignParentLeft="true" - android:layout_gravity="center" - android:layout_margin="4dip" - android:gravity="center" - android:scaleType="center" - android:src="@drawable/actionbar_manual" /> - - <TextView - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_gravity="center" - android:layout_marginLeft="34dip" - android:gravity="center" - android:padding="4dip" - android:text="@string/helper" - android:textColor="@color/text_icon" - android:textSize="14dip" /> - </RelativeLayout> - <!-- ** --> - <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" diff --git a/main/res/layout/map_google.xml b/main/res/layout/map_google.xml index 723b7157..3e460ef 100644 --- a/main/res/layout/map_google.xml +++ b/main/res/layout/map_google.xml @@ -6,30 +6,11 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <View style="@style/action_bar_separator" /> + <include layout="@layout/actionbar_progress" /> - <TextView style="@style/action_bar_title" /> - - <ProgressBar - style="@style/action_bar_progress" - android:visibility="gone" /> - - <View style="@style/action_bar_separator" /> - - <ImageSwitcher - android:id="@+id/my_position" - style="@style/action_bar_action" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_myposition" /> </LinearLayout> <include layout="@layout/filter_bar" /> diff --git a/main/res/layout/map_mapsforge.xml b/main/res/layout/map_mapsforge.xml index f3b183e..1833da3 100644 --- a/main/res/layout/map_mapsforge.xml +++ b/main/res/layout/map_mapsforge.xml @@ -6,30 +6,11 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <View style="@style/action_bar_separator" /> + <include layout="@layout/actionbar_progress" /> - <TextView style="@style/action_bar_title" /> - - <ProgressBar - style="@style/action_bar_progress" - android:visibility="gone" /> - - <View style="@style/action_bar_separator" /> - - <ImageSwitcher - android:id="@+id/my_position" - style="@style/action_bar_action" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_myposition" /> </LinearLayout> <include layout="@layout/filter_bar" /> diff --git a/main/res/layout/map_mapsforge_old.xml b/main/res/layout/map_mapsforge_old.xml index 44b3387..6ca98e1 100644 --- a/main/res/layout/map_mapsforge_old.xml +++ b/main/res/layout/map_mapsforge_old.xml @@ -6,30 +6,11 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <View style="@style/action_bar_separator" /> + <include layout="@layout/actionbar_progress" /> - <TextView style="@style/action_bar_title" /> - - <ProgressBar - style="@style/action_bar_progress" - android:visibility="gone" /> - - <View style="@style/action_bar_separator" /> - - <ImageSwitcher - android:id="@+id/my_position" - style="@style/action_bar_action" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_myposition" /> </LinearLayout> <include layout="@layout/filter_bar" /> diff --git a/main/res/layout/map_static.xml b/main/res/layout/map_static.xml index ff0435c..edf6c6e 100644 --- a/main/res/layout/map_static.xml +++ b/main/res/layout/map_static.xml @@ -4,16 +4,7 @@ android:layout_height="fill_parent" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> + <include layout="@layout/actionbar"/> <ScrollView android:layout_width="fill_parent" diff --git a/main/res/layout/navigate.xml b/main/res/layout/navigate.xml index 0c95958..ae51735 100644 --- a/main/res/layout/navigate.xml +++ b/main/res/layout/navigate.xml @@ -5,24 +5,6 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> - <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > diff --git a/main/res/layout/point.xml b/main/res/layout/point.xml index 3c133d8..baa568c 100644 --- a/main/res/layout/point.xml +++ b/main/res/layout/point.xml @@ -5,23 +5,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> + <include layout="@layout/actionbar" /> <ListView android:id="@+id/historyList" diff --git a/main/res/layout/popup.xml b/main/res/layout/popup.xml index ff64c91..15e4248 100644 --- a/main/res/layout/popup.xml +++ b/main/res/layout/popup.xml @@ -7,25 +7,11 @@ <LinearLayout style="@style/action_bar" > - <TextView style="@style/action_bar_title" /> + <TextView + android:id="@+id/actionbar_title" + style="@style/action_bar_title" /> - <View style="@style/action_bar_separator" /> - - <ImageView - android:id="@+id/defaultNavigation" - style="@style/action_bar_action" - android:longClickable="true" - android:onClick="goDefaultNavigation" - android:src="@drawable/actionbar_compass_dark" /> - - <View - android:id="@+id/separator" - style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_compass" /> </LinearLayout> <ScrollView diff --git a/main/res/layout/search.xml b/main/res/layout/search.xml index 6d0bf91..a0a699d 100644 --- a/main/res/layout/search.xml +++ b/main/res/layout/search.xml @@ -6,23 +6,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - - <View style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> - </LinearLayout> + <include layout="@layout/actionbar" /> <ScrollView android:layout_width="fill_parent" diff --git a/main/res/layout/spoilers.xml b/main/res/layout/spoilers.xml index 233972a..2027b7a 100644 --- a/main/res/layout/spoilers.xml +++ b/main/res/layout/spoilers.xml @@ -5,16 +5,7 @@ android:background="?background_color" android:orientation="vertical" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> + <include layout="@layout/actionbar"/> <include layout="@layout/caches_images" /> diff --git a/main/res/layout/touch.xml b/main/res/layout/touch.xml index 09a8033..61778ce 100644 --- a/main/res/layout/touch.xml +++ b/main/res/layout/touch.xml @@ -7,24 +7,9 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <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" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_progress" /> </LinearLayout> <ScrollView diff --git a/main/res/layout/trackable_activity.xml b/main/res/layout/trackable_activity.xml index fe61409..bcfb42d 100644 --- a/main/res/layout/trackable_activity.xml +++ b/main/res/layout/trackable_activity.xml @@ -6,23 +6,7 @@ android:background="?background_color"
android:orientation="vertical" >
- <LinearLayout style="@style/action_bar" >
-
- <ImageView
- style="@style/action_bar_action"
- android:onClick="goHome" />
-
- <View style="@style/action_bar_separator" />
-
- <TextView style="@style/action_bar_title" />
-
- <View style="@style/action_bar_separator" />
-
- <ImageView
- style="@style/action_bar_action"
- android:onClick="goManual"
- android:src="@drawable/actionbar_manual" />
- </LinearLayout>
+ <include layout="@layout/actionbar" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
diff --git a/main/res/layout/trackable_logs_img.xml b/main/res/layout/trackable_logs_img.xml deleted file mode 100644 index aaed32b..0000000 --- a/main/res/layout/trackable_logs_img.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" > - - <TextView - android:id="@+id/title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="left|top" - android:drawableLeft="?log_img_icon" - android:drawablePadding="3dip" - android:textColor="?text_color" - android:textSize="14dip" /> - -</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/trackable_logs_item.xml b/main/res/layout/trackable_logs_item.xml index 52a38a9..65f3e16 100644 --- a/main/res/layout/trackable_logs_item.xml +++ b/main/res/layout/trackable_logs_item.xml @@ -20,6 +20,7 @@ android:textSize="18dip" /> <LinearLayout + android:id="@+id/detail_box" android:layout_width="102dip" android:layout_height="wrap_content" android:layout_alignParentLeft="true" @@ -92,7 +93,7 @@ android:layout_marginLeft="102dip" android:orientation="vertical" android:padding="3dip" - android:textSize="14dip" > + android:textSize="14sp" > <TextView android:id="@+id/log" @@ -104,7 +105,18 @@ android:gravity="left" android:padding="3dip" android:textColor="?text_color" - android:textSize="14dip" /> + android:textSize="14sp" /> + + <TextView + android:id="@+id/log_images" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="left|top" + android:layout_marginTop="3dip" + android:drawableLeft="?log_img_icon" + android:drawablePadding="3dip" + android:textColor="?text_color" + android:textSize="14sp" /> </LinearLayout> </RelativeLayout>
\ No newline at end of file diff --git a/main/res/layout/twitter_authorization_activity.xml b/main/res/layout/twitter_authorization_activity.xml index 97c2236..ec9aa8a 100644 --- a/main/res/layout/twitter_authorization_activity.xml +++ b/main/res/layout/twitter_authorization_activity.xml @@ -5,16 +5,7 @@ android:orientation="vertical" android:visibility="visible" > - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> + <include layout="@layout/actionbar"/> <ScrollView android:layout_width="fill_parent" diff --git a/main/res/layout/useful_apps.xml b/main/res/layout/useful_apps.xml deleted file mode 100644 index 2a3d14e..0000000 --- a/main/res/layout/useful_apps.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:background="?background_color" - android:orientation="vertical" > - - <LinearLayout style="@style/action_bar" > - - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> - - <View style="@style/action_bar_separator" /> - - <TextView style="@style/action_bar_title" /> - </LinearLayout> - - <ScrollView - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:orientation="vertical" - android:padding="4dip" > - - <LinearLayout - android:id="@+id/parent" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - </LinearLayout> - </ScrollView> - -</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/useful_apps_activity.xml b/main/res/layout/useful_apps_activity.xml new file mode 100644 index 0000000..84bcf39 --- /dev/null +++ b/main/res/layout/useful_apps_activity.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:background="?background_color" + android:orientation="vertical" > + + <include layout="@layout/actionbar" /> + + <ListView + android:id="@+id/apps_list" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:cacheColorHint="?background_color" + android:divider="?background_color" + android:fastScrollEnabled="true" + android:footerDividersEnabled="false" + android:headerDividersEnabled="false" + android:listSelector="?background_color" + android:padding="4dip" > + </ListView> + +</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/useful_apps_item.xml b/main/res/layout/useful_apps_item.xml index 5c8f6f0..70e7baf 100644 --- a/main/res/layout/useful_apps_item.xml +++ b/main/res/layout/useful_apps_item.xml @@ -4,6 +4,7 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="10dip" + android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <RelativeLayout style="@style/separator_horizontal_layout" > @@ -43,7 +44,7 @@ android:textColor="?text_color" android:textColorLink="?text_color_link" android:textIsSelectable="false" - android:textSize="14dip" /> + android:textSize="14sp" /> </LinearLayout> </LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/visit.xml b/main/res/layout/visit.xml index 43a3308..7ffd630 100644 --- a/main/res/layout/visit.xml +++ b/main/res/layout/visit.xml @@ -7,24 +7,9 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <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" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_progress" /> </LinearLayout> <ScrollView diff --git a/main/res/layout/visit_image.xml b/main/res/layout/visit_image.xml index 7997406..fd8eaea 100644 --- a/main/res/layout/visit_image.xml +++ b/main/res/layout/visit_image.xml @@ -7,24 +7,9 @@ <LinearLayout style="@style/action_bar" > - <ImageView - style="@style/action_bar_action" - android:onClick="goHome" /> + <include layout="@layout/actionbar_title" /> - <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" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_progress" /> </LinearLayout> <ScrollView @@ -98,6 +83,13 @@ android:minLines="5" android:singleLine="false" /> + <Spinner + android:id="@+id/logImageScale" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:entries="@array/log_image_scales" + android:prompt="@string/log_image_scale" /> + <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" diff --git a/main/res/layout/waypoint_popup.xml b/main/res/layout/waypoint_popup.xml index 869ffa0..b3806aa 100644 --- a/main/res/layout/waypoint_popup.xml +++ b/main/res/layout/waypoint_popup.xml @@ -7,25 +7,11 @@ <LinearLayout style="@style/action_bar" > - <TextView style="@style/action_bar_title" /> + <TextView + android:id="@+id/actionbar_title" + style="@style/action_bar_title" /> - <View style="@style/action_bar_separator" /> - - <ImageView - android:id="@+id/defaultNavigation" - style="@style/action_bar_action" - android:longClickable="true" - android:onClick="goDefaultNavigation" - android:src="@drawable/actionbar_compass_dark" /> - - <View - android:id="@+id/separator" - style="@style/action_bar_separator" /> - - <ImageView - style="@style/action_bar_action" - android:onClick="goManual" - android:src="@drawable/actionbar_manual" /> + <include layout="@layout/actionbar_button_compass" /> </LinearLayout> <ScrollView diff --git a/main/res/values-cs/strings.xml b/main/res/values-cs/strings.xml index 8bff251..b5df662 100644 --- a/main/res/values-cs/strings.xml +++ b/main/res/values-cs/strings.xml @@ -90,7 +90,7 @@ <string name="log_post">Odeslat Log</string> <string name="log_post_rate">Odeslat Log a hlasovat</string> <string name="log_post_no_rate">Odeslat Log a nehlasovat</string> - <string name="log_post_not_possible">Načítání stránky s Logy…</string> + <string name="log_post_not_possible">Načítání stránky s Logovacím formulářem…</string> <string name="log_add">Přidat</string> <string name="log_rating">Hodnocení</string> <string name="log_no_rating">Bez hodnocení</string> @@ -175,7 +175,7 @@ <string name="err_missing_device_name">Před registrací prosím zadej název zařízení.</string> <string name="err_favorite_failed">Označení oblíbenosti keše selhalo.</string> <string name="err_select_logimage_failed">Výběr obrázku pro zápis selhal.</string> - <string name="err_aquire_image_failed">Získání obrázku selhalo.</string> + <string name="err_acquire_image_failed">Získání obrázku selhalo.</string> <string name="err_tb_display">c:geo nemůže zobrazit sledovatelný předmět. Je to opravdu sledovatelný předmět?</string> <string name="err_tb_details_open">c:geo nemůže otevřít podrobnosti ke sledovatelnému předmětu.</string> @@ -323,7 +323,7 @@ <string name="caches_filter_track">Se sledovatelnými předměty</string> <string name="caches_filter_clear">Vymazat filtry</string> <string name="caches_filter_modified">S upravenými souřadnicemi</string> - <string name="caches_filter_origin">Originální</string> + <string name="caches_filter_origin">Původ keše</string> <string name="caches_removing_from_history">Čištění Historie…</string> <string name="caches_clear_offlinelogs">Smazat offline Logy</string> <string name="caches_clear_offlinelogs_progress">Mazání offline logů</string> @@ -409,7 +409,6 @@ <string name="init_offline_wp">Ukládat statické mapy k bodům trasy pro offline použití</string> <string name="init_save_log_img">Ukládat obrázky z logů</string> <string name="init_units">Používat imperiální jednotky vzdálenosti</string> - <string name="init_nav">Používat Google Navigaci</string> <string name="init_log_offline">Povolit Offline logování\n(Při logování nezobrazovat online logovací obrazovku a neodesílat Log na server)</string> <string name="init_choose_list">Ptát se na seznam pro uložení keše</string> <string name="init_livelist">Zobrazovat směr v seznamu keší</string> @@ -515,7 +514,6 @@ <string name="cache_attributes">Atributy</string> <string name="cache_inventory">Inventář</string> <string name="cache_log_offline">Offline Log</string> - <string name="cache_log_images_loading">Načítání obrázků z logů…</string> <string name="cache_log_images_title">Obrázky z Logů</string> <string name="cache_log_image_default_title">Fotografie</string> <string name="cache_personal_note">Osobní poznámka</string> @@ -554,7 +552,7 @@ <string name="cache_dialog_loading_details_status_gcvote">Načítání GCVote</string> <string name="cache_dialog_loading_details_status_elevation">Načítání údajů o nadmořské výšce</string> <string name="cache_dialog_loading_details_status_cache">Ukládání do mezipaměti</string> - <string name="cache_dialog_loading_details_status_render">Renderování zobrazení</string> + <string name="cache_dialog_loading_details_status_render">Vykreslování pohledu</string> <string name="cache_dialog_offline_save_title">Offline</string> <string name="cache_dialog_offline_save_message">Ukládání keše pro offline použití…</string> <string name="cache_dialog_offline_drop_title">Offline</string> @@ -565,10 +563,10 @@ <string name="cache_dialog_watchlist_add_message">Přidávání keše do tvého Watchlistu…</string> <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Odstraňování keše z tvého Watchlistu…</string> - <string name="cache_dialog_favourite_add_title">Oblíbené</string> - <string name="cache_dialog_favourite_add_message">Přidávání keše do Oblíbených…</string> - <string name="cache_dialog_favourite_remove_title">Oblíbené</string> - <string name="cache_dialog_favourite_remove_message">Odstraňování keše z Oblíbených…</string> + <string name="cache_dialog_favorite_add_title">Oblíbené</string> + <string name="cache_dialog_favorite_add_message">Přidávání keše do Oblíbených…</string> + <string name="cache_dialog_favorite_remove_title">Oblíbené</string> + <string name="cache_dialog_favorite_remove_message">Odstraňování keše z Oblíbených…</string> <string name="cache_menu_navigate">Navigovat</string> <string name="cache_menu_navigation_drive">Navigace (Řízení)</string> <string name="cache_menu_navigation_walk">Navigace (Chůze)</string> @@ -610,7 +608,7 @@ <string name="cache_rating">Hodnocení</string> <string name="cache_own_rating">Vlastní hodnocení</string> <string name="cache_rating_of">z</string> - <string name="cache_favourite">Oblíbená</string> + <string name="cache_favorite">Oblíbená</string> <string name="cache_owner">Zakladatel</string> <string name="cache_hidden">Skryta</string> <string name="cache_event">Datum</string> @@ -618,9 +616,7 @@ <string name="cache_coordinates">Souřadnice</string> <string name="cache_coordinates_original">Původní souřadnice</string> <string name="cache_spoiler_images_title">Obrázky s nápovědou</string> - <string name="cache_spoiler_images_loading">Načítání obrázků s nápovědou…</string> <string name="cache_images_title">Obrázky</string> - <string name="cache_images_loading">Načítání obrázků…</string> <string name="cache_log_types">Typy zápisů</string> <string name="cache_coordinates_no">Tato keš nemá souřadnice.</string> <string name="cache_clear_history">Vymazat historii</string> @@ -823,8 +819,6 @@ <string name="license_dismiss">Zamítnout</string> <!-- helpers --> - <string name="helper_manual_title">Manuál</string> - <string name="helper_manual_description">Komplexní příručka aplikace c:geo obsahující popis všech možností této aplikace (včetně těch skrytých).</string> <string name="helper_calendar_title">c:geo modul kalendáře</string> <string name="helper_calendar_missing">c:geo modul kalendáře není nainstalován.</string> <string name="helper_calendar_description">Umožňuje exportovat události keší do tvého kalendáře.</string> @@ -1055,7 +1049,6 @@ <string name="facebook">Facebook: <a href="http://www.facebook.com/pages/cgeo/297269860090">Stránka c:geo</a></string> <string name="twitter">Twitter: <a href="http://twitter.com/android_gc">@android_GC</a></string> <string name="nutshellmanual">Návod: <a href="http://manual.cgeo.org/">c:geo v Nutshell</a></string> - <string name="about_go4cache">Služba <b>Go 4 Cache</b> zobrazuje ostatní geokačery na mapě (v <b>c:geo</b> nebo v prohlížeči) v reálném čase. Může zobrazovat - na příklad - jakou keš zrovna hledají. Připojením se k <b>Go 4 Cache</b> získá aplikace <b>c:geo</b> povolení zveřejňovat tvou polohu při geocachingu (pouze když je <b>c:geo</b> spuštěno).</string> <string name="about_twitter">Má <b>c:geo</b> publikovat nový status na Twitteru vždy, když zaloguješ keš?</string> <string name="about_auth_1">Následující proces dovoluje aplikaci <b>c:geo</b> přístup na Twitter - pokud budeš souhlasit.</string> <string name="about_auth_2">Klepnutím na tlačítko \"Zahájit autorizaci\" bude proces zahájen. Tento proces otevře webový prohlížeč s Twitterem. Přihlaš se na této stránce a povol <b>c:geu</b> přístup k tvému účtu. Pokud je to povoleno, Twitter ti ukáže číselný PIN kód. Tento PIN kód musíš zadat do <b>c:geo</b> a potvrdit. To je vše.</string> diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index dd40100..5d19848 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -125,7 +125,15 @@ <string name="log_image_camera">Neu</string> <string name="log_image_caption">Überschrift</string> <string name="log_image_description">Beschreibung</string> - + <string name="log_image_scale">Skalierung</string> + <string-array name="log_image_scales"> + <item>Keine Skalierung</item> + <item>512 px</item> + <item>640 px</item> + <item>800 px</item> + <item>1024 px</item> + </string-array> + <!-- translation --> <string name="translate_to_sys_lang">Übersetze in %s</string> <string name="translate_to_english">Übersetze in Englisch</string> @@ -502,7 +510,6 @@ <string name="cache_attributes">Attribute</string> <string name="cache_inventory">Inventar</string> <string name="cache_log_offline">Offline-Log</string> - <string name="cache_log_images_loading">Lade Logbild…</string> <string name="cache_log_images_title">Logbild</string> <string name="cache_log_image_default_title">Bild</string> <string name="cache_personal_note">Persönliche Notiz</string> @@ -551,10 +558,10 @@ <string name="cache_dialog_watchlist_add_message">Füge den Cache deiner Watchlist hinzu…</string> <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Entferne den Cache von deiner Watchlist…</string> - <string name="cache_dialog_favourite_add_title">Favorit</string> - <string name="cache_dialog_favourite_add_message">Füge den Cache als dein Favorit hinzu…</string> - <string name="cache_dialog_favourite_remove_title">Favorit</string> - <string name="cache_dialog_favourite_remove_message">Entferne den Cache von deinen Favoriten…</string> + <string name="cache_dialog_favorite_add_title">Favorit</string> + <string name="cache_dialog_favorite_add_message">Füge den Cache zu Favoriten hinzu…</string> + <string name="cache_dialog_favorite_remove_title">Favorit</string> + <string name="cache_dialog_favorite_remove_message">Entferne den Cache von deinen Favoriten…</string> <string name="cache_menu_navigate">Navigieren</string> <string name="cache_menu_navigation_drive">Navigation (Fahren)</string> <string name="cache_menu_navigation_walk">Navigation (Gehen)</string> @@ -585,6 +592,8 @@ <string name="cache_status_disabled">Deaktiviert</string> <string name="cache_status_premium">Nur für Premium-Mitglieder</string> <string name="cache_status_not_premium">Für alle Mitglieder</string> + <string name="cache_status_stored">Gespeichert</string> + <string name="cache_status_not_stored">Nicht gespeichert</string> <string name="cache_geocode">Geocode</string> <string name="cache_name">Name</string> <string name="cache_type">Typ</string> @@ -595,7 +604,7 @@ <string name="cache_rating">Bewertung</string> <string name="cache_own_rating">Eigene Bewertung</string> <string name="cache_rating_of">von</string> - <string name="cache_favourite">Favorit</string> + <string name="cache_favorite">Favorit</string> <string name="cache_owner">Besitzer</string> <string name="cache_hidden">Versteckt</string> <string name="cache_event">Zeitangabe</string> @@ -603,8 +612,6 @@ <string name="cache_coordinates">Koordinaten</string> <string name="cache_coordinates_original">Ursprüngliche Koordinaten</string> <string name="cache_spoiler_images_title">Hinweisbilder</string> - <string name="cache_spoiler_images_loading">Lade Hinweisbilder…</string> - <string name="cache_images_loading">Lade Bilder…</string> <string name="cache_log_types">Logs</string> <string name="cache_coordinates_no">Dieser Cache hat keine Koordinaten.</string> <string name="cache_clear_history">Verlauf leeren</string> @@ -806,8 +813,6 @@ <string name="license_dismiss">Ablehnen</string> <!-- helpers --> - <string name="helper_manual_title">Anleitung</string> - <string name="helper_manual_description">Umfangreiche Anleitung für c:geo mit Beschreibung aller Möglichkeiten dieser App (auch versteckte).</string> <string name="helper_calendar_title">c:geo Kalender Add-on</string> <string name="helper_calendar_missing">c:geo Kalender Add-on nicht installiert</string> <string name="helper_calendar_description">Ermöglicht die Übernahme von Event-Caches in den Kalender.</string> @@ -984,6 +989,8 @@ <string name="attribute_swamp_no">Nicht sumpfig / kein matschiges Gelände</string> <string name="attribute_hills_yes">Hügeliges Gelände</string> <string name="attribute_hills_no">Kein hügeliges Gelände</string> + <string name="attribute_easy_climbing_yes">Einfaches Klettern</string> + <string name="attribute_easy_climbing_no">Kein einfaches Klettern</string> <string name="attribute_poi_yes">Interessanter Ort</string> <string name="attribute_poi_no">Uninteressanter Ort</string> <string name="attribute_moving_target_yes">Bewegliches Ziel</string> diff --git a/main/res/values-es/strings.xml b/main/res/values-es/strings.xml index 7215d72..b618fb9 100644 --- a/main/res/values-es/strings.xml +++ b/main/res/values-es/strings.xml @@ -11,6 +11,8 @@ <string name="helpers">¿Qué instalar?</string> <string name="about">Sobre c:geo</string> <string name="helper">Si quieres aprender cosas sobre <b>c:geo</b>?\nEcha un ojo a nuestro manual.</string> + <string name="latitude">Latitud</string> + <string name="longitude">Longitud</string> <!-- actionbar --> <string name="action_bar_share_title">Compartir enlace a escondite</string> @@ -19,19 +21,20 @@ <string name="all_types">Todos los escondites</string> <string name="traditional">Tradicionales</string> <string name="multi">Multis</string> - <string name="mystery">Desconocidos</string> + <string name="mystery">Desconocidos/Mistery</string> <string name="letterbox">Buzón híbrido</string> - <string name="event">Por pistas</string> - <string name="mega">Mega-eventos</string> + <string name="event">Eventos</string> + <string name="mega">Mega-Eventos</string> <string name="earth">Educativos (Earth)</string> - <string name="cito">Limpieza de escondites</string> + <string name="cito">Eventos Limpieza(CITO)</string> <string name="webcam">Webcams</string> <string name="virtual">Virtuales</string> <string name="wherigo">Wherigo</string> - <string name="lostfound">Perdidos y encontrados</string> + <string name="lostfound">Eventos Perdidos y Encontrados</string> <string name="ape">Proyecto APE</string> <string name="gchq">Groundspeak HQ</string> - <string name="gps">Exhibición de escondites GPS </string> + <string name="gps">Exhibición de escondites GPS</string> + <string name="unknown">De tipo desconocido</string> <!-- cache sizes --> <string name="cache_size_micro">micro</string> @@ -46,36 +49,43 @@ <!-- waypoints --> <string name="wp_final">Ubicación final</string> <string name="wp_stage">Etapa de multi escondite</string> - <string name="wp_puzzle">Preguntar sin contestar</string> + <string name="wp_puzzle">Preguntar a contestar</string> <string name="wp_pkg">Zona de aparcamiento</string> <string name="wp_trailhead">Sendero</string> <string name="wp_waypoint">Punto de referencia</string> + <string name="wp_original">Coordenadas originales</string> <!-- logs --> <string name="log_found">Encontrado</string> <string name="log_dnf">No encontrado</string> <string name="log_note">Nota</string> <string name="log_published">Publicado</string> - <string name="log_enabled">Activo</string> - <string name="log_disabled">Inactivo</string> - <string name="log_attend">Iré</string> + <string name="log_enabled">Activado</string> + <string name="log_disabled">Desactivado</string> + <string name="log_attend">Asistiré</string> <string name="log_attended">Asistí</string> - <string name="log_retrieved">Obtenido</string> - <string name="log_placed">Colocado</string> - <string name="log_grabbed">Guardado en alguna parte</string> + <string name="log_retrieved">Recogido</string> + <string name="log_placed">Depositado</string> + <string name="log_grabbed">Recogido de alguna parte</string> + <string name="log_movecollection">Mover a la colección</string> + <string name="log_moveinventory">Mover al inventario</string> <string name="log_maintained">Mantenimiento efectuado</string> <string name="log_maintenance_needed">Necesita mantenimiento</string> <string name="log_update">Coordenadas actualizadas</string> <string name="log_archived">Archivado</string> + <string name="log_unarchived">Desarchivado</string> <string name="log_needs_archived">Necesita ser archivado</string> <string name="log_discovered">Descubierto</string> <string name="log_reviewer">Nota del revisor</string> + <string name="log_retractlisting">Retirar ficha del escondite</string> + <string name="log_marked_missing">Marcado como perdido</string> <string name="log_tb_nothing">No hacer nada</string> - <string name="log_tb_visit">Visita</string> - <string name="log_tb_drop">Colocar aquí</string> + <string name="log_tb_visit">Visitado</string> + <string name="log_tb_drop">Dejar aquí</string> <string name="log_tb_changeall">Cambiar todo</string> <string name="log_save">Guardar</string> - <string name="log_saving">Guardando registo…</string> + <string name="log_saving">Enviando registo…</string> + <string name="log_saving_and_uploading">Enviando registro y subiendo imagen…</string> <string name="log_clear">Limpiar</string> <string name="log_post">Enviar registro</string> <string name="log_post_rate">Enviar registro y puntuación</string> @@ -84,27 +94,45 @@ <string name="log_rating">Puntuación</string> <string name="log_no_rating">Sin puntuación</string> <string name="log_stars_1">1 estrella</string> -<string name="log_stars_15">1,5 estrellas</string> + <string name="log_stars_15">1,5 estrellas</string> <string name="log_stars_2">2 estrellas</string> - <string name="log_stars_25">2,5 estrellas</string> + <string name="log_stars_25">2,5 estrellas</string> <string name="log_stars_3">3 estrellas</string> - <string name="log_stars_35">3,5 estrellas</string> + <string name="log_stars_35">3,5 estrellas</string> <string name="log_stars_4">4 estrellas</string> - <string name="log_stars_45">4,5 estrellas</string> + <string name="log_stars_45">4,5 estrellas</string> <string name="log_stars_5">5 estrellas</string> -<string name="log_stars_1_description">poor</string> - <string name="log_stars_15_description">fairly poor</string> - <string name="log_stars_2_description">below average</string> - <string name="log_stars_25_description">not so bad</string> - <string name="log_stars_3_description">average </string> - <string name="log_stars_35_description">not bad at all</string> - <string name="log_stars_4_description">better than average</string> - <string name="log_stars_45_description">very good</string> - <string name="log_stars_5_description">awesome</string> + <string name="log_stars_1_description">malísimo</string> + <string name="log_stars_15_description">muy malo</string> + <string name="log_stars_2_description">malo</string> + <string name="log_stars_25_description">un poco malo</string> + <string name="log_stars_3_description">aceptable</string> + <string name="log_stars_35_description">algo bueno</string> + <string name="log_stars_4_description">bueno</string> + <string name="log_stars_45_description">muy bueno</string> + <string name="log_stars_5_description">buenísimo</string> <string name="log_webcam">Foto de webcam tomada</string> <string name="log_new_log">Registro</string> <string name="log_new_log_text">Texto del registro</string> <string name="log_announcement">Aviso</string> + <string name="log_today">Hoy</string> + <string name="log_yesterday">Ayer</string> + <string name="log_smilies">Emoticonos</string> + <string name="log_image">Imagen</string> + <string name="log_image_attach">Adjuntar imagen</string> + <string name="log_image_edit">Editar imagen</string> + <string name="log_image_stored">Galería</string> + <string name="log_image_camera">Tomar foto</string> + <string name="log_image_caption">Título</string> + <string name="log_image_description">Descripción</string> + <string name="log_image_scale">Redimensionamiento</string> + <string-array name="log_image_scales"> + <item>Sin redimensionar</item> + <item>512 px</item> + <item>640 px</item> + <item>800 px</item> + <item>1024 px</item> + </string-array> <!-- errors, warnings, info toasts --> <string name="err_none">Aceptar</string> @@ -251,6 +279,7 @@ <string name="caches_drop_all_ask">¿Quieres borrar todos los escondites guardados en el dispositivo?</string> <string name="caches_drop_stored">Descartar guardados</string> <string name="caches_drop_progress">Borrando escondites</string> + <string name="caches_drop_all_and_list">Descartar todos y borrar lista</string> <string name="caches_refresh_selected">Actualizar seleccionados</string> <string name="caches_refresh_all">Actualizar todos</string> <string name="caches_move_selected">Mover seleccionados</string> @@ -263,7 +292,7 @@ <string name="caches_recaptcha_continue">Continuar</string> <string name="caches_filter">Filtrar</string> <string name="caches_filter_title">Filtrar por</string> - <string name="caches_filter_size">tamaó</string> + <string name="caches_filter_size">tamaño</string> <string name="caches_filter_type">tipo</string> <string name="caches_filter_track">con rastreables</string> <string name="caches_filter_clear">limpiar filtros</string> @@ -401,8 +430,7 @@ <string name="cache_attributes">Atributos</string> <string name="cache_inventory">Inventario</string> <string name="cache_log_offline">Registro desconectado</string> - <string name="cache_log_images_loading">Cargando imagen de registro…</string> - <string name="cache_log_images_title">Imagen de resgistro</string> + <string name="cache_log_images_title">Imagen de registro</string> <string name="cache_log_image_default_title">Foto</string> <string name="cache_personal_note">Nota personal</string> <string name="cache_description">Descripción</string> @@ -457,14 +485,13 @@ <string name="cache_terrain">Terreno</string> <string name="cache_rating">Puntuación</string> <string name="cache_rating_of">de</string> - <string name="cache_favourite">Favorito</string> + <string name="cache_favorite">Favorito</string> <string name="cache_owner">Propietario</string> <string name="cache_hidden">Oculto</string> <string name="cache_event">Fecha</string> <string name="cache_location">Ubicación</string> <string name="cache_coordinates">Coordenadas</string> <string name="cache_spoiler_images_title">Imágenes reveladoras</string> - <string name="cache_spoiler_images_loading">Cargando imágenes reveladoras…</string> <string name="cache_log_types">Tipos de registro</string> <string name="cache_coordinates_no">Este escondite no tiene coordenadas.</string> <string name="cache_clear_history">Borrar historial</string> @@ -600,8 +627,6 @@ <string name="license_dismiss">Descartar</string> <!-- helpers --> - <string name="helper_manual_title">Manual</string> - <string name="helper_manual_description">Sencillo manual de c:geo que contiene todas las capacidades de este programa (incluidas las ocultas).</string> <string name="helper_locus_title">Locus</string> <string name="helper_locus_description">Sencilla aplicación que muestra mapas en línea y permite descargarlos para ser usados sin conexión (sólo mapas no vectoriales). También permite registrar el recorrido, gestionar puntos de interés y más funciones interesantes.</string> diff --git a/main/res/values-fr/strings.xml b/main/res/values-fr/strings.xml index 122c33b..2f5fccb 100644 --- a/main/res/values-fr/strings.xml +++ b/main/res/values-fr/strings.xml @@ -175,7 +175,7 @@ <string name="err_missing_device_name">Veuillez saisir un nom pour votre appareil avant l\'enregistrement.</string> <string name="err_favorite_failed">c:geo ne peut pas changer le status de favori.</string> <string name="err_select_logimage_failed">La sélection d\'une image pour la note a échoué.</string> - <string name="err_aquire_image_failed">L\'acquisition d\'une nouvelle image pour la note a échoué.</string> + <string name="err_acquire_image_failed">L\'acquisition d\'une nouvelle image pour la note a échoué.</string> <string name="err_tb_display">"c:geo ne peut pas afficher l\'objet voyageur demandé. Est-ce vraiment un objet voyageur?</string> <string name="err_tb_details_open">c:geo ne peut pas ouvrir le détail de l\'objet voyageur.</string> @@ -512,7 +512,6 @@ <string name="cache_attributes">Attributs</string> <string name="cache_inventory">Inventaire</string> <string name="cache_log_offline">Visite hors-ligne</string> - <string name="cache_log_images_loading">Chargement de l\'image de la visite…</string> <string name="cache_log_images_title">Image de la visite</string> <string name="cache_log_image_default_title">Photo</string> <string name="cache_personal_note">Note personnelle</string> @@ -562,10 +561,10 @@ <string name="cache_dialog_watchlist_add_message">Ajout de la cache à votre liste de suivi…</string> <string name="cache_dialog_watchlist_remove_title">Liste de suivi</string> <string name="cache_dialog_watchlist_remove_message">Retrait de la cache de votre liste de suivi…</string> - <string name="cache_dialog_favourite_add_title">Favori</string> - <string name="cache_dialog_favourite_add_message">Ajout de la cache à vos favoris…</string> - <string name="cache_dialog_favourite_remove_title">Favori</string> - <string name="cache_dialog_favourite_remove_message">Suppression de la cache de vos favoris…</string> + <string name="cache_dialog_favorite_add_title">Favori</string> + <string name="cache_dialog_favorite_add_message">Ajout de la cache à vos favoris…</string> + <string name="cache_dialog_favorite_remove_title">Favori</string> + <string name="cache_dialog_favorite_remove_message">Suppression de la cache de vos favoris…</string> <string name="cache_menu_navigate">Navigation</string> <string name="cache_menu_navigation_drive">Navigation (voiture)</string> <string name="cache_menu_navigation_walk">Navigation (piéton)</string> @@ -607,7 +606,7 @@ <string name="cache_rating">Note</string> <string name="cache_own_rating">Note personnelle</string> <string name="cache_rating_of">de</string> - <string name="cache_favourite">Favori</string> + <string name="cache_favorite">Favori</string> <string name="cache_owner">Propriétaire</string> <string name="cache_hidden">Cachée</string> <string name="cache_event">Date</string> @@ -615,9 +614,7 @@ <string name="cache_coordinates">Coordonnées</string> <string name="cache_coordinates_original">Coordonnées d\'origine</string> <string name="cache_spoiler_images_title">Images indices</string> - <string name="cache_spoiler_images_loading">Chargement des images indices…</string> <string name="cache_images_title">Images</string> - <string name="cache_images_loading">Chargement des images…</string> <string name="cache_log_types">Types de visites</string> <string name="cache_coordinates_no">Cette cache n\'a pas de coordonnées.</string> <string name="cache_clear_history">Effacer l\'historique</string> @@ -820,8 +817,6 @@ <string name="license_dismiss">Rejeter</string> <!-- helpers --> - <string name="helper_manual_title">Manuel</string> - <string name="helper_manual_description">Manuel complet pour c:geo contenant la description de toutes les fonctionnalités de cette application (y compris celle secrètes).</string> <string name="helper_calendar_title">Module supplémentaire c:geo agenda</string> <string name="helper_calendar_missing">Module supplémentaire c:geo agenda non installé</string> <string name="helper_calendar_description">Permet d\'exporter les événements liés aux caches dans le calendrier Android.</string> diff --git a/main/res/values-hu/strings.xml b/main/res/values-hu/strings.xml index ac2a088..689912c 100644 --- a/main/res/values-hu/strings.xml +++ b/main/res/values-hu/strings.xml @@ -483,7 +483,6 @@ <string name="cache_attributes">Tulajdonságok</string> <string name="cache_inventory">Tárgyak</string> <string name="cache_log_offline">Offline bejegyzés</string> - <string name="cache_log_images_loading">Bejegyzés kép betöltése…</string> <string name="cache_log_images_title">Bejegyzés kép</string> <string name="cache_log_image_default_title">Fotó</string> <string name="cache_personal_note">Személyes megjegyzés</string> @@ -569,7 +568,7 @@ <string name="cache_rating">Osztályzat</string> <string name="cache_own_rating">Saját értékelés</string> <string name="cache_rating_of">/</string> - <string name="cache_favourite">Kedvenc</string> + <string name="cache_favorite">Kedvenc</string> <string name="cache_owner">Tulajdonos</string> <string name="cache_hidden">Elrejtve</string> <string name="cache_event">Dátum</string> @@ -577,9 +576,7 @@ <string name="cache_coordinates">Koordináták</string> <string name="cache_coordinates_original">Eredeti koordináták</string> <string name="cache_spoiler_images_title">Spoiler képek</string> - <string name="cache_spoiler_images_loading">Spoiler képek betöltése…</string> <string name="cache_images_title">Képek</string> - <string name="cache_images_loading">Képek betéltése…</string> <string name="cache_log_types">Bejegyzés típusok</string> <string name="cache_coordinates_no">Ennek a ládának nincsenek koordinátái.</string> <string name="cache_clear_history">Előzmények törlése</string> @@ -762,8 +759,6 @@ <string name="license_dismiss">Elutasítás</string> <!-- helpers --> - <string name="helper_manual_title">Kézikönyv</string> - <string name="helper_manual_description">Részletes kézikönyv a c:geo-hoz amiben az összes lehetőség leírása szerepel. (még a rejtettek is).</string> <string name="helper_calendar_title">c:geo naptár add-on</string> <string name="helper_calendar_missing">c:geo naptár add-on nincs telepítve.</string> <string name="helper_calendar_description">Lehetővé teszi a geoládák exportálását az eszközöd naptárába.</string> diff --git a/main/res/values-it/strings.xml b/main/res/values-it/strings.xml index af45b6f3..b3af349 100644 --- a/main/res/values-it/strings.xml +++ b/main/res/values-it/strings.xml @@ -85,6 +85,7 @@ <string name="log_tb_changeall">Cambia tutto</string> <string name="log_save">Salva</string> <string name="log_saving">Invio log…</string> + <string name="log_saving_and_uploading">Invio log e immagine…</string> <string name="log_clear">Azzera</string> <string name="log_post">Invia log</string> <string name="log_post_rate">Invia log + voto</string> @@ -118,6 +119,21 @@ <string name="log_today">Oggi</string> <string name="log_yesterday">Ieri</string> <string name="log_smilies">Smile</string> + <string name="log_image">Immagine</string> + <string name="log_image_attach">Aggiungi immagine</string> + <string name="log_image_edit">Modifica immagine</string> + <string name="log_image_stored">Esistente</string> + <string name="log_image_camera">Nuova</string> + <string name="log_image_caption">Didascalia</string> + <string name="log_image_description">Descrizione</string> + <string name="log_image_scale">Ridimensiona</string> + <string-array name="log_image_scales"> + <item>Dimensioni originali</item> + <item>512 px</item> + <item>640 px</item> + <item>800 px</item> + <item>1024 px</item> + </string-array> <!-- translation --> <string name="translate_to_sys_lang">Traduci in %s</string> @@ -167,6 +183,8 @@ <string name="err_missing_device_name">Per cortesia inserire il nome del dispositivo prima di registrarsi.</string> <string name="err_favorite_failed">Errore nella modifica dello stato preferiti.</string> + <string name="err_select_logimage_failed">La selezione dell\'immagine per il log è fallita.</string> + <string name="err_acquire_image_failed">Acquisizione immagine fallita.</string> <string name="err_tb_display">c:geo non riesce a visualizzare il trackable che vuoi. È veramente un trackable?</string> <string name="err_tb_details_open">c:geo non riesce ad aprire i dettagli del trackable.</string> @@ -189,6 +207,7 @@ <string name="err_log_load_data_still">c:geo sta ancora caricando i dati necessari per salvare il log. Per cortesia attendere ancora un pochino.</string> <string name="err_log_failed_server">c:geo non è riuscito ad inviare il log perché il server non risponde.</string> <string name="err_log_post_failed">Sembra che il log non sia stato inviato. Prego verificare su Geocaching.com.</string> + <string name="err_logimage_post_failed">Sembra la l\'immagine non sia stata caricata. Si prega di controllare su Geocaching.com.</string> <string name="err_search_address_forgot">c:geo ha dimenticato l\'indirizzo che vuoi trovare.</string> <string name="err_parse_lat">c:geo non riesce ad interpretare la latitudine.</string> @@ -218,6 +237,8 @@ <string name="info_log_saved">c:geo ha salvato il log.</string> <string name="info_log_cleared">Il log è stato azzerato.</string> <string name="info_log_type_changed">Il tipo di log è cambiato!</string> + <string name="info_select_logimage_cancelled">Selezione o cattura immagine annnulata.</string> + <string name="info_stored_image">Nuova immagine salvata su:</string> <string name="info_storing_static_maps">Tento di salvare la static map</string> @@ -293,7 +314,7 @@ <string name="caches_refresh_selected">Aggiorna i cache selezionati</string> <string name="caches_refresh_all">Aggiorna tutti</string> <string name="caches_move_selected">Muovi i cache selezionati</string> - <string name="caches_move_all">Muovi tutte</string> + <string name="caches_move_all">Muovi tutti</string> <string name="caches_map_locus">Locus</string> <string name="caches_map_locus_export">Esporta in Locus</string> <string name="caches_recaptcha_title">reCAPTCHA</string> @@ -307,7 +328,10 @@ <string name="caches_filter_track">Con oggetti trackables</string> <string name="caches_filter_clear">Rimuovi filtri</string> <string name="caches_filter_modified">Con coordinate modificate</string> + <string name="caches_filter_origin">Origine</string> <string name="caches_removing_from_history">Rimozione dalla cronologia…</string> + <string name="caches_clear_offlinelogs">Cancella i log offline</string> + <string name="caches_clear_offlinelogs_progress">Cancellazione logs offline</string> <!-- caches lists --> <string name="list_menu">Lista</string> @@ -340,6 +364,7 @@ <!-- init --> <string name="init_geocaching">Geocaching.com</string> + <string name="init_gc_activate">Attiva Geocaching.com su mappa live e nelle ricerche</string> <string name="init_oc">opencaching.de</string> <string name="init_oc_activate">Attiva opencaching.de su mappa live e nelle ricerche</string> <string name="init_oc_username_description">Inserisci il tuo utente opencaching.de per marcare i tuoi ritrovamenti.</string> @@ -386,7 +411,8 @@ <string name="init_offline_wp">Salva i waypoints delle mappe per uso offline</string> <string name="init_save_log_img">Salva immagini contenute nei log</string> <string name="init_units">Usa miglia/piedi</string> - <string name="init_log_offline">Quando salvi log, fallo sempre offline (non visualizzerà lo schermo di log online, non invierà subito il log)</string> + <string name="init_log_offline">Attiva log offline (non visualizzerà lo schermo di log online, non invierà subito il log)</string> + <string name="init_choose_list">Chiedi la lista quando salvi un cache</string> <string name="init_livelist">Visualizza in che direzione sono i cache, nelle liste</string> <string name="init_altitude">Correzione di altitudine</string> <string name="init_altitude_description">Se il GPS restituisce un\'errata altitudine, puoi correggerla inserendo un valore positivo o negativo, in metri.</string> @@ -437,6 +463,12 @@ <string name="init_plain_logs">Visualizza i LOG senza colori</string> <string name="init_use_native_ua">Identifica come browser Android. Risolve alcuni problemi di login con alcuni provider di rete.</string> <string name="init_rendertheme_folder">Cartella per i temi mappa personali off-line</string> + <!-- map sources --> + <string name="map_source_google_map">Google: Map</string> + <string name="map_source_google_satellite">Google: Satellite</string> + <string name="map_source_osm_mapnik">OSM: Mapnik</string> + <string name="map_source_osm_cyclemap">OSM: Cyclemap</string> + <string name="map_source_osm_offline">OSM: Offline</string> <string name="init_sendToCgeo">Send to c:geo</string> <string name="init_sendToCgeo_name">Nome dispositivo:</string> @@ -484,7 +516,6 @@ <string name="cache_attributes">Attributi</string> <string name="cache_inventory">Oggetti</string> <string name="cache_log_offline">Log Offline</string> - <string name="cache_log_images_loading">Caricamento immagini log…</string> <string name="cache_log_images_title">Immagini Log</string> <string name="cache_log_image_default_title">Foto</string> <string name="cache_personal_note">Note personali</string> @@ -499,6 +530,9 @@ <string name="cache_favpoint_not_on">Questo cache non è uno dei tuoi favoriti.</string> <string name="cache_favpoint_add">Aggiungi</string> <string name="cache_favpoint_remove">Rimuovi</string> + <string name="cache_list_text">Lista:</string> + <string name="cache_list_change">Sposta</string> + <string name="cache_list_unknown">Non in una lista</string> <string name="cache_images">Immagini</string> <string name="cache_waypoints">Waypoints</string> @@ -530,10 +564,10 @@ <string name="cache_dialog_watchlist_add_message">Aggiunto il cache alla watchlist in corso…</string> <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Rimozione dei cache dalla tua watchlist…</string> - <string name="cache_dialog_favourite_add_title">Preferiti</string> - <string name="cache_dialog_favourite_add_message">Aggiungi il cache ai tuoi preferiti…</string> - <string name="cache_dialog_favourite_remove_title">Preferiti</string> - <string name="cache_dialog_favourite_remove_message">Rimozione cache dai tuoi preferiti…</string> + <string name="cache_dialog_favorite_add_title">Preferiti</string> + <string name="cache_dialog_favorite_add_message">Aggiungi il cache ai tuoi preferiti…</string> + <string name="cache_dialog_favorite_remove_title">Preferiti</string> + <string name="cache_dialog_favorite_remove_message">Rimozione cache dai tuoi preferiti…</string> <string name="cache_menu_navigate">Naviga</string> <string name="cache_menu_navigation_drive">Naviga (in auto)</string> <string name="cache_menu_navigation_walk">Naviga (a piedi)</string> @@ -575,7 +609,7 @@ <string name="cache_rating">Voto</string> <string name="cache_own_rating">Il tuo voto</string> <string name="cache_rating_of">di</string> - <string name="cache_favourite">Popolarità</string> + <string name="cache_favorite">Popolarità</string> <string name="cache_owner">Proprietario</string> <string name="cache_hidden">Nascosto il</string> <string name="cache_event">Data</string> @@ -583,9 +617,7 @@ <string name="cache_coordinates">Coordinate</string> <string name="cache_coordinates_original">Coordinate originali</string> <string name="cache_spoiler_images_title">Immagini spoiler</string> - <string name="cache_spoiler_images_loading">Caricamento immagini spoiler…</string> <string name="cache_images_title">Immaginis</string> - <string name="cache_images_loading">Caricamento immagini…</string> <string name="cache_log_types">Tipi di Log</string> <string name="cache_coordinates_no">Questo cache non ha coordinate.</string> <string name="cache_clear_history">Cancella cronologia</string> @@ -656,6 +688,7 @@ <string name="waypoint_edit_title">Modifica waypoint</string> <string name="waypoint_add_title">Aggiungi waypoint</string> <string name="waypoint_note">Note</string> + <string name="waypoint_visited">Visitato</string> <string name="waypoint_save">Salva</string> <string name="waypoint_loading">Caricamento waypoint…</string> <string name="waypoint_do_not_touch_cache_coordinates">Nessuna modifica alle coordinate cache</string> @@ -783,8 +816,6 @@ <string name="license_dismiss">Chiudi</string> <!-- helpers --> - <string name="helper_manual_title">Manual</string> - <string name="helper_manual_description">Manuale dettagliato di c:geo che contiene la descrizione di tutte le possibilità offerte da questa applicazione, comprese quelle nascoste (in inglese).</string> <string name="helper_calendar_title">c:geo calendario add-on</string> <string name="helper_calendar_missing">c:geo calendario add-on non installato</string> <string name="helper_calendar_description">Permette di esportare gli eventi cache nel calendario del tuo dispositivo.</string> @@ -816,10 +847,7 @@ <string name="export_gpx_info">Il file GPX sarà esportato in %1$s con data ed ora correnti come nome file.</string> <string name="export_gpx_to">Invia il GPX esportato a</string> -<!-- attribute unknown --> - <string name="attribute_unknown_yes">(attributo sconosciuto) permesso</string> - <string name="attribute_unknown_no">(attributo sconosciuto) non permesso</string> - <!-- attributes (permissions -> allowed, not allowed) --> + <!-- GC attributes --> <string name="attribute_dogs_yes">Cani permessi</string> <string name="attribute_dogs_no">Cani NON permessi</string> <string name="attribute_bicycles_yes">Biciclette permesse</string> @@ -838,8 +866,6 @@ <string name="attribute_campfires_no">Fuochi da campo NON permessi</string> <string name="attribute_rv_yes">Camper/roulotte permessi</string> <string name="attribute_rv_no">Camper/roulotte NON permessi</string> - - <!-- attributes (conditions -> yes, no) --> <string name="attribute_kids_yes">Raccomandato per bambini</string> <string name="attribute_kids_no">Non raccomandato per bambini</string> <string name="attribute_onehour_yes">Richiede meno di un\'ora</string> @@ -892,8 +918,6 @@ <string name="attribute_landf_no">Non è un tour \"Lost and found\"</string> <string name="attribute_partnership_yes">Cache di gruppo</string> <string name="attribute_partnership_no">Cache non di gruppo</string> - - <!-- attributes (equipment -> required, not required) --> <string name="attribute_fee_yes">Accesso o parcheggio a pagamento</string> <string name="attribute_fee_no">Accesso o parcheggio non a pagamento</string> <string name="attribute_rappelling_yes">Richiesta attrezzatura da arrampicata</string> @@ -916,8 +940,6 @@ <string name="attribute_wirelessbeacon_no">Segnalatore radio non necessario</string> <string name="attribute_treeclimbing_yes">Richiede di salire su un albero</string> <string name="attribute_treeclimbing_no">Non richiede di salire su un albero</string> - - <!-- attributes (hazards -> present, not present) --> <string name="attribute_poisonoak_yes">Piante velenose</string> <string name="attribute_poisonoak_no">Piante non velenose</string> <string name="attribute_dangerousanimals_yes">Animali pericolosi</string> @@ -934,8 +956,6 @@ <string name="attribute_danger_no">Area non pericolosa</string> <string name="attribute_thorn_yes">Rovi</string> <string name="attribute_thorn_no">Senza rovi</string> - - <!-- attributes (facilities -> yes, no) --> <string name="attribute_wheelchair_yes">Accessibile con sedia a rotelle</string> <string name="attribute_wheelchair_no">Non accessibile con sedia a rotelle</string> <string name="attribute_parking_yes">Parcheggio</string> @@ -958,6 +978,67 @@ <string name="attribute_fuel_no">Lontano da pompa carburante</string> <string name="attribute_food_yes">Vicino a punto ristoro</string> <string name="attribute_food_no">Lontano da punti ristoro</string> + + <string name="attribute_oc_only_yes">Loggabile solo su Opencaching</string> + <string name="attribute_oc_only_no">Loggabile non solo su Opencaching</string> + <string name="attribute_link_only_yes">Hyperlink solo verso un altro portale di cache</string> + <string name="attribute_link_only_no">Non solo hyperlink ad un altro portale di cache</string> + <string name="attribute_letterbox_yes">Lettera (richiede francobollo)</string> + <string name="attribute_letterbox_no">No lettera (non richiede francobollo)</string> + <string name="attribute_railway_yes">Ferrovia attiva nelle vicinanze</string> + <string name="attribute_railway_no">Nessuna ferrovia nelle vicinanze</string> + <string name="attribute_syringe_yes">Pronto soccorso disponibile</string> + <string name="attribute_syringe_no">Pronto soccorso non disponibile</string> + <string name="attribute_swamp_yes">Paludoso</string> + <string name="attribute_swamp_no">Non paludoso</string> + <string name="attribute_hills_yes">Area collinare</string> + <string name="attribute_hills_no">Area non collinare</string> + <string name="attribute_easy_climbing_yes">Facile scalata</string> + <string name="attribute_easy_climbing_no">Nessuna facile scalata</string> + <string name="attribute_poi_yes">Punto di interesse</string> + <string name="attribute_poi_no">Nessun punto di interesse</string> + <string name="attribute_moving_target_yes">Obiettivo in movimento</string> + <string name="attribute_moving_target_no">Obiettivo non in movimento</string> + <string name="attribute_webcam_yes">Webcam</string> + <string name="attribute_webcam_no">No webcam</string> + <string name="attribute_inside_yes">Con aree interne (cave, edifici etc.)</string> + <string name="attribute_inside_no">Senza aree interne</string> + <string name="attribute_in_water_yes">In acqua</string> + <string name="attribute_in_water_no">Non in acqua</string> + <string name="attribute_no_gps_yes">Senza GPS (lettere, cistes, carta e bussola…)</string> + <string name="attribute_no_gps_no">Con GPS</string> + <string name="attribute_overnight_yes">Necessario permanere di notte</string> + <string name="attribute_overnight_no">Permanenza notturna non necessaria</string> + <string name="attribute_specific_times_yes">Disponibile solo in certi orari</string> + <string name="attribute_specific_times_no">Disponibile a tutte le ore</string> + <string name="attribute_day_yes">Solo di giorno</string> + <string name="attribute_day_no">Non solo di giorno</string> + <string name="attribute_tide_yes">Marea</string> + <string name="attribute_tide_no">Senza marea</string> + <string name="attribute_all_seasons_yes">Tutte le stagioni</string> + <string name="attribute_all_seasons_no">Non in tutte le stagioni</string> + <string name="attribute_breeding_yes">Stagione di riproduzione / natura protetta</string> + <string name="attribute_breeding_no">Disponibile anche in stagione di riproduzione / natura protetta</string> + <string name="attribute_snow_proof_yes">Nascondiglio a prova di neve</string> + <string name="attribute_snow_proof_no">Nascondiglio non a prova di neve</string> + <string name="attribute_compass_yes">Bussola</string> + <string name="attribute_compass_no">Senza bussola</string> + <string name="attribute_cave_yes">Equipaggiamento da caverna</string> + <string name="attribute_cave_no">Senza equipaggiamento da caverna</string> + <string name="attribute_aircraft_yes">Aircraft</string> + <string name="attribute_aircraft_no">Senza aircraft</string> + <string name="attribute_investigation_yes">Investigazione</string> + <string name="attribute_investigation_no">Senza investigazione</string> + <string name="attribute_puzzle_yes">Puzzle / Mystery</string> + <string name="attribute_puzzle_no">No puzzle / mystery</string> + <string name="attribute_arithmetic_yes">Problema aritmetico</string> + <string name="attribute_arithmetic_no">Problema non aritmetico</string> + <string name="attribute_other_cache_yes">Cache di altro tipo</string> + <string name="attribute_other_cache_no">Cache non di altro tipo</string> + <string name="attribute_ask_owner_yes">Chiedere al proprietario per le condizioni di partenza</string> + <string name="attribute_ask_owner_no">Non chiedere al proprietario per le condizioni di partenza</string> + <string name="attribute_unknown_yes">Attributo sconosciuto</string> + <string name="attribute_unknown_no">Senza attributo sconosciuto</string> <!-- next things --> <string name="legal_note">Per usare i servizi di Geocaching.com, si applicano i termini e le condizioni del <a href="http://www.geocaching.com/about/termsofuse.aspx">Contratto Groundspeak</a> che deve essere approvato dall\'utente.</string> diff --git a/main/res/values-ja/strings.xml b/main/res/values-ja/strings.xml index 9c5636c..42f16be 100644 --- a/main/res/values-ja/strings.xml +++ b/main/res/values-ja/strings.xml @@ -494,7 +494,6 @@ <string name="cache_attributes">属性</string> <string name="cache_inventory">目録</string> <string name="cache_log_offline">オフラインログ</string> - <string name="cache_log_images_loading">添付画像をロード中…</string> <string name="cache_log_images_title">ログの添付画像</string> <string name="cache_log_image_default_title">写真</string> <string name="cache_personal_note">パーソナルノート</string> @@ -541,10 +540,10 @@ <string name="cache_dialog_watchlist_add_message">ウォッチリストに追加中…</string> <string name="cache_dialog_watchlist_remove_title">ウォッチリスト</string> <string name="cache_dialog_watchlist_remove_message">ウォッチリストから削除中…</string> - <string name="cache_dialog_favourite_add_title">お気に入り</string> - <string name="cache_dialog_favourite_add_message">お気に入りに追加中…</string> - <string name="cache_dialog_favourite_remove_title">お気に入り</string> - <string name="cache_dialog_favourite_remove_message">お気に入りから削除中…</string> + <string name="cache_dialog_favorite_add_title">お気に入り</string> + <string name="cache_dialog_favorite_add_message">お気に入りに追加中…</string> + <string name="cache_dialog_favorite_remove_title">お気に入り</string> + <string name="cache_dialog_favorite_remove_message">お気に入りから削除中…</string> <string name="cache_menu_navigate">ナビゲーション</string> <string name="cache_menu_navigation_drive">ナビゲーション(自動車)</string> <string name="cache_menu_navigation_walk">ナビゲーション(徒歩)</string> @@ -587,7 +586,7 @@ <string name="cache_rating">評価</string> <string name="cache_own_rating">Own Rating</string> <string name="cache_rating_of">/</string> - <string name="cache_favourite">お気に入り</string> + <string name="cache_favorite">お気に入り</string> <string name="cache_owner">所有者</string> <string name="cache_hidden">隠した日</string> <string name="cache_event">イベント日付</string> @@ -595,9 +594,7 @@ <string name="cache_coordinates">座標</string> <string name="cache_coordinates_original">オリジナル座標</string> <!-- 「初公開時の座標」の方がいいかも --> <string name="cache_spoiler_images_title">スポイラー画像</string> - <string name="cache_spoiler_images_loading">スポイラー画像をロード中…</string> <string name="cache_images_title">画像</string> - <string name="cache_images_loading">画像をロード中…</string> <string name="cache_log_types">ログタイプ</string> <string name="cache_coordinates_no">このキャッシュに座標値はありません。</string> <string name="cache_clear_history">全履歴を削除</string> @@ -796,8 +793,6 @@ <string name="license_dismiss">閉じる</string> <!-- helpers --> - <string name="helper_manual_title">マニュアル</string> - <string name="helper_manual_description">c:geoのマニュアル(英語)はこのアプリでできる事(隠れ機能も)の全てについて書いてあります。</string> <string name="helper_calendar_title">c:geo - カレンダープラグイン</string> <string name="helper_calendar_missing">c:geo - カレンダープラグインはインストールされていません。</string> <string name="helper_calendar_description">イベントキャッシュをカレンダーアプリに登録することができます。</string> diff --git a/main/res/values-nl/strings.xml b/main/res/values-nl/strings.xml index 9453601..f4dbd10 100644 --- a/main/res/values-nl/strings.xml +++ b/main/res/values-nl/strings.xml @@ -497,7 +497,6 @@ <string name="cache_attributes">Attributen</string> <string name="cache_inventory">Inventaris</string> <string name="cache_log_offline">Offline log</string> - <string name="cache_log_images_loading">Laden van logafbeeldingen…</string> <string name="cache_log_images_title">Logafbeelding</string> <string name="cache_log_image_default_title">Foto</string> <string name="cache_personal_note">Persoonlijke aantekening</string> @@ -547,10 +546,10 @@ <string name="cache_dialog_watchlist_add_message">Voeg cache toe aan watchlist…</string> <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Verwijder cache van watchlist…</string> - <string name="cache_dialog_favourite_add_title">Favoriet</string> - <string name="cache_dialog_favourite_add_message">Voeg cache toe aan favorieten…</string> - <string name="cache_dialog_favourite_remove_title">Favoriet</string> - <string name="cache_dialog_favourite_remove_message">Verwijder cache van je favorieten…</string> + <string name="cache_dialog_favorite_add_title">Favoriet</string> + <string name="cache_dialog_favorite_add_message">Voeg cache toe aan favorieten…</string> + <string name="cache_dialog_favorite_remove_title">Favoriet</string> + <string name="cache_dialog_favorite_remove_message">Verwijder cache van je favorieten…</string> <string name="cache_menu_navigate">Navigeer</string> <string name="cache_menu_navigation_drive">Navigeer (rijden)</string> <string name="cache_menu_navigation_walk">Navigeer (lopen)</string> @@ -592,7 +591,7 @@ <string name="cache_rating">Waardering</string> <string name="cache_own_rating">Eigen waardering</string> <string name="cache_rating_of">van</string> - <string name="cache_favourite">Favoriet</string> + <string name="cache_favorite">Favoriet</string> <string name="cache_owner">Eigenaar</string> <string name="cache_hidden">Verstopt</string> <string name="cache_event">Datum</string> @@ -600,9 +599,7 @@ <string name="cache_coordinates">Coördinaten</string> <string name="cache_coordinates_original">Originele coordinaten</string> <string name="cache_spoiler_images_title">Spoiler afbeeldingen</string> - <string name="cache_spoiler_images_loading">Spoiler afbeeldingen laden…</string> <string name="cache_images_title">Afbeeldingen</string> - <string name="cache_images_loading">Afbeeldingen laden…</string> <string name="cache_log_types">Log types</string> <string name="cache_coordinates_no">Deze cache heeft geen coördinaten.</string> <string name="cache_clear_history">Maak geschiedenis leeg</string> @@ -804,8 +801,6 @@ <string name="license_dismiss">Afwijzen</string> <!-- helpers --> - <string name="helper_manual_title">Handleiding</string> - <string name="helper_manual_description">Uitgebreide handleiding voor c:geo welke alle mogelijkheden van deze applicatie uitlegt (ook de verborgen mogelijkheden).</string> <string name="helper_calendar_title">c:geo kalender add-on</string> <string name="helper_calendar_missing">c:geo kalender add-on niet geinstalleerd.</string> <string name="helper_calendar_description">Maakt het mogelijk om Geocaching events in je kalender op te slaan.</string> diff --git a/main/res/values-pl/strings.xml b/main/res/values-pl/strings.xml index 49e8c6b..ff2fb96 100644 --- a/main/res/values-pl/strings.xml +++ b/main/res/values-pl/strings.xml @@ -126,6 +126,7 @@ <string name="log_image_camera">Nowy</string> <string name="log_image_caption">Podpis</string> <string name="log_image_description">Opis</string> + <string name="log_image_scale">Skalowanie obrazu</string> <!-- translation --> <string name="translate_to_sys_lang">Przetłumacz na %s</string> @@ -175,7 +176,7 @@ <string name="err_missing_device_name">Proszę podać nazwę urządzenia przed zarejestrowaniem.</string> <string name="err_favorite_failed">Zmiana statusu skrzynki ulubiona nie powiodła się.</string> <string name="err_select_logimage_failed">Nie można wybrać obrazu.</string> - <string name="err_aquire_image_failed">NIe można pobrać obrazu.</string> + <string name="err_acquire_image_failed">Nie można pobrać obrazu.</string> <string name="err_tb_display">c:geo nie może pokazać przedmiotów podróżnych. Czy to naprawdę jest przedmiot podróżny?</string> <string name="err_tb_details_open">c:geo nie może otworzyć szczegółów przedmiotu podróżnego.</string> @@ -511,7 +512,6 @@ <string name="cache_attributes">Atrybuty</string> <string name="cache_inventory">Inwentarz</string> <string name="cache_log_offline">Wpis offline</string> - <string name="cache_log_images_loading">Trwa ładowanie zdjęć z wpisu…</string> <string name="cache_log_images_title">Zdjęcie z wpisu</string> <string name="cache_log_image_default_title">Zdjęcie</string> <string name="cache_personal_note">Notatka osobista</string> @@ -562,10 +562,10 @@ <string name="cache_dialog_watchlist_add_message">Dodaję skrzynkę do listy obserwowanych…</string> <string name="cache_dialog_watchlist_remove_title">Lista obserwowanych</string> <string name="cache_dialog_watchlist_remove_message">Usuwam skrzynkę z listy obserwowanych…</string> - <string name="cache_dialog_favourite_add_title">Ulubione</string> - <string name="cache_dialog_favourite_add_message">Dodaję skrzynkę do listy ulubionych…</string> - <string name="cache_dialog_favourite_remove_title">Ulubione</string> - <string name="cache_dialog_favourite_remove_message">Usuwam skrzynkę z listy ulubionych…</string> + <string name="cache_dialog_favorite_add_title">Ulubione</string> + <string name="cache_dialog_favorite_add_message">Dodaję skrzynkę do listy ulubionych…</string> + <string name="cache_dialog_favorite_remove_title">Ulubione</string> + <string name="cache_dialog_favorite_remove_message">Usuwam skrzynkę z listy ulubionych…</string> <string name="cache_menu_navigate">Nawiguj</string> <string name="cache_menu_navigation_drive">Nawigacja (jazda)</string> <string name="cache_menu_navigation_walk">Nawigacja (pieszo)</string> @@ -597,6 +597,8 @@ <string name="cache_status_disabled">Niedostępna</string> <string name="cache_status_premium">Tylko dla użytkowników Premium</string> <string name="cache_status_not_premium">Dostępna dla wszystkich użytkowników</string> + <string name="cache_status_stored">Zapisano</string> + <string name="cache_status_not_stored">Nie zapisano</string> <string name="cache_geocode">GC-kod</string> <string name="cache_name">Nazwa</string> <string name="cache_type">Typ</string> @@ -607,7 +609,7 @@ <string name="cache_rating">Ocena</string> <string name="cache_own_rating">Własna ocena</string> <string name="cache_rating_of">od</string> - <string name="cache_favourite">Ulubiona</string> + <string name="cache_favorite">Ulubiona</string> <string name="cache_owner">Właściciel</string> <string name="cache_hidden">Ukryta</string> <string name="cache_event">Data</string> @@ -615,9 +617,7 @@ <string name="cache_coordinates">Współrzędne</string> <string name="cache_coordinates_original">Oryginalne współrzędne</string> <string name="cache_spoiler_images_title">Zdjęcia spoiler</string> - <string name="cache_spoiler_images_loading">Ładuję zdjęcia spoiler…</string> <string name="cache_images_title">Zdjęcia</string> - <string name="cache_images_loading">Ładuję zdjęcia…</string> <string name="cache_log_types">Rodzaj wpisu</string> <string name="cache_coordinates_no">Ta skrzynka nie ma współrzędnych GPS.</string> <string name="cache_clear_history">Usuń historię</string> @@ -818,8 +818,6 @@ <string name="license_dismiss">Odmów</string> <!-- helpers --> - <string name="helper_manual_title">Instrukcja obsługi</string> - <string name="helper_manual_description">Obszerny przewodnik do c:geo wraz z opisem wszystkich możliwości tego programu (także ukrytych).</string> <string name="helper_calendar_title">Dodatek Kalendarz c:geo</string> <string name="helper_calendar_missing">Dodatek Kalendarz c:geo nie jest zainstalowany.</string> <string name="helper_calendar_description">Umożliwia Tobie eksport skrzynek Wydarzenie do kalendarza w Twoim urządzeniu.</string> @@ -996,6 +994,8 @@ <string name="attribute_swamp_no">Brak bagien lub mokradeł</string> <string name="attribute_hills_yes">Pagórki</string> <string name="attribute_hills_no">Brak pagórków</string> + <string name="attribute_easy_climbing_yes">Łatwa wspinaczka </string> + <string name="attribute_easy_climbing_no">Nie jest to łatwa wspinaczka</string> <string name="attribute_poi_yes">Ciekawe miejsce</string> <string name="attribute_poi_no">Brak ciekawych miejsc</string> <string name="attribute_moving_target_yes">Skrzynka moblina</string> diff --git a/main/res/values-pt/strings.xml b/main/res/values-pt/strings.xml index 5f67281..5916133 100644 --- a/main/res/values-pt/strings.xml +++ b/main/res/values-pt/strings.xml @@ -484,7 +484,6 @@ <string name="cache_attributes">Atributos</string> <string name="cache_inventory">Inventário</string> <string name="cache_log_offline">Registo Offline</string> - <string name="cache_log_images_loading">A carregar imagem do registo…</string> <string name="cache_log_images_title">Imagem do registo</string> <string name="cache_log_image_default_title">Foto</string> <string name="cache_personal_note">Nota pessoal</string> @@ -572,7 +571,7 @@ <string name="cache_rating">Pontuação</string> <string name="cache_own_rating">A minha pontuação</string> <string name="cache_rating_of">de</string> - <string name="cache_favourite">Favorita</string> + <string name="cache_favorite">Favorita</string> <string name="cache_owner">Dono</string> <string name="cache_hidden">Escondida</string> <string name="cache_event">Data</string> @@ -580,9 +579,7 @@ <string name="cache_coordinates">Coordenadas</string> <string name="cache_coordinates_original">Coordenadas originais</string> <string name="cache_spoiler_images_title">Imagens spoiler</string> - <string name="cache_spoiler_images_loading">A carregar imagens spoiler…</string> <string name="cache_images_title">Imagens</string> - <string name="cache_images_loading">A carregar as imagens…</string> <string name="cache_log_types">Tipos de log</string> <string name="cache_coordinates_no">Esta cache não tem coordenadas.</string> <string name="cache_clear_history">Apagar histórico</string> @@ -766,8 +763,6 @@ <string name="license_dismiss">Dispensar</string> <!-- helpers --> - <string name="helper_manual_title">Manual</string> - <string name="helper_manual_description">Manual prático do c:geo, que contém a descrição de todas as funcionalidades desta aplicação (mesmo as que estão escondidas).</string> <string name="helper_calendar_title">Add on calendário para c:geo </string> <string name="helper_calendar_missing">Add on calendário para o c:geo não está instalado.</string> <string name="helper_calendar_description">Permite exportar caches evento para o calendário do seu dispositivo.</string> diff --git a/main/res/values-sk/strings.xml b/main/res/values-sk/strings.xml index d8e2414..af796ba 100644 --- a/main/res/values-sk/strings.xml +++ b/main/res/values-sk/strings.xml @@ -484,7 +484,6 @@ <string name="cache_attributes">Atribúty</string> <string name="cache_inventory">Obsah</string> <string name="cache_log_offline">Offline log</string> - <string name="cache_log_images_loading">Načítanie obrázku z logu…</string> <string name="cache_log_images_title">Obrázok z logu</string> <string name="cache_log_image_default_title">Fotografia</string> <string name="cache_personal_note">Osobná poznámka</string> @@ -571,7 +570,7 @@ <string name="cache_rating">Hodnotenie</string> <string name="cache_own_rating">Vlastné hodnotenie</string> <string name="cache_rating_of">z</string> - <string name="cache_favourite">Obľúbené</string> + <string name="cache_favorite">Obľúbené</string> <string name="cache_owner">Vlastník</string> <string name="cache_hidden">Skrytá</string> <string name="cache_event">Dátum</string> @@ -579,9 +578,7 @@ <string name="cache_coordinates">Súradnice</string> <string name="cache_coordinates_original">Pôvodné súradnice</string> <string name="cache_spoiler_images_title">Spoilerové obrázky</string> - <string name="cache_spoiler_images_loading">Načítanie spoilerových obrázkov…</string> <string name="cache_images_title">Obrázky</string> - <string name="cache_images_loading">Prebieha načítanie obrázkov…</string> <string name="cache_log_types">Typy záznamov</string> <string name="cache_coordinates_no">Táto skrýša nemá žiadne súradnice.</string> <string name="cache_clear_history">Vymazať históriu</string> @@ -767,8 +764,6 @@ <string name="license_dismiss">Zamietnutie</string> <!-- helpers --> - <string name="helper_manual_title">Manuál</string> - <string name="helper_manual_description">Obsiahly manuál pre c:geo, ktorý obsahuje popisy všetkých možností tejto aplikácie (dokonca i skrytých).</string> <string name="helper_calendar_title">Doplnok c:geo calendar</string> <string name="helper_calendar_missing">Doplnok c:geo calendar nie je nainštalovaný</string> <string name="helper_calendar_description">Umožní vám exportovať skrýše udalostí do kalendára na vašom zariadení.</string> diff --git a/main/res/values-sv/strings.xml b/main/res/values-sv/strings.xml index d3be9ff..0171288 100644 --- a/main/res/values-sv/strings.xml +++ b/main/res/values-sv/strings.xml @@ -176,7 +176,7 @@ <string name="err_favorite_failed">Misslyckades att ändra favoritstatus.</string> <string name="err_select_logimage_failed">Misslyckades att välja bild till loggen.</string> - <string name="err_aquire_image_failed">Hämtning av bilden misslyckades.</string> + <string name="err_acquire_image_failed">Hämtning av bilden misslyckades.</string> <string name="err_tb_display">Tyvärr kan c:geo inte visa den trackable du önskar. Är den verkligen trackable?</string> <string name="err_tb_details_open">Tyvärr kan c:geo inte öppna detaljer för trackable.</string> <string name="err_tb_forgot_saw">Tyvärr glömde c:geo vilken trackable du såg.</string> @@ -512,7 +512,6 @@ <string name="cache_attributes">Attribut</string> <string name="cache_inventory">Innehåll</string> <string name="cache_log_offline">Offline logg</string> - <string name="cache_log_images_loading">Laddar loggbilder…</string> <string name="cache_log_images_title">Loggbild</string> <string name="cache_log_image_default_title">Foto</string> <string name="cache_personal_note">Personlig anteckning</string> @@ -562,10 +561,10 @@ <string name="cache_dialog_watchlist_add_message">Lägger till cachen till din watchlist…</string> <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Tar bort cachen från din watchlist…</string> - <string name="cache_dialog_favourite_add_title">Favorit</string> - <string name="cache_dialog_favourite_add_message">Lägger till cachen till dina favoriter…</string> - <string name="cache_dialog_favourite_remove_title">Favorit</string> - <string name="cache_dialog_favourite_remove_message">Tar bort cachen från dina favoriter…</string> + <string name="cache_dialog_favorite_add_title">Favorit</string> + <string name="cache_dialog_favorite_add_message">Lägger till cachen till dina favoriter…</string> + <string name="cache_dialog_favorite_remove_title">Favorit</string> + <string name="cache_dialog_favorite_remove_message">Tar bort cachen från dina favoriter…</string> <string name="cache_menu_navigate">Navigera</string> <string name="cache_menu_navigation_drive">Navigering (med bil)</string> <string name="cache_menu_navigation_walk">Navigering (till fots)</string> @@ -607,7 +606,7 @@ <string name="cache_rating">Betyg</string> <string name="cache_own_rating">Eget betyg</string> <string name="cache_rating_of">av</string> - <string name="cache_favourite">Favorit</string> + <string name="cache_favorite">Favorit</string> <string name="cache_owner">Ägare</string> <string name="cache_hidden">Gömd</string> <string name="cache_event">Datum</string> @@ -615,9 +614,7 @@ <string name="cache_coordinates">Koordinater</string> <string name="cache_coordinates_original">Ursprungliga koordinater</string> <string name="cache_spoiler_images_title">Spoiler bilder</string> - <string name="cache_spoiler_images_loading">Laddar spoiler bilder…</string> <string name="cache_images_title">Bilder</string> - <string name="cache_images_loading">Laddar bilder…</string> <string name="cache_log_types">Loggtyper</string> <string name="cache_coordinates_no">Cachen saknar koordinater.</string> <string name="cache_clear_history">Rensa historik</string> @@ -819,8 +816,6 @@ <string name="license_dismiss">Avbryt</string> <!-- helpers --> - <string name="helper_manual_title">Manual</string> - <string name="helper_manual_description">En utförlig manual för c:geo som beskriver alla möjligheter och ger en hel del tips. Manualen finns enbart på engelska.</string> <string name="helper_calendar_title">c:geo kalendertillägg</string> <string name="helper_calendar_missing">c:geo kalendertillägg är inte installerat</string> <string name="helper_calendar_description">Gör det möjligt att exportera event till din kalender.</string> diff --git a/main/res/values/attrs.xml b/main/res/values/attrs.xml index 558c353..092d307 100644 --- a/main/res/values/attrs.xml +++ b/main/res/values/attrs.xml @@ -22,10 +22,10 @@ <attr name="button" format="integer" /> <attr name="input" format="integer" /> <attr name="inventory" format="integer" /> - <attr name="favourite" format="integer" /> - <attr name="favourite_r" format="integer" /> - <attr name="favourite_o" format="integer" /> - <attr name="favourite_g" format="integer" /> + <attr name="favorite" format="integer" /> + <attr name="favorite_r" format="integer" /> + <attr name="favorite_o" format="integer" /> + <attr name="favorite_g" format="integer" /> <attr name="close" format="integer" /> <attr name="log_img_icon" format="integer" /> <attr name="actionbar_compass" format="integer" /> diff --git a/main/res/values/ids.xml b/main/res/values/ids.xml deleted file mode 100644 index cfb09cd..0000000 --- a/main/res/values/ids.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<resources> - <item type="id" name="actionbar_title" /> - <item type="id" name="actionbar_progress" /> -</resources> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 5f56ebb..b537b74 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -126,6 +126,14 @@ <string name="log_image_camera">New</string> <string name="log_image_caption">Caption</string> <string name="log_image_description">Description</string> + <string name="log_image_scale">Scaling</string> + <string-array name="log_image_scales"> + <item>No scaling</item> + <item>512 px</item> + <item>640 px</item> + <item>800 px</item> + <item>1024 px</item> + </string-array> <!-- translation --> <string name="translate_to_sys_lang">Translate to %s</string> @@ -175,7 +183,7 @@ <string name="err_missing_device_name">Please enter a device name before registering.</string> <string name="err_favorite_failed">Changing favorite status failed.</string> <string name="err_select_logimage_failed">Selecting an image for the log failed.</string> - <string name="err_aquire_image_failed">Acquiring an image failed.</string> + <string name="err_acquire_image_failed">Acquiring an image failed.</string> <string name="err_tb_display">c:geo can\'t display trackable you want. Is it really a trackable?</string> <string name="err_tb_details_open">c:geo can\'t open trackable details.</string> @@ -512,7 +520,6 @@ <string name="cache_attributes">Attributes</string> <string name="cache_inventory">Inventory</string> <string name="cache_log_offline">Offline Log</string> - <string name="cache_log_images_loading">Loading Log images…</string> <string name="cache_log_images_title">Log images</string> <string name="cache_log_image_default_title">Photo</string> <string name="cache_personal_note">Personal note</string> @@ -562,10 +569,10 @@ <string name="cache_dialog_watchlist_add_message">Adding cache to your watchlist…</string> <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Removing cache from your watchlist…</string> - <string name="cache_dialog_favourite_add_title">Favourite</string> - <string name="cache_dialog_favourite_add_message">Adding cache to your favourites…</string> - <string name="cache_dialog_favourite_remove_title">Favourite</string> - <string name="cache_dialog_favourite_remove_message">Removing cache from your favourites…</string> + <string name="cache_dialog_favorite_add_title">Favorite</string> + <string name="cache_dialog_favorite_add_message">Adding cache to your favorites…</string> + <string name="cache_dialog_favorite_remove_title">Favorite</string> + <string name="cache_dialog_favorite_remove_message">Removing cache from your favorites…</string> <string name="cache_menu_navigate">Navigate</string> <string name="cache_menu_navigation_drive">Navigation (Driving)</string> <string name="cache_menu_navigation_walk">Navigation (Walking)</string> @@ -597,6 +604,8 @@ <string name="cache_status_disabled">Disabled</string> <string name="cache_status_premium">Premium Members only</string> <string name="cache_status_not_premium">All Members Access</string> + <string name="cache_status_stored">Stored</string> + <string name="cache_status_not_stored">Not stored</string> <string name="cache_geocode">Geo code</string> <string name="cache_name">Name</string> <string name="cache_type">Type</string> @@ -607,7 +616,7 @@ <string name="cache_rating">Rating</string> <string name="cache_own_rating">Own Rating</string> <string name="cache_rating_of">of</string> - <string name="cache_favourite">Favorite</string> + <string name="cache_favorite">Favorite</string> <string name="cache_owner">Owner</string> <string name="cache_hidden">Hidden</string> <string name="cache_event">Date</string> @@ -615,9 +624,7 @@ <string name="cache_coordinates">Coordinates</string> <string name="cache_coordinates_original">Original Coordinates</string> <string name="cache_spoiler_images_title">Spoiler images</string> - <string name="cache_spoiler_images_loading">Loading spoiler images…</string> <string name="cache_images_title">Images</string> - <string name="cache_images_loading">Loading images…</string> <string name="cache_log_types">Log types</string> <string name="cache_coordinates_no">This cache has no coordinates.</string> <string name="cache_clear_history">Clear history</string> @@ -820,8 +827,6 @@ <string name="license_dismiss">Dismiss</string> <!-- helpers --> - <string name="helper_manual_title">Manual</string> - <string name="helper_manual_description">Comprehensive manual for c:geo that contains description of all possibilities of this application (even hidden ones).</string> <string name="helper_calendar_title">c:geo calendar add-on</string> <string name="helper_calendar_missing">c:geo calendar add-on not installed.</string> <string name="helper_calendar_description">Enables you to export event caches into the calendar on your device.</string> @@ -998,6 +1003,8 @@ <string name="attribute_swamp_no">No swamp or marsh</string> <string name="attribute_hills_yes">Hilly area</string> <string name="attribute_hills_no">No hilly area</string> + <string name="attribute_easy_climbing_yes">Lightweight climbing</string> + <string name="attribute_easy_climbing_no">No lightweight climbing</string> <string name="attribute_poi_yes">Point of interest</string> <string name="attribute_poi_no">No point of interest</string> <string name="attribute_moving_target_yes">Moving target</string> diff --git a/main/res/values/strings_not_translatable.xml b/main/res/values/strings_not_translatable.xml index 755385f..7fde7a0 100644 --- a/main/res/values/strings_not_translatable.xml +++ b/main/res/values/strings_not_translatable.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="waypoint_coordinate_formats" translatable="false">
<item>@string/waypoint_coordinate_formats_plain</item>
@@ -28,6 +28,15 @@ <string name="init_select_gpx_exportdir" translatable="false">…</string>
<string name="init_select_gpx_importdir" translatable="false">…</string>
+ <!-- upload image scaling -->
+ <integer-array name="log_image_scale_values">
+ <item>-1</item>
+ <item>512</item>
+ <item>640</item>
+ <item>800</item>
+ <item>1024</item>
+ </integer-array>
+
<!-- contributors -->
<string name="contributors" translatable="false">\n
· <a href="http://carnero.cc/">carnero</a> as the father of c:geo\n
@@ -87,40 +96,26 @@ <!-- changelog -->
<string name="changelog" translatable="false">\n
- <b>2013.04.03</b>\n\n
+ <b>Next release</b>\n\n
<b>New Features/Functions:</b>\n
- · Support of attaching pictures to logs\n
- · Support of opencaching.de online API in live map and nearby search\n
- · Support for searching opencaching.nl caches\n
- · Alphabetical sorting of OSM:Offline maps in map selection\n
- · Color markers also in trackable logbook\n
- · Edit cache type filter by clicking on filter bar\n
- · Inverse sorting of cache lists (hit the same menu again)\n
- · View pager for trackable activity\n
- · Menu item to delete past events\n
- · Settings: Option to ask for list to store caches\n
- · Change list in cache details\n
- · Ability to select \"All\" list from main screen\n
- · Default log type for event caches will be \"Attended\" if \"Will attend\" was logged before\n
- · Improved and extended cache type detection on live map\n
- · Waypoints can be marked as visited\n
- · Possibility to delete offline logs in lists\n
- · Support of language specific characters in log text equally to the website\n
+ · Log images can be scaled before upload to save traffic
+ · Improved online detection when refreshing caches\n
\n
<b>Bugfixing:</b>\n
- · Final flag icon lost when updating cache with self defined final\n
- · Bad selection in directory chooser\n
- · Log type \"Retract Listing\" now parsed correctly\n
- · Active cache detail page now remembered when rotating device\n
- · Replaced the term \"GC-Code\" by \"Geocode\"\n
- · Improvements for light theme\n
- · Share function uses short URL again\n
- · Offline log marker now shown after autosave of log\n
- · GPX export no longer exports waypoints without coordinates\n
- · Corrections for light scheme on Adnroid 2.x devices\n
- · Avoid crash if logging page is opened while not connected correctly\n
- \n
- <a href="https://github.com/cgeo/c-geo-opensource/issues?milestone=9&state=closed">Detailed list of all changes</a>\n
+ · Do not apply encryption/decryption when clicking on a link in a log\n
+ · Also show a picture attached to a log locally after sending the log\n
+ · Improved display of log text for OC-caches\n
+ · Improved performance of GPX exports\n
+ · GPX import option now also shown on all caches list\n
+ · OC.de attributes correction\n
+ · Reduce memory usage for images to avoid crashes\n
+ · Do not show short description if it is contained in long description for OC.de caches\n
+ · Do not allow setting the GPX dir to a not accessible directory\n
+ · Failure in waypoint projection for some languages corrected\n
+ · Avoid crashes when selecting images for logs\n
+ · Ignore hide setting when searching for owned caches\n
+ \n
+ <a href="https://github.com/cgeo/c-geo-opensource/issues?milestone=17&state=closed">Detailed list of all changes</a>\n
\n
<b>Known Limitations/Bugs:</b>\n
· Live map:\n
@@ -130,7 +125,6 @@ On low zoom owned/found caches may not be hidden anymore\n
· Other:\n
Log images with huge size cause a long loading time\n
- After uploading log images they are only shown in the logview after refreshing the cache\n
The personal note added to a cache is not synced to geocaching.com but will be overruled by personal notes on geocaching.com\n
On devices with HD display resolution OSM maps might not work. Please use Google maps in this case.\n
A huge amount of pictures on the image tab of a cache might cause a crash\n
diff --git a/main/res/values/styles.xml b/main/res/values/styles.xml index caa884a..0116577 100644 --- a/main/res/values/styles.xml +++ b/main/res/values/styles.xml @@ -81,7 +81,6 @@ </style> <style name="action_bar_progress" parent="@android:style/Widget.ProgressBar.Small"> - <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">15dip</item> @@ -90,7 +89,6 @@ </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">wrap_content</item> <item name="android:layout_weight">1</item> diff --git a/main/res/values/themes.xml b/main/res/values/themes.xml index fdc2eeb..655d9e1 100644 --- a/main/res/values/themes.xml +++ b/main/res/values/themes.xml @@ -36,10 +36,10 @@ <item name="button">@drawable/action_button_dark</item> <item name="input">@drawable/input_bcg_dark</item> <item name="inventory">@drawable/inventory_background_dark</item> - <item name="favourite">@drawable/favourite_background_dark</item> - <item name="favourite_r">@drawable/favourite_background_red_dark</item> - <item name="favourite_o">@drawable/favourite_background_orange_dark</item> - <item name="favourite_g">@drawable/favourite_background_green_dark</item> + <item name="favorite">@drawable/favorite_background_dark</item> + <item name="favorite_r">@drawable/favorite_background_red_dark</item> + <item name="favorite_o">@drawable/favorite_background_orange_dark</item> + <item name="favorite_g">@drawable/favorite_background_green_dark</item> <item name="close">@drawable/map_close_dark</item> <item name="log_img_icon">@drawable/log_img_dark</item> <item name="actionbar_compass">@drawable/actionbar_compass_dark</item> @@ -67,10 +67,10 @@ <item name="button">@drawable/action_button_light</item> <item name="input">@drawable/input_bcg_light</item> <item name="inventory">@drawable/inventory_background_light</item> - <item name="favourite">@drawable/favourite_background_light</item> - <item name="favourite_r">@drawable/favourite_background_red_light</item> - <item name="favourite_o">@drawable/favourite_background_orange_light</item> - <item name="favourite_g">@drawable/favourite_background_green_light</item> + <item name="favorite">@drawable/favorite_background_light</item> + <item name="favorite_r">@drawable/favorite_background_red_light</item> + <item name="favorite_o">@drawable/favorite_background_orange_light</item> + <item name="favorite_g">@drawable/favorite_background_green_light</item> <item name="close">@drawable/map_close_light</item> <item name="log_img_icon">@drawable/log_img_light</item> <item name="actionbar_compass">@drawable/actionbar_compass_light</item> @@ -109,10 +109,10 @@ <item name="button">@drawable/action_button_dark</item> <item name="input">@drawable/input_bcg_dark</item> <item name="inventory">@drawable/inventory_background_dark</item> - <item name="favourite">@drawable/favourite_background_dark</item> - <item name="favourite_r">@drawable/favourite_background_red_dark</item> - <item name="favourite_o">@drawable/favourite_background_orange_dark</item> - <item name="favourite_g">@drawable/favourite_background_green_dark</item> + <item name="favorite">@drawable/favorite_background_dark</item> + <item name="favorite_r">@drawable/favorite_background_red_dark</item> + <item name="favorite_o">@drawable/favorite_background_orange_dark</item> + <item name="favorite_g">@drawable/favorite_background_green_dark</item> <item name="close">@drawable/map_close_dark</item> <item name="log_img_icon">@drawable/log_img_dark</item> <item name="actionbar_compass">@drawable/actionbar_compass_dark</item> @@ -141,10 +141,10 @@ <item name="button">@drawable/action_button_light</item> <item name="input">@drawable/input_bcg_light</item> <item name="inventory">@drawable/inventory_background_light</item> - <item name="favourite">@drawable/favourite_background_light</item> - <item name="favourite_r">@drawable/favourite_background_red_light</item> - <item name="favourite_o">@drawable/favourite_background_orange_light</item> - <item name="favourite_g">@drawable/favourite_background_green_light</item> + <item name="favorite">@drawable/favorite_background_light</item> + <item name="favorite_r">@drawable/favorite_background_red_light</item> + <item name="favorite_o">@drawable/favorite_background_orange_light</item> + <item name="favorite_g">@drawable/favorite_background_green_light</item> <item name="close">@drawable/map_close_light</item> <item name="log_img_icon">@drawable/log_img_light</item> <item name="actionbar_compass">@drawable/actionbar_compass_light</item> diff --git a/main/src/cgeo/geocaching/AboutActivity.java b/main/src/cgeo/geocaching/AboutActivity.java index c154ffb..3b76b6c 100644 --- a/main/src/cgeo/geocaching/AboutActivity.java +++ b/main/src/cgeo/geocaching/AboutActivity.java @@ -1,5 +1,7 @@ package cgeo.geocaching; +import butterknife.InjectView; + import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.utils.Version; @@ -11,18 +13,17 @@ import android.view.View; import android.widget.TextView; public class AboutActivity extends AbstractActivity { + @InjectView(R.id.about_version_string) protected TextView version; + @InjectView(R.id.contributors) protected TextView contributors; + @InjectView(R.id.changelog) protected TextView changeLog; @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.about_activity); - setTitle(res.getString(R.string.about)); + super.onCreate(savedInstanceState, R.layout.about_activity); - ((TextView) findViewById(R.id.about_version_string)).setText(Version.getVersionName(this)); - ((TextView) findViewById(R.id.contributors)).setMovementMethod(LinkMovementMethod.getInstance()); - ((TextView) findViewById(R.id.changelog)).setMovementMethod(LinkMovementMethod.getInstance()); + version.setText(Version.getVersionName(this)); + contributors.setMovementMethod(LinkMovementMethod.getInstance()); + changeLog.setMovementMethod(LinkMovementMethod.getInstance()); } /** diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java index 37c3643..3e66d5e 100644 --- a/main/src/cgeo/geocaching/AbstractLoggingActivity.java +++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java @@ -20,10 +20,6 @@ public abstract class AbstractLoggingActivity extends AbstractActivity { private static final int MENU_SIGNATURE = 1; private static final int MENU_SMILEY = 2; - protected AbstractLoggingActivity(String helpTopic) { - super(helpTopic); - } - @Override public boolean onCreateOptionsMenu(final Menu menu) { // signature menu diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java index f903d00..4dd9fd1 100644 --- a/main/src/cgeo/geocaching/AbstractPopupActivity.java +++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java @@ -67,14 +67,23 @@ public abstract class AbstractPopupActivity extends AbstractActivity { cacheDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(cache.getCoords()))); cacheDistance.bringToFront(); } + onUpdateGeoData(geo); } catch (Exception e) { Log.w("Failed to UpdateLocation location."); } } }; - protected AbstractPopupActivity(String helpTopic, int layout) { - super(helpTopic); + /** + * Callback to run when new location information is available. + * This may be overriden by deriving classes. The default implementation does nothing. + * + * @param geo the new data + */ + public void onUpdateGeoData(final IGeoData geo) { + } + + protected AbstractPopupActivity(int layout) { this.layout = layout; } @@ -102,12 +111,6 @@ public abstract class AbstractPopupActivity extends AbstractActivity { }).start(); } - @Override - public void goManual(View view) { - super.goManual(view); - finish(); - } - protected void init() { cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); @@ -134,7 +137,6 @@ public abstract class AbstractPopupActivity extends AbstractActivity { this.setTheme(ActivityMixin.getDialogTheme()); // set layout setContentView(layout); - setTitle(res.getString(R.string.detail)); // get parameters final Bundle extras = getIntent().getExtras(); @@ -269,8 +271,8 @@ public abstract class AbstractPopupActivity extends AbstractActivity { aquireGCVote(); } - // favourite count - details.add(R.string.cache_favourite, cache.getFavoritePoints() + "×"); + // favorite count + details.add(R.string.cache_favorite, cache.getFavoritePoints() + "×"); // more details final Button buttonMore = (Button) findViewById(R.id.more_details); diff --git a/main/src/cgeo/geocaching/AddressListActivity.java b/main/src/cgeo/geocaching/AddressListActivity.java index b1de065..150bbc5 100644 --- a/main/src/cgeo/geocaching/AddressListActivity.java +++ b/main/src/cgeo/geocaching/AddressListActivity.java @@ -20,11 +20,7 @@ public class AddressListActivity extends AbstractListActivity { @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.addresses); - setTitle(res.getString(R.string.search_address_result)); + super.onCreate(savedInstanceState, R.layout.addresses); // get parameters final String keyword = getIntent().getStringExtra(Intents.EXTRA_KEYWORD); diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 43ce65f..b0bee55 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -21,13 +21,14 @@ import cgeo.geocaching.network.Parameters; import cgeo.geocaching.ui.AbstractCachingPageViewCreator; import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod; import cgeo.geocaching.ui.CacheDetailsCreator; +import cgeo.geocaching.ui.CoordinatesFormatSwitcher; import cgeo.geocaching.ui.DecryptTextClickListener; +import cgeo.geocaching.ui.EditNoteDialog; +import cgeo.geocaching.ui.EditNoteDialog.EditNoteDialogListener; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.ui.ImagesList; -import cgeo.geocaching.ui.ImagesList.ImageType; import cgeo.geocaching.ui.LoggingUI; import cgeo.geocaching.ui.WeakReferenceHandler; -import cgeo.geocaching.ui.dialog.EditorDialog; import cgeo.geocaching.utils.BaseUtils; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.ClipboardUtils; @@ -65,6 +66,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.support.v4.app.FragmentManager; import android.text.Editable; import android.text.Html; import android.text.Spannable; @@ -112,7 +114,8 @@ import java.util.regex.Pattern; * * e.g. details, description, logs, waypoints, inventory... */ -public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> { +public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> + implements EditNoteDialogListener { private static final int MENU_FIELD_COPY = 1; private static final int MENU_FIELD_TRANSLATE = 2; @@ -139,6 +142,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private final Progress progress = new Progress(); private SearchResult search; + private EditNoteDialogListener editNoteDialogListener; + private final GeoDirHandler locationUpdater = new GeoDirHandler() { @Override public void updateGeoData(final IGeoData geo) { @@ -187,19 +192,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc }; protected ImagesList imagesList; - public CacheDetailActivity() { - // identifier for manual - super("c:geolocation-cache-details"); - } - @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // initialize the main view and set a default title - setTheme(); - setContentView(R.layout.cacheview); - setTitle(res.getString(R.string.cache)); + super.onCreate(savedInstanceState, R.layout.cacheview); String geocode = null; @@ -795,7 +790,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc /** * Wrapper for the referenced method in the xml-layout. */ - public void startDefaultNavigation(@SuppressWarnings("unused") View view) { + public void goDefaultNavigation(@SuppressWarnings("unused") View view) { startDefaultNavigation(); } @@ -899,7 +894,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return; } imagesList = new ImagesList(this, cache.getGeocode()); - imagesList.loadImages(imageView, cache.getImages(), ImageType.AllImages, false); + imagesList.loadImages(imageView, cache.getImages(), false); } public static void startActivity(final Context context, final String geocode) { @@ -1163,7 +1158,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // favorite count if (cache.getFavoritePoints() > 0) { - details.add(R.string.cache_favourite, cache.getFavoritePoints() + "×"); + details.add(R.string.cache_favorite, cache.getFavoritePoints() + "×"); } // own rating @@ -1202,23 +1197,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // cache coordinates if (cache.getCoords() != null) { TextView valueView = details.add(R.string.cache_coordinates, cache.getCoords().toString()); - valueView.setOnClickListener(new View.OnClickListener() { - private int position = 0; - private GeopointFormatter.Format[] availableFormats = new GeopointFormatter.Format[] { - GeopointFormatter.Format.LAT_LON_DECMINUTE, - GeopointFormatter.Format.LAT_LON_DECSECOND, - GeopointFormatter.Format.LAT_LON_DECDEGREE - }; - - // rotate coordinate formats on click - @Override - public void onClick(View view) { - position = (position + 1) % availableFormats.length; - - final TextView valueView = (TextView) view.findViewById(R.id.value); - valueView.setText(cache.getCoords().format(availableFormats[position])); - } - }); + valueView.setOnClickListener(new CoordinatesFormatSwitcher(cache.getCoords())); registerForContextMenu(valueView); } @@ -1354,6 +1333,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return; } + if (!Network.isNetworkConnected(getApplicationContext())) { + showToast(getString(R.string.err_server)); + return; + } + final RefreshCacheHandler refreshCacheHandler = new RefreshCacheHandler(); progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage()); @@ -1498,7 +1482,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - /** Thread to add this cache to the favourite list of the user */ + /** Thread to add this cache to the favorite list of the user */ private class FavoriteAddThread extends Thread { private final Handler handler; @@ -1512,7 +1496,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - /** Thread to remove this cache to the favourite list of the user */ + /** Thread to remove this cache to the favorite list of the user */ private class FavoriteRemoveThread extends Thread { private final Handler handler; @@ -1539,25 +1523,25 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } /** - * Listener for "add to favourites" button + * Listener for "add to favorites" button */ private class FavoriteAddClickListener extends AbstractWatchlistClickListener { @Override public void onClick(View arg0) { - doExecute(R.string.cache_dialog_favourite_add_title, - R.string.cache_dialog_favourite_add_message, + doExecute(R.string.cache_dialog_favorite_add_title, + R.string.cache_dialog_favorite_add_message, new FavoriteAddThread(new FavoriteUpdateHandler())); } } /** - * Listener for "remove from favourites" button + * Listener for "remove from favorites" button */ private class FavoriteRemoveClickListener extends AbstractWatchlistClickListener { @Override public void onClick(View arg0) { - doExecute(R.string.cache_dialog_favourite_remove_title, - R.string.cache_dialog_favourite_remove_message, + doExecute(R.string.cache_dialog_favorite_remove_title, + R.string.cache_dialog_favorite_remove_message, new FavoriteRemoveThread(new FavoriteUpdateHandler())); } } @@ -1763,8 +1747,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // cache short description if (StringUtils.isNotBlank(cache.getShortDescription())) { - new LoadDescriptionTask().execute(cache.getShortDescription(), view.findViewById(R.id.shortdesc), null); - registerForContextMenu(view.findViewById(R.id.shortdesc)); + new LoadDescriptionTask(cache.getShortDescription(), view.findViewById(R.id.shortdesc), null, null).execute(); } // long description @@ -1794,16 +1777,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc personalNoteEdit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - EditorDialog editor = new EditorDialog(CacheDetailActivity.this, personalNoteView.getText()); - editor.setOnEditorUpdate(new EditorDialog.EditorUpdate() { + editNoteDialogListener = new EditNoteDialogListener() { @Override - public void update(CharSequence editorText) { - cache.setPersonalNote(editorText.toString()); + public void onFinishEditNoteDialog(final String note) { + cache.setPersonalNote(note); setPersonalNote(personalNoteView); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); - } - }); - editor.show(); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); } + }; + final FragmentManager fm = getSupportFragmentManager(); + final EditNoteDialog dialog = EditNoteDialog.newInstance(cache.getPersonalNote()); + dialog.show(fm, "fragment_edit_note"); } }); } else { @@ -1866,8 +1849,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc personalNoteView.setText(personalNote, TextView.BufferType.SPANNABLE); if (StringUtils.isNotBlank(personalNote)) { personalNoteView.setVisibility(View.VISIBLE); - } - else { + } else { personalNoteView.setVisibility(View.GONE); } } @@ -1878,12 +1860,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc showDesc.setOnClickListener(null); view.findViewById(R.id.loading).setVisibility(View.VISIBLE); - new LoadDescriptionTask().execute(cache.getDescription(), view.findViewById(R.id.longdesc), view.findViewById(R.id.loading)); - registerForContextMenu(view.findViewById(R.id.longdesc)); + new LoadDescriptionTask(cache.getDescription(), view.findViewById(R.id.longdesc), view.findViewById(R.id.loading), view.findViewById(R.id.shortdesc)).execute(); } } + @Override + public void onFinishEditNoteDialog(final String note) { + editNoteDialogListener.onFinishEditNoteDialog(note); + } + private static class HtmlImageCounter implements Html.ImageGetter { private int imageCount = 0; @@ -1910,28 +1896,33 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc * </ol> */ private class LoadDescriptionTask extends AsyncTask<Object, Void, Void> { - private View loadingIndicatorView; - private TextView descriptionView; - private String descriptionString; + private final View loadingIndicatorView; + private final TextView descriptionView; + private final String descriptionString; private Spanned description; + private final View shortDescView; + public LoadDescriptionTask(final String description, final View descriptionView, final View loadingIndicatorView, final View shortDescView) { + this.descriptionString = description; + this.descriptionView = (TextView) descriptionView; + this.loadingIndicatorView = loadingIndicatorView; + this.shortDescView = shortDescView; + } @Override protected Void doInBackground(Object... params) { try { - descriptionString = ((String) params[0]); - descriptionView = (TextView) params[1]; - loadingIndicatorView = (View) params[2]; - // Fast preview: parse only HTML without loading any images HtmlImageCounter imageCounter = new HtmlImageCounter(); final UnknownTagsHandler unknownTagsHandler = new UnknownTagsHandler(); description = Html.fromHtml(descriptionString, imageCounter, unknownTagsHandler); publishProgress(); + + boolean needsRefresh = false; if (imageCounter.getImageCount() > 0) { // Complete view: parse again with loading images - if necessary ! If there are any images causing problems the user can see at least the preview description = Html.fromHtml(descriptionString, new HtmlImage(cache.getGeocode(), true, cache.getListId(), false), unknownTagsHandler); - publishProgress(); + needsRefresh = true; } // If description has an HTML construct which may be problematic to render, add a note at the end of the long description. @@ -1943,6 +1934,10 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc final Spanned tableNote = Html.fromHtml(res.getString(R.string.cache_description_table_note, "<a href=\"" + cache.getUrl() + "\">" + connector.getName() + "</a>")); ((Editable) description).append("\n\n").append(tableNote); ((Editable) description).setSpan(new StyleSpan(Typeface.ITALIC), startPos, description.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + needsRefresh = true; + } + + if (needsRefresh) { publishProgress(); } } catch (Exception e) { @@ -1951,25 +1946,40 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return null; } - /* - * (non-Javadoc) - * - * @see android.os.AsyncTask#onProgressUpdate(Progress[]) - */ @Override protected void onProgressUpdate(Void... values) { - if (description != null) { - if (StringUtils.isNotBlank(descriptionString)) { - descriptionView.setText(description, TextView.BufferType.SPANNABLE); - descriptionView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); - fixBlackTextColor(descriptionView, descriptionString); - } - - descriptionView.setVisibility(View.VISIBLE); - } else { + if (description == null) { showToast(res.getString(R.string.err_load_descr_failed)); + return; + } + if (StringUtils.isNotBlank(descriptionString)) { + descriptionView.setText(description, TextView.BufferType.SPANNABLE); + descriptionView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + fixBlackTextColor(descriptionView, descriptionString); + descriptionView.setVisibility(View.VISIBLE); + registerForContextMenu(descriptionView); + + hideDuplicatedShortDescription(); } + } + /** + * Hide the short description, if it is contained somewhere at the start of the long description. + */ + private void hideDuplicatedShortDescription() { + if (shortDescView != null) { + final String shortDescription = cache.getShortDescription(); + if (StringUtils.isNotBlank(shortDescription)) { + int index = descriptionString.indexOf(shortDescription); + if (index >= 0 && index < 200) { + shortDescView.setVisibility(View.GONE); + } + } + } + } + + @Override + protected void onPostExecute(Void result) { if (null != loadingIndicatorView) { loadingIndicatorView.setVisibility(View.GONE); } @@ -2095,7 +2105,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (imageCounter.getImageCount() > 0) { // Complete view: parse again with loading images - if necessary ! If there are any images causing problems the user can see at least the preview LogImageLoader loader = new LogImageLoader(holder); - loader.execute(new String[] { logText }); + loader.execute(logText); } } else { @@ -2206,6 +2216,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // coordinates if (null != wpt.getCoords()) { final TextView coordinatesView = (TextView) waypointView.findViewById(R.id.coordinates); + coordinatesView.setOnClickListener(new CoordinatesFormatSwitcher(wpt.getCoords())); coordinatesView.setText(wpt.getCoords().toString()); coordinatesView.setVisibility(View.VISIBLE); } diff --git a/main/src/cgeo/geocaching/CachePopup.java b/main/src/cgeo/geocaching/CachePopup.java index e6d0148..4df428e 100644 --- a/main/src/cgeo/geocaching/CachePopup.java +++ b/main/src/cgeo/geocaching/CachePopup.java @@ -3,6 +3,7 @@ package cgeo.geocaching; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.network.Network; import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.Log; @@ -64,7 +65,7 @@ public class CachePopup extends AbstractPopupActivity { } public CachePopup() { - super("c:geo-cache-info", R.layout.popup); + super(R.layout.popup); } @Override @@ -160,6 +161,11 @@ public class CachePopup extends AbstractPopupActivity { return; } + if (!Network.isNetworkConnected(getApplicationContext())) { + showToast(getString(R.string.err_server)); + return; + } + final RefreshCacheHandler refreshCacheHandler = new RefreshCacheHandler(); progress.show(CachePopup.this, res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage()); new RefreshCacheThread(refreshCacheHandler).start(); diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java index 7f011fc..0a1d22d 100644 --- a/main/src/cgeo/geocaching/EditWaypointActivity.java +++ b/main/src/cgeo/geocaching/EditWaypointActivity.java @@ -1,7 +1,8 @@ package cgeo.geocaching; +import butterknife.InjectView; + import cgeo.geocaching.activity.AbstractActivity; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.enumerations.CacheType; @@ -37,6 +38,7 @@ import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.RadioButton; +import android.widget.RadioGroup; import android.widget.Spinner; import java.util.ArrayList; @@ -44,6 +46,19 @@ import java.util.EnumSet; import java.util.List; public class EditWaypointActivity extends AbstractActivity { + @InjectView(R.id.buttonLatitude) protected Button buttonLat; + @InjectView(R.id.buttonLongitude) protected Button buttonLon; + @InjectView(R.id.add_waypoint) protected Button addWaypoint; + @InjectView(R.id.note) protected EditText note; + @InjectView(R.id.wpt_visited_checkbox) protected CheckBox visitedCheckBox; + @InjectView(R.id.name) protected AutoCompleteTextView waypointName; + @InjectView(R.id.type) protected Spinner waypointTypeSelector; + @InjectView(R.id.distance) protected EditText distanceView; + @InjectView(R.id.modify_cache_coordinates_group) protected RadioGroup coordinatesGroup; + @InjectView(R.id.modify_cache_coordinates_local_and_remote) protected RadioButton modifyBoth; + @InjectView(R.id.distanceUnit) protected Spinner distanceUnitSelector; + @InjectView(R.id.bearing) protected EditText bearing; + @InjectView(R.id.modify_cache_coordinates_local) protected RadioButton modifyLocal; private String geocode = null; private int id = -1; @@ -78,15 +93,15 @@ public class EditWaypointActivity extends AbstractActivity { visited = waypoint.isVisited(); if (waypoint.getCoords() != null) { - ((Button) findViewById(R.id.buttonLatitude)).setText(waypoint.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE)); - ((Button) findViewById(R.id.buttonLongitude)).setText(waypoint.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE)); + buttonLat.setText(waypoint.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE)); + buttonLon.setText(waypoint.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE)); } - ((EditText) findViewById(R.id.name)).setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getName())).toString()); + waypointName.setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getName())).toString()); if (BaseUtils.containsHtml(waypoint.getNote())) { - ((EditText) findViewById(R.id.note)).setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getNote())).toString()); + note.setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getNote())).toString()); } else { - ((EditText) findViewById(R.id.note)).setText(StringUtils.trimToEmpty(waypoint.getNote())); + note.setText(StringUtils.trimToEmpty(waypoint.getNote())); } Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY); setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache); @@ -95,7 +110,7 @@ public class EditWaypointActivity extends AbstractActivity { if (own) { initializeWaypointTypeSelector(); } - ((CheckBox) findViewById(R.id.wpt_visited_checkbox)).setChecked(visited); + visitedCheckBox.setChecked(visited); initializeDistanceUnitSelector(); } catch (Exception e) { @@ -111,11 +126,7 @@ public class EditWaypointActivity extends AbstractActivity { @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.edit_waypoint_activity); - setTitle("waypoint"); + super.onCreate(savedInstanceState, R.layout.edit_waypoint_activity); // get parameters Bundle extras = getIntent().getExtras(); @@ -138,24 +149,19 @@ public class EditWaypointActivity extends AbstractActivity { setTitle(res.getString(R.string.waypoint_edit_title)); } - Button buttonLat = (Button) findViewById(R.id.buttonLatitude); buttonLat.setOnClickListener(new CoordDialogListener()); - Button buttonLon = (Button) findViewById(R.id.buttonLongitude); buttonLon.setOnClickListener(new CoordDialogListener()); - Button addWaypoint = (Button) findViewById(R.id.add_waypoint); addWaypoint.setOnClickListener(new CoordsListener()); List<String> wayPointNames = new ArrayList<String>(); for (WaypointType wpt : WaypointType.ALL_TYPES_EXCEPT_OWN_AND_ORIGINAL) { wayPointNames.add(wpt.getL10n()); } - AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.name); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, wayPointNames); - textView.setAdapter(adapter); + waypointName.setAdapter(adapter); if (id > 0) { - Spinner waypointTypeSelector = (Spinner) findViewById(R.id.type); waypointTypeSelector.setVisibility(View.GONE); waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true); @@ -171,7 +177,6 @@ public class EditWaypointActivity extends AbstractActivity { IConnector con = ConnectorFactory.getConnector(geocode); setCoordsModificationVisibility(con, cache); } - CheckBox visitedCheckBox = ((CheckBox) findViewById(R.id.wpt_visited_checkbox)); visitedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -181,16 +186,16 @@ public class EditWaypointActivity extends AbstractActivity { initializeDistanceUnitSelector(); - disableSuggestions((EditText) findViewById(R.id.distance)); + disableSuggestions(distanceView); } private void setCoordsModificationVisibility(IConnector con, Geocache cache) { if (cache != null && (cache.getType() == CacheType.MYSTERY || cache.getType() == CacheType.MULTI)) { - findViewById(R.id.modify_cache_coordinates_group).setVisibility(View.VISIBLE); - findViewById(R.id.modify_cache_coordinates_local_and_remote).setVisibility(con.supportsOwnCoordinates() ? View.VISIBLE : View.GONE); + coordinatesGroup.setVisibility(View.VISIBLE); + modifyBoth.setVisibility(con.supportsOwnCoordinates() ? View.VISIBLE : View.GONE); } else { - findViewById(R.id.modify_cache_coordinates_group).setVisibility(View.GONE); - findViewById(R.id.modify_cache_coordinates_local_and_remote).setVisibility(View.GONE); + coordinatesGroup.setVisibility(View.GONE); + modifyBoth.setVisibility(View.GONE); } } @@ -211,25 +216,12 @@ public class EditWaypointActivity extends AbstractActivity { } @Override - public void onDestroy() { - super.onDestroy(); - } - - @Override - public void onStop() { - super.onStop(); - } - - @Override public void onPause() { geoDirHandler.stopGeo(); super.onPause(); } private void initializeWaypointTypeSelector() { - - Spinner waypointTypeSelector = (Spinner) findViewById(R.id.type); - wpTypes = new ArrayList<WaypointType>(WaypointType.ALL_TYPES_EXCEPT_OWN_AND_ORIGINAL); ArrayAdapter<WaypointType> wpAdapter = new ArrayAdapter<WaypointType>(this, android.R.layout.simple_spinner_item, wpTypes.toArray(new WaypointType[wpTypes.size()])); wpAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); @@ -247,9 +239,6 @@ public class EditWaypointActivity extends AbstractActivity { } private void initializeDistanceUnitSelector() { - - Spinner distanceUnitSelector = (Spinner) findViewById(R.id.distanceUnit); - if (StringUtils.isBlank(distanceUnit)) { if (Settings.isUseMetricUnits()) { distanceUnitSelector.setSelection(0); // m @@ -271,10 +260,8 @@ public class EditWaypointActivity extends AbstractActivity { } try { - Button bLat = (Button) findViewById(R.id.buttonLatitude); - Button bLon = (Button) findViewById(R.id.buttonLongitude); - bLat.setHint(geo.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE_RAW)); - bLon.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW)); + buttonLat.setHint(geo.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE_RAW)); + buttonLon.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW)); } catch (final Exception e) { Log.e("failed to update location", e); } @@ -311,8 +298,8 @@ public class EditWaypointActivity extends AbstractActivity { coordsDialog.setOnCoordinateUpdate(new CoordinatesInputDialog.CoordinateUpdate() { @Override public void update(final Geopoint gp) { - ((Button) findViewById(R.id.buttonLatitude)).setText(gp.format(GeopointFormatter.Format.LAT_DECMINUTE)); - ((Button) findViewById(R.id.buttonLongitude)).setText(gp.format(GeopointFormatter.Format.LON_DECMINUTE)); + buttonLat.setText(gp.format(GeopointFormatter.Format.LAT_DECMINUTE)); + buttonLon.setText(gp.format(GeopointFormatter.Format.LON_DECMINUTE)); if (waypoint != null) { waypoint.setCoords(gp); } else { @@ -378,11 +365,11 @@ public class EditWaypointActivity extends AbstractActivity { @Override public void onClick(View arg0) { - final String bearingText = ((EditText) findViewById(R.id.bearing)).getText().toString(); + final String bearingText = bearing.getText().toString(); // combine distance from EditText and distanceUnit saved from Spinner - final String distanceText = ((EditText) findViewById(R.id.distance)).getText().toString() + distanceUnit; - final String latText = ((Button) findViewById(R.id.buttonLatitude)).getText().toString(); - final String lonText = ((Button) findViewById(R.id.buttonLongitude)).getText().toString(); + final String distanceText = distanceView.getText().toString() + distanceUnit; + final String latText = buttonLat.getText().toString(); + final String lonText = buttonLon.getText().toString(); if (StringUtils.isBlank(bearingText) && StringUtils.isBlank(distanceText) && StringUtils.isBlank(latText) && StringUtils.isBlank(lonText)) { @@ -430,9 +417,9 @@ public class EditWaypointActivity extends AbstractActivity { } // if no name is given, just give the waypoint its number as name - final String givenName = ((EditText) findViewById(R.id.name)).getText().toString().trim(); + final String givenName = waypointName.getText().toString().trim(); final String name = StringUtils.isNotEmpty(givenName) ? givenName : res.getString(R.string.waypoint) + " " + (wpCount + 1); - final String note = ((EditText) findViewById(R.id.note)).getText().toString().trim(); + final String noteText = note.getText().toString().trim(); final Geopoint coordsToSave = coords; final ProgressDialog progress = ProgressDialog.show(EditWaypointActivity.this, getString(R.string.cache), getString(R.string.waypoint_being_saved), true); final Handler finishHandler = new Handler() { @@ -483,7 +470,7 @@ public class EditWaypointActivity extends AbstractActivity { waypoint.setPrefix(prefix); waypoint.setLookup(lookup); waypoint.setCoords(coordsToSave); - waypoint.setNote(note); + waypoint.setNote(noteText); waypoint.setVisited(visited); waypoint.setId(id); @@ -501,8 +488,6 @@ public class EditWaypointActivity extends AbstractActivity { StaticMapsProvider.storeWaypointStaticMap(cache, waypoint, false); } } - final RadioButton modifyLocal = (RadioButton) findViewById(R.id.modify_cache_coordinates_local); - final RadioButton modifyBoth = (RadioButton) findViewById(R.id.modify_cache_coordinates_local_and_remote); if (modifyLocal.isChecked() || modifyBoth.isChecked()) { if (!cache.hasUserModifiedCoords()) { final Waypoint origWaypoint = new Waypoint(cgeoapplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false); @@ -541,11 +526,6 @@ public class EditWaypointActivity extends AbstractActivity { return con.supportsOwnCoordinates() && con.uploadModifiedCoordinates(cache, waypointUploaded); } - @Override - public void goManual(final View view) { - ActivityMixin.goManual(this, id >= 0 ? "c:geo-waypoint-edit" : "c:geo-waypoint-new"); - } - public static void startActivityEditWaypoint(final Context context, final int waypointId) { context.startActivity(new Intent(context, EditWaypointActivity.class) .putExtra(Intents.EXTRA_WAYPOINT_ID, waypointId)); diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index 836cccb..2c9ba32 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -47,8 +47,8 @@ import java.util.Collections; import java.util.Date; import java.util.EnumSet; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; @@ -483,34 +483,37 @@ public class Geocache implements ICache, IWaypoint { } public List<LogType> getPossibleLogTypes() { - final List<LogType> logTypes = new LinkedList<LogType>(); + final List<LogType> logTypes = new ArrayList<LogType>(); if (isEventCache()) { logTypes.add(LogType.WILL_ATTEND); - logTypes.add(LogType.NOTE); logTypes.add(LogType.ATTENDED); - logTypes.add(LogType.NEEDS_ARCHIVE); if (isOwner()) { logTypes.add(LogType.ANNOUNCEMENT); } } else if (CacheType.WEBCAM == cacheType) { logTypes.add(LogType.WEBCAM_PHOTO_TAKEN); - logTypes.add(LogType.DIDNT_FIND_IT); - logTypes.add(LogType.NOTE); - logTypes.add(LogType.NEEDS_ARCHIVE); - logTypes.add(LogType.NEEDS_MAINTENANCE); } else { logTypes.add(LogType.FOUND_IT); + } + if (!isEventCache()) { logTypes.add(LogType.DIDNT_FIND_IT); - logTypes.add(LogType.NOTE); - logTypes.add(LogType.NEEDS_ARCHIVE); + } + logTypes.add(LogType.NOTE); + if (!isEventCache()) { logTypes.add(LogType.NEEDS_MAINTENANCE); } if (isOwner()) { logTypes.add(LogType.OWNER_MAINTENANCE); - logTypes.add(LogType.TEMP_DISABLE_LISTING); - logTypes.add(LogType.ENABLE_LISTING); + if (isDisabled()) { + logTypes.add(LogType.ENABLE_LISTING); + } + else { + logTypes.add(LogType.TEMP_DISABLE_LISTING); + } logTypes.add(LogType.ARCHIVE); - logTypes.remove(LogType.UPDATE_COORDINATES); + } + if (!isArchived() && !isOwner()) { + logTypes.add(LogType.NEEDS_ARCHIVE); } return logTypes; } @@ -710,10 +713,7 @@ public class Geocache implements ICache, IWaypoint { public String getPersonalNote() { // non premium members have no personal notes, premium members have an empty string by default. // map both to null, so other code doesn't need to differentiate - if (StringUtils.isBlank(personalNote)) { - return null; - } - return personalNote; + return StringUtils.defaultIfBlank(personalNote, null); } public boolean supportsUserActions() { @@ -765,8 +765,8 @@ public class Geocache implements ICache, IWaypoint { return favorite; } - public void setFavorite(boolean favourite) { - this.favorite = favourite; + public void setFavorite(boolean favorite) { + this.favorite = favorite; } @Override @@ -1360,6 +1360,9 @@ public class Geocache implements ICache, IWaypoint { return null; } + /** + * Detect coordinates in the personal note and convert them to user defined waypoints. Works by rule of thumb. + */ public void parseWaypointsFromNote() { try { if (StringUtils.isBlank(getPersonalNote())) { @@ -1378,7 +1381,8 @@ public class Geocache implements ICache, IWaypoint { ((point.getLatitudeE6() % 1000) != 0 || (point.getLongitudeE6() % 1000) != 0) && !hasIdenticalWaypoint(point)) { final String name = cgeoapplication.getInstance().getString(R.string.cache_personal_note) + " " + count; - final Waypoint waypoint = new Waypoint(name, WaypointType.WAYPOINT, false); + final String potentialWaypointType = note.substring(Math.max(0, matcher.start() - 15)); + final Waypoint waypoint = new Waypoint(name, parseWaypointType(potentialWaypointType), false); waypoint.setCoords(point); addOrChangeWaypoint(waypoint, false); count++; @@ -1395,6 +1399,25 @@ public class Geocache implements ICache, IWaypoint { } } + /** + * Detect waypoint types in the personal note text. It works by rule of thumb only. + */ + private static WaypointType parseWaypointType(final String input) { + final String lowerInput = StringUtils.substring(input, 0, 20).toLowerCase(Locale.getDefault()); + for (WaypointType wpType : WaypointType.values()) { + if (lowerInput.contains(wpType.getL10n().toLowerCase(Locale.getDefault()))) { + return wpType; + } + if (lowerInput.contains(wpType.id)) { + return wpType; + } + if (lowerInput.contains(wpType.name().toLowerCase(Locale.US))) { + return wpType; + } + } + return WaypointType.WAYPOINT; + } + private boolean hasIdenticalWaypoint(final Geopoint point) { for (final Waypoint waypoint: waypoints) { if (waypoint.getCoords().equals(point)) { diff --git a/main/src/cgeo/geocaching/GpxFileListActivity.java b/main/src/cgeo/geocaching/GpxFileListActivity.java index f12a30c..de0be21 100644 --- a/main/src/cgeo/geocaching/GpxFileListActivity.java +++ b/main/src/cgeo/geocaching/GpxFileListActivity.java @@ -31,14 +31,9 @@ public class GpxFileListActivity extends AbstractFileListActivity<GPXListAdapter return Collections.singletonList(new File(Settings.getGpxImportDir()));
}
- @Override
- protected void setTitle() {
- setTitle(res.getString(R.string.gpx_import_title));
- }
-
public static void startSubActivity(Activity fromActivity, int listId) {
final Intent intent = new Intent(fromActivity, GpxFileListActivity.class);
- intent.putExtra(Intents.EXTRA_LIST_ID, listId);
+ intent.putExtra(Intents.EXTRA_LIST_ID, StoredList.getConcreteList(listId));
fromActivity.startActivityForResult(intent, 0);
}
diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java index 347cd86..4abf310 100644 --- a/main/src/cgeo/geocaching/ImageSelectActivity.java +++ b/main/src/cgeo/geocaching/ImageSelectActivity.java @@ -2,6 +2,7 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.compatibility.Compatibility; +import cgeo.geocaching.utils.ImageHelper; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; @@ -10,14 +11,18 @@ import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; +import android.widget.Spinner; import java.io.File; import java.text.SimpleDateFormat; @@ -28,34 +33,31 @@ public class ImageSelectActivity extends AbstractActivity { static final String EXTRAS_CAPTION = "caption"; static final String EXTRAS_DESCRIPTION = "description"; static final String EXTRAS_URI_AS_STRING = "uri"; + static final String EXTRAS_SCALE = "scale"; private static final String SAVED_STATE_IMAGE_CAPTION = "cgeo.geocaching.saved_state_image_caption"; private static final String SAVED_STATE_IMAGE_DESCRIPTION = "cgeo.geocaching.saved_state_image_description"; private static final String SAVED_STATE_IMAGE_URI = "cgeo.geocaching.saved_state_image_uri"; + private static final String SAVED_STATE_IMAGE_SCALE = "cgeo.geocaching.saved_state_image_scale"; private static final int SELECT_NEW_IMAGE = 1; private static final int SELECT_STORED_IMAGE = 2; private EditText captionView; private EditText descriptionView; + private Spinner scaleView; // Data to be saved while reconfiguring private String imageCaption; private String imageDescription; + private int scaleChoiceIndex; private Uri imageUri; - public ImageSelectActivity() { - super("c:geo-selectimage"); - } - @Override public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.visit_image); - setTitle(res.getString(R.string.log_image)); + super.onCreate(savedInstanceState, R.layout.visit_image); + scaleChoiceIndex = Settings.getLogImageScale(); imageCaption = ""; imageDescription = ""; imageUri = Uri.EMPTY; @@ -66,6 +68,7 @@ public class ImageSelectActivity extends AbstractActivity { imageCaption = extras.getString(EXTRAS_CAPTION); imageDescription = extras.getString(EXTRAS_DESCRIPTION); imageUri = Uri.parse(extras.getString(EXTRAS_URI_AS_STRING)); + scaleChoiceIndex = extras.getInt(EXTRAS_SCALE, scaleChoiceIndex); } // Restore previous state @@ -73,6 +76,7 @@ public class ImageSelectActivity extends AbstractActivity { imageCaption = savedInstanceState.getString(SAVED_STATE_IMAGE_CAPTION); imageDescription = savedInstanceState.getString(SAVED_STATE_IMAGE_DESCRIPTION); imageUri = Uri.parse(savedInstanceState.getString(SAVED_STATE_IMAGE_URI)); + scaleChoiceIndex = savedInstanceState.getInt(SAVED_STATE_IMAGE_SCALE); } final Button cameraButton = (Button) findViewById(R.id.camera); @@ -103,6 +107,20 @@ public class ImageSelectActivity extends AbstractActivity { descriptionView.setText(imageDescription); } + scaleView = (Spinner) findViewById(R.id.logImageScale); + scaleView.setSelection(scaleChoiceIndex); + scaleView.setOnItemSelectedListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { + scaleChoiceIndex = scaleView.getSelectedItemPosition(); + Settings.setLogImageScale(scaleChoiceIndex); + } + + @Override + public void onNothingSelected(AdapterView<?> arg0) { + } + }); + final Button saveButton = (Button) findViewById(R.id.save); saveButton.setOnClickListener(new View.OnClickListener() { @@ -131,15 +149,19 @@ public class ImageSelectActivity extends AbstractActivity { outState.putString(SAVED_STATE_IMAGE_CAPTION, imageCaption); outState.putString(SAVED_STATE_IMAGE_DESCRIPTION, imageDescription); outState.putString(SAVED_STATE_IMAGE_URI, imageUri != null ? imageUri.getPath() : StringUtils.EMPTY); + outState.putInt(SAVED_STATE_IMAGE_SCALE, scaleChoiceIndex); } public void saveImageInfo(boolean saveInfo) { if (saveInfo) { + String filename = writeScaledImage(imageUri.getPath()); + imageUri = Uri.parse(filename); Intent intent = new Intent(); syncEditTexts(); intent.putExtra(EXTRAS_CAPTION, imageCaption); intent.putExtra(EXTRAS_DESCRIPTION, imageDescription); intent.putExtra(EXTRAS_URI_AS_STRING, imageUri.toString()); + intent.putExtra(EXTRAS_SCALE, scaleChoiceIndex); setResult(RESULT_OK, intent); } else { @@ -152,6 +174,7 @@ public class ImageSelectActivity extends AbstractActivity { private void syncEditTexts() { imageCaption = captionView.getText().toString(); imageDescription = descriptionView.getText().toString(); + scaleChoiceIndex = scaleView.getSelectedItemPosition(); } private void selectImageFromCamera() { @@ -231,8 +254,27 @@ public class ImageSelectActivity extends AbstractActivity { loadImagePreview(); } + /** + * Scales and writes the scaled image. + * + * @param filePath + * @return + */ + private String writeScaledImage(String filePath) { + Bitmap image = BitmapFactory.decodeFile(filePath); + scaleChoiceIndex = scaleView.getSelectedItemPosition(); + int maxXY = getResources().getIntArray(R.array.log_image_scale_values)[scaleChoiceIndex]; + String uploadFilename = filePath; + if (maxXY > 0) { + BitmapDrawable scaledImage = ImageHelper.scaleBitmapTo(image, maxXY, maxXY); + uploadFilename = getOutputImageFile().getPath(); + ImageHelper.storeBitmap(scaledImage.getBitmap(), Bitmap.CompressFormat.JPEG, 75, uploadFilename); + } + return uploadFilename; + } + private void showFailure() { - showToast(getResources().getString(R.string.err_aquire_image_failed)); + showToast(getResources().getString(R.string.err_acquire_image_failed)); } private void loadImagePreview() { diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java index 24f699e..07ff734 100644 --- a/main/src/cgeo/geocaching/ImagesActivity.java +++ b/main/src/cgeo/geocaching/ImagesActivity.java @@ -19,10 +19,6 @@ import java.util.List; public class ImagesActivity extends AbstractActivity { - private static final String EXTRAS_IMAGES = "images"; - private static final String EXTRAS_TYPE = "type"; - private static final String EXTRAS_GEOCODE = "geocode"; - private boolean offline; private ArrayList<Image> imageNames; private ImagesList imagesList; @@ -37,8 +33,8 @@ public class ImagesActivity extends AbstractActivity { String geocode = null; if (extras != null) { - geocode = extras.getString(EXTRAS_GEOCODE); - imgType = (ImageType) extras.getSerializable(EXTRAS_TYPE); + geocode = extras.getString(Intents.EXTRA_GEOCODE); + imgType = (ImageType) extras.getSerializable(Intents.EXTRA_TYPE); } if (extras == null || geocode == null) { @@ -54,7 +50,7 @@ public class ImagesActivity extends AbstractActivity { imagesList = new ImagesList(this, geocode); - imageNames = extras.getParcelableArrayList(EXTRAS_IMAGES); + imageNames = extras.getParcelableArrayList(Intents.EXTRA_IMAGES); if (CollectionUtils.isEmpty(imageNames)) { showToast(res.getString(R.string.warn_load_images)); finish(); @@ -67,7 +63,7 @@ public class ImagesActivity extends AbstractActivity { @Override public void onStart() { super.onStart(); - imagesList.loadImages(findViewById(R.id.spoiler_list), imageNames, imgType, offline); + imagesList.loadImages(findViewById(R.id.spoiler_list), imageNames, offline); } @Override @@ -85,12 +81,12 @@ public class ImagesActivity extends AbstractActivity { final Intent logImgIntent = new Intent(fromActivity, ImagesActivity.class); // if resuming our app within this activity, finish it and return to the cache activity logImgIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) - .putExtra(EXTRAS_GEOCODE, geocode) - .putExtra(EXTRAS_TYPE, imageType); + .putExtra(Intents.EXTRA_GEOCODE, geocode) + .putExtra(Intents.EXTRA_TYPE, imageType); // avoid forcing the array list as parameter type final ArrayList<Image> arrayList = new ArrayList<Image>(logImages); - logImgIntent.putParcelableArrayListExtra(EXTRAS_IMAGES, arrayList); + logImgIntent.putParcelableArrayListExtra(Intents.EXTRA_IMAGES, arrayList); fromActivity.startActivity(logImgIntent); } diff --git a/main/src/cgeo/geocaching/Intents.java b/main/src/cgeo/geocaching/Intents.java index 7f0a004..a700451 100644 --- a/main/src/cgeo/geocaching/Intents.java +++ b/main/src/cgeo/geocaching/Intents.java @@ -9,10 +9,11 @@ public class Intents { private static final String PREFIX = "cgeo.geocaching.intent.extra."; public static final String EXTRA_ADDRESS = PREFIX + "address"; - public static final String EXTRAS_COORDS = PREFIX + "coords"; + public static final String EXTRA_COORDS = PREFIX + "coords"; public static final String EXTRA_COUNT = PREFIX + "count"; public static final String EXTRA_GEOCODE = PREFIX + "geocode"; public static final String EXTRA_GUID = PREFIX + "guid"; + public static final String EXTRA_IMAGES = PREFIX + "images"; public static final String EXTRA_ID = PREFIX + "id"; public static final String EXTRA_KEYWORD = PREFIX + "keyword"; public static final String EXTRA_KEYWORD_SEARCH = PREFIX + "keyword_search"; @@ -23,6 +24,7 @@ public class Intents { public static final String EXTRA_SEARCH = PREFIX + "search"; public static final String EXTRA_START_DIR = PREFIX + "start_dir"; public static final String EXTRA_TRACKING_CODE = PREFIX + "tracking_code"; + public static final String EXTRA_TYPE = PREFIX + "type"; public static final String EXTRA_USERNAME = PREFIX + "username"; public static final String EXTRA_WAYPOINT_ID = PREFIX + "waypoint_id"; public static final String EXTRA_CACHELIST = PREFIX + "cache_list"; diff --git a/main/src/cgeo/geocaching/LogTrackableActivity.java b/main/src/cgeo/geocaching/LogTrackableActivity.java index b8983ba..7aee6ae 100644 --- a/main/src/cgeo/geocaching/LogTrackableActivity.java +++ b/main/src/cgeo/geocaching/LogTrackableActivity.java @@ -104,17 +104,9 @@ public class LogTrackableActivity extends AbstractLoggingActivity implements Dat } }; - public LogTrackableActivity() { - super("c:geo-log-trackable"); - } - @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.touch); - setTitle(res.getString(R.string.trackable_touch)); + super.onCreate(savedInstanceState, R.layout.touch); // get parameters final Bundle extras = getIntent().getExtras(); diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/MainActivity.java index 5680ff3..cd573ba 100644 --- a/main/src/cgeo/geocaching/cgeo.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -1,7 +1,9 @@ package cgeo.geocaching; +import butterknife.InjectView; +import butterknife.Views; + import cgeo.geocaching.activity.AbstractActivity; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.StatusCode; @@ -35,7 +37,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.widget.RelativeLayout; import android.widget.TextView; import java.util.ArrayList; @@ -45,14 +46,26 @@ import java.util.Comparator; import java.util.List; import java.util.Locale; -public class cgeo extends AbstractActivity { +public class MainActivity extends AbstractActivity { + @InjectView(R.id.user_info) protected TextView userInfoView; + @InjectView(R.id.nav_satellites) protected TextView navSatellites; + @InjectView(R.id.filter_button_title)protected TextView filterTitle; + @InjectView(R.id.map) protected View findOnMap; + @InjectView(R.id.search_offline) protected View findByOffline; + @InjectView(R.id.advanced_button) protected View advanced; + @InjectView(R.id.any_button) protected View any; + @InjectView(R.id.filter_button) protected View filter; + @InjectView(R.id.nearest) protected View nearestView ; + @InjectView(R.id.nav_type) protected TextView navType ; + @InjectView(R.id.nav_accuracy) protected TextView navAccuracy ; + @InjectView(R.id.nav_location) protected TextView navLocation ; + @InjectView(R.id.offline_count) protected TextView countBubble ; private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN"; private static final int SCAN_REQUEST_CODE = 1; public static final int SEARCH_REQUEST_CODE = 2; private int version = 0; - private TextView filterTitle = null; private boolean cleanupRunning = false; private int countBubbleCnt = 0; private Geopoint addCoords = null; @@ -67,8 +80,6 @@ public class cgeo extends AbstractActivity { @Override public void handleMessage(Message msg) { - TextView userInfoView = (TextView) findViewById(R.id.user_info); - StringBuilder userInfo = new StringBuilder("geocaching.com").append(Formatter.SEPARATOR); if (Login.isActualLoginStatus()) { userInfo.append(Login.getActualUserName()); @@ -109,7 +120,6 @@ public class cgeo extends AbstractActivity { addCoords = app.currentGeo().getCoords(); - TextView navLocation = (TextView) findViewById(R.id.nav_location); navLocation.setText(addText.toString()); } } catch (Exception e) { @@ -137,7 +147,6 @@ public class cgeo extends AbstractActivity { satellitesFixed = data.getSatellitesFixed(); satellitesVisible = data.getSatellitesVisible(); - final TextView navSatellites = (TextView) findViewById(R.id.nav_satellites); if (gpsEnabled) { if (satellitesFixed > 0) { navSatellites.setText(res.getString(R.string.loc_sat) + ": " + satellitesFixed + '/' + satellitesVisible); @@ -169,13 +178,12 @@ public class cgeo extends AbstractActivity { } }; - public cgeo() { - super("c:geo-main-screen"); - } - @Override public void onCreate(Bundle savedInstanceState) { + // don't call the super implementation with the layout argument, as that would set the wrong theme super.onCreate(savedInstanceState); + setContentView(R.layout.main); + Views.inject(this); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { // If we had been open already, start from the last used activity. @@ -183,33 +191,11 @@ public class cgeo extends AbstractActivity { return; } - setContentView(R.layout.main); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); // type to search version = Version.getVersionCode(this); Log.i("Starting " + getPackageName() + ' ' + version + " a.k.a " + Version.getVersionName(this)); - try { - if (!Settings.isHelpShown()) { - final RelativeLayout helper = (RelativeLayout) findViewById(R.id.helper); - if (helper != null) { - helper.setVisibility(View.VISIBLE); - helper.setClickable(true); - helper.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View view) { - ActivityMixin.goManual(cgeo.this, "c:geo-intro"); - view.setVisibility(View.GONE); - } - }); - Settings.setHelpShown(); - } - } - } catch (Exception e) { - // nothing - } - init(); } @@ -311,6 +297,7 @@ public class cgeo extends AbstractActivity { @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == SCAN_REQUEST_CODE) { + // Only handle positive results, don't do anything if cancelled. if (resultCode == RESULT_OK) { String scan = intent.getStringExtra("SCAN_RESULT"); if (StringUtils.isBlank(scan)) { @@ -318,8 +305,6 @@ public class cgeo extends AbstractActivity { } SearchActivity.startActivityScan(scan, this); - } else if (resultCode == RESULT_CANCELED) { - // do nothing } } else if (requestCode == SEARCH_REQUEST_CODE) { // SearchActivity activity returned without making a search @@ -338,9 +323,6 @@ public class cgeo extends AbstractActivity { } private void setFilterTitle() { - if (filterTitle == null) { - filterTitle = (TextView) findViewById(R.id.filter_button_title); - } filterTitle.setText(Settings.getCacheType().getL10n()); } @@ -358,7 +340,6 @@ public class cgeo extends AbstractActivity { (new FirstLoginThread()).start(); } - final View findOnMap = findViewById(R.id.map); findOnMap.setClickable(true); findOnMap.setOnClickListener(new OnClickListener() { @Override @@ -367,7 +348,6 @@ public class cgeo extends AbstractActivity { } }); - final View findByOffline = findViewById(R.id.search_offline); findByOffline.setClickable(true); findByOffline.setOnClickListener(new OnClickListener() { @Override @@ -379,12 +359,12 @@ public class cgeo extends AbstractActivity { @Override public boolean onLongClick(View v) { - new StoredList.UserInterface(cgeo.this).promptForListSelection(R.string.list_title, new RunnableWithArgument<Integer>() { + new StoredList.UserInterface(MainActivity.this).promptForListSelection(R.string.list_title, new RunnableWithArgument<Integer>() { @Override public void run(Integer selectedListId) { Settings.saveLastList(selectedListId); - cgeocaches.startActivityOffline(cgeo.this); + cgeocaches.startActivityOffline(MainActivity.this); } }); return true; @@ -392,7 +372,6 @@ public class cgeo extends AbstractActivity { }); findByOffline.setLongClickable(true); - final View advanced = findViewById(R.id.advanced_button); advanced.setClickable(true); advanced.setOnClickListener(new OnClickListener() { @Override @@ -401,7 +380,6 @@ public class cgeo extends AbstractActivity { } }); - final View any = findViewById(R.id.any_button); any.setClickable(true); any.setOnClickListener(new OnClickListener() { @Override @@ -410,7 +388,6 @@ public class cgeo extends AbstractActivity { } }); - final View filter = findViewById(R.id.filter_button); filter.setClickable(true); filter.setOnClickListener(new View.OnClickListener() { @Override @@ -501,7 +478,7 @@ public class cgeo extends AbstractActivity { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); cgData.resetNewlyCreatedDatabase(); - app.restoreDatabase(cgeo.this); + app.restoreDatabase(MainActivity.this); } }) .setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() { @@ -519,10 +496,6 @@ public class cgeo extends AbstractActivity { @Override public void updateGeoData(final IGeoData geo) { - final View nearestView = findViewById(R.id.nearest); - final TextView navType = (TextView) findViewById(R.id.nav_type); - final TextView navAccuracy = (TextView) findViewById(R.id.nav_accuracy); - final TextView navLocation = (TextView) findViewById(R.id.nav_location); try { if (geo.getCoords() != null) { if (!nearestView.isClickable()) { @@ -583,7 +556,7 @@ public class cgeo extends AbstractActivity { * unused here but needed since this method is referenced from XML layout */ public void cgeoFindOnMap(View v) { - findViewById(R.id.map).setPressed(true); + findOnMap.setPressed(true); CGeoMap.startActivityLiveMap(this); } @@ -596,7 +569,7 @@ public class cgeo extends AbstractActivity { return; } - findViewById(R.id.nearest).setPressed(true); + nearestView.setPressed(true); cgeocaches.startActivityNearest(this, app.currentGeo().getCoords()); } @@ -605,7 +578,7 @@ public class cgeo extends AbstractActivity { * unused here but needed since this method is referenced from XML layout */ public void cgeoFindByOffline(View v) { - findViewById(R.id.search_offline).setPressed(true); + findByOffline.setPressed(true); cgeocaches.startActivityOffline(this); } @@ -614,7 +587,7 @@ public class cgeo extends AbstractActivity { * unused here but needed since this method is referenced from XML layout */ public void cgeoSearch(View v) { - findViewById(R.id.advanced_button).setPressed(true); + advanced.setPressed(true); startActivity(new Intent(this, SearchActivity.class)); } @@ -623,7 +596,7 @@ public class cgeo extends AbstractActivity { * unused here but needed since this method is referenced from XML layout */ public void cgeoPoint(View v) { - findViewById(R.id.any_button).setPressed(true); + any.setPressed(true); startActivity(new Intent(this, NavigateAnyPointActivity.class)); } @@ -632,8 +605,8 @@ public class cgeo extends AbstractActivity { * unused here but needed since this method is referenced from XML layout */ public void cgeoFilter(View v) { - findViewById(R.id.filter_button).setPressed(true); - findViewById(R.id.filter_button).performClick(); + filter.setPressed(true); + filter.performClick(); } /** @@ -646,15 +619,10 @@ public class cgeo extends AbstractActivity { private class CountBubbleUpdateThread extends Thread { private Handler countBubbleHandler = new Handler() { - private TextView countBubble = null; @Override public void handleMessage(Message msg) { try { - if (countBubble == null) { - countBubble = (TextView) findViewById(R.id.offline_count); - } - if (countBubbleCnt == 0) { countBubble.setVisibility(View.GONE); } else { @@ -745,7 +713,7 @@ public class cgeo extends AbstractActivity { // invoke settings activity to insert login details if (status == StatusCode.NO_LOGIN_INFO_STORED) { - SettingsActivity.startActivity(cgeo.this); + SettingsActivity.startActivity(MainActivity.this); } } } @@ -765,7 +733,7 @@ public class cgeo extends AbstractActivity { addressObtaining = true; try { - final Geocoder geocoder = new Geocoder(cgeo.this, Locale.getDefault()); + final Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault()); final Geopoint coords = app.currentGeo().getCoords(); addresses = geocoder.getFromLocation(coords.getLatitude(), coords.getLongitude(), 1); } catch (Exception e) { diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java index efea819..0770269 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -1,5 +1,8 @@ package cgeo.geocaching; +import butterknife.InjectView; +import butterknife.Views; + import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.geopoint.DistanceParser; @@ -42,6 +45,17 @@ public class NavigateAnyPointActivity extends AbstractActivity { private static final int MENU_CACHES_AROUND = 5; private static final int MENU_CLEAR_HISTORY = 6; + protected static class ViewHolder { + @InjectView(R.id.simple_way_point_longitude) protected TextView longitude; + @InjectView(R.id.simple_way_point_latitude) protected TextView latitude; + @InjectView(R.id.date) protected TextView date; + + public ViewHolder(View rowView) { + Views.inject(this, rowView); + rowView.setTag(this); + } + } + private static class DestinationHistoryAdapter extends ArrayAdapter<Destination> { private LayoutInflater inflater = null; @@ -52,29 +66,29 @@ public class NavigateAnyPointActivity extends AbstractActivity { @Override public View getView(final int position, final View convertView, final ViewGroup parent) { + View rowView = convertView; - Destination loc = getItem(position); + ViewHolder viewHolder; + if (rowView == null) { + rowView = getInflater().inflate(R.layout.simple_way_point, null); + viewHolder = new ViewHolder(rowView); + } + else { + viewHolder = (ViewHolder) rowView.getTag(); + } - View v = convertView; + fillViewHolder(viewHolder, getItem(position)); - if (v == null) { - v = getInflater().inflate(R.layout.simple_way_point, - null); - } - TextView longitude = (TextView) v - .findViewById(R.id.simple_way_point_longitude); - TextView latitude = (TextView) v - .findViewById(R.id.simple_way_point_latitude); - TextView date = (TextView) v.findViewById(R.id.date); + return rowView; + } + private void fillViewHolder(ViewHolder viewHolder, Destination loc) { String lonString = loc.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE); String latString = loc.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE); - longitude.setText(lonString); - latitude.setText(latString); - date.setText(Formatter.formatShortDateTime(getContext(), loc.getDate())); - - return v; + viewHolder.longitude.setText(lonString); + viewHolder.latitude.setText(latString); + viewHolder.date.setText(Formatter.formatShortDateTime(getContext(), loc.getDate())); } private LayoutInflater getInflater() { @@ -90,7 +104,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { private Button lonButton = null; private boolean changed = false; private List<Destination> historyOfSearchedLocations; - private DestinationHistoryAdapter destionationHistoryAdapter; + private DestinationHistoryAdapter destinationHistoryAdapter; private ListView historyListView; private TextView historyFooter; @@ -100,19 +114,11 @@ public class NavigateAnyPointActivity extends AbstractActivity { private int contextMenuItemPosition; - String distanceUnit = ""; - - public NavigateAnyPointActivity() { - super("c:geo-navigate-any"); - } + private String distanceUnit = ""; @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.point); - setTitle(res.getString(R.string.search_destination)); + super.onCreate(savedInstanceState, R.layout.point); createHistoryView(); @@ -146,7 +152,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { historyListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenuInfo menuInfo) { + ContextMenuInfo menuInfo) { menu.add(Menu.NONE, CONTEXT_MENU_NAVIGATE, Menu.NONE, res.getString(R.string.cache_menu_navigate)); menu.add(Menu.NONE, CONTEXT_MENU_EDIT_WAYPOINT, Menu.NONE, R.string.waypoint_edit); menu.add(Menu.NONE, CONTEXT_MENU_DELETE_WAYPOINT, Menu.NONE, R.string.waypoint_delete); @@ -190,19 +196,17 @@ public class NavigateAnyPointActivity extends AbstractActivity { private TextView getEmptyHistoryFooter() { if (historyFooter == null) { - historyFooter = (TextView) getLayoutInflater().inflate( - R.layout.caches_footer, null); + historyFooter = (TextView) getLayoutInflater().inflate(R.layout.caches_footer, null); historyFooter.setText(R.string.search_history_empty); } return historyFooter; } private DestinationHistoryAdapter getDestionationHistoryAdapter() { - if (destionationHistoryAdapter == null) { - destionationHistoryAdapter = new DestinationHistoryAdapter(this, - getHistoryOfSearchedLocations()); + if (destinationHistoryAdapter == null) { + destinationHistoryAdapter = new DestinationHistoryAdapter(this, getHistoryOfSearchedLocations()); } - return destionationHistoryAdapter; + return destinationHistoryAdapter; } private List<Destination> getHistoryOfSearchedLocations() { @@ -229,16 +233,6 @@ public class NavigateAnyPointActivity extends AbstractActivity { } @Override - public void onDestroy() { - super.onDestroy(); - } - - @Override - public void onStop() { - super.onStop(); - } - - @Override public void onPause() { geoDirHandler.stopGeo(); super.onPause(); @@ -402,7 +396,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { runOnUiThread(new Runnable() { @Override public void run() { - destionationHistoryAdapter.notifyDataSetChanged(); + destinationHistoryAdapter.notifyDataSetChanged(); } }); } diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 6fdff5a..9c7e54e 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -37,10 +37,6 @@ public class SearchActivity extends AbstractActivity { private EditText latEdit = null; private EditText lonEdit = null; - public SearchActivity() { - super("c:geo-search"); - } - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -64,7 +60,6 @@ public class SearchActivity extends AbstractActivity { setTheme(); setContentView(R.layout.search); - setTitle(res.getString(R.string.search)); init(); } @@ -432,6 +427,6 @@ public class SearchActivity extends AbstractActivity { searchIntent.setAction(Intent.ACTION_SEARCH). putExtra(SearchManager.QUERY, scan). putExtra(Intents.EXTRA_KEYWORD_SEARCH, false); - fromActivity.startActivityForResult(searchIntent, cgeo.SEARCH_REQUEST_CODE); + fromActivity.startActivityForResult(searchIntent, MainActivity.SEARCH_REQUEST_CODE); } } diff --git a/main/src/cgeo/geocaching/SelectMapfileActivity.java b/main/src/cgeo/geocaching/SelectMapfileActivity.java index 9557f3e..aa6d46a 100644 --- a/main/src/cgeo/geocaching/SelectMapfileActivity.java +++ b/main/src/cgeo/geocaching/SelectMapfileActivity.java @@ -55,11 +55,6 @@ public class SelectMapfileActivity extends AbstractFileListActivity<FileSelectio } @Override - protected void setTitle() { - setTitle(res.getString(R.string.map_file_select_title)); - } - - @Override public String getCurrentFile() { return mapFile; } diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java index 0c157e1..b5c8a6e 100644 --- a/main/src/cgeo/geocaching/Settings.java +++ b/main/src/cgeo/geocaching/Settings.java @@ -112,6 +112,7 @@ public final class Settings { private static final String KEY_MAP_DIRECTORY = "mapDirectory"; private static final String KEY_CONNECTOR_OC_ACTIVE = "connectorOCActive"; private static final String KEY_CONNECTOR_OC_USER = "connectorOCUser"; + private static final String KEY_LOG_IMAGE_SCALE = "logImageScale"; private final static int unitsMetric = 1; @@ -149,6 +150,7 @@ public final class Settings { // maps private static MapProvider mapProvider = null; + private static String cacheTwitterMessage = "I found [NAME] ([URL])"; private Settings() { // this class is not to be instantiated; @@ -1424,4 +1426,32 @@ public final class Settings { } }); } + + public static String getCacheTwitterMessage() { + // TODO make customizable from UI + return cacheTwitterMessage; + } + + public static String getTrackableTwitterMessage() { + // TODO make customizable from UI + return "I touched [NAME] ([URL])!"; + } + + public static void setCacheTwitterMessage(final String message) { + cacheTwitterMessage = message; + } + + public static int getLogImageScale() { + return sharedPrefs.getInt(KEY_LOG_IMAGE_SCALE, -1); + } + + public static void setLogImageScale(final int scale) { + editSharedSettings(new PrefRunnable() { + + @Override + public void edit(Editor edit) { + edit.putInt(KEY_LOG_IMAGE_SCALE, scale); + } + }); + } } diff --git a/main/src/cgeo/geocaching/SettingsActivity.java b/main/src/cgeo/geocaching/SettingsActivity.java index 0678617..bd99552 100644 --- a/main/src/cgeo/geocaching/SettingsActivity.java +++ b/main/src/cgeo/geocaching/SettingsActivity.java @@ -123,19 +123,9 @@ public class SettingsActivity extends AbstractActivity { } }; - public SettingsActivity() { - super("c:geo-configuration"); - } - @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // init - - setTheme(); - setContentView(R.layout.init); - setTitle(res.getString(R.string.settings)); + super.onCreate(savedInstanceState, R.layout.init); init(); } diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 005ee9e..3b32067 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -88,11 +88,7 @@ public class StaticMapsActivity extends AbstractActivity { @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.map_static); - setTitle(res.getString(R.string.map_static_title)); + super.onCreate(savedInstanceState, R.layout.map_static); // get parameters final Bundle extras = getIntent().getExtras(); diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java index cd88071..9a4c00b 100644 --- a/main/src/cgeo/geocaching/StaticMapsProvider.java +++ b/main/src/cgeo/geocaching/StaticMapsProvider.java @@ -10,7 +10,6 @@ import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import android.content.Context; @@ -81,10 +80,6 @@ public class StaticMapsProvider { } public static void downloadMaps(Geocache cache) { - if (cache == null) { - Log.e("downloadMaps - missing input parameter cache"); - return; - } if ((!Settings.isStoreOfflineMaps() && !Settings.isStoreOfflineWpMaps()) || StringUtils.isBlank(cache.getGeocode())) { return; } @@ -96,8 +91,8 @@ public class StaticMapsProvider { } // clean old and download static maps for waypoints if one is missing - if (Settings.isStoreOfflineWpMaps() && CollectionUtils.isNotEmpty(cache.getWaypoints())) { - for (Waypoint waypoint : cache.getWaypoints()) { + if (Settings.isStoreOfflineWpMaps()) { + for (final Waypoint waypoint : cache.getWaypoints()) { if (!hasAllStaticMapsForWaypoint(cache.getGeocode(), waypoint)) { refreshAllWpStaticMaps(cache, edge); } @@ -167,10 +162,6 @@ public class StaticMapsProvider { } public static void storeCachePreviewMap(final Geocache cache) { - if (cache == null) { - Log.e("storeCachePreviewMap - missing input parameter cache"); - return; - } final String latlonMap = cache.getCoords().format(Format.LAT_LON_DECDEGREE_COMMA); final Display display = ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); @@ -183,12 +174,7 @@ public class StaticMapsProvider { private static int guessMaxDisplaySide() { Point displaySize = Compatibility.getDisplaySize(); - final int maxWidth = displaySize.x - 25; - final int maxHeight = displaySize.y - 25; - if (maxWidth > maxHeight) { - return maxWidth; - } - return maxHeight; + return Math.max(displaySize.x, displaySize.y) - 25; } private static void downloadMaps(final String geocode, final String markerUrl, final String prefix, final String latlonMap, final int edge, @@ -245,7 +231,7 @@ public class StaticMapsProvider { /** * Check if at least one map file exists for the given cache. - * + * * @param cache * @return <code>true</code> if at least one map file exists; <code>false</code> otherwise */ @@ -268,7 +254,7 @@ public class StaticMapsProvider { /** * Checks if at least one map file exists for the given geocode and waypoint ID. - * + * * @param geocode * @param waypoint * @return <code>true</code> if at least one map file exists; <code>false</code> otherwise @@ -287,7 +273,7 @@ public class StaticMapsProvider { /** * Checks if all map files exist for the given geocode and waypoint ID. - * + * * @param geocode * @param waypoint * @return <code>true</code> if all map files exist; <code>false</code> otherwise @@ -326,5 +312,4 @@ public class StaticMapsProvider { } return null; } - } diff --git a/main/src/cgeo/geocaching/StoredList.java b/main/src/cgeo/geocaching/StoredList.java index 5a6f132..c505e3c 100644 --- a/main/src/cgeo/geocaching/StoredList.java +++ b/main/src/cgeo/geocaching/StoredList.java @@ -12,7 +12,10 @@ import android.content.res.Resources; import android.view.View; import android.widget.EditText; +import java.text.Collator; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; public class StoredList { @@ -69,7 +72,7 @@ public class StoredList { } public void promptForListSelection(final int titleId, final RunnableWithArgument<Integer> runAfterwards, final boolean onlyMoveTargets, final int exceptListId) { - final List<StoredList> lists = cgData.getLists(); + final List<StoredList> lists = getSortedLists(); if (lists == null) { return; @@ -115,6 +118,19 @@ public class StoredList { builder.create().show(); } + private static List<StoredList> getSortedLists() { + final Collator collator = Collator.getInstance(); + final List<StoredList> lists = cgData.getLists(); + Collections.sort(lists, new Comparator<StoredList>() { + + @Override + public int compare(StoredList lhs, StoredList rhs) { + return collator.compare(lhs.getTitle(), rhs.getTitle()); + } + }); + return lists; + } + public void promptForListCreation(final RunnableWithArgument<Integer> runAfterwards) { handleListNameInput("", R.string.list_dialog_create_title, R.string.list_dialog_create, new RunnableWithArgument<String>() { @@ -176,4 +192,23 @@ public class StoredList { }); } } + + /** + * Get the list title. This method is not public by intention to make clients use the {@link UserInterface} class. + * + * @return + */ + protected String getTitle() { + return title; + } + + /** + * Return the given list, if it is a concrete list. Return the default list otherwise. + */ + public static int getConcreteList(int listId) { + if (listId == ALL_LIST_ID || listId == TEMPORARY_LIST_ID) { + return STANDARD_LIST_ID; + } + return listId; + } } diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index fea4521..9b3dbfc 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -108,17 +108,9 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi } }; - public TrackableActivity() { - super("c:geo-trackable-details"); - } - @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.trackable_activity); - setTitle(res.getString(R.string.trackable)); + super.onCreate(savedInstanceState, R.layout.trackable_activity); // get parameters Bundle extras = getIntent().getExtras(); @@ -398,18 +390,18 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi private final TextView type; private final TextView author; private final TextView location; - private final TextView log; + private final TextView text; + private final TextView images; private final ImageView marker; - private final LinearLayout logImages; public LogViewHolder(View rowView) { added = ((TextView) rowView.findViewById(R.id.added)); type = ((TextView) rowView.findViewById(R.id.type)); author = ((TextView) rowView.findViewById(R.id.author)); location = ((TextView) rowView.findViewById(R.id.location)); - log = (TextView) rowView.findViewById(R.id.log); + text = (TextView) rowView.findViewById(R.id.log); + images = (TextView) rowView.findViewById(R.id.log_images); marker = (ImageView) rowView.findViewById(R.id.log_mark); - logImages = (LinearLayout) rowView.findViewById(R.id.log_layout); } } @@ -440,7 +432,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi return view; } - protected void fillViewHolder(LogViewHolder holder, LogEntry log) { + protected void fillViewHolder(LogViewHolder holder, final LogEntry log) { if (log.date > 0) { holder.added.setText(Formatter.formatShortDate(log.date)); } @@ -462,7 +454,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi }); } - TextView logView = holder.log; + TextView logView = holder.text; logView.setMovementMethod(LinkMovementMethod.getInstance()); String logText = log.log; @@ -485,25 +477,18 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi statusMarker.setVisibility(View.GONE); } - // add LogImages - LinearLayout logLayout = holder.logImages; - + // images if (log.hasLogImages()) { - - final ArrayList<Image> logImages = new ArrayList<Image>(log.getLogImages()); - - final View.OnClickListener listener = new View.OnClickListener() { + holder.images.setText(log.getImageTitles()); + holder.images.setVisibility(View.VISIBLE); + holder.images.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - ImagesActivity.startActivityLogImages(TrackableActivity.this, trackable.getGeocode(), logImages); + ImagesActivity.startActivityLogImages(TrackableActivity.this, trackable.getGeocode(), new ArrayList<Image>(log.getLogImages())); } - }; - - LinearLayout log_imgView = (LinearLayout) getLayoutInflater().inflate(R.layout.trackable_logs_img, null); - TextView log_img_title = (TextView) log_imgView.findViewById(R.id.title); - log_img_title.setText(log.getImageTitles()); - log_img_title.setOnClickListener(listener); - logLayout.addView(log_imgView); + }); + } else { + holder.images.setVisibility(View.GONE); } holder.author.setOnClickListener(new UserActionsListener()); diff --git a/main/src/cgeo/geocaching/UsefulAppsActivity.java b/main/src/cgeo/geocaching/UsefulAppsActivity.java index af643b3..0fddd89 100644 --- a/main/src/cgeo/geocaching/UsefulAppsActivity.java +++ b/main/src/cgeo/geocaching/UsefulAppsActivity.java @@ -1,79 +1,104 @@ package cgeo.geocaching; +import butterknife.InjectView; +import butterknife.Views; + import cgeo.geocaching.activity.AbstractActivity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; -import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.ImageView; -import android.widget.LinearLayout; +import android.widget.ListView; import android.widget.TextView; -import java.util.Locale; - public class UsefulAppsActivity extends AbstractActivity { - private LinearLayout parentLayout; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + @InjectView(R.id.apps_list) protected ListView list; - // init - setTheme(); - setContentView(R.layout.useful_apps); - setTitle(res.getString(R.string.helpers)); - parentLayout = (LinearLayout) findViewById(R.id.parent); + protected static class ViewHolder { + @InjectView(R.id.title) protected TextView title; + @InjectView(R.id.image) protected ImageView image; + @InjectView(R.id.description) protected TextView description; - final Locale loc = Locale.getDefault(); - final String language = loc.getLanguage(); + public ViewHolder(View rowView) { + Views.inject(this, rowView); + } + } - final String tutorialUrl; - if ("de".equalsIgnoreCase(language)) { - tutorialUrl = "gnu.android.app.cgeomanual.de"; + private static class HelperApp { + private final int titleId; + private final int descriptionId; + private final int iconId; + private final String market; + + public HelperApp(final int title, final int description, final int icon, final String market) { + this.titleId = title; + this.descriptionId = description; + this.iconId = icon; + this.market = market; } - else { - tutorialUrl = "gnu.android.app.cgeomanual.en"; + + private void installFromMarket(UsefulAppsActivity activity) { + try { + activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + market))); + } catch (Exception e) { + // market not available in standard emulator + } + + activity.finish(); } - addApp(R.string.helper_manual_title, R.string.helper_manual_description, R.drawable.helper_manual, tutorialUrl); - addApp(R.string.helper_calendar_title, R.string.helper_calendar_description, R.drawable.cgeo, "cgeo.calendar"); - addApp(R.string.helper_locus_title, R.string.helper_locus_description, R.drawable.helper_locus, "menion.android.locus"); - addApp(R.string.helper_gpsstatus_title, R.string.helper_gpsstatus_description, R.drawable.helper_gpsstatus, "com.eclipsim.gpsstatus2"); - addApp(R.string.helper_bluetoothgps_title, R.string.helper_bluetoothgps_description, R.drawable.helper_bluetoothgps, "googoo.android.btgps"); - addApp(R.string.helper_barcode_title, R.string.helper_barcode_description, R.drawable.helper_barcode, "com.google.zxing.client.android"); } + private static final HelperApp[] HELPER_APPS = { + new HelperApp(R.string.helper_calendar_title, R.string.helper_calendar_description, R.drawable.cgeo, "cgeo.calendar"), + new HelperApp(R.string.helper_locus_title, R.string.helper_locus_description, R.drawable.helper_locus, "menion.android.locus"), + new HelperApp(R.string.helper_gpsstatus_title, R.string.helper_gpsstatus_description, R.drawable.helper_gpsstatus, "com.eclipsim.gpsstatus2"), + new HelperApp(R.string.helper_bluetoothgps_title, R.string.helper_bluetoothgps_description, R.drawable.helper_bluetoothgps, "googoo.android.btgps"), + new HelperApp(R.string.helper_barcode_title, R.string.helper_barcode_description, R.drawable.helper_barcode, "com.google.zxing.client.android"), + }; + @Override - public void onResume() { - super.onResume(); + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState, R.layout.useful_apps_activity); - } + Views.inject(this); - private void installFromMarket(String marketId) { - try { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + marketId))); - } catch (Exception e) { - // market not available in standard emulator - } + list.setAdapter(new ArrayAdapter<HelperApp>(this, R.layout.useful_apps_item, HELPER_APPS) { + @Override + public View getView(int position, View convertView, android.view.ViewGroup parent) { + View rowView = convertView; + if (null == rowView) { + rowView = getLayoutInflater().inflate(R.layout.useful_apps_item, null); + } + ViewHolder holder = (ViewHolder) rowView.getTag(); + if (null == holder) { + holder = new ViewHolder(rowView); + rowView.setTag(holder); + } + + final HelperApp app = getItem(position); + fillViewHolder(holder, app); + return rowView; + } - finish(); - } + private void fillViewHolder(ViewHolder holder, HelperApp app) { + holder.title.setText(res.getString(app.titleId)); + holder.image.setImageDrawable(res.getDrawable(app.iconId)); + holder.description.setText(res.getString(app.descriptionId)); + } + }); - private void addApp(final int titleId, final int descriptionId, final int imageId, final String marketUrl) { - final LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.useful_apps_item, null); - ((TextView) layout.findViewById(R.id.title)).setText(res.getString(titleId)); - ((ImageView) layout.findViewById(R.id.image)).setImageDrawable(res.getDrawable(imageId)); - ((TextView) layout.findViewById(R.id.description)).setText(res.getString(descriptionId)); - layout.findViewById(R.id.app_layout).setOnClickListener(new OnClickListener() { + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override - public void onClick(View v) { - installFromMarket(marketUrl); + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + HelperApp helperApp = HELPER_APPS[position]; + helperApp.installFromMarket(UsefulAppsActivity.this); } }); - parentLayout.addView(layout); } - } diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java index dce0fbf..cac0f89 100644 --- a/main/src/cgeo/geocaching/VisitCacheActivity.java +++ b/main/src/cgeo/geocaching/VisitCacheActivity.java @@ -12,6 +12,7 @@ import cgeo.geocaching.network.Parameters; import cgeo.geocaching.twitter.Twitter; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.ui.dialog.DateDialog; +import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.LogTemplateProvider; import cgeo.geocaching.utils.LogTemplateProvider.LogContext; @@ -20,17 +21,15 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; +import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; -import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.os.Handler; -import android.os.Message; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.util.SparseArray; @@ -67,7 +66,6 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD private LayoutInflater inflater = null; private Geocache cache = null; - private ProgressDialog waitDialog = null; private String cacheid = null; private String geocode = null; private String text = null; @@ -112,7 +110,6 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD viewstates = Login.getViewstates(page); trackables = GCParser.parseTrackableLog(page); possibleLogTypes = GCParser.parseTypes(page); - possibleLogTypes.remove(LogType.UPDATE_COORDINATES); if (possibleLogTypes.isEmpty()) { showErrorLoadingData(); @@ -240,45 +237,9 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD return res.getString(R.string.log_post_rate) + " " + ratingTextValue(rating) + "*"; } - private final Handler postLogHandler = new Handler() { - - @Override - public void handleMessage(final Message msg) { - if (waitDialog != null) { - waitDialog.dismiss(); - } - - final StatusCode error = (StatusCode) msg.obj; - if (error == StatusCode.NO_ERROR) { - showToast(res.getString(R.string.info_log_posted)); - // No need to save the log when quitting if it has been posted. - text = currentLogText(); - finish(); - } else if (error == StatusCode.LOG_SAVED) { - showToast(res.getString(R.string.info_log_saved)); - - if (waitDialog != null) { - waitDialog.dismiss(); - } - - finish(); - } else { - showToast(error.getErrorString(res)); - } - } - }; - - public VisitCacheActivity() { - super("c:geo-log"); - } - @Override public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.visit); - setTitle(res.getString(R.string.log_new_log)); + super.onCreate(savedInstanceState, R.layout.visit); // Get parameters from intent and basic cache information from database final Bundle extras = getIntent().getExtras(); @@ -549,81 +510,79 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD private class PostListener implements View.OnClickListener { @Override public void onClick(View arg0) { - waitDialog = ProgressDialog.show(VisitCacheActivity.this, null, - res.getString(StringUtils.isBlank(imageUri.getPath()) ? R.string.log_saving : R.string.log_saving_and_uploading), true); - waitDialog.setCancelable(true); - - final Thread thread = new PostLogThread(postLogHandler, currentLogText()); - thread.start(); + final String message = res.getString(StringUtils.isBlank(imageUri.getPath()) ? + R.string.log_saving : + R.string.log_saving_and_uploading); + new Poster(VisitCacheActivity.this, message).execute(currentLogText()); } } - private class PostLogThread extends Thread { - - private final Handler handler; - private final String log; + private class Poster extends AsyncTaskWithProgress<String, StatusCode> { - public PostLogThread(Handler handlerIn, String logIn) { - super("Post log"); - handler = handlerIn; - log = logIn; + public Poster(final Activity activity, final String progressMessage) { + super(activity, null, progressMessage, true); } @Override - public void run() { - final StatusCode status = postLogFn(log); - handler.sendMessage(handler.obtainMessage(0, status)); - } - } - - public StatusCode postLogFn(String log) { - - StatusCode result = StatusCode.LOG_POST_ERROR; - - try { - - final ImmutablePair<StatusCode, String> logResult = GCParser.postLog(geocode, cacheid, viewstates, typeSelected, - date.get(Calendar.YEAR), (date.get(Calendar.MONTH) + 1), date.get(Calendar.DATE), - log, trackables); - - result = logResult.left; - - if (logResult.left == StatusCode.NO_ERROR) { - final LogEntry logNow = new LogEntry(date, typeSelected, log); - - cache.getLogs().add(0, logNow); - - if (typeSelected == LogType.FOUND_IT || typeSelected == LogType.ATTENDED) { - cache.setFound(true); + protected StatusCode doInBackgroundInternal(final String[] logTexts) { + final String log = logTexts[0]; + try { + final ImmutablePair<StatusCode, String> postResult = GCParser.postLog(geocode, cacheid, viewstates, typeSelected, + date.get(Calendar.YEAR), (date.get(Calendar.MONTH) + 1), date.get(Calendar.DATE), + log, trackables); + + if (postResult.left == StatusCode.NO_ERROR) { + final LogEntry logNow = new LogEntry(date, typeSelected, log); + + cache.getLogs().add(0, logNow); + + if (typeSelected == LogType.FOUND_IT || typeSelected == LogType.ATTENDED) { + cache.setFound(true); + } + + cgData.saveChangedCache(cache); + cgData.clearLogOffline(geocode); + + if (typeSelected == LogType.FOUND_IT) { + if (tweetCheck.isChecked() && tweetBox.getVisibility() == View.VISIBLE) { + Twitter.postTweetCache(geocode); + } + GCVote.setRating(cache, rating); + } + + if (StringUtils.isNotBlank(imageUri.getPath())) { + ImmutablePair<StatusCode, String> imageResult = GCParser.uploadLogImage(postResult.right, imageCaption, imageDescription, imageUri); + final String uploadedImageUrl = imageResult.right; + if (StringUtils.isNotEmpty(uploadedImageUrl)) { + logNow.addLogImage(new Image(uploadedImageUrl, imageCaption, imageDescription)); + cgData.saveChangedCache(cache); + } + return imageResult.left; + } } - cgData.saveChangedCache(cache); - } - - if (logResult.left == StatusCode.NO_ERROR) { - cgData.clearLogOffline(geocode); + return postResult.left; + } catch (Exception e) { + Log.e("cgeovisit.postLogFn", e); } - if (logResult.left == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isUseTwitter() - && Settings.isTwitterLoginValid() - && tweetCheck.isChecked() && tweetBox.getVisibility() == View.VISIBLE) { - Twitter.postTweetCache(geocode); - } - - if (logResult.left == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isGCvoteLogin()) { - GCVote.setRating(cache, rating); - } + return StatusCode.LOG_POST_ERROR; + } - if (logResult.left == StatusCode.NO_ERROR && StringUtils.isNotBlank(imageUri.getPath())) { - result = GCParser.uploadLogImage(logResult.right, imageCaption, imageDescription, imageUri); + @Override + protected void onPostExecuteInternal(final StatusCode status) { + if (status == StatusCode.NO_ERROR) { + showToast(res.getString(R.string.info_log_posted)); + // No need to save the log when quitting if it has been posted. + text = currentLogText(); + finish(); + } else if (status == StatusCode.LOG_SAVED) { + showToast(res.getString(R.string.info_log_saved)); + finish(); + } else { + showToast(status.getErrorString(res)); } - - return result; - } catch (Exception e) { - Log.e("cgeovisit.postLogFn", e); } - - return StatusCode.LOG_POST_ERROR; } private void saveLog(final boolean force) { @@ -677,16 +636,19 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD } private void selectLogType() { + // use a local copy of the possible types, as that one might be modified in the background by the loader + final ArrayList<LogType> possible = new ArrayList<LogType>(possibleLogTypes); + Builder alert = new AlertDialog.Builder(this); - String[] choices = new String[possibleLogTypes.size()]; + String[] choices = new String[possible.size()]; for (int i = 0; i < choices.length; i++) { - choices[i] = possibleLogTypes.get(i).getL10n(); + choices[i] = possible.get(i).getL10n(); } - alert.setSingleChoiceItems(choices, possibleLogTypes.indexOf(typeSelected), new OnClickListener() { + alert.setSingleChoiceItems(choices, possible.indexOf(typeSelected), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { - setType(possibleLogTypes.get(position)); + setType(possible.get(position)); dialog.dismiss(); } }); diff --git a/main/src/cgeo/geocaching/Waypoint.java b/main/src/cgeo/geocaching/Waypoint.java index 48c9bc5..6112986 100644 --- a/main/src/cgeo/geocaching/Waypoint.java +++ b/main/src/cgeo/geocaching/Waypoint.java @@ -275,7 +275,7 @@ public class Waypoint implements IWaypoint, Comparable<Waypoint> { if (coords != null) { hash = coords.hashCode(); } - hash = hash ^ waypointType.markerId; + hash ^= waypointType.markerId; return (int) hash; } } diff --git a/main/src/cgeo/geocaching/WaypointPopup.java b/main/src/cgeo/geocaching/WaypointPopup.java index 766d43d..ad1d981 100644 --- a/main/src/cgeo/geocaching/WaypointPopup.java +++ b/main/src/cgeo/geocaching/WaypointPopup.java @@ -2,6 +2,7 @@ package cgeo.geocaching; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Units; import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.utils.Log; @@ -19,9 +20,10 @@ import android.widget.TextView; public class WaypointPopup extends AbstractPopupActivity { private int waypointId = 0; private Waypoint waypoint = null; + private TextView waypointDistance = null; public WaypointPopup() { - super("c:geo-waypoint-info", R.layout.waypoint_popup); + super(R.layout.waypoint_popup); } @Override @@ -35,6 +37,14 @@ public class WaypointPopup extends AbstractPopupActivity { } @Override + public void onUpdateGeoData(IGeoData geo) { + if (geo.getCoords() != null && waypoint != null && waypoint.getCoords() != null) { + waypointDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(waypoint.getCoords()))); + waypointDistance.bringToFront(); + } + } + + @Override protected void init() { super.init(); waypoint = cgData.loadWaypoint(waypointId); @@ -53,6 +63,9 @@ public class WaypointPopup extends AbstractPopupActivity { //Waypoint geocode details.add(R.string.cache_geocode, waypoint.getPrefix() + waypoint.getGeocode().substring(2)); + details.addDistance(waypoint, waypointDistance); + waypointDistance = details.getValueView(); + details.add(R.string.waypoint_note, waypoint.getNote()); // Edit Button final Button buttonEdit = (Button) findViewById(R.id.edit); diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index 557665e..964ef96 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -1,5 +1,7 @@ package cgeo.geocaching.activity; +import butterknife.Views; + import cgeo.geocaching.Settings; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.compatibility.Compatibility; @@ -14,22 +16,15 @@ import android.widget.EditText; public abstract class AbstractActivity extends FragmentActivity implements IAbstractActivity { - final private String helpTopic; - protected cgeoapplication app = null; protected Resources res = null; private boolean keepScreenOn = false; protected AbstractActivity() { - this(null); - } - - protected AbstractActivity(final String helpTopic) { - this.helpTopic = helpTopic; + this(false); } - protected AbstractActivity(final String helpTopic, final boolean keepScreenOn) { - this(helpTopic); + protected AbstractActivity(final boolean keepScreenOn) { this.keepScreenOn = keepScreenOn; } @@ -38,20 +33,15 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst ActivityMixin.goHome(this); } - @Override - public void goManual(final View view) { - ActivityMixin.goManual(this, helpTopic); - } - - final public void setTitle(final String title) { + final protected void setTitle(final String title) { ActivityMixin.setTitle(this, title); } - final public void showProgress(final boolean show) { + final protected void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } - final public void setTheme() { + final protected void setTheme() { ActivityMixin.setTheme(this); } @@ -70,22 +60,14 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst ActivityMixin.helpDialog(this, title, message); } - public final void helpDialog(final String title, final String message, final Drawable icon) { + protected final void helpDialog(final String title, final String message, final Drawable icon) { ActivityMixin.helpDialog(this, title, message, icon); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - // init - res = this.getResources(); - app = (cgeoapplication) this.getApplication(); - - // Restore cookie store if needed - Cookies.restoreCookieStore(Settings.getCookieStore()); - - ActivityMixin.keepScreenOn(this, keepScreenOn); + initializeCommonFields(); } protected static void disableSuggestions(final EditText edit) { @@ -128,4 +110,34 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst editText.setSelection(newCursor, newCursor); } + protected void onCreate(final Bundle savedInstanceState, final int resourceLayoutID) { + super.onCreate(savedInstanceState); + + initializeCommonFields(); + + // non declarative part of layout + setTheme(); + setContentView(resourceLayoutID); + + // create view variables + Views.inject(this); + } + + private void initializeCommonFields() { + // initialize commonly used members + res = this.getResources(); + app = (cgeoapplication) this.getApplication(); + + // only needed in some activities, but implemented in super class nonetheless + Cookies.restoreCookieStore(Settings.getCookieStore()); + ActivityMixin.keepScreenOn(this, keepScreenOn); + } + + @Override + public void setContentView(int layoutResID) { + super.setContentView(layoutResID); + + // initialize the action bar title with the activity title for single source + ActivityMixin.setTitle(this, getTitle()); + } } diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index f96a769..47c747f 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -12,35 +12,24 @@ import android.view.View; public abstract class AbstractListActivity extends FragmentListActivity implements IAbstractActivity { - private String helpTopic; private boolean keepScreenOn = false; protected cgeoapplication app = null; protected Resources res = null; protected AbstractListActivity() { - this(null); + this(false); } protected AbstractListActivity(final boolean keepScreenOn) { - this(null); this.keepScreenOn = keepScreenOn; } - protected AbstractListActivity(final String helpTopic) { - this.helpTopic = helpTopic; - } - @Override final public void goHome(View view) { ActivityMixin.goHome(this); } - @Override - public void goManual(View view) { - ActivityMixin.goManual(this, helpTopic); - } - final public void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } @@ -71,7 +60,10 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + initializeCommonFields(); + } + private void initializeCommonFields() { // init res = this.getResources(); app = (cgeoapplication) this.getApplication(); @@ -79,7 +71,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen ActivityMixin.keepScreenOn(this, keepScreenOn); } - final public void setTitle(final String title) { + final protected void setTitle(final String title) { ActivityMixin.setTitle(this, title); } @@ -87,4 +79,20 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen public void invalidateOptionsMenuCompatible() { Compatibility.invalidateOptionsMenu(this); } + + public void onCreate(Bundle savedInstanceState, int resourceLayoutID) { + super.onCreate(savedInstanceState); + initializeCommonFields(); + + setTheme(); + setContentView(resourceLayoutID); + } + + @Override + public void setContentView(int layoutResID) { + super.setContentView(layoutResID); + + // initialize action bar title with activity title + ActivityMixin.setTitle(this, getTitle()); + } } diff --git a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java index 366a59d..8793c1c 100644 --- a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java @@ -29,10 +29,6 @@ import java.util.Map; */ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends AbstractActivity { - protected AbstractViewPagerActivity(String helpTopic) { - super(helpTopic); - } - /** * A {@link List} of all available pages. * diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java index c97cb9a..12ab0be 100644 --- a/main/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java @@ -1,15 +1,14 @@ package cgeo.geocaching.activity; +import cgeo.geocaching.MainActivity; import cgeo.geocaching.R; import cgeo.geocaching.Settings; -import cgeo.geocaching.cgeo; import cgeo.geocaching.compatibility.Compatibility; import org.apache.commons.lang3.StringUtils; import android.app.Activity; import android.app.AlertDialog; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; @@ -21,34 +20,17 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import gnu.android.app.appmanualclient.AppManualReaderClient; - public final class ActivityMixin { public final static void goHome(final Activity fromActivity) { - final Intent intent = new Intent(fromActivity, cgeo.class); + final Intent intent = new Intent(fromActivity, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); fromActivity.startActivity(intent); fromActivity.finish(); } - public static void goManual(final Context context, final String helpTopic) { - if (StringUtils.isBlank(helpTopic)) { - return; - } - try { - AppManualReaderClient.openManual( - "c-geo", - helpTopic, - context, - "http://manual.cgeo.org/"); - } catch (Exception e) { - // nothing - } - } - - public static void setTitle(final Activity activity, final String text) { + public static void setTitle(final Activity activity, final CharSequence text) { if (StringUtils.isBlank(text)) { return; } diff --git a/main/src/cgeo/geocaching/activity/IAbstractActivity.java b/main/src/cgeo/geocaching/activity/IAbstractActivity.java index 04709c6..61c218b 100644 --- a/main/src/cgeo/geocaching/activity/IAbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/IAbstractActivity.java @@ -6,8 +6,6 @@ public interface IAbstractActivity { public void goHome(View view); - public void goManual(View view); - public void showToast(String text); public void showShortToast(String text); diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java index c95e8b4..ef56f87 100644 --- a/main/src/cgeo/geocaching/apps/AbstractApp.java +++ b/main/src/cgeo/geocaching/apps/AbstractApp.java @@ -1,7 +1,7 @@ package cgeo.geocaching.apps; import cgeo.geocaching.Geocache; -import cgeo.geocaching.cgeo; +import cgeo.geocaching.MainActivity; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.utils.ProcessUtils; @@ -29,7 +29,7 @@ public abstract class AbstractApp implements App { if (ProcessUtils.isInstalled(packageName)) { return true; } - return cgeo.isIntentAvailable(intent); + return MainActivity.isIntentAvailable(intent); } protected Intent getLaunchIntent() { diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java index 28485a5..d5002a0 100644 --- a/main/src/cgeo/geocaching/cgData.java +++ b/main/src/cgeo/geocaching/cgData.java @@ -33,6 +33,7 @@ import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.EnumSet; @@ -85,7 +86,7 @@ public class cgData { private static int[] cacheColumnIndex; private static CacheCache cacheCache = new CacheCache(); private static SQLiteDatabase database = null; - private static final int dbVersion = 66; + private static final int dbVersion = 67; public static final int customListIdOffset = 10; private static final String dbName = "data"; private static final String dbTableCaches = "cg_caches"; @@ -107,7 +108,7 @@ public class cgData { + "detailedupdate long, " + "visiteddate long, " + "geocode text unique not null, " - + "reason integer not null default 0, " // cached, favourite... + + "reason integer not null default 0, " // cached, favorite... + "cacheid text, " + "guid text, " + "type text, " @@ -674,6 +675,16 @@ public class cgData { } } + // issue2662 OC: Leichtes Klettern / Easy climbing + if (oldVersion < 67) { + try { + db.execSQL("update " + dbTableAttributes + " set attribute = 'easy_climbing_yes' where geocode like 'OC%' and attribute = 'climbing_yes'"); + db.execSQL("update " + dbTableAttributes + " set attribute = 'easy_climbing_no' where geocode like 'OC%' and attribute = 'climbing_no'"); + } catch (Exception e) { + Log.e("Failed to upgrade to ver. 67", e); + + } + } } db.setTransactionSuccessful(); @@ -1396,7 +1407,7 @@ public class cgData { * @param geocodes * @return Set of loaded caches. Never null. */ - public static Set<Geocache> loadCaches(final Set<String> geocodes, final EnumSet<LoadFlag> loadFlags) { + public static Set<Geocache> loadCaches(final Collection<String> geocodes, final EnumSet<LoadFlag> loadFlags) { if (CollectionUtils.isEmpty(geocodes)) { return new HashSet<Geocache>(); } diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/cgeoapplication.java index a1fd7d1..b8f63ee 100644 --- a/main/src/cgeo/geocaching/cgeoapplication.java +++ b/main/src/cgeo/geocaching/cgeoapplication.java @@ -103,8 +103,8 @@ public class cgeoapplication extends Application { boolean restored = atomic.get(); String message = restored ? res.getString(R.string.init_restore_success) : res.getString(R.string.init_restore_failed); ActivityMixin.helpDialog(fromActivity, res.getString(R.string.init_backup_restore), message); - if (fromActivity instanceof cgeo) { - ((cgeo) fromActivity).updateCacheCounter(); + if (fromActivity instanceof MainActivity) { + ((MainActivity) fromActivity).updateCacheCounter(); } } }; diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 61a32f1..33dea8f 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -2,7 +2,6 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractListActivity; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; @@ -39,6 +38,7 @@ import cgeo.geocaching.sorting.VisitComparator; import cgeo.geocaching.ui.CacheListAdapter; import cgeo.geocaching.ui.LoggingUI; import cgeo.geocaching.ui.WeakReferenceHandler; +import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.DateUtils; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; @@ -74,6 +74,7 @@ import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -373,21 +374,6 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } }; - private Handler dropDetailsHandler = new Handler() { - - @Override - public void handleMessage(Message msg) { - if (msg.what != MSG_CANCEL) { - adapter.setSelectMode(false); - - refreshCurrentList(); - - replaceCacheListFromSearch(); - - progress.dismiss(); - } - } - }; private Handler clearOfflineLogsHandler = new Handler() { @Override @@ -428,7 +414,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (extras != null) { Object typeObject = extras.get(Intents.EXTRA_LIST_TYPE); type = (typeObject instanceof CacheListType) ? (CacheListType) typeObject : CacheListType.OFFLINE; - coords = (Geopoint) extras.getParcelable(Intents.EXTRAS_COORDS); + coords = extras.getParcelable(Intents.EXTRA_COORDS); } else { extras = new Bundle(); @@ -440,6 +426,17 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } + // Add the list selection in code. This way we can leave the XML layout the same as for other activities. + final View titleBar = findViewById(R.id.actionbar_title); + titleBar.setClickable(true); + titleBar.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + selectList(v); + } + }); + setTitle(title); setAdapter(); @@ -625,8 +622,6 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity setVisible(menu, MENU_EXPORT, !isEmpty); setVisible(menu, MENU_REMOVE_FROM_HISTORY, !isEmpty); setVisible(menu, MENU_CLEAR_OFFLINE_LOGS, !isEmpty && containsOfflineLogs()); - setVisible(menu, MENU_IMPORT_GPX, isConcrete); - setVisible(menu, MENU_IMPORT_WEB, isConcrete); if (navigationMenu != null) { navigationMenu.setVisible(!isEmpty); @@ -794,7 +789,6 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } public void deletePastEvents() { - progress.show(this, null, res.getString(R.string.caches_drop_progress), true, dropDetailsHandler.obtainMessage(MSG_CANCEL)); final List<Geocache> deletion = new ArrayList<Geocache>(); for (Geocache cache : adapter.getCheckedOrAllCaches()) { if (cache.isEventCache()) { @@ -804,7 +798,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } } - new DropDetailsThread(dropDetailsHandler, deletion).start(); + new DropDetailsTask(false).execute(deletion.toArray(new Geocache[deletion.size()])); } public void clearOfflineLogs() { @@ -1082,6 +1076,11 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity return; } + if (!Network.isNetworkConnected(getApplicationContext())) { + showToast(getString(R.string.err_server)); + return; + } + if (Settings.getChooseList() && type != CacheListType.OFFLINE) { // let user select list to store cache in new StoredList.UserInterface(this).promptForListSelection(R.string.list_title, @@ -1144,7 +1143,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public void removeFromHistory() { final List<Geocache> caches = adapter.getCheckedOrAllCaches(); - final String geocodes[] = new String[caches.size()]; + final String[] geocodes = new String[caches.size()]; for (int i = 0; i < geocodes.length; i++) { geocodes[i] = caches.get(i).getGeocode(); } @@ -1177,10 +1176,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void onClick(DialogInterface dialog, int id) { - dropSelected(); - if (removeListAfterwards) { - removeList(false); - } + dropSelected(removeListAfterwards); dialog.cancel(); } }); @@ -1196,9 +1192,9 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity alert.show(); } - public void dropSelected() { - progress.show(this, null, res.getString(R.string.caches_drop_progress), true, dropDetailsHandler.obtainMessage(MSG_CANCEL)); - new DropDetailsThread(dropDetailsHandler, adapter.getCheckedOrAllCaches()).start(); + public void dropSelected(boolean removeListAfterwards) { + final List<Geocache> selected = adapter.getCheckedOrAllCaches(); + new DropDetailsTask(removeListAfterwards).execute(selected.toArray(new Geocache[selected.size()])); } /** @@ -1309,7 +1305,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public LoadFromWebThread(Handler handlerIn, int listId) { handler = handlerIn; - listIdLFW = listId; + listIdLFW = StoredList.getConcreteList(listId); } public void kill() { @@ -1383,24 +1379,35 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } - private class DropDetailsThread extends Thread { + private class DropDetailsTask extends AsyncTaskWithProgress<Geocache, Void> { - final private Handler handler; - final private List<Geocache> selected; + private final boolean removeListAfterwards; - public DropDetailsThread(Handler handlerIn, List<Geocache> selectedIn) { - handler = handlerIn; - selected = selectedIn; + public DropDetailsTask(boolean removeListAfterwards) { + super(cgeocaches.this, null, res.getString(R.string.caches_drop_progress), true); + this.removeListAfterwards = removeListAfterwards; } @Override - public void run() { + protected Void doInBackgroundInternal(Geocache[] caches) { removeGeoAndDir(); - cgData.markDropped(selected); - handler.sendEmptyMessage(MSG_DONE); - + cgData.markDropped(Arrays.asList(caches)); startGeoAndDir(); + return null; + } + + @Override + protected void onPostExecuteInternal(Void result) { + // remove list in UI because of toast + if (removeListAfterwards) { + removeList(false); + } + + adapter.setSelectMode(false); + refreshCurrentList(); + replaceCacheListFromSearch(); } + } private class ClearOfflineLogsThread extends Thread { @@ -1566,21 +1573,6 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity CGeoMap.startActivitySearch(this, searchToUse, mapTitle); } - @Override - public void goManual(View view) { - switch (type) { - case OFFLINE: - ActivityMixin.goManual(this, "c:geo-stored"); - break; - case HISTORY: - ActivityMixin.goManual(this, "c:geo-history"); - break; - default: - ActivityMixin.goManual(this, "c:geo-nearby"); - break; - } - } - private void refreshCurrentList() { switchListById(listId); } @@ -1667,7 +1659,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } final Intent cachesIntent = new Intent(context, cgeocaches.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.NEAREST); - cachesIntent.putExtra(Intents.EXTRAS_COORDS, coordsNow); + cachesIntent.putExtra(Intents.EXTRA_COORDS, coordsNow); context.startActivity(cachesIntent); } @@ -1680,7 +1672,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public static void startActivityAddress(final Context context, final Geopoint coords, final String address) { final Intent addressIntent = new Intent(context, cgeocaches.class); addressIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.ADDRESS); - addressIntent.putExtra(Intents.EXTRAS_COORDS, coords); + addressIntent.putExtra(Intents.EXTRA_COORDS, coords); addressIntent.putExtra(Intents.EXTRA_ADDRESS, address); context.startActivity(addressIntent); } @@ -1691,7 +1683,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } final Intent cachesIntent = new Intent(context, cgeocaches.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.COORDINATE); - cachesIntent.putExtra(Intents.EXTRAS_COORDS, coords); + cachesIntent.putExtra(Intents.EXTRA_COORDS, coords); context.startActivity(cachesIntent); } @@ -1725,11 +1717,11 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public Loader<SearchResult> onCreateLoader(int type, Bundle extras) { - AbstractSearchLoader loader = null; if (type >= CacheListLoaderType.values().length) { throw new IllegalArgumentException("invalid loader type " + type); } CacheListLoaderType enumType = CacheListLoaderType.values()[type]; + AbstractSearchLoader loader = null; switch (enumType) { case OFFLINE: listId = Settings.getLastList(); diff --git a/main/src/cgeo/geocaching/cgeonavigate.java b/main/src/cgeo/geocaching/cgeonavigate.java index 17c2e20..679e2f2 100644 --- a/main/src/cgeo/geocaching/cgeonavigate.java +++ b/main/src/cgeo/geocaching/cgeonavigate.java @@ -47,23 +47,19 @@ public class cgeonavigate extends AbstractActivity { private CompassView compassView = null; public cgeonavigate() { - super("c:geo-compass", true); + super(true); } @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.navigate); - setTitle(res.getString(R.string.compass_title)); + super.onCreate(savedInstanceState, R.layout.navigate); // get parameters Bundle extras = getIntent().getExtras(); if (extras != null) { title = extras.getString(EXTRAS_GEOCODE); final String name = extras.getString(EXTRAS_NAME); - dstCoords = (Geopoint) extras.getParcelable(EXTRAS_COORDS); + dstCoords = extras.getParcelable(EXTRAS_COORDS); info = extras.getString(EXTRAS_CACHE_INFO); if (StringUtils.isNotBlank(name)) { diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index 4d27617..d8711cf 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -149,7 +149,7 @@ public final class GCConstants { public final static Pattern PATTERN_MAINTENANCE = Pattern.compile("<span id=\"ctl00_ContentBody_LogBookPanel1_lbConfirm\"[^>]*>([^<]*<font[^>]*>)?([^<]+)(</font>[^<]*)?</span>", Pattern.CASE_INSENSITIVE); public final static Pattern PATTERN_OK1 = Pattern.compile("<h2[^>]*>[^<]*<span id=\"ctl00_ContentBody_lbHeading\"[^>]*>[^<]*</span>[^<]*</h2>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_OK2 = Pattern.compile("<div id=[\"|']ctl00_ContentBody_LogBookPanel1_ViewLogPanel[\"|']>", Pattern.CASE_INSENSITIVE); - public final static Pattern PATTERN_OK_IMAGEUPLOAD = Pattern.compile("<div id=[\"|']ctl00_ContentBody_ImageUploadControl1_uxUploadDonePanel[\"|']>", Pattern.CASE_INSENSITIVE); + public final static Pattern PATTERN_IMAGE_UPLOAD_URL = Pattern.compile("title=\"Click for Larger Image\"\\s*src=\"(.*?)\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_VIEWSTATEFIELDCOUNT = Pattern.compile("id=\"__VIEWSTATEFIELDCOUNT\"[^(value)]+value=\"(\\d+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_VIEWSTATES = Pattern.compile("id=\"__VIEWSTATE(\\d*)\"[^(value)]+value=\"([^\"]+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_USERTOKEN = Pattern.compile("userToken\\s*=\\s*'([^']+)'"); diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 649ffa6..c8473a5 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -215,7 +215,7 @@ public abstract class GCParser { cache.setFavoritePoints(Integer.parseInt(result)); } } catch (NumberFormatException e) { - Log.w("GCParser.parseSearch: Failed to parse favourite count"); + Log.w("GCParser.parseSearch: Failed to parse favorite count"); } searchResult.addCache(cache); @@ -424,11 +424,11 @@ public abstract class GCParser { Log.w("GCParser.parseCache: Failed to parse cache hidden (event) date"); } - // favourite + // favorite try { cache.setFavoritePoints(Integer.parseInt(BaseUtils.getMatch(tableInside, GCConstants.PATTERN_FAVORITECOUNT, true, "0"))); } catch (NumberFormatException e) { - Log.e("Error parsing favourite count", e); + Log.e("Error parsing favorite count", e); } // cache size @@ -826,6 +826,15 @@ public abstract class GCParser { return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver); } + private static boolean isSearchForMyCaches(final String userName) { + boolean my = false; + if (userName.equalsIgnoreCase(Settings.getLogin().left)) { + my = true; + Log.i("Overriding users choice because of self search, downloading all caches."); + } + return my; + } + public static SearchResult searchByUsername(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(userName)) { Log.e("GCParser.searchByUsername: No user name given"); @@ -834,13 +843,7 @@ public abstract class GCParser { final Parameters params = new Parameters("ul", userName); - boolean my = false; - if (userName.equalsIgnoreCase(Settings.getLogin().left)) { - my = true; - Log.i("GCParser.searchByUsername: Overriding users choice, downloading all caches."); - } - - return searchByAny(cacheType, my, showCaptcha, params, recaptchaReceiver); + return searchByAny(cacheType, isSearchForMyCaches(userName), showCaptcha, params, recaptchaReceiver); } public static SearchResult searchByOwner(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { @@ -850,7 +853,7 @@ public abstract class GCParser { } final Parameters params = new Parameters("u", userName); - return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver); + return searchByAny(cacheType, isSearchForMyCaches(userName), showCaptcha, params, recaptchaReceiver); } public static SearchResult searchByAddress(final String address, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { @@ -1059,7 +1062,7 @@ public abstract class GCParser { * the URI for the image to be uploaded * @return status code to indicate success or failure */ - public static StatusCode uploadLogImage(final String logId, final String caption, final String description, final Uri imageUri) { + public static ImmutablePair<StatusCode, String> uploadLogImage(final String logId, final String caption, final String description, final Uri imageUri) { final String uri = new Uri.Builder().scheme("http").authority("www.geocaching.com").path("/seek/upload.aspx").encodedQuery("LID=" + logId).build().toString(); String page = Network.getResponseData(Network.getRequest(uri)); @@ -1071,7 +1074,7 @@ public abstract class GCParser { page = Network.getResponseData(Network.getRequest(uri)); } else { Log.e("Image upload: No login (error: " + loginState + ')'); - return StatusCode.NOT_LOGGED_IN; + return ImmutablePair.of(StatusCode.NOT_LOGGED_IN, null); } } @@ -1088,18 +1091,23 @@ public abstract class GCParser { final File image = new File(imageUri.getPath()); final String response = Network.getResponseData(Network.postRequest(uri, uploadParams, "ctl00$ContentBody$ImageUploadControl1$uxFileUpload", "image/jpeg", image)); - MatcherWrapper matcherOK = new MatcherWrapper(GCConstants.PATTERN_OK_IMAGEUPLOAD, response); + MatcherWrapper matcherUrl = new MatcherWrapper(GCConstants.PATTERN_IMAGE_UPLOAD_URL, response); - if (matcherOK.find()) { + if (matcherUrl.find()) { Log.i("Logimage successfully uploaded."); - - return StatusCode.NO_ERROR; + final String uploadedImageUrl = matcherUrl.group(1); + return ImmutablePair.of(StatusCode.NO_ERROR, uploadedImageUrl); } Log.e("GCParser.uploadLogIMage: Failed to upload image because of unknown error"); - return StatusCode.LOGIMAGE_POST_ERROR; + return ImmutablePair.of(StatusCode.LOGIMAGE_POST_ERROR, null); } + /** + * Post a log to GC.com. + * + * @return status code of the upload and ID of the log + */ public static StatusCode postLogTrackable(final String tbid, final String trackingCode, final String[] viewstates, final LogType logType, final int year, final int month, final int day, final String log) { if (Login.isEmpty(viewstates)) { @@ -1581,15 +1589,8 @@ public abstract class GCParser { final List<LogType> types = new ArrayList<LogType>(); final MatcherWrapper typeBoxMatcher = new MatcherWrapper(GCConstants.PATTERN_TYPEBOX, page); - String typesText = null; - if (typeBoxMatcher.find()) { - if (typeBoxMatcher.groupCount() > 0) { - typesText = typeBoxMatcher.group(1); - } - } - - if (typesText != null) { - + if (typeBoxMatcher.find() && typeBoxMatcher.groupCount() > 0) { + String typesText = typeBoxMatcher.group(1); final MatcherWrapper typeMatcher = new MatcherWrapper(GCConstants.PATTERN_TYPE2, typesText); while (typeMatcher.find()) { if (typeMatcher.groupCount() > 1) { @@ -1605,6 +1606,9 @@ public abstract class GCParser { } } + // we don't support this log type + types.remove(LogType.UPDATE_COORDINATES); + return types; } diff --git a/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java b/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java index 621032f..d03062f 100644 --- a/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java +++ b/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java @@ -48,6 +48,8 @@ public class OC11XMLParser { private static Pattern LOCAL_URL = Pattern.compile("href=\"(.*)\""); private static final int CACHE_PARSE_LIMIT = 250; private static final Resources res = cgeoapplication.getInstance().getResources(); + private static final Pattern WHITESPACE = Pattern.compile("<p>(\\s| )*</p>"); + private static ImageHolder imageHolder = null; @@ -513,7 +515,7 @@ public class OC11XMLParser { @Override public void end(String body) { final String content = body.trim(); - descHolder.shortDesc = linkify(stripMarkup(content)); + descHolder.shortDesc = linkify(stripEmptyText(content)); } }); @@ -523,7 +525,7 @@ public class OC11XMLParser { @Override public void end(String body) { final String content = body.trim(); - descHolder.desc = linkify(stripMarkup(content)); + descHolder.desc = linkify(stripEmptyText(content)); } }); @@ -626,7 +628,7 @@ public class OC11XMLParser { @Override public void end(String logText) { - logHolder.logEntry.log = stripMarkup(logText); + logHolder.logEntry.log = stripEmptyText(logText); } }); @@ -728,14 +730,20 @@ public class OC11XMLParser { } /** - * Removes unneeded markup. Log texts are typically encapsulated in paragraph tags which lead to more empty space on - * rendering. + * Removes some unneeded markup and whitespace. Log texts are typically encapsulated in paragraph tags which lead to + * more empty space on rendering. */ - protected static String stripMarkup(String input) { - if (!StringUtils.startsWith(input, "<")) { - return input; + protected static String stripEmptyText(String input) { + final Matcher matcher = WHITESPACE.matcher(input); + String result = matcher.replaceAll("").trim(); + if (!StringUtils.startsWith(result, "<")) { + return result; } - String result = input.trim(); + return stripMarkup(result); + } + + private static String stripMarkup(final String input) { + String result = input; for (String tagName : MARKUP) { final String startTag = "<" + tagName + ">"; if (StringUtils.startsWith(result, startTag)) { diff --git a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java index 530869f..339516b 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java +++ b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java @@ -12,8 +12,8 @@ import java.util.HashMap; import java.util.Map; public enum CacheAttribute { - // THIS LIST IS GENERATED: don't change anything here but in - // project/attributes/makeEnum.sh + // THIS LIST IS GENERATED: don't change anything here but read + // project/attributes/readme.txt DOGS(1, -1, "dogs", R.drawable.attribute_dogs, R.string.attribute_dogs_yes, R.string.attribute_dogs_no), BICYCLES(32, -1, "bicycles", R.drawable.attribute_bicycles, R.string.attribute_bicycles_yes, R.string.attribute_bicycles_no), MOTORCYCLES(33, -1, "motorcycles", R.drawable.attribute_motorcycles, R.string.attribute_motorcycles_yes, R.string.attribute_motorcycles_no), @@ -27,7 +27,7 @@ public enum CacheAttribute { ONEHOUR(7, -1, "onehour", R.drawable.attribute_onehour, R.string.attribute_onehour_yes, R.string.attribute_onehour_no), SCENIC(8, -1, "scenic", R.drawable.attribute_scenic, R.string.attribute_scenic_yes, R.string.attribute_scenic_no), HIKING(9, 25, "hiking", R.drawable.attribute_hiking, R.string.attribute_hiking_yes, R.string.attribute_hiking_no), - CLIMBING(10, 28, "climbing", R.drawable.attribute_climbing, R.string.attribute_climbing_yes, R.string.attribute_climbing_no), + CLIMBING(10, -1, "climbing", R.drawable.attribute_climbing, R.string.attribute_climbing_yes, R.string.attribute_climbing_no), WADING(11, -1, "wading", R.drawable.attribute_wading, R.string.attribute_wading_yes, R.string.attribute_wading_no), SWIMMING(12, 29, "swimming", R.drawable.attribute_swimming, R.string.attribute_swimming_yes, R.string.attribute_swimming_no), AVAILABLE(13, 38, "available", R.drawable.attribute_available, R.string.attribute_available_yes, R.string.attribute_available_no), @@ -86,6 +86,7 @@ public enum CacheAttribute { SYRINGE(-1, 23, "syringe", R.drawable.attribute_syringe, R.string.attribute_syringe_yes, R.string.attribute_syringe_no), SWAMP(-1, 26, "swamp", R.drawable.attribute_swamp, R.string.attribute_swamp_yes, R.string.attribute_swamp_no), HILLS(-1, 27, "hills", R.drawable.attribute_hills, R.string.attribute_hills_yes, R.string.attribute_hills_no), + EASY_CLIMBING(-1, 28, "easy_climbing", R.drawable.attribute_easy_climbing, R.string.attribute_easy_climbing_yes, R.string.attribute_easy_climbing_no), POI(-1, 30, "poi", R.drawable.attribute_poi, R.string.attribute_poi_yes, R.string.attribute_poi_no), MOVING_TARGET(-1, 31, "moving_target", R.drawable.attribute_moving_target, R.string.attribute_moving_target_yes, R.string.attribute_moving_target_no), WEBCAM(-1, 32, "webcam", R.drawable.attribute_webcam, R.string.attribute_webcam_yes, R.string.attribute_webcam_no), @@ -108,8 +109,8 @@ public enum CacheAttribute { OTHER_CACHE(-1, 57, "other_cache", R.drawable.attribute_other_cache, R.string.attribute_other_cache_yes, R.string.attribute_other_cache_no), ASK_OWNER(-1, 58, "ask_owner", R.drawable.attribute_ask_owner, R.string.attribute_ask_owner_yes, R.string.attribute_ask_owner_no), UNKNOWN(-1, -1, "unknown", R.drawable.attribute_unknown, R.string.attribute_unknown_yes, R.string.attribute_unknown_no); - // THIS LIST IS GENERATED: don't change anything here but in - // project/attributes/makeEnum.sh + // THIS LIST IS GENERATED: don't change anything here but read + // project/attributes/readme.txt private static final String INTERNAL_YES = "_yes"; private static final String INTERNAL_NO = "_no"; @@ -146,30 +147,20 @@ public enum CacheAttribute { } private final static Map<String, CacheAttribute> FIND_BY_GCRAWNAME; + private final static SparseArray<CacheAttribute> FIND_BY_GCID = new SparseArray<CacheAttribute>(); + private final static SparseArray<CacheAttribute> FIND_BY_OCID = new SparseArray<CacheAttribute>(); static { final HashMap<String, CacheAttribute> mapGcRawNames = new HashMap<String, CacheAttribute>(); for (CacheAttribute attr : values()) { mapGcRawNames.put(attr.rawName, attr); - } - FIND_BY_GCRAWNAME = Collections.unmodifiableMap(mapGcRawNames); - } - - private final static SparseArray<CacheAttribute> FIND_BY_GCID = new SparseArray<CacheAttribute>(); - static { - for (CacheAttribute attr : values()) { if (attr.gcid != NO_ID) { FIND_BY_GCID.put(attr.gcid, attr); } - } - } - - private final static SparseArray<CacheAttribute> FIND_BY_OCID = new SparseArray<CacheAttribute>(); - static { - for (CacheAttribute attr : values()) { if (attr.ocid != NO_ID) { FIND_BY_OCID.put(attr.ocid, attr); } } + FIND_BY_GCRAWNAME = Collections.unmodifiableMap(mapGcRawNames); } public static CacheAttribute getByRawName(final String rawName) { diff --git a/main/src/cgeo/geocaching/export/AbstractExport.java b/main/src/cgeo/geocaching/export/AbstractExport.java index 72ea544..e4ba5f0 100644 --- a/main/src/cgeo/geocaching/export/AbstractExport.java +++ b/main/src/cgeo/geocaching/export/AbstractExport.java @@ -1,5 +1,6 @@ package cgeo.geocaching.export; +import cgeo.geocaching.R; import cgeo.geocaching.cgeoapplication; abstract class AbstractExport implements Export { @@ -27,7 +28,7 @@ abstract class AbstractExport implements Export { /** * Generates a localized string from a resource id. - * + * * @param resourceId * the resource id of the string * @param params @@ -43,4 +44,8 @@ abstract class AbstractExport implements Export { // used in the array adapter of the dialog showing the exports return getName(); } + + protected String getProgressTitle() { + return getString(R.string.export) + ": " + getName(); + } } diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java index 5e1805a..2900781 100644 --- a/main/src/cgeo/geocaching/export/FieldnoteExport.java +++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java @@ -5,11 +5,11 @@ import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.cgData; import cgeo.geocaching.activity.ActivityMixin; -import cgeo.geocaching.activity.Progress; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.IOUtils; import cgeo.geocaching.utils.Log; @@ -20,7 +20,6 @@ import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; -import android.os.AsyncTask; import android.os.Environment; import android.view.ContextThemeWrapper; import android.view.View; @@ -57,18 +56,19 @@ class FieldnoteExport extends AbstractExport { } @Override - public void export(final List<Geocache> caches, final Activity activity) { + public void export(final List<Geocache> cachesList, final Activity activity) { + final Geocache[] caches = cachesList.toArray(new Geocache[cachesList.size()]); if (null == activity) { // No activity given, so no user interaction possible. // Start export with default parameters. - new ExportTask(caches, null, false, false).execute((Void) null); + new ExportTask(null, false, false).execute(caches); } else { // Show configuration dialog getExportOptionsDialog(caches, activity).show(); } } - private Dialog getExportOptionsDialog(final List<Geocache> caches, final Activity activity) { + private Dialog getExportOptionsDialog(final Geocache[] caches, final Activity activity) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); // AlertDialog has always dark style, so we have to apply it as well always @@ -91,32 +91,27 @@ class FieldnoteExport extends AbstractExport { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); new ExportTask( - caches, activity, uploadOption.isChecked(), onlyNewOption.isChecked()) - .execute((Void) null); + .execute(caches); } }); return builder.create(); } - private class ExportTask extends AsyncTask<Void, Integer, Boolean> { - private final List<Geocache> caches; + private class ExportTask extends AsyncTaskWithProgress<Geocache, Boolean> { private final Activity activity; private final boolean upload; private final boolean onlyNew; - private final Progress progress = new Progress(); private File exportFile; private static final int STATUS_UPLOAD = -1; /** - * Instantiates and configurates the task for exporting field notes. + * Instantiates and configures the task for exporting field notes. * - * @param caches - * The {@link List} of {@link cgeo.geocaching.Geocache} to be exported * @param activity * optional: Show a progress bar and toasts * @param upload @@ -124,22 +119,15 @@ class FieldnoteExport extends AbstractExport { * @param onlyNew * Upload/export only new logs since last export */ - public ExportTask(final List<Geocache> caches, final Activity activity, final boolean upload, final boolean onlyNew) { - this.caches = caches; + public ExportTask(final Activity activity, final boolean upload, final boolean onlyNew) { + super(activity, getProgressTitle(), getString(R.string.export_fieldnotes_creating)); this.activity = activity; this.upload = upload; this.onlyNew = onlyNew; } @Override - protected void onPreExecute() { - if (null != activity) { - progress.show(activity, getString(R.string.export) + ": " + getName(), getString(R.string.export_fieldnotes_creating), true, null); - } - } - - @Override - protected Boolean doInBackground(Void... params) { + protected Boolean doInBackgroundInternal(Geocache[] caches) { final StringBuilder fieldNoteBuffer = new StringBuilder(); try { int i = 0; @@ -227,10 +215,8 @@ class FieldnoteExport extends AbstractExport { } @Override - protected void onPostExecute(Boolean result) { + protected void onPostExecuteInternal(Boolean result) { if (null != activity) { - progress.dismiss(); - if (result) { // if (onlyNew) { // // update last export time in settings when doing it ourself (currently we use the date check from gc.com) @@ -248,12 +234,12 @@ class FieldnoteExport extends AbstractExport { } @Override - protected void onProgressUpdate(Integer... status) { + protected void onProgressUpdateInternal(int status) { if (null != activity) { - if (STATUS_UPLOAD == status[0]) { - progress.setMessage(getString(R.string.export_fieldnotes_uploading)); + if (STATUS_UPLOAD == status) { + setMessage(getString(R.string.export_fieldnotes_uploading)); } else { - progress.setMessage(getString(R.string.export_fieldnotes_creating) + " (" + status[0] + ')'); + setMessage(getString(R.string.export_fieldnotes_creating) + " (" + status + ')'); } } } diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java index c2a58b7..3e58276 100644 --- a/main/src/cgeo/geocaching/export/GpxExport.java +++ b/main/src/cgeo/geocaching/export/GpxExport.java @@ -6,11 +6,12 @@ import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.Waypoint; import cgeo.geocaching.cgData; +import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; -import cgeo.geocaching.activity.Progress; import cgeo.geocaching.enumerations.CacheAttribute; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.BaseUtils; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.XmlUtils; @@ -22,11 +23,9 @@ import org.xmlpull.v1.XmlSerializer; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; -import android.os.AsyncTask; import android.os.Environment; import android.view.ContextThemeWrapper; import android.view.View; @@ -38,9 +37,12 @@ import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Set; class GpxExport extends AbstractExport { private static final SimpleDateFormat dateFormatZ = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); @@ -48,24 +50,30 @@ class GpxExport extends AbstractExport { public static final String PREFIX_GPX = "http://www.topografix.com/GPX/1/0"; public static final String PREFIX_GROUNDSPEAK = "http://www.groundspeak.com/cache/1/0"; + /** + * During the export, only this number of geocaches is fully loaded into memory. + */ + public static final int CACHES_PER_BATCH = 100; + protected GpxExport() { super(getString(R.string.export_gpx)); } @Override public void export(final List<Geocache> caches, final Activity activity) { + String[] geocodes = getGeocodes(caches); if (null == activity) { // No activity given, so no user interaction possible. // Start export with default parameters. - new ExportTask(caches, null).execute((Void) null); + new ExportTask(null).execute(geocodes); } else { // Show configuration dialog - getExportDialog(caches, activity).show(); + getExportDialog(geocodes, activity).show(); } } - private Dialog getExportDialog(final List<Geocache> caches, final Activity activity) { + private Dialog getExportDialog(final String[] geocodes, final Activity activity) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); // AlertDialog has always dark style, so we have to apply it as well always @@ -91,46 +99,47 @@ class GpxExport extends AbstractExport { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - new ExportTask(caches, activity).execute((Void) null); + new ExportTask(activity).execute(geocodes); } }); return builder.create(); } - protected class ExportTask extends AsyncTask<Void, Integer, File> { - private final List<Geocache> caches; + private static String[] getGeocodes(final List<Geocache> caches) { + ArrayList<String> allGeocodes = new ArrayList<String>(caches.size()); + for (final Geocache geocache : caches) { + allGeocodes.add(geocache.getGeocode()); + } + return allGeocodes.toArray(new String[allGeocodes.size()]); + } + + protected class ExportTask extends AsyncTaskWithProgress<String, File> { private final Activity activity; - private final Progress progress = new Progress(); + private int countExported = 0; /** * Instantiates and configures the task for exporting field notes. * - * @param caches - * The {@link List} of {@link cgeo.geocaching.Geocache} to be exported * @param activity * optional: Show a progress bar and toasts */ - public ExportTask(final List<Geocache> caches, final Activity activity) { - this.caches = caches; + public ExportTask(final Activity activity) { + super(activity, getProgressTitle()); this.activity = activity; } @Override - protected void onPreExecute() { - if (null != activity) { - progress.show(activity, null, getString(R.string.export) + ": " + getName(), ProgressDialog.STYLE_HORIZONTAL, null); - progress.setMaxProgressAndReset(caches.size()); - } - } - - @Override - protected File doInBackground(Void... params) { + protected File doInBackgroundInternal(String[] geocodes) { // quick check for being able to write the GPX file if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return null; } + List<String> allGeocodes = new ArrayList<String>(Arrays.asList(geocodes)); + + setMessage(cgeoapplication.getInstance().getResources().getQuantityString(R.plurals.cache_counts, allGeocodes.size(), allGeocodes.size())); + final SimpleDateFormat fileNameDateFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); final File exportFile = new File(Settings.getGpxExportDir() + File.separatorChar + "export_" + fileNameDateFormat.format(new Date()) + ".gpx"); FileWriter writer = null; @@ -153,68 +162,17 @@ class GpxExport extends AbstractExport { PREFIX_GPX + " http://www.topografix.com/GPX/1/0/gpx.xsd " + PREFIX_GROUNDSPEAK + " http://www.groundspeak.com/cache/1/0/1/cache.xsd"); - for (int i = 0; i < caches.size(); i++) { - final Geocache cache = cgData.loadCache(caches.get(i).getGeocode(), LoadFlags.LOAD_ALL_DB_ONLY); - - gpx.startTag(PREFIX_GPX, "wpt"); - gpx.attribute("", "lat", Double.toString(cache.getCoords().getLatitude())); - gpx.attribute("", "lon", Double.toString(cache.getCoords().getLongitude())); - - final Date hiddenDate = cache.getHiddenDate(); - if (hiddenDate != null) { - XmlUtils.simpleText(gpx, PREFIX_GPX, "time", dateFormatZ.format(hiddenDate)); - } - - XmlUtils.multipleTexts(gpx, PREFIX_GPX, - "name", cache.getGeocode(), - "desc", cache.getName(), - "url", cache.getUrl(), - "urlname", cache.getName(), - "sym", cache.isFound() ? "Geocache Found" : "Geocache", - "type", "Geocache|" + cache.getType().pattern); - - gpx.startTag(PREFIX_GROUNDSPEAK, "cache"); - gpx.attribute("", "id", cache.getCacheId()); - gpx.attribute("", "available", !cache.isDisabled() ? "True" : "False"); - gpx.attribute("", "archives", cache.isArchived() ? "True" : "False"); - - XmlUtils.multipleTexts(gpx, PREFIX_GROUNDSPEAK, - "name", cache.getName(), - "placed_by", cache.getOwnerDisplayName(), - "owner", cache.getOwnerUserId(), - "type", cache.getType().pattern, - "container", cache.getSize().id, - "difficulty", Float.toString(cache.getDifficulty()), - "terrain", Float.toString(cache.getTerrain()), - "country", cache.getLocation(), - "state", "", - "encoded_hints", cache.getHint()); - - writeAttributes(gpx, cache); - - gpx.startTag(PREFIX_GROUNDSPEAK, "short_description"); - gpx.attribute("", "html", BaseUtils.containsHtml(cache.getShortDescription()) ? "True" : "False"); - gpx.text(cache.getShortDescription()); - gpx.endTag(PREFIX_GROUNDSPEAK, "short_description"); - - gpx.startTag(PREFIX_GROUNDSPEAK, "long_description"); - gpx.attribute("", "html", BaseUtils.containsHtml(cache.getDescription()) ? "True" : "False"); - gpx.text(cache.getDescription()); - gpx.endTag(PREFIX_GROUNDSPEAK, "long_description"); - - writeLogs(gpx, cache); - - gpx.endTag(PREFIX_GROUNDSPEAK, "cache"); - gpx.endTag(PREFIX_GPX, "wpt"); - - writeWaypoints(gpx, cache); - - publishProgress(i + 1); + // Split the overall set of geocodes into small chunks. That is a compromise between memory efficiency (because + // we don't load all caches fully into memory) and speed (because we don't query each cache separately). + while (!allGeocodes.isEmpty()) { + final List<String> batch = allGeocodes.subList(0, Math.min(CACHES_PER_BATCH, allGeocodes.size())); + exportBatch(gpx, batch); + batch.clear(); } gpx.endTag(PREFIX_GPX, "gpx"); gpx.endDocument(); - } catch (final IOException e) { + } catch (final Exception e) { Log.e("GpxExport.ExportTask export", e); if (writer != null) { @@ -235,6 +193,67 @@ class GpxExport extends AbstractExport { return exportFile; } + private void exportBatch(final XmlSerializer gpx, Collection<String> geocodesOfBatch) throws IOException { + Set<Geocache> caches = cgData.loadCaches(geocodesOfBatch, LoadFlags.LOAD_ALL_DB_ONLY); + for (Geocache cache : caches) { + gpx.startTag(PREFIX_GPX, "wpt"); + gpx.attribute("", "lat", Double.toString(cache.getCoords().getLatitude())); + gpx.attribute("", "lon", Double.toString(cache.getCoords().getLongitude())); + + final Date hiddenDate = cache.getHiddenDate(); + if (hiddenDate != null) { + XmlUtils.simpleText(gpx, PREFIX_GPX, "time", dateFormatZ.format(hiddenDate)); + } + + XmlUtils.multipleTexts(gpx, PREFIX_GPX, + "name", cache.getGeocode(), + "desc", cache.getName(), + "url", cache.getUrl(), + "urlname", cache.getName(), + "sym", cache.isFound() ? "Geocache Found" : "Geocache", + "type", "Geocache|" + cache.getType().pattern); + + gpx.startTag(PREFIX_GROUNDSPEAK, "cache"); + gpx.attribute("", "id", cache.getCacheId()); + gpx.attribute("", "available", !cache.isDisabled() ? "True" : "False"); + gpx.attribute("", "archives", cache.isArchived() ? "True" : "False"); + + XmlUtils.multipleTexts(gpx, PREFIX_GROUNDSPEAK, + "name", cache.getName(), + "placed_by", cache.getOwnerDisplayName(), + "owner", cache.getOwnerUserId(), + "type", cache.getType().pattern, + "container", cache.getSize().id, + "difficulty", Float.toString(cache.getDifficulty()), + "terrain", Float.toString(cache.getTerrain()), + "country", cache.getLocation(), + "state", "", + "encoded_hints", cache.getHint()); + + writeAttributes(gpx, cache); + + gpx.startTag(PREFIX_GROUNDSPEAK, "short_description"); + gpx.attribute("", "html", BaseUtils.containsHtml(cache.getShortDescription()) ? "True" : "False"); + gpx.text(cache.getShortDescription()); + gpx.endTag(PREFIX_GROUNDSPEAK, "short_description"); + + gpx.startTag(PREFIX_GROUNDSPEAK, "long_description"); + gpx.attribute("", "html", BaseUtils.containsHtml(cache.getDescription()) ? "True" : "False"); + gpx.text(cache.getDescription()); + gpx.endTag(PREFIX_GROUNDSPEAK, "long_description"); + + writeLogs(gpx, cache); + + gpx.endTag(PREFIX_GROUNDSPEAK, "cache"); + gpx.endTag(PREFIX_GPX, "wpt"); + + writeWaypoints(gpx, cache); + + countExported++; + publishProgress(countExported); + } + } + private void writeWaypoints(final XmlSerializer gpx, final Geocache cache) throws IOException { List<Waypoint> waypoints = cache.getWaypoints(); List<Waypoint> ownWaypoints = new ArrayList<Waypoint>(waypoints.size()); @@ -345,9 +364,8 @@ class GpxExport extends AbstractExport { } @Override - protected void onPostExecute(final File exportFile) { + protected void onPostExecuteInternal(final File exportFile) { if (null != activity) { - progress.dismiss(); if (exportFile != null) { ActivityMixin.showToast(activity, getName() + ' ' + getString(R.string.export_exportedto) + ": " + exportFile.toString()); if (Settings.getShareAfterExport()) { @@ -363,11 +381,5 @@ class GpxExport extends AbstractExport { } } - @Override - protected void onProgressUpdate(Integer... status) { - if (null != activity) { - progress.setProgress(status[0]); - } - } } } diff --git a/main/src/cgeo/geocaching/files/AbstractFileListActivity.java b/main/src/cgeo/geocaching/files/AbstractFileListActivity.java index 5ff0d91..8b02eeb 100644 --- a/main/src/cgeo/geocaching/files/AbstractFileListActivity.java +++ b/main/src/cgeo/geocaching/files/AbstractFileListActivity.java @@ -89,7 +89,6 @@ public abstract class AbstractFileListActivity<T extends ArrayAdapter<File>> ext setTheme(); setContentView(R.layout.gpx); - setTitle(); Bundle extras = getIntent().getExtras(); if (extras != null) { @@ -146,11 +145,6 @@ public abstract class AbstractFileListActivity<T extends ArrayAdapter<File>> ext */ protected abstract List<File> getBaseFolders(); - /** - * Triggers the deriving class to set the title - */ - protected abstract void setTitle(); - private class SearchFilesThread extends Thread { private final FileListSelector selector = new FileListSelector(); diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java index b8dcbb3..ff81fe1 100644 --- a/main/src/cgeo/geocaching/files/GPXImporter.java +++ b/main/src/cgeo/geocaching/files/GPXImporter.java @@ -1,458 +1,462 @@ -package cgeo.geocaching.files;
-
-import cgeo.geocaching.Geocache;
-import cgeo.geocaching.R;
-import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
-import cgeo.geocaching.StaticMapsProvider;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.activity.IAbstractActivity;
-import cgeo.geocaching.activity.Progress;
-import cgeo.geocaching.enumerations.LoadFlags;
-import cgeo.geocaching.utils.CancellableHandler;
-import cgeo.geocaching.utils.Log;
-
-import org.apache.commons.lang3.StringUtils;
-
-import android.app.Activity;
-import android.app.ProgressDialog;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Message;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CancellationException;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-public class GPXImporter {
- static final int IMPORT_STEP_START = 0;
- static final int IMPORT_STEP_READ_FILE = 1;
- static final int IMPORT_STEP_READ_WPT_FILE = 2;
- static final int IMPORT_STEP_STORE_STATIC_MAPS = 4;
- static final int IMPORT_STEP_FINISHED = 5;
- static final int IMPORT_STEP_FINISHED_WITH_ERROR = 6;
- static final int IMPORT_STEP_CANCEL = 7;
- static final int IMPORT_STEP_CANCELED = 8;
- static final int IMPORT_STEP_STATIC_MAPS_SKIPPED = 9;
-
- public static final String GPX_FILE_EXTENSION = ".gpx";
- public static final String ZIP_FILE_EXTENSION = ".zip";
- public static final String WAYPOINTS_FILE_SUFFIX = "-wpts";
- public static final String WAYPOINTS_FILE_SUFFIX_AND_EXTENSION = WAYPOINTS_FILE_SUFFIX + GPX_FILE_EXTENSION;
-
- private static final List<String> GPX_MIME_TYPES = Arrays.asList("text/xml", "application/xml");
- private static final List<String> ZIP_MIME_TYPES = Arrays.asList("application/zip", "application/x-compressed", "application/x-zip-compressed", "application/x-zip", "application/octet-stream");
-
- private Progress progress = new Progress(true);
-
- private Resources res;
- private int listId;
- private IAbstractActivity fromActivity;
- private Handler importFinishedHandler;
-
- public GPXImporter(final IAbstractActivity fromActivity, final int listId, final Handler importFinishedHandler) {
- this.listId = listId;
- this.fromActivity = fromActivity;
- res = ((Activity) fromActivity).getResources();
- this.importFinishedHandler = importFinishedHandler;
- }
-
- /**
- * Import GPX file. Currently supports *.gpx, *.zip (containing gpx files, e.g. PQ queries) or *.loc files.
- *
- * @param file
- * the file to import
- */
- public void importGPX(final File file) {
- if (StringUtils.endsWithIgnoreCase(file.getName(), GPX_FILE_EXTENSION)) {
- new ImportGpxFileThread(file, listId, importStepHandler, progressHandler).start();
- } else if (StringUtils.endsWithIgnoreCase(file.getName(), ZIP_FILE_EXTENSION)) {
- new ImportGpxZipFileThread(file, listId, importStepHandler, progressHandler).start();
- } else {
- new ImportLocFileThread(file, listId, importStepHandler, progressHandler).start();
- }
- }
-
- /**
- * Import GPX provided via intent of activity that instantiated this GPXImporter.
- */
- public void importGPX() {
- final ContentResolver contentResolver = ((Activity) fromActivity).getContentResolver();
- final Intent intent = ((Activity) fromActivity).getIntent();
- final Uri uri = intent.getData();
-
- String mimeType = intent.getType();
- // if mimetype can't be determined (e.g. for emulators email app), derive it from uri file extension
- // contentResolver.getType(uri) doesn't help but throws exception for emulators email app
- // Permission Denial: reading com.android.email.provider.EmailProvider uri
- // Google search says: there is no solution for this problem
- // Gmail doesn't work at all, see #967
- if (mimeType == null) {
- if (StringUtils.endsWithIgnoreCase(uri.getPath(), GPX_FILE_EXTENSION)) {
- mimeType = "application/xml";
- } else {
- // if we can't determine a better type, default to zip import
- // emulator email sends e.g. content://com.android.email.attachmentprovider/1/1/RAW, mimetype=null
- mimeType = "application/zip";
- }
- }
-
- Log.i("importGPX: " + uri + ", mimetype=" + mimeType);
- if (GPX_MIME_TYPES.contains(mimeType)) {
- new ImportGpxAttachmentThread(uri, contentResolver, listId, importStepHandler, progressHandler).start();
- } else if (ZIP_MIME_TYPES.contains(mimeType)) {
- new ImportGpxZipAttachmentThread(uri, contentResolver, listId, importStepHandler, progressHandler).start();
- } else {
- importFinished();
- }
- }
-
- static abstract class ImportThread extends Thread {
- final int listId;
- final Handler importStepHandler;
- final CancellableHandler progressHandler;
-
- protected ImportThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- this.listId = listId;
- this.importStepHandler = importStepHandler;
- this.progressHandler = progressHandler;
- }
-
- @Override
- public void run() {
- try {
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_START));
- final Collection<Geocache> caches = doImport();
- Log.i("Imported successfully " + caches.size() + " caches.");
-
- final SearchResult search = new SearchResult();
- for (Geocache cache : caches) {
- search.addCache(cache);
- }
-
- if (Settings.isStoreOfflineMaps() || Settings.isStoreOfflineWpMaps()) {
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_STORE_STATIC_MAPS, R.string.gpx_import_store_static_maps, search.getCount()));
- boolean finishedWithoutCancel = importStaticMaps(search);
- // Skip last message if static maps where canceled
- if (!finishedWithoutCancel) {
- return;
- }
- }
-
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED, search.getCount(), 0, search));
- } catch (IOException e) {
- Log.i("Importing caches failed - error reading data: " + e.getMessage());
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED_WITH_ERROR, R.string.gpx_import_error_io, 0, e.getLocalizedMessage()));
- } catch (ParserException e) {
- Log.i("Importing caches failed - data format error" + e.getMessage());
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED_WITH_ERROR, R.string.gpx_import_error_parser, 0, e.getLocalizedMessage()));
- } catch (CancellationException e) {
- Log.i("Importing caches canceled");
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_CANCELED));
- } catch (Exception e) {
- Log.e("Importing caches failed - unknown error: ", e);
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED_WITH_ERROR, R.string.gpx_import_error_unexpected, 0, e.getLocalizedMessage()));
- }
- }
-
- protected abstract Collection<Geocache> doImport() throws IOException, ParserException;
-
- private boolean importStaticMaps(final SearchResult importedCaches) {
- int storedCacheMaps = 0;
- for (String geocode : importedCaches.getGeocodes()) {
- Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
- Log.d("GPXImporter.ImportThread.importStaticMaps start downloadMaps for cache " + geocode);
- StaticMapsProvider.downloadMaps(cache);
- storedCacheMaps++;
- if (progressHandler.isCancelled()) {
- return false;
- }
- progressHandler.sendMessage(progressHandler.obtainMessage(0, storedCacheMaps, 0));
- }
- return true;
- }
- }
-
- static class ImportLocFileThread extends ImportThread {
- private final File file;
-
- public ImportLocFileThread(final File file, int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- this.file = file;
- }
-
- @Override
- protected Collection<Geocache> doImport() throws IOException, ParserException {
- Log.i("Import LOC file: " + file.getAbsolutePath());
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, (int) file.length()));
- LocParser parser = new LocParser(listId);
- return parser.parse(file, progressHandler);
- }
- }
-
- static abstract class ImportGpxThread extends ImportThread {
-
- protected ImportGpxThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- }
-
- @Override
- protected Collection<Geocache> doImport() throws IOException, ParserException {
- try {
- // try to parse cache file as GPX 10
- return doImport(new GPX10Parser(listId));
- } catch (ParserException pe) {
- // didn't work -> lets try GPX11
- return doImport(new GPX11Parser(listId));
- }
- }
-
- protected abstract Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException;
- }
-
- static class ImportGpxFileThread extends ImportGpxThread {
- private final File cacheFile;
-
- public ImportGpxFileThread(final File file, int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- this.cacheFile = file;
- }
-
- @Override
- protected Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException {
- Log.i("Import GPX file: " + cacheFile.getAbsolutePath());
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, (int) cacheFile.length()));
- Collection<Geocache> caches = parser.parse(cacheFile, progressHandler);
-
- final String wptsFilename = getWaypointsFileNameForGpxFile(cacheFile);
- if (wptsFilename != null) {
- final File wptsFile = new File(cacheFile.getParentFile(), wptsFilename);
- if (wptsFile.canRead()) {
- Log.i("Import GPX waypoint file: " + wptsFile.getAbsolutePath());
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_WPT_FILE, R.string.gpx_import_loading_waypoints, (int) wptsFile.length()));
- caches = parser.parse(wptsFile, progressHandler);
- }
- }
- return caches;
- }
- }
-
- static class ImportGpxAttachmentThread extends ImportGpxThread {
- private final Uri uri;
- private ContentResolver contentResolver;
-
- public ImportGpxAttachmentThread(Uri uri, ContentResolver contentResolver, int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- this.uri = uri;
- this.contentResolver = contentResolver;
- }
-
- @Override
- protected Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException {
- Log.i("Import GPX from uri: " + uri);
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, -1));
- InputStream is = contentResolver.openInputStream(uri);
- try {
- return parser.parse(is, progressHandler);
- } finally {
- is.close();
- }
- }
- }
-
- static abstract class ImportGpxZipThread extends ImportGpxThread {
-
- protected ImportGpxZipThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- }
-
- @Override
- protected Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException {
- Collection<Geocache> caches = Collections.emptySet();
- // can't assume that GPX file comes before waypoint file in zip -> so we need two passes
- // 1. parse GPX files
- ZipInputStream zis = new ZipInputStream(getInputStream());
- try {
- for (ZipEntry zipEntry = zis.getNextEntry(); zipEntry != null; zipEntry = zis.getNextEntry()) {
- if (StringUtils.endsWithIgnoreCase(zipEntry.getName(), GPX_FILE_EXTENSION)) {
- if (!StringUtils.endsWithIgnoreCase(zipEntry.getName(), WAYPOINTS_FILE_SUFFIX_AND_EXTENSION)) {
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, (int) zipEntry.getSize()));
- caches = parser.parse(new NoCloseInputStream(zis), progressHandler);
- }
- } else {
- throw new ParserException("Imported zip is not a GPX zip file.");
- }
- zis.closeEntry();
- }
- } finally {
- zis.close();
- }
-
- // 2. parse waypoint files
- zis = new ZipInputStream(getInputStream());
- try {
- for (ZipEntry zipEntry = zis.getNextEntry(); zipEntry != null; zipEntry = zis.getNextEntry()) {
- if (StringUtils.endsWithIgnoreCase(zipEntry.getName(), WAYPOINTS_FILE_SUFFIX_AND_EXTENSION)) {
- importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_WPT_FILE, R.string.gpx_import_loading_waypoints, (int) zipEntry.getSize()));
- caches = parser.parse(new NoCloseInputStream(zis), progressHandler);
- }
- zis.closeEntry();
- }
- } finally {
- zis.close();
- }
-
- return caches;
- }
-
- protected abstract InputStream getInputStream() throws IOException;
- }
-
- static class ImportGpxZipFileThread extends ImportGpxZipThread {
- private final File cacheFile;
-
- public ImportGpxZipFileThread(final File file, int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- this.cacheFile = file;
- Log.i("Import zipped GPX: " + file);
- }
-
- @Override
- protected InputStream getInputStream() throws IOException {
- return new FileInputStream(cacheFile);
- }
- }
-
- static class ImportGpxZipAttachmentThread extends ImportGpxZipThread {
- private final Uri uri;
- private ContentResolver contentResolver;
-
- public ImportGpxZipAttachmentThread(Uri uri, ContentResolver contentResolver, int listId, Handler importStepHandler, CancellableHandler progressHandler) {
- super(listId, importStepHandler, progressHandler);
- this.uri = uri;
- this.contentResolver = contentResolver;
- Log.i("Import zipped GPX from uri: " + uri);
- }
-
- @Override
- protected InputStream getInputStream() throws IOException {
- return contentResolver.openInputStream(uri);
- }
- }
-
- final private CancellableHandler progressHandler = new CancellableHandler() {
- @Override
- public void handleRegularMessage(Message msg) {
- progress.setProgress(msg.arg1);
- }
- };
-
- final private Handler importStepHandler = new Handler() {
- private boolean showProgressAfterCancel = false;
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case IMPORT_STEP_START:
- Message cancelMessage = importStepHandler.obtainMessage(IMPORT_STEP_CANCEL);
- progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_reading_file), res.getString(R.string.gpx_import_loading_caches), ProgressDialog.STYLE_HORIZONTAL, cancelMessage);
- break;
-
- case IMPORT_STEP_READ_FILE:
- case IMPORT_STEP_READ_WPT_FILE:
- progress.setMessage(res.getString(msg.arg1));
- progress.setMaxProgressAndReset(msg.arg2);
- break;
-
- case IMPORT_STEP_STORE_STATIC_MAPS:
- progress.dismiss();
- Message skipMessage = importStepHandler.obtainMessage(IMPORT_STEP_STATIC_MAPS_SKIPPED, msg.arg2, 0);
- progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_static_maps), res.getString(R.string.gpx_import_store_static_maps), ProgressDialog.STYLE_HORIZONTAL, skipMessage);
- progress.setMaxProgressAndReset(msg.arg2);
- break;
-
- case IMPORT_STEP_STATIC_MAPS_SKIPPED:
- progress.dismiss();
- progressHandler.cancel();
- StringBuilder bufferSkipped = new StringBuilder(20);
- bufferSkipped.append(res.getString(R.string.gpx_import_static_maps_skipped)).append(", ").append(msg.arg1).append(' ').append(res.getString(R.string.gpx_import_caches_imported));
- fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString());
- importFinished();
- break;
-
- case IMPORT_STEP_FINISHED:
- progress.dismiss();
- fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported));
- importFinished();
- break;
-
- case IMPORT_STEP_FINISHED_WITH_ERROR:
- progress.dismiss();
- fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj);
- importFinished();
- break;
-
- case IMPORT_STEP_CANCEL:
- progress.dismiss();
- progressHandler.cancel();
- break;
-
- case IMPORT_STEP_CANCELED:
- StringBuilder bufferCanceled = new StringBuilder(20);
- bufferCanceled.append(res.getString(R.string.gpx_import_canceled));
- if (showProgressAfterCancel) {
- bufferCanceled.append(", ").append(progress.getProgress()).append(' ').append(res.getString(R.string.gpx_import_caches_imported));
- }
- fromActivity.showShortToast(bufferCanceled.toString());
- importFinished();
- break;
-
- default:
- break;
- }
- }
- };
-
- /**
- * @param gpxfile
- * the gpx file
- * @return the expected file name of the waypoints file
- */
- static String getWaypointsFileNameForGpxFile(final File gpxfile) {
- if (gpxfile == null || !gpxfile.canRead()) {
- return null;
- }
- final String gpxFileName = gpxfile.getName();
- File dir = gpxfile.getParentFile();
- String[] filenameList = dir.list();
- for (String filename : filenameList) {
- if (!StringUtils.containsIgnoreCase(filename, WAYPOINTS_FILE_SUFFIX)) {
- continue;
- }
- String expectedGpxFileName = StringUtils.substringBeforeLast(filename, WAYPOINTS_FILE_SUFFIX)
- + StringUtils.substringAfterLast(filename, WAYPOINTS_FILE_SUFFIX);
- if (gpxFileName.equals(expectedGpxFileName)) {
- return filename;
- }
- }
- return null;
- }
-
- protected void importFinished() {
- if (importFinishedHandler != null) {
- importFinishedHandler.sendEmptyMessage(0);
- }
- }
-}
+package cgeo.geocaching.files; + +import cgeo.geocaching.Geocache; +import cgeo.geocaching.R; +import cgeo.geocaching.SearchResult; +import cgeo.geocaching.Settings; +import cgeo.geocaching.StaticMapsProvider; +import cgeo.geocaching.cgData; +import cgeo.geocaching.activity.IAbstractActivity; +import cgeo.geocaching.activity.Progress; +import cgeo.geocaching.enumerations.LoadFlags; +import cgeo.geocaching.utils.CancellableHandler; +import cgeo.geocaching.utils.Log; + +import org.apache.commons.lang3.StringUtils; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.net.Uri; +import android.os.Handler; +import android.os.Message; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CancellationException; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +public class GPXImporter { + static final int IMPORT_STEP_START = 0; + static final int IMPORT_STEP_READ_FILE = 1; + static final int IMPORT_STEP_READ_WPT_FILE = 2; + static final int IMPORT_STEP_STORE_STATIC_MAPS = 4; + static final int IMPORT_STEP_FINISHED = 5; + static final int IMPORT_STEP_FINISHED_WITH_ERROR = 6; + static final int IMPORT_STEP_CANCEL = 7; + static final int IMPORT_STEP_CANCELED = 8; + static final int IMPORT_STEP_STATIC_MAPS_SKIPPED = 9; + + public static final String GPX_FILE_EXTENSION = ".gpx"; + public static final String ZIP_FILE_EXTENSION = ".zip"; + public static final String WAYPOINTS_FILE_SUFFIX = "-wpts"; + public static final String WAYPOINTS_FILE_SUFFIX_AND_EXTENSION = WAYPOINTS_FILE_SUFFIX + GPX_FILE_EXTENSION; + + private static final List<String> GPX_MIME_TYPES = Arrays.asList("text/xml", "application/xml"); + private static final List<String> ZIP_MIME_TYPES = Arrays.asList("application/zip", "application/x-compressed", "application/x-zip-compressed", "application/x-zip", "application/octet-stream"); + + private Progress progress = new Progress(true); + + private Resources res; + private int listId; + private IAbstractActivity fromActivity; + private Handler importFinishedHandler; + + public GPXImporter(final IAbstractActivity fromActivity, final int listId, final Handler importFinishedHandler) { + this.listId = listId; + this.fromActivity = fromActivity; + res = ((Activity) fromActivity).getResources(); + this.importFinishedHandler = importFinishedHandler; + } + + /** + * Import GPX file. Currently supports *.gpx, *.zip (containing gpx files, e.g. PQ queries) or *.loc files. + * + * @param file + * the file to import + */ + public void importGPX(final File file) { + if (StringUtils.endsWithIgnoreCase(file.getName(), GPX_FILE_EXTENSION)) { + new ImportGpxFileThread(file, listId, importStepHandler, progressHandler).start(); + } else if (StringUtils.endsWithIgnoreCase(file.getName(), ZIP_FILE_EXTENSION)) { + new ImportGpxZipFileThread(file, listId, importStepHandler, progressHandler).start(); + } else { + new ImportLocFileThread(file, listId, importStepHandler, progressHandler).start(); + } + } + + /** + * Import GPX provided via intent of activity that instantiated this GPXImporter. + */ + public void importGPX() { + final ContentResolver contentResolver = ((Activity) fromActivity).getContentResolver(); + final Intent intent = ((Activity) fromActivity).getIntent(); + final Uri uri = intent.getData(); + + String mimeType = intent.getType(); + // if mimetype can't be determined (e.g. for emulators email app), derive it from uri file extension + // contentResolver.getType(uri) doesn't help but throws exception for emulators email app + // Permission Denial: reading com.android.email.provider.EmailProvider uri + // Google search says: there is no solution for this problem + // Gmail doesn't work at all, see #967 + if (mimeType == null) { + if (StringUtils.endsWithIgnoreCase(uri.getPath(), GPX_FILE_EXTENSION)) { + mimeType = "application/xml"; + } else { + // if we can't determine a better type, default to zip import + // emulator email sends e.g. content://com.android.email.attachmentprovider/1/1/RAW, mimetype=null + mimeType = "application/zip"; + } + } + + Log.i("importGPX: " + uri + ", mimetype=" + mimeType); + if (GPX_MIME_TYPES.contains(mimeType)) { + new ImportGpxAttachmentThread(uri, contentResolver, listId, importStepHandler, progressHandler).start(); + } else if (ZIP_MIME_TYPES.contains(mimeType)) { + new ImportGpxZipAttachmentThread(uri, contentResolver, listId, importStepHandler, progressHandler).start(); + } else { + importFinished(); + } + } + + static abstract class ImportThread extends Thread { + final int listId; + final Handler importStepHandler; + final CancellableHandler progressHandler; + + protected ImportThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) { + this.listId = listId; + this.importStepHandler = importStepHandler; + this.progressHandler = progressHandler; + } + + @Override + public void run() { + try { + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_START)); + final Collection<Geocache> caches = doImport(); + Log.i("Imported successfully " + caches.size() + " caches."); + + final SearchResult search = new SearchResult(); + for (Geocache cache : caches) { + search.addCache(cache); + } + + if (Settings.isStoreOfflineMaps() || Settings.isStoreOfflineWpMaps()) { + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_STORE_STATIC_MAPS, R.string.gpx_import_store_static_maps, search.getCount())); + boolean finishedWithoutCancel = importStaticMaps(search); + // Skip last message if static maps where canceled + if (!finishedWithoutCancel) { + return; + } + } + + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED, search.getCount(), 0, search)); + } catch (IOException e) { + Log.i("Importing caches failed - error reading data: " + e.getMessage()); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED_WITH_ERROR, R.string.gpx_import_error_io, 0, e.getLocalizedMessage())); + } catch (ParserException e) { + Log.i("Importing caches failed - data format error" + e.getMessage()); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED_WITH_ERROR, R.string.gpx_import_error_parser, 0, e.getLocalizedMessage())); + } catch (CancellationException e) { + Log.i("Importing caches canceled"); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_CANCELED)); + } catch (Exception e) { + Log.e("Importing caches failed - unknown error: ", e); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_FINISHED_WITH_ERROR, R.string.gpx_import_error_unexpected, 0, e.getLocalizedMessage())); + } + } + + protected abstract Collection<Geocache> doImport() throws IOException, ParserException; + + private boolean importStaticMaps(final SearchResult importedCaches) { + int storedCacheMaps = 0; + for (final String geocode : importedCaches.getGeocodes()) { + final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + if (cache != null) { + Log.d("GPXImporter.ImportThread.importStaticMaps start downloadMaps for cache " + geocode); + StaticMapsProvider.downloadMaps(cache); + } else { + Log.d("GPXImporter.ImportThread.importStaticMaps: no data found for " + geocode); + } + storedCacheMaps++; + if (progressHandler.isCancelled()) { + return false; + } + progressHandler.sendMessage(progressHandler.obtainMessage(0, storedCacheMaps, 0)); + } + return true; + } + } + + static class ImportLocFileThread extends ImportThread { + private final File file; + + public ImportLocFileThread(final File file, int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + this.file = file; + } + + @Override + protected Collection<Geocache> doImport() throws IOException, ParserException { + Log.i("Import LOC file: " + file.getAbsolutePath()); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, (int) file.length())); + LocParser parser = new LocParser(listId); + return parser.parse(file, progressHandler); + } + } + + static abstract class ImportGpxThread extends ImportThread { + + protected ImportGpxThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + } + + @Override + protected Collection<Geocache> doImport() throws IOException, ParserException { + try { + // try to parse cache file as GPX 10 + return doImport(new GPX10Parser(listId)); + } catch (ParserException pe) { + // didn't work -> lets try GPX11 + return doImport(new GPX11Parser(listId)); + } + } + + protected abstract Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException; + } + + static class ImportGpxFileThread extends ImportGpxThread { + private final File cacheFile; + + public ImportGpxFileThread(final File file, int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + this.cacheFile = file; + } + + @Override + protected Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException { + Log.i("Import GPX file: " + cacheFile.getAbsolutePath()); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, (int) cacheFile.length())); + Collection<Geocache> caches = parser.parse(cacheFile, progressHandler); + + final String wptsFilename = getWaypointsFileNameForGpxFile(cacheFile); + if (wptsFilename != null) { + final File wptsFile = new File(cacheFile.getParentFile(), wptsFilename); + if (wptsFile.canRead()) { + Log.i("Import GPX waypoint file: " + wptsFile.getAbsolutePath()); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_WPT_FILE, R.string.gpx_import_loading_waypoints, (int) wptsFile.length())); + caches = parser.parse(wptsFile, progressHandler); + } + } + return caches; + } + } + + static class ImportGpxAttachmentThread extends ImportGpxThread { + private final Uri uri; + private ContentResolver contentResolver; + + public ImportGpxAttachmentThread(Uri uri, ContentResolver contentResolver, int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + this.uri = uri; + this.contentResolver = contentResolver; + } + + @Override + protected Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException { + Log.i("Import GPX from uri: " + uri); + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, -1)); + InputStream is = contentResolver.openInputStream(uri); + try { + return parser.parse(is, progressHandler); + } finally { + is.close(); + } + } + } + + static abstract class ImportGpxZipThread extends ImportGpxThread { + + protected ImportGpxZipThread(int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + } + + @Override + protected Collection<Geocache> doImport(GPXParser parser) throws IOException, ParserException { + Collection<Geocache> caches = Collections.emptySet(); + // can't assume that GPX file comes before waypoint file in zip -> so we need two passes + // 1. parse GPX files + ZipInputStream zis = new ZipInputStream(getInputStream()); + try { + for (ZipEntry zipEntry = zis.getNextEntry(); zipEntry != null; zipEntry = zis.getNextEntry()) { + if (StringUtils.endsWithIgnoreCase(zipEntry.getName(), GPX_FILE_EXTENSION)) { + if (!StringUtils.endsWithIgnoreCase(zipEntry.getName(), WAYPOINTS_FILE_SUFFIX_AND_EXTENSION)) { + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_FILE, R.string.gpx_import_loading_caches, (int) zipEntry.getSize())); + caches = parser.parse(new NoCloseInputStream(zis), progressHandler); + } + } else { + throw new ParserException("Imported zip is not a GPX zip file."); + } + zis.closeEntry(); + } + } finally { + zis.close(); + } + + // 2. parse waypoint files + zis = new ZipInputStream(getInputStream()); + try { + for (ZipEntry zipEntry = zis.getNextEntry(); zipEntry != null; zipEntry = zis.getNextEntry()) { + if (StringUtils.endsWithIgnoreCase(zipEntry.getName(), WAYPOINTS_FILE_SUFFIX_AND_EXTENSION)) { + importStepHandler.sendMessage(importStepHandler.obtainMessage(IMPORT_STEP_READ_WPT_FILE, R.string.gpx_import_loading_waypoints, (int) zipEntry.getSize())); + caches = parser.parse(new NoCloseInputStream(zis), progressHandler); + } + zis.closeEntry(); + } + } finally { + zis.close(); + } + + return caches; + } + + protected abstract InputStream getInputStream() throws IOException; + } + + static class ImportGpxZipFileThread extends ImportGpxZipThread { + private final File cacheFile; + + public ImportGpxZipFileThread(final File file, int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + this.cacheFile = file; + Log.i("Import zipped GPX: " + file); + } + + @Override + protected InputStream getInputStream() throws IOException { + return new FileInputStream(cacheFile); + } + } + + static class ImportGpxZipAttachmentThread extends ImportGpxZipThread { + private final Uri uri; + private ContentResolver contentResolver; + + public ImportGpxZipAttachmentThread(Uri uri, ContentResolver contentResolver, int listId, Handler importStepHandler, CancellableHandler progressHandler) { + super(listId, importStepHandler, progressHandler); + this.uri = uri; + this.contentResolver = contentResolver; + Log.i("Import zipped GPX from uri: " + uri); + } + + @Override + protected InputStream getInputStream() throws IOException { + return contentResolver.openInputStream(uri); + } + } + + final private CancellableHandler progressHandler = new CancellableHandler() { + @Override + public void handleRegularMessage(Message msg) { + progress.setProgress(msg.arg1); + } + }; + + final private Handler importStepHandler = new Handler() { + private boolean showProgressAfterCancel = false; + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case IMPORT_STEP_START: + Message cancelMessage = importStepHandler.obtainMessage(IMPORT_STEP_CANCEL); + progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_reading_file), res.getString(R.string.gpx_import_loading_caches), ProgressDialog.STYLE_HORIZONTAL, cancelMessage); + break; + + case IMPORT_STEP_READ_FILE: + case IMPORT_STEP_READ_WPT_FILE: + progress.setMessage(res.getString(msg.arg1)); + progress.setMaxProgressAndReset(msg.arg2); + break; + + case IMPORT_STEP_STORE_STATIC_MAPS: + progress.dismiss(); + Message skipMessage = importStepHandler.obtainMessage(IMPORT_STEP_STATIC_MAPS_SKIPPED, msg.arg2, 0); + progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_static_maps), res.getString(R.string.gpx_import_store_static_maps), ProgressDialog.STYLE_HORIZONTAL, skipMessage); + progress.setMaxProgressAndReset(msg.arg2); + break; + + case IMPORT_STEP_STATIC_MAPS_SKIPPED: + progress.dismiss(); + progressHandler.cancel(); + StringBuilder bufferSkipped = new StringBuilder(20); + bufferSkipped.append(res.getString(R.string.gpx_import_static_maps_skipped)).append(", ").append(msg.arg1).append(' ').append(res.getString(R.string.gpx_import_caches_imported)); + fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString()); + importFinished(); + break; + + case IMPORT_STEP_FINISHED: + progress.dismiss(); + fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported)); + importFinished(); + break; + + case IMPORT_STEP_FINISHED_WITH_ERROR: + progress.dismiss(); + fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj); + importFinished(); + break; + + case IMPORT_STEP_CANCEL: + progress.dismiss(); + progressHandler.cancel(); + break; + + case IMPORT_STEP_CANCELED: + StringBuilder bufferCanceled = new StringBuilder(20); + bufferCanceled.append(res.getString(R.string.gpx_import_canceled)); + if (showProgressAfterCancel) { + bufferCanceled.append(", ").append(progress.getProgress()).append(' ').append(res.getString(R.string.gpx_import_caches_imported)); + } + fromActivity.showShortToast(bufferCanceled.toString()); + importFinished(); + break; + + default: + break; + } + } + }; + + /** + * @param gpxfile + * the gpx file + * @return the expected file name of the waypoints file + */ + static String getWaypointsFileNameForGpxFile(final File gpxfile) { + if (gpxfile == null || !gpxfile.canRead()) { + return null; + } + final String gpxFileName = gpxfile.getName(); + File dir = gpxfile.getParentFile(); + String[] filenameList = dir.list(); + for (String filename : filenameList) { + if (!StringUtils.containsIgnoreCase(filename, WAYPOINTS_FILE_SUFFIX)) { + continue; + } + String expectedGpxFileName = StringUtils.substringBeforeLast(filename, WAYPOINTS_FILE_SUFFIX) + + StringUtils.substringAfterLast(filename, WAYPOINTS_FILE_SUFFIX); + if (gpxFileName.equals(expectedGpxFileName)) { + return filename; + } + } + return null; + } + + protected void importFinished() { + if (importFinishedHandler != null) { + importFinishedHandler.sendEmptyMessage(0); + } + } +} diff --git a/main/src/cgeo/geocaching/files/SimpleDirChooser.java b/main/src/cgeo/geocaching/files/SimpleDirChooser.java index 7520e2e..6b2366c 100644 --- a/main/src/cgeo/geocaching/files/SimpleDirChooser.java +++ b/main/src/cgeo/geocaching/files/SimpleDirChooser.java @@ -2,11 +2,11 @@ package cgeo.geocaching.files; import cgeo.geocaching.Intents; import cgeo.geocaching.R; +import cgeo.geocaching.activity.AbstractListActivity; import cgeo.geocaching.activity.ActivityMixin; import org.apache.commons.lang3.StringUtils; -import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.net.Uri; @@ -31,7 +31,7 @@ import java.util.List; /** * Dialog for choosing a file or directory. */ -public class SimpleDirChooser extends ListActivity { +public class SimpleDirChooser extends AbstractListActivity { private static final String PARENT_DIR = ".. "; private File currentDir; private FileArrayAdapter adapter; @@ -46,7 +46,6 @@ public class SimpleDirChooser extends ListActivity { ActivityMixin.setTheme(this); setContentView(R.layout.simple_dir_chooser); - setTitle(this.getResources().getString(R.string.simple_dir_chooser_title)); fill(currentDir); @@ -106,13 +105,13 @@ public class SimpleDirChooser extends ListActivity { public class FileArrayAdapter extends ArrayAdapter<Option> { - private Context content; + private Context context; private int id; private List<Option> items; public FileArrayAdapter(Context context, int simpleDirItemResId, List<Option> objects) { super(context, simpleDirItemResId, objects); - this.content = context; + this.context = context; this.id = simpleDirItemResId; this.items = objects; } @@ -126,7 +125,7 @@ public class SimpleDirChooser extends ListActivity { public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { - LayoutInflater vi = (LayoutInflater) content.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(id, null); } @@ -187,13 +186,12 @@ public class SimpleDirChooser extends ListActivity { if (currentOption != lastOption) { currentOption.setChecked(true); lastPosition = position; - okButton.setEnabled(true); - okButton.setVisibility(View.VISIBLE); } else { lastPosition = -1; - okButton.setEnabled(false); - okButton.setVisibility(View.INVISIBLE); } + final boolean enabled = currentOption.isChecked() && !currentOption.getName().equals(PARENT_DIR); + okButton.setEnabled(enabled); + okButton.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE); adapter.notifyDataSetChanged(); } } @@ -238,7 +236,7 @@ public class SimpleDirChooser extends ListActivity { @Override public boolean accept(File dir, String filename) { File file = new File(dir, filename); - return file.isDirectory(); + return file.isDirectory() && file.canWrite(); } } diff --git a/main/src/cgeo/geocaching/filter/AttributeFilter.java b/main/src/cgeo/geocaching/filter/AttributeFilter.java index 4b6f382..cadcf49 100644 --- a/main/src/cgeo/geocaching/filter/AttributeFilter.java +++ b/main/src/cgeo/geocaching/filter/AttributeFilter.java @@ -1,16 +1,16 @@ package cgeo.geocaching.filter; -import cgeo.geocaching.R; import cgeo.geocaching.Geocache; +import cgeo.geocaching.R; import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.LoadFlags.LoadFlag; -import org.apache.commons.lang3.StringUtils; - import android.content.res.Resources; import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; class AttributeFilter extends AbstractFilter { @@ -24,13 +24,7 @@ class AttributeFilter extends AbstractFilter { private static String getName(final String attribute, final Resources res, final String packageName) { // dynamically search for a translation of the attribute final int id = res.getIdentifier(attribute, "string", packageName); - if (id > 0) { - final String translated = res.getString(id); - if (StringUtils.isNotBlank(translated)) { - return translated; - } - } - return attribute; + return id > 0 ? res.getString(id) : attribute; } @Override @@ -45,14 +39,13 @@ class AttributeFilter extends AbstractFilter { public static class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { + public List<IFilter> getFilters() { final String packageName = cgeoapplication.getInstance().getBaseContext().getPackageName(); final Resources res = cgeoapplication.getInstance().getResources(); - final String[] ids = res.getStringArray(R.array.attribute_ids); - final IFilter[] filters = new IFilter[ids.length]; - for (int i = 0; i < ids.length; i++) { - filters[i] = new AttributeFilter(getName("attribute_" + ids[i], res, packageName), ids[i]); + final List<IFilter> filters = new LinkedList<IFilter>(); + for (final String id: res.getStringArray(R.array.attribute_ids)) { + filters.add(new AttributeFilter(getName("attribute_" + id, res, packageName), id)); } return filters; } diff --git a/main/src/cgeo/geocaching/filter/DifficultyFilter.java b/main/src/cgeo/geocaching/filter/DifficultyFilter.java index c0ec61a..8099a51 100644 --- a/main/src/cgeo/geocaching/filter/DifficultyFilter.java +++ b/main/src/cgeo/geocaching/filter/DifficultyFilter.java @@ -4,6 +4,7 @@ import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import java.util.ArrayList; +import java.util.List; class DifficultyFilter extends AbstractRangeFilter { @@ -19,12 +20,12 @@ class DifficultyFilter extends AbstractRangeFilter { public static class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { + public List<IFilter> getFilters() { final ArrayList<IFilter> filters = new ArrayList<IFilter>(5); for (int difficulty = 1; difficulty <= 5; difficulty++) { filters.add(new DifficultyFilter(difficulty)); } - return filters.toArray(new IFilter[filters.size()]); + return filters; } } diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java index be63a08..a1d42cc 100644 --- a/main/src/cgeo/geocaching/filter/FilterUserInterface.java +++ b/main/src/cgeo/geocaching/filter/FilterUserInterface.java @@ -16,6 +16,7 @@ import android.widget.ArrayAdapter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.List; public final class FilterUserInterface { @@ -101,9 +102,9 @@ public final class FilterUserInterface { } private void selectFromFactory(final IFilterFactory factory, final String menuTitle, final RunnableWithArgument<IFilter> runAfterwards) { - final IFilter[] filters = factory.getFilters(); - if (filters.length == 1) { - runAfterwards.run(filters[0]); + final List<IFilter> filters = Collections.unmodifiableList(factory.getFilters()); + if (filters.size() == 1) { + runAfterwards.run(filters.get(0)); return; } @@ -114,7 +115,7 @@ public final class FilterUserInterface { builder.setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { - runAfterwards.run(filters[item]); + runAfterwards.run(filters.get(item)); } }); diff --git a/main/src/cgeo/geocaching/filter/IFilterFactory.java b/main/src/cgeo/geocaching/filter/IFilterFactory.java index 3491fd7..e750639 100644 --- a/main/src/cgeo/geocaching/filter/IFilterFactory.java +++ b/main/src/cgeo/geocaching/filter/IFilterFactory.java @@ -1,5 +1,7 @@ package cgeo.geocaching.filter; +import java.util.List; + interface IFilterFactory { - public IFilter[] getFilters(); + public List<? extends IFilter> getFilters(); } diff --git a/main/src/cgeo/geocaching/filter/ModifiedFilter.java b/main/src/cgeo/geocaching/filter/ModifiedFilter.java index f3e57de..74befda 100644 --- a/main/src/cgeo/geocaching/filter/ModifiedFilter.java +++ b/main/src/cgeo/geocaching/filter/ModifiedFilter.java @@ -4,6 +4,9 @@ import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.cgeoapplication; +import java.util.Collections; +import java.util.List; + class ModifiedFilter extends AbstractFilter implements IFilterFactory { public ModifiedFilter() { @@ -17,7 +20,7 @@ class ModifiedFilter extends AbstractFilter implements IFilterFactory { } @Override - public IFilter[] getFilters() { - return new IFilter[] { this }; + public List<ModifiedFilter> getFilters() { + return Collections.singletonList(this); } } diff --git a/main/src/cgeo/geocaching/filter/OriginFilter.java b/main/src/cgeo/geocaching/filter/OriginFilter.java index a880092..bd4e41e 100644 --- a/main/src/cgeo/geocaching/filter/OriginFilter.java +++ b/main/src/cgeo/geocaching/filter/OriginFilter.java @@ -7,6 +7,7 @@ import cgeo.geocaching.connector.IConnector; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.List; public class OriginFilter extends AbstractFilter { @@ -25,7 +26,7 @@ public class OriginFilter extends AbstractFilter { public static final class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { + public List<OriginFilter> getFilters() { final ArrayList<OriginFilter> filters = new ArrayList<OriginFilter>(); for (IConnector connector : ConnectorFactory.getConnectors()) { filters.add(new OriginFilter(connector)); @@ -40,7 +41,7 @@ public class OriginFilter extends AbstractFilter { } }); - return filters.toArray(new OriginFilter[filters.size()]); + return filters; } } diff --git a/main/src/cgeo/geocaching/filter/SizeFilter.java b/main/src/cgeo/geocaching/filter/SizeFilter.java index 7a34c83..8ddc475 100644 --- a/main/src/cgeo/geocaching/filter/SizeFilter.java +++ b/main/src/cgeo/geocaching/filter/SizeFilter.java @@ -3,7 +3,8 @@ package cgeo.geocaching.filter; import cgeo.geocaching.Geocache; import cgeo.geocaching.enumerations.CacheSize; -import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; class SizeFilter extends AbstractFilter { private final CacheSize cacheSize; @@ -26,15 +27,15 @@ class SizeFilter extends AbstractFilter { public static class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { + public List<IFilter> getFilters() { final CacheSize[] cacheSizes = CacheSize.values(); - final ArrayList<SizeFilter> filters = new ArrayList<SizeFilter>(); + final List<IFilter> filters = new LinkedList<IFilter>(); for (CacheSize cacheSize : cacheSizes) { if (cacheSize != CacheSize.UNKNOWN) { filters.add(new SizeFilter(cacheSize)); } } - return filters.toArray(new SizeFilter[filters.size()]); + return filters; } } diff --git a/main/src/cgeo/geocaching/filter/StateFilter.java b/main/src/cgeo/geocaching/filter/StateFilter.java index 0df47c1..e18128d 100644 --- a/main/src/cgeo/geocaching/filter/StateFilter.java +++ b/main/src/cgeo/geocaching/filter/StateFilter.java @@ -9,6 +9,7 @@ import android.content.res.Resources; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.List; abstract class StateFilter extends AbstractFilter { @@ -86,17 +87,41 @@ abstract class StateFilter extends AbstractFilter { } } + static class StateStoredFilter extends StateFilter { + public StateStoredFilter() { + super(res.getString(R.string.cache_status_stored)); + } + + @Override + public boolean accepts(Geocache cache) { + return cache.isOffline(); + } + } + + static class StateNotStoredFilter extends StateFilter { + public StateNotStoredFilter() { + super(res.getString(R.string.cache_status_not_stored)); + } + + @Override + public boolean accepts(Geocache cache) { + return !cache.isOffline(); + } + } + public static class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { - final ArrayList<StateFilter> filters = new ArrayList<StateFilter>(); + public List<StateFilter> getFilters() { + final List<StateFilter> filters = new ArrayList<StateFilter>(6); filters.add(new StateFoundFilter()); filters.add(new StateArchivedFilter()); filters.add(new StateDisabledFilter()); filters.add(new StatePremiumFilter()); filters.add(new StateNonPremiumFilter()); filters.add(new StateOfflineLogFilter()); + filters.add(new StateStoredFilter()); + filters.add(new StateNotStoredFilter()); Collections.sort(filters, new Comparator<StateFilter>() { @@ -106,7 +131,7 @@ abstract class StateFilter extends AbstractFilter { } }); - return filters.toArray(new StateFilter[filters.size()]); + return filters; } } diff --git a/main/src/cgeo/geocaching/filter/TerrainFilter.java b/main/src/cgeo/geocaching/filter/TerrainFilter.java index f7703d5..87372c6 100644 --- a/main/src/cgeo/geocaching/filter/TerrainFilter.java +++ b/main/src/cgeo/geocaching/filter/TerrainFilter.java @@ -1,10 +1,10 @@ package cgeo.geocaching.filter; - -import cgeo.geocaching.R; import cgeo.geocaching.Geocache; +import cgeo.geocaching.R; import java.util.ArrayList; +import java.util.List; class TerrainFilter extends AbstractRangeFilter { @@ -19,12 +19,12 @@ class TerrainFilter extends AbstractRangeFilter { public static class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { + public List<IFilter> getFilters() { final ArrayList<IFilter> filters = new ArrayList<IFilter>(5); for (int terrain = 1; terrain <= 5; terrain++) { filters.add(new TerrainFilter(terrain)); } - return filters.toArray(new IFilter[filters.size()]); + return filters; } } diff --git a/main/src/cgeo/geocaching/filter/TrackablesFilter.java b/main/src/cgeo/geocaching/filter/TrackablesFilter.java index 3225daa..5eff8a7 100644 --- a/main/src/cgeo/geocaching/filter/TrackablesFilter.java +++ b/main/src/cgeo/geocaching/filter/TrackablesFilter.java @@ -1,9 +1,12 @@ package cgeo.geocaching.filter; -import cgeo.geocaching.R; import cgeo.geocaching.Geocache; +import cgeo.geocaching.R; import cgeo.geocaching.cgeoapplication; +import java.util.Collections; +import java.util.List; + class TrackablesFilter extends AbstractFilter implements IFilterFactory { public TrackablesFilter() { super(cgeoapplication.getInstance().getString(R.string.caches_filter_track)); @@ -15,8 +18,8 @@ class TrackablesFilter extends AbstractFilter implements IFilterFactory { } @Override - public IFilter[] getFilters() { - return new IFilter[] { this }; + public List<TrackablesFilter> getFilters() { + return Collections.singletonList(this); } } diff --git a/main/src/cgeo/geocaching/filter/TypeFilter.java b/main/src/cgeo/geocaching/filter/TypeFilter.java index eeab552..ea0ccff 100644 --- a/main/src/cgeo/geocaching/filter/TypeFilter.java +++ b/main/src/cgeo/geocaching/filter/TypeFilter.java @@ -3,7 +3,8 @@ package cgeo.geocaching.filter; import cgeo.geocaching.Geocache; import cgeo.geocaching.enumerations.CacheType; -import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; class TypeFilter extends AbstractFilter { private final CacheType cacheType; @@ -26,15 +27,15 @@ class TypeFilter extends AbstractFilter { public static class Factory implements IFilterFactory { @Override - public IFilter[] getFilters() { + public List<IFilter> getFilters() { final CacheType[] types = CacheType.values(); - final ArrayList<IFilter> filters = new ArrayList<IFilter>(types.length); + final List<IFilter> filters = new LinkedList<IFilter>(); for (CacheType cacheType : types) { if (cacheType != CacheType.ALL) { filters.add(new TypeFilter(cacheType)); } } - return filters.toArray(new IFilter[filters.size()]); + return filters; } } diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java index a053f31..f6cfb84 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVote.java +++ b/main/src/cgeo/geocaching/gcvote/GCVote.java @@ -173,12 +173,15 @@ public final class GCVote { /** * Transmit user vote to gcvote.com - * + * * @param cache * @param vote - * @return + * @return {@code true} if the rating was submitted successfully */ public static boolean setRating(Geocache cache, double vote) { + if (!Settings.isGCvoteLogin()) { + return false; + } if (!cache.supportsGCVote()) { return false; } diff --git a/main/src/cgeo/geocaching/maps/AbstractMap.java b/main/src/cgeo/geocaching/maps/AbstractMap.java index c028e51..d9ee751 100644 --- a/main/src/cgeo/geocaching/maps/AbstractMap.java +++ b/main/src/cgeo/geocaching/maps/AbstractMap.java @@ -63,8 +63,6 @@ public abstract class AbstractMap { public abstract void goHome(View view); - public abstract void goManual(View view); - public abstract void onSaveInstanceState(final Bundle outState); } diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 30bbadf..436fcce 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -382,9 +382,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (extras != null) { mapMode = (MapMode) extras.get(EXTRAS_MAP_MODE); isLiveEnabled = extras.getBoolean(EXTRAS_LIVE_ENABLED, false); - searchIntent = (SearchResult) extras.getParcelable(EXTRAS_SEARCH); + searchIntent = extras.getParcelable(EXTRAS_SEARCH); geocodeIntent = extras.getString(EXTRAS_GEOCODE); - coordsIntent = (Geopoint) extras.getParcelable(EXTRAS_COORDS); + coordsIntent = extras.getParcelable(EXTRAS_COORDS); waypointTypeIntent = WaypointType.findById(extras.getString(EXTRAS_WPTTYPE)); mapStateIntent = extras.getIntArray(EXTRAS_MAPSTATE); mapTitle = extras.getString(EXTRAS_MAP_TITLE); @@ -751,9 +751,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto @Override public void onClick(DialogInterface dialog, int newItem) { - if (newItem == selectedItem) { - // no change - } else { + if (newItem != selectedItem) { // Adjust index because of <default> selection if (newItem > 0) { Settings.setCustomRenderThemeFile(themeFiles[newItem - 1].getPath()); @@ -1578,12 +1576,6 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto ActivityMixin.goHome(activity); } - // open manual entry - @Override - public void goManual(View view) { - ActivityMixin.goManual(activity, "c:geo-live-map"); - } - @Override public View makeView() { ImageView imageView = new ImageView(activity); diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java index 5649d19..a98241f 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java @@ -122,12 +122,6 @@ public class GoogleMapActivity extends MapActivity implements MapActivityImpl, F mapBase.goHome(view); } - // open manual entry - @Override - public void goManual(View view) { - mapBase.goManual(view); - } - @Override public void showFilterMenu(View view) { // do nothing, the filter bar only shows the global filter diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java b/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java index dc7dca5..e7deebd 100644 --- a/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java +++ b/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java @@ -35,6 +35,4 @@ public interface MapActivityImpl { public abstract void goHome(View view); - public abstract void goManual(View view); - } diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java index f850402..a0384b8 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java @@ -117,12 +117,6 @@ public class MapsforgeMapActivity extends MapActivity implements MapActivityImpl mapBase.goHome(view); } - // open manual entry - @Override - public void goManual(View view) { - mapBase.goManual(view); - } - @Override public void showFilterMenu(View view) { // do nothing, the filter bar only shows the global filter diff --git a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java index ed8a7bc..33ed30e 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java @@ -117,12 +117,6 @@ public class MapsforgeMapActivity024 extends MapActivity implements MapActivityI mapBase.goHome(view); } - // open manual entry - @Override - public void goManual(View view) { - mapBase.goManual(view); - } - @Override public void showFilterMenu(View view) { // do nothing, the filter bar only shows the global filter diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java index a409750..45cdbb5 100644 --- a/main/src/cgeo/geocaching/network/HtmlImage.java +++ b/main/src/cgeo/geocaching/network/HtmlImage.java @@ -65,6 +65,7 @@ public class HtmlImage implements Html.ImageGetter { bfOptions = new BitmapFactory.Options(); bfOptions.inTempStorage = new byte[16 * 1024]; + bfOptions.inPreferredConfig = Bitmap.Config.RGB_565; Point displaySize = Compatibility.getDisplaySize(); this.maxWidth = displaySize.x - 25; @@ -193,7 +194,11 @@ public class HtmlImage implements Html.ImageGetter { if (file.exists()) { if (listId >= StoredList.STANDARD_LIST_ID || file.lastModified() > (new Date().getTime() - (24 * 60 * 60 * 1000)) || forceKeep) { setSampleSize(file); - return BitmapFactory.decodeFile(file.getPath(), bfOptions); + final Bitmap image = BitmapFactory.decodeFile(file.getPath(), bfOptions); + if (image == null) { + Log.e("Cannot decode bitmap from " + file.getPath()); + } + return image; } } return null; diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java index eb6a6ac..5a8cbb2 100644 --- a/main/src/cgeo/geocaching/network/Network.java +++ b/main/src/cgeo/geocaching/network/Network.java @@ -40,6 +40,9 @@ import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.Uri; import java.io.File; @@ -471,4 +474,19 @@ public abstract class Network { return null; } + /** + * Checks if the device has network connection. + * + * @param context + * context of the application, cannot be null + * + * @return <code>true</code> if the device is connected to the network. + */ + public static boolean isNetworkConnected(Context context) { + ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = conMan.getActiveNetworkInfo(); + + return activeNetwork != null && activeNetwork.isConnected(); + } + } diff --git a/main/src/cgeo/geocaching/twitter/Twitter.java b/main/src/cgeo/geocaching/twitter/Twitter.java index f30830e..e3d3f77 100644 --- a/main/src/cgeo/geocaching/twitter/Twitter.java +++ b/main/src/cgeo/geocaching/twitter/Twitter.java @@ -15,7 +15,10 @@ import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; +import org.apache.commons.lang3.StringUtils; + public final class Twitter { + private static final String HASH_PREFIX_WITH_BLANK = " #"; public static final int MAX_TWEET_SIZE = 140; public static void postTweet(final cgeoapplication app, final String status, final Geopoint coords) { @@ -47,49 +50,56 @@ public final class Twitter { } } - public static String appendHashTag(final String status, final String tag) { - String result = status; - if (result.length() + 2 + tag.length() <= 140) { - result += " #" + tag; + public static void appendHashTag(final StringBuilder status, final String tag) { + if (status.length() + HASH_PREFIX_WITH_BLANK.length() + tag.length() <= MAX_TWEET_SIZE) { + final String tagWithPrefix = HASH_PREFIX_WITH_BLANK + tag; + if (status.indexOf(tagWithPrefix, 0) == -1) { + status.append(tagWithPrefix); + } } - return result; } public static void postTweetCache(String geocode) { - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); - String status; - final String url = cache.getUrl(); - if (url.length() >= 100) { - status = "I found " + url; + if (!Settings.isUseTwitter()) { + return; } - else { - String name = cache.getName(); - status = "I found " + name + " (" + url + ")"; - if (status.length() > MAX_TWEET_SIZE) { - name = name.substring(0, name.length() - (status.length() - MAX_TWEET_SIZE) - 1) + '…'; - } - status = "I found " + name + " (" + url + ")"; - status = appendHashTag(status, "cgeo"); - status = appendHashTag(status, "geocaching"); + if (!Settings.isTwitterLoginValid()) { + return; } + final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + postTweet(cgeoapplication.getInstance(), getStatusMessage(cache), null); + } + + static String getStatusMessage(Geocache cache) { + String name = cache.getName(); + if (name.length() > 100) { + name = name.substring(0, 100) + '…'; + } + final String url = StringUtils.defaultString(cache.getUrl()); + return fillTemplate(Settings.getCacheTwitterMessage(), name, url); + } - postTweet(cgeoapplication.getInstance(), status, null); + private static String fillTemplate(String template, String name, final String url) { + String result = StringUtils.replace(template, "[NAME]", name); + result = StringUtils.replace(result, "[URL]", url); + StringBuilder builder = new StringBuilder(result); + appendHashTag(builder, "cgeo"); + appendHashTag(builder, "geocaching"); + return builder.toString(); } public static void postTweetTrackable(String geocode) { final Trackable trackable = cgData.loadTrackable(geocode); + postTweet(cgeoapplication.getInstance(), getStatusMessage(trackable), null); + } + + static String getStatusMessage(Trackable trackable) { String name = trackable.getName(); if (name.length() > 82) { name = name.substring(0, 81) + '…'; } - StringBuilder builder = new StringBuilder("I touched "); - builder.append(name); - if (trackable.getUrl() != null) { - builder.append(" (").append(trackable.getUrl()).append(')'); - } - builder.append('!'); - String status = appendHashTag(builder.toString(), "cgeo"); - status = appendHashTag(status, "geocaching"); - postTweet(cgeoapplication.getInstance(), status, null); + String url = StringUtils.defaultString(trackable.getUrl()); + String status = Settings.getTrackableTwitterMessage(); + return fillTemplate(status, name, url); } } diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java index 3d9f283..3bc1dec 100644 --- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java @@ -89,21 +89,11 @@ public class TwitterAuthorizationActivity extends AbstractActivity { @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.twitter_authorization_activity); - setTitle(res.getString(R.string.auth_twitter)); + super.onCreate(savedInstanceState, R.layout.twitter_authorization_activity); init(); } - @Override - public void onResume() { - super.onResume(); - - } - private void init() { startButton = (Button) findViewById(R.id.start); pinEntry = (EditText) findViewById(R.id.pin); diff --git a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java index e98bd77..80f01e2 100644 --- a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java +++ b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java @@ -2,6 +2,7 @@ package cgeo.geocaching.ui; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; +import cgeo.geocaching.Waypoint; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Units; @@ -154,4 +155,24 @@ public final class CacheDetailsCreator { } add(R.string.cache_distance, text); } + + public void addDistance(final Waypoint wpt, final TextView waypointDistanceView) { + Float distance = null; + if (wpt.getCoords() != null) { + final Geopoint currentCoords = cgeoapplication.getInstance().currentGeo().getCoords(); + if (currentCoords != null) { + distance = currentCoords.distanceTo(wpt); + } + } + String text = "--"; + if (distance != null) { + text = Units.getDistanceFromKilometers(distance); + } + else if (waypointDistanceView != null) { + // if there is already a distance in waypointDistance, use it instead of resetting to default. + // this prevents displaying "--" while waiting for a new position update (See bug #1468) + text = waypointDistanceView.getText().toString(); + } + add(R.string.cache_distance, text); + } } diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java index 4965e0b..b60586e 100644 --- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java @@ -79,13 +79,13 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { private static final int[] RATING_BACKGROUND = new int[3]; static { if (Settings.isLightSkin()) { - RATING_BACKGROUND[0] = R.drawable.favourite_background_red_light; - RATING_BACKGROUND[1] = R.drawable.favourite_background_orange_light; - RATING_BACKGROUND[2] = R.drawable.favourite_background_green_light; + RATING_BACKGROUND[0] = R.drawable.favorite_background_red_light; + RATING_BACKGROUND[1] = R.drawable.favorite_background_orange_light; + RATING_BACKGROUND[2] = R.drawable.favorite_background_green_light; } else { - RATING_BACKGROUND[0] = R.drawable.favourite_background_red_dark; - RATING_BACKGROUND[1] = R.drawable.favourite_background_orange_dark; - RATING_BACKGROUND[2] = R.drawable.favourite_background_green_dark; + RATING_BACKGROUND[0] = R.drawable.favorite_background_red_dark; + RATING_BACKGROUND[1] = R.drawable.favorite_background_orange_dark; + RATING_BACKGROUND[2] = R.drawable.favorite_background_green_dark; } } @@ -97,7 +97,7 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { CheckBox checkbox; ImageView logStatusMark; TextView text; - TextView favourite; + TextView favorite; TextView info; ImageView inventory; RelativeLayout directionLayout; @@ -364,7 +364,7 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { holder.dirImgLayout = (RelativeLayout) v.findViewById(R.id.dirimg_layout); holder.dirImg = (ImageView) v.findViewById(R.id.dirimg); holder.inventory = (ImageView) v.findViewById(R.id.inventory); - holder.favourite = (TextView) v.findViewById(R.id.favourite); + holder.favorite = (TextView) v.findViewById(R.id.favorite); holder.info = (TextView) v.findViewById(R.id.info); v.setTag(holder); @@ -494,14 +494,14 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { } } - holder.favourite.setText(Integer.toString(cache.getFavoritePoints())); + holder.favorite.setText(Integer.toString(cache.getFavoritePoints())); int favoriteBack; // set default background, neither vote nor rating may be available if (lightSkin) { - favoriteBack = R.drawable.favourite_background_light; + favoriteBack = R.drawable.favorite_background_light; } else { - favoriteBack = R.drawable.favourite_background_dark; + favoriteBack = R.drawable.favorite_background_dark; } final float myVote = cache.getMyVote(); if (myVote > 0) { // use my own rating for display, if I have voted @@ -522,7 +522,7 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { favoriteBack = RATING_BACKGROUND[0]; } } - holder.favourite.setBackgroundResource(favoriteBack); + holder.favorite.setBackgroundResource(favoriteBack); if (cacheListType == CacheListType.HISTORY && cache.getVisitedDate() > 0) { holder.info.setText(Formatter.formatCacheInfoHistory(cache)); diff --git a/main/src/cgeo/geocaching/ui/CoordinatesFormatSwitcher.java b/main/src/cgeo/geocaching/ui/CoordinatesFormatSwitcher.java new file mode 100644 index 0000000..afadb33 --- /dev/null +++ b/main/src/cgeo/geocaching/ui/CoordinatesFormatSwitcher.java @@ -0,0 +1,38 @@ +package cgeo.geocaching.ui; + +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.GeopointFormatter; + +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.TextView; + +/** + * view click listener to automatically switch different coordinate formats + * + */ +public class CoordinatesFormatSwitcher implements OnClickListener { + + private static GeopointFormatter.Format[] availableFormats = new GeopointFormatter.Format[] { + GeopointFormatter.Format.LAT_LON_DECMINUTE, + GeopointFormatter.Format.LAT_LON_DECSECOND, + GeopointFormatter.Format.LAT_LON_DECDEGREE + }; + + private int position = 0; + + private final Geopoint coordinates; + + public CoordinatesFormatSwitcher(final Geopoint coordinates) { + this.coordinates = coordinates; + } + + @Override + public void onClick(View view) { + position = (position + 1) % availableFormats.length; + TextView textView = (TextView) view; + // rotate coordinate formats on click + textView.setText(coordinates.format(availableFormats[position])); + } + +}
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java b/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java index 4ba88ae..f10e13a 100644 --- a/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java +++ b/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java @@ -16,6 +16,12 @@ public class DecryptTextClickListener implements View.OnClickListener { try {
final TextView logView = (TextView) view;
+
+ // do not run the click listener if a link was clicked
+ if (logView.getSelectionStart() != -1 || logView.getSelectionEnd() != -1) {
+ return;
+ }
+
CharSequence text = logView.getText();
if (text instanceof Spannable) {
Spannable span = (Spannable) text;
diff --git a/main/src/cgeo/geocaching/ui/EditNoteDialog.java b/main/src/cgeo/geocaching/ui/EditNoteDialog.java new file mode 100644 index 0000000..4d3ab6f --- /dev/null +++ b/main/src/cgeo/geocaching/ui/EditNoteDialog.java @@ -0,0 +1,74 @@ +package cgeo.geocaching.ui; + +import cgeo.geocaching.R; +import cgeo.geocaching.R.string; + +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager.LayoutParams; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +public class EditNoteDialog extends DialogFragment implements OnEditorActionListener { + + public interface EditNoteDialogListener { + void onFinishEditNoteDialog(final String inputText); + } + + public static final String ARGUMENT_INITIAL_NOTE = "initialNote"; + + private EditText mEditText; + private String initialNote; + + public EditNoteDialog() { + // Empty constructor required for DialogFragment + } + + public static EditNoteDialog newInstance(final String initialNote) { + EditNoteDialog dialog = new EditNoteDialog(); + + Bundle arguments = new Bundle(); + arguments.putString(EditNoteDialog.ARGUMENT_INITIAL_NOTE, initialNote); + dialog.setArguments(arguments); + + return dialog; + } + + @Override + public View onCreateView(final LayoutInflater inflater, final ViewGroup container, + final Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_edit_note, container); + mEditText = (EditText) view.findViewById(R.id.note); + initialNote = getArguments().getString(ARGUMENT_INITIAL_NOTE); + if (initialNote != null) { + mEditText.setText(initialNote); + initialNote = null; + } + getDialog().setTitle(string.cache_personal_note); + mEditText.requestFocus(); + getDialog().getWindow().setSoftInputMode( + LayoutParams.SOFT_INPUT_STATE_VISIBLE); + mEditText.setOnEditorActionListener(this); + + return view; + } + + @Override + public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) { + if (EditorInfo.IME_ACTION_DONE == actionId) { + final EditNoteDialogListener activity = (EditNoteDialogListener) getActivity(); + activity.onFinishEditNoteDialog(mEditText.getText().toString()); + dismiss(); + return true; + } + return false; + } + + +} diff --git a/main/src/cgeo/geocaching/ui/ImagesList.java b/main/src/cgeo/geocaching/ui/ImagesList.java index 9464114..b2c819c 100644 --- a/main/src/cgeo/geocaching/ui/ImagesList.java +++ b/main/src/cgeo/geocaching/ui/ImagesList.java @@ -11,7 +11,6 @@ import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; import android.app.Activity; -import android.app.ProgressDialog; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; @@ -46,16 +45,14 @@ public class ImagesList { private Image currentImage; public enum ImageType { - LogImages(R.string.cache_log_images_title, R.string.cache_log_images_loading), - SpoilerImages(R.string.cache_spoiler_images_title, R.string.cache_spoiler_images_loading), - AllImages(R.string.cache_images_title, R.string.cache_images_loading); + LogImages(R.string.cache_log_images_title), + SpoilerImages(R.string.cache_spoiler_images_title), + AllImages(R.string.cache_images_title); private final int titleResId; - private final int loadingResId; - ImageType(final int title, final int loading) { + ImageType(final int title) { this.titleResId = title; - this.loadingResId = loading; } public int getTitle() { @@ -64,9 +61,6 @@ public class ImagesList { } private LayoutInflater inflater = null; - private ProgressDialog progressDialog = null; - private int count = 0; - private int countDone = 0; private final Activity activity; // We could use a Set here, but we will insert no duplicates, so there is no need to check for uniqueness. private final Collection<Bitmap> bitmaps = new LinkedList<Bitmap>(); @@ -83,18 +77,10 @@ public class ImagesList { inflater = activity.getLayoutInflater(); } - public void loadImages(final View parentView, final List<Image> images, ImageType imageType, final boolean offline) { + public void loadImages(final View parentView, final List<Image> images, final boolean offline) { imagesView = (LinearLayout) parentView.findViewById(R.id.spoiler_list); - count = images.size(); - progressDialog = new ProgressDialog(activity); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setMessage(activity.getString(imageType.loadingResId)); - progressDialog.setCancelable(true); - progressDialog.setMax(count); - progressDialog.show(); - for (final Image img : images) { LinearLayout rowView = (LinearLayout) inflater.inflate(R.layout.cache_image_item, null); @@ -154,19 +140,12 @@ public class ImagesList { imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(new LayoutParams(bounds.width(), bounds.height())); + view.findViewById(R.id.progress_bar).setVisibility(View.GONE); view.addView(imageView); imageView.setId(image.hashCode()); images.put(imageView.getId(), img); } - - synchronized (activity) { - countDone++; - progressDialog.setProgress(countDone); - if (progressDialog.getProgress() >= count) { - progressDialog.dismiss(); - } - } } } diff --git a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java index dada8fd..3d93a56 100644 --- a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java +++ b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java @@ -74,14 +74,6 @@ public class CoordinatesInputDialog extends Dialog { setContentView(R.layout.coords); - findViewById(R.id.actionBarManualbutton).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View view) { - ActivityMixin.goManual(context, "c:geo-geocoordinate-input"); - } - }); - final Spinner spinner = (Spinner) findViewById(R.id.spinnerCoordinateFormats); final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, diff --git a/main/src/cgeo/geocaching/ui/dialog/EditorDialog.java b/main/src/cgeo/geocaching/ui/dialog/EditorDialog.java deleted file mode 100644 index 4db69e5..0000000 --- a/main/src/cgeo/geocaching/ui/dialog/EditorDialog.java +++ /dev/null @@ -1,60 +0,0 @@ -package cgeo.geocaching.ui.dialog; - -import cgeo.geocaching.CacheDetailActivity; -import cgeo.geocaching.R; -import cgeo.geocaching.activity.ActivityMixin; - -import android.app.Dialog; -import android.os.Bundle; -import android.view.View; -import android.view.ViewGroup.LayoutParams; -import android.view.Window; -import android.widget.Button; -import android.widget.EditText; - -public class EditorDialog extends Dialog { - - private CharSequence editorText; - private EditorUpdate editorUpdate; - - public EditorDialog(CacheDetailActivity cacheDetailActivity, CharSequence editable) { - super(cacheDetailActivity, ActivityMixin.getTheme()); - this.editorText = editable; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.editor); - - final EditText editText = (EditText) findViewById(R.id.editorEditText); - editText.setText(editorText); - - final Button buttonSave = (Button) findViewById(R.id.editorSave); - buttonSave.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - editorUpdate.update(editText.getEditableText()); - EditorDialog.this.hide(); - } - }); - } - - public interface EditorUpdate { - public void update(CharSequence editorText); - } - - public void setOnEditorUpdate(EditorUpdate editorUpdate) { - this.editorUpdate = editorUpdate; - - } - - @Override - public void show() { - super.show(); - getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); - } - -} diff --git a/main/src/cgeo/geocaching/utils/AsyncTaskWithProgress.java b/main/src/cgeo/geocaching/utils/AsyncTaskWithProgress.java new file mode 100644 index 0000000..7526d92 --- /dev/null +++ b/main/src/cgeo/geocaching/utils/AsyncTaskWithProgress.java @@ -0,0 +1,139 @@ +package cgeo.geocaching.utils; + +import cgeo.geocaching.activity.Progress; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.os.AsyncTask; + +/** + * AsyncTask which automatically shows a progress dialog. Use it like the {@code AsyncTask} class, but leave away the + * middle template parameter. Override {@link #doInBackgroundInternal(Object[])} and related methods. + * <p> + * If no style is given, the progress dialog uses "determinate" style with known maximum. The progress maximum is + * automatically derived from the number of {@code Params} given to the task in {@link #execute(Object...)}. + * </p> + * + * @param <Params> + * @param <Result> + */ +public abstract class AsyncTaskWithProgress<Params, Result> extends AsyncTask<Params, Integer, Result> { + + private final Progress progress = new Progress(); + private final Activity activity; + private final String progressTitle; + private final String progressMessage; + private boolean indeterminate = false; + + /** + * Creates an AsyncTask with progress dialog. + * + * @param activity + * @param progressTitle + * @param progressMessage + */ + public AsyncTaskWithProgress(final Activity activity, final String progressTitle, final String progressMessage) { + this(activity, progressTitle, progressMessage, false); + } + + /** + * Creates an AsyncTask with progress dialog. + * + * @param activity + * @param progressTitle + */ + public AsyncTaskWithProgress(final Activity activity, final String progressTitle) { + this(activity, progressTitle, null); + } + + /** + * Creates an AsyncTask with progress dialog. + * + * @param activity + * @param progressTitle + * @param progressMessage + */ + public AsyncTaskWithProgress(final Activity activity, final String progressTitle, final String progressMessage, boolean indeterminate) { + this.activity = activity; + this.progressTitle = progressTitle; + this.progressMessage = progressMessage; + this.indeterminate = indeterminate; + } + + /** + * Creates an AsyncTask with progress dialog. + * + * @param activity + * @param progressTitle + */ + public AsyncTaskWithProgress(final Activity activity, final String progressTitle, boolean indeterminate) { + this(activity, progressTitle, null, indeterminate); + } + + @Override + protected final void onPreExecute() { + if (null != activity) { + if (indeterminate) { + progress.show(activity, progressTitle, progressMessage, true, null); + } + else { + progress.show(activity, progressTitle, progressMessage, ProgressDialog.STYLE_HORIZONTAL, null); + } + } + onPreExecuteInternal(); + } + + /** + * This method should typically be overridden by sub classes instead of {@link #onPreExecute()}. + */ + protected void onPreExecuteInternal() { + // empty by default + } + + @Override + protected final void onPostExecute(Result result) { + onPostExecuteInternal(result); + if (null != activity) { + progress.dismiss(); + } + } + + /** + * This method should typically be overridden by sub classes instead of {@link #onPostExecute(Object)}. + * + * @param result + */ + protected void onPostExecuteInternal(Result result) { + // empty by default + } + + @Override + protected final void onProgressUpdate(Integer... status) { + final int progressValue = status[0]; + if (null != activity && progressValue >= 0) { + progress.setProgress(progressValue); + } + onProgressUpdateInternal(progressValue); + } + + /** + * This method should by overridden by sub classes instead of {@link #onProgressUpdate(Integer...)}. + */ + protected void onProgressUpdateInternal(@SuppressWarnings("unused") int progress) { + // empty by default + } + + protected void setMessage(final String message) { + progress.setMessage(message); + } + + @Override + protected final Result doInBackground(Params... params) { + if (params != null) { + progress.setMaxProgressAndReset(params.length); + } + return doInBackgroundInternal(params); + } + + protected abstract Result doInBackgroundInternal(Params[] params); +} diff --git a/main/src/cgeo/geocaching/utils/ImageHelper.java b/main/src/cgeo/geocaching/utils/ImageHelper.java index 98cad64..ec77018 100644 --- a/main/src/cgeo/geocaching/utils/ImageHelper.java +++ b/main/src/cgeo/geocaching/utils/ImageHelper.java @@ -8,6 +8,9 @@ import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; + public class ImageHelper { // Do not let this class be instantiated, this is a utility class. @@ -22,11 +25,21 @@ public class ImageHelper { * @return BitmapDrawable The scaled image */ public static BitmapDrawable scaleBitmapToFitDisplay(final Bitmap image) { - final cgeoapplication app = cgeoapplication.getInstance(); Point displaySize = Compatibility.getDisplaySize(); final int maxWidth = displaySize.x - 25; final int maxHeight = displaySize.y - 25; + return scaleBitmapTo(image, maxWidth, maxHeight); + } + /** + * Scales a bitmap to the given bounds if it is larger, otherwise returns the original bitmap. + * + * @param image + * The bitmap to scale + * @return BitmapDrawable The scaled image + */ + public static BitmapDrawable scaleBitmapTo(final Bitmap image, final int maxWidth, final int maxHeight) { + final cgeoapplication app = cgeoapplication.getInstance(); Bitmap result = image; int width = image.getWidth(); int height = image.getHeight(); @@ -43,4 +56,27 @@ public class ImageHelper { return resultDrawable; } + /** + * Store a bitmap to file. + * + * @param bitmap + * The bitmap to store + * @param format + * The image format + * @param quality + * The image quality + * @param pathOfOutputImage + * Path to store to + */ + public static void storeBitmap(final Bitmap bitmap, final Bitmap.CompressFormat format, final int quality, final String pathOfOutputImage) { + try { + FileOutputStream out = new FileOutputStream(pathOfOutputImage); + BufferedOutputStream bos = new BufferedOutputStream(out); + bitmap.compress(format, quality, bos); + bos.flush(); + bos.close(); + } catch (Exception e) { + Log.e("Image", e); + } + } } diff --git a/main/src/gnu/android/app/appmanualclient/AppManualReaderClient.java b/main/src/gnu/android/app/appmanualclient/AppManualReaderClient.java deleted file mode 100644 index af4c03e..0000000 --- a/main/src/gnu/android/app/appmanualclient/AppManualReaderClient.java +++ /dev/null @@ -1,375 +0,0 @@ -package gnu.android.app.appmanualclient; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.net.Uri; -import android.util.Log; - -import java.util.List; - -/** - * The "App Manual Reader" client is a class to be used in applications which - * want to offer their users manuals through the gnu.android.appmanualreader - * application. Such applications do not need to include the whole - * "App Manual Reader" app but instead just have to include only this little - * package. This package then provides the mechanism to open suitable installed - * manuals. It does not include any manuals itself. - * <p> - * - * (c) 2011 Geocrasher (geocrasher@gmx.eu) - * <p> - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) any - * later version. - * <p> - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * <p> - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see http://www.gnu.org/licenses/. - * - * @author Geocrasher - */ -public class AppManualReaderClient { - - /** - * The URI scheme used to identify application manual URIs when flinging - * Intents around within an Android device, in the hope that there are - * activities registered which will handle such application manual URIs. - * Usually, there won't be just a single activity registered but instead - * many, depending on how many manuals are installed on an Android device. - */ - public static final String URI_SCHEME_APPMANUAL = "appmanual"; - - /** - * Standardized topic for opening a manual at its beginning. - * - * @see #openManual(String, String, Context) - * @see #openManual(String, String, Context, String) - */ - public static final String TOPIC_HOME = "andtw-home"; - /** - * Standardized topic for opening the index of a manual. - * - * @see #openManual(String, String, Context) - * @see #openManual(String, String, Context, String) - */ - public static final String TOPIC_INDEX = "andtw-index"; - /** - * Standardized topic for opening a manual's "about" topic. - * - * @see #openManual(String, String, Context) - * @see #openManual(String, String, Context, String) - */ - public static final String TOPIC_ABOUT_MANUAL = "andtw-about"; - - /** - * Convenience function to open a manual at a specific topic. See - * {@link #openManual(String, String, Context, String)} for a detailed - * description. - * - * @param manualIdentifier - * the identifier of the manual to open. This identifier must - * uniquely identify the manual as such, independent of the - * particular locale the manual is intended for. - * @param topic - * the topic to open. Please do not use spaces for topic names. - * With respect to the TiddlyWiki infrastructure used for manuals - * the topic needs to the tag of a (single) tiddler. This way - * manuals can be localized (especially their topic titles) - * without breaking an app's knowledge about topics. Some - * standardized topics are predefined, such as {@link #TOPIC_HOME}, {@link #TOPIC_INDEX}, and - * {@link #TOPIC_ABOUT_MANUAL}. - * @param context - * the context (usually an Activity) from which the manual is to - * be opened. In particular, this context is required to derive - * the proper current locale configuration in order to open - * appropriate localized manuals, if installed. - * - * @exception ActivityNotFoundException - * there is no suitable manual installed and all combinations - * of locale scope failed to activate any manual. - * - * @see #openManual(String, String, Context, String, boolean) - */ - public static void openManual(String manualIdentifier, String topic, - Context context) throws ActivityNotFoundException { - openManual(manualIdentifier, topic, context, null, false); - } - - /** - * Convenience function to open a manual at a specific topic. See - * {@link #openManual(String, String, Context, String)} for a detailed - * description. - * - * @param manualIdentifier - * the identifier of the manual to open. This identifier must - * uniquely identify the manual as such, independent of the - * particular locale the manual is intended for. - * @param topic - * the topic to open. Please do not use spaces for topic names. - * With respect to the TiddlyWiki infrastructure used for manuals - * the topic needs to the tag of a (single) tiddler. This way - * manuals can be localized (especially their topic titles) - * without breaking an app's knowledge about topics. Some - * standardized topics are predefined, such as {@link #TOPIC_HOME}, {@link #TOPIC_INDEX}, and - * {@link #TOPIC_ABOUT_MANUAL}. - * @param context - * the context (usually an Activity) from which the manual is to - * be opened. In particular, this context is required to derive - * the proper current locale configuration in order to open - * appropriate localized manuals, if installed. - * @param fallbackUri - * either <code>null</code> or a fallback URI to be used in case - * the user has not installed any suitable manual. - * - * @exception ActivityNotFoundException - * there is no suitable manual installed and all combinations - * of locale scope failed to activate any manual. - * - * @see #openManual(String, String, Context, String, boolean) - */ - public static void openManual(String manualIdentifier, String topic, - Context context, String fallbackUri) - throws ActivityNotFoundException { - openManual(manualIdentifier, topic, context, fallbackUri, false); - } - - /** - * Opens a manual at a specific topic. At least it tries to open a manual. - * As manuals are (usually) installed separately and we use late binding in - * form of implicit intents, a lot of things can go wrong. - * - * We use late binding and the intent architecture in particular as follows: - * first, we use our own URI scheme called "appmanual". Second, we use the - * host field as a unique manual identifier (such as "c-geo" for the app - * manuals for a map which must not be named by the powers that wanna be). - * Third, a localized manual is differentiated as a path with a single - * element in form of (in this precedence) "/lang_country_variant", - * "/lang__variant", "/lang_country", "/lang", or "/". Fourth, the topic to - * open is encoded as the a fragment "#topic=mytopic". - * - * In order to support localization, manuals can register themselves with - * different URIs. - * - * @param manualIdentifier - * the identifier of the manual to open. This identifier must - * uniquely identify the manual as such, independent of the - * particular locale the manual is intended for. - * @param topic - * the topic to open. Please do not use spaces for topic names. - * With respect to the TiddlyWiki infrastructure used for manuals - * the topic needs to the tag of a (single) tiddler. This way - * manuals can be localized (especially their topic titles) - * without breaking an app's knowledge about topics. Some - * standardized topics are predefined, such as - * {@link #TOPIC_HOME}, {@link #TOPIC_INDEX}, and - * {@link #TOPIC_ABOUT_MANUAL}. - * @param context - * the context (usually an Activity) from which the manual is to - * be opened. In particular, this context is required to derive - * the proper current locale configuration in order to open - * appropriate localized manuals, if installed. - * @param fallbackUri - * either <code>null</code> or a fallback URI to be used in case - * the user has not installed any suitable manual. - * @param contextAffinity - * if <code>true</code>, then we try to open the manual within - * the context, if possible. That is, if the package of the - * calling context also offers suitable activity registrations, - * then we will prefer them over any other registrations. If you - * don't know what this means, then you probably don't need this - * very special capability and should specify <code>false</code> - * for this parameter. - * - * @exception ActivityNotFoundException - * there is no suitable manual installed and all combinations - * of locale scope failed to activate any manual and no - * {@literal fallbackUri} was given. - */ - public static void openManual(String manualIdentifier, String topic, - Context context, String fallbackUri, boolean contextAffinity) - throws ActivityNotFoundException { - // - // The path of an "appmanual:" URI consists simply of the locale - // information. This allows manual packages to register themselves - // for both very specific locales as well as very broad ones. - // - String localePath = "/" - + context.getResources().getConfiguration().locale.toString(); - // - // We later need this intent in order to try to launch an appropriate - // manual (respectively its manual viewer). And yes, we need to set - // the intent's category explicitly, even as we will later use - // startActivity(): if we don't do this, the proper activity won't be - // started albeit the filter almost matches. That dirty behavior (it is - // documented wrong) had cost me half a day until I noticed some - // informational log entry generated from the ActivityManager. Grrrr! - // - Intent intent = new Intent(Intent.ACTION_VIEW); - int defaultIntentFlags = intent.getFlags(); - intent.addCategory(Intent.CATEGORY_DEFAULT); - // - // Try to open the manual in the following order (subject to - // availability): - // 1. manualIdentifier_lang_country_variant (can also be - // manualIdentifier_lang__variant in some cases) - // 2. manualIdentifier_lang_country - // 3. manualIdentifier_lang - // 4. manualIdentifier - // Of course, manuals are free to register more than one Intent, - // in particular, the should register also the plain manualIdentifier - // as a suitable fallback strategy. Even when installing multiple - // manuals this doesn't matter, as the user then can choose which - // one to use on a single or permanent basis. - // - while (true) { - Uri uri = Uri.parse(URI_SCHEME_APPMANUAL + "://" + manualIdentifier - + localePath + "#topic='" + topic + "'"); - // Note: we do not use a MIME type for this. - intent.setData(uri); - intent.setFlags(defaultIntentFlags); - if ( contextAffinity ) { - // - // What is happening here? Well, here we try something that we - // would like to call "package affinity activity resolving". - // Given an implicit(!) intent we try to figure out whether the - // package of the context which is trying to open the manual is - // able to resolve the intent. If this is the case, then we - // simply turn the implicit intent into an explicit(!) intent. - // We do this by setting the concrete module, that is: package - // name (eventually the one of the calling context) and class - // name within the package. - // - List<ResolveInfo> capableActivities = context - .getPackageManager() - .queryIntentActivityOptions(null, null, intent, - PackageManager.MATCH_DEFAULT_ONLY); - int capables = capableActivities.size(); - if ( capables > 1 ) { - for ( int idx = 0; idx < capables; ++idx ) { - ActivityInfo activityInfo = capableActivities.get(idx).activityInfo; - if ( activityInfo.packageName.contentEquals(context - .getPackageName()) ) { - intent.setClassName(activityInfo.packageName, - activityInfo.name); - // - // First match is okay, so we quit searching and - // continue with the usual attempt to start the - // activity. This should not fail, as we already - // found a match; yet the code is very forgiving in - // this respect and would just try another round - // with "downsized" locale requirements. - // - break; - } - } - } - // FIXME - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); - } else { - // - // No context affinity required, thus we need to set some flags: - // - // ...NEW_TASK: we want to start the manual reader activity as a - // separate - // task so that it can be kept open, yet in the background when - // returning to the application from which the manual was - // opened. - // - // ...SINGLE_TOP: - // - // ...RESET_TASK_IF_NEEDED: clear the manual reader activities - // down to the root activity. We've set the required - // ...CLEAR_WHEN_TASK_RESET above when opening the meta-manual - // with the context affinity. - // - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_SINGLE_TOP - | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - } - try { - String logTag = "appmanualclient"; - if ( Log.isLoggable(logTag, Log.INFO) ) { - Log.i(logTag, - "Trying to activate manual: uri=" + uri.toString()); - } - context.startActivity(intent); - // - // We could successfully activate the manual activity, so no - // further trials are required. - // - return; - } catch ( ActivityNotFoundException noActivity ) { - // - // Ensure that we switch back to implicit intent resolving for - // the next round. - // - intent.setComponent(null); - // - // As long as we still have some locale information, reduce it - // and try again a broader locale. - // - if ( localePath.length() > 1 ) { - int underscore = localePath.lastIndexOf('_'); - if ( underscore > 0 ) { - localePath = localePath.substring(0, underscore); - // - // Handle the case where we have a locale variant, yet - // no locale country, thus two underscores in immediate - // series. Get rid of both. - // - if ( localePath.endsWith("_") ) { - localePath = localePath - .substring(0, underscore - 1); - } - } else { - // - // Ready for the last round: try without any locale - // modifiers. - // - localePath = "/"; - } - } else { - // - // We've tried all combinations, so we've run out of them - // and bail out. - // - break; - } - } - // - // Okay, go for the next round, we've updated (or rather trimmed) - // the localeIdent, so let us try this. - // - } - // - // If we reach this code point then no suitable activity could be found - // and activated. In case the caller specified a fallback URI we will - // try to open that. As this will activate a suitable browser and this - // is an asynchronous activity we won't get back any negative results, - // such as 404's. Here we will only see such problems that prevented the - // start of a suitable browsing activity. - // - if ( fallbackUri != null ) { - intent = new Intent(Intent.ACTION_VIEW, Uri.parse(fallbackUri)); - intent.addCategory(Intent.CATEGORY_BROWSABLE); - context.startActivity(intent); - } - // - // We could not activate any manual and there was no fallback URI to - // open, so we finally bail out unsuccessful with an exception. - // - throw new ActivityNotFoundException(); - } -} diff --git a/main/src/android/support/v4/app/FragmentListActivity.java b/main/thirdparty/android/support/v4/app/FragmentListActivity.java index e3ed42c..e3ed42c 100644 --- a/main/src/android/support/v4/app/FragmentListActivity.java +++ b/main/thirdparty/android/support/v4/app/FragmentListActivity.java diff --git a/main/src/cgeo/org/kxml2/io/KXmlSerializer.java b/main/thirdparty/cgeo/org/kxml2/io/KXmlSerializer.java index 027ff53..027ff53 100644 --- a/main/src/cgeo/org/kxml2/io/KXmlSerializer.java +++ b/main/thirdparty/cgeo/org/kxml2/io/KXmlSerializer.java diff --git a/main/src/com/viewpagerindicator/PageIndicator.java b/main/thirdparty/com/viewpagerindicator/PageIndicator.java index 26414d8..26414d8 100644 --- a/main/src/com/viewpagerindicator/PageIndicator.java +++ b/main/thirdparty/com/viewpagerindicator/PageIndicator.java diff --git a/main/src/com/viewpagerindicator/TitlePageIndicator.java b/main/thirdparty/com/viewpagerindicator/TitlePageIndicator.java index 94ac962..94ac962 100644 --- a/main/src/com/viewpagerindicator/TitlePageIndicator.java +++ b/main/thirdparty/com/viewpagerindicator/TitlePageIndicator.java diff --git a/main/src/com/viewpagerindicator/TitleProvider.java b/main/thirdparty/com/viewpagerindicator/TitleProvider.java index 2a04b65..2a04b65 100644 --- a/main/src/com/viewpagerindicator/TitleProvider.java +++ b/main/thirdparty/com/viewpagerindicator/TitleProvider.java diff --git a/main/src/org/openintents/intents/FileManagerIntents.java b/main/thirdparty/org/openintents/intents/FileManagerIntents.java index 8ff10c8..8ff10c8 100644 --- a/main/src/org/openintents/intents/FileManagerIntents.java +++ b/main/thirdparty/org/openintents/intents/FileManagerIntents.java diff --git a/tests/.project b/tests/.project index 2da7b00..1e46e10 100644 --- a/tests/.project +++ b/tests/.project @@ -1,34 +1,34 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>cgeo-os-test</name>
- <comment></comment>
- <projects>
- <project>cgeo-os</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.ApkBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>cgeo-test</name> + <comment></comment> + <projects> + <project>cgeo</project> + </projects> + <buildSpec> + <buildCommand> + <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>com.android.ide.eclipse.adt.ApkBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>com.android.ide.eclipse.adt.AndroidNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/tests/.settings/org.eclipse.jdt.core.prefs b/tests/.settings/org.eclipse.jdt.core.prefs index eb2d3aa..5385520 100644 --- a/tests/.settings/org.eclipse.jdt.core.prefs +++ b/tests/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,9 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve @@ -17,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod= org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=warning org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled org.eclipse.jdt.core.compiler.problem.fieldHiding=warning @@ -24,13 +30,15 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=disabled @@ -39,12 +47,17 @@ org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warni org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning @@ -58,6 +71,7 @@ org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning diff --git a/tests/src/cgeo/geocaching/SettingsTest.java b/tests/src/cgeo/geocaching/SettingsTest.java index d6b4985..85e5115 100644 --- a/tests/src/cgeo/geocaching/SettingsTest.java +++ b/tests/src/cgeo/geocaching/SettingsTest.java @@ -7,10 +7,10 @@ import android.annotation.TargetApi; import android.test.ActivityInstrumentationTestCase2; @TargetApi(8) -public class SettingsTest extends ActivityInstrumentationTestCase2<cgeo> { +public class SettingsTest extends ActivityInstrumentationTestCase2<MainActivity> { public SettingsTest() { - super(cgeo.class); + super(MainActivity.class); } /** diff --git a/tests/src/cgeo/geocaching/StaticMapsProviderTest.java b/tests/src/cgeo/geocaching/StaticMapsProviderTest.java index cbace10..abc15ae 100644 --- a/tests/src/cgeo/geocaching/StaticMapsProviderTest.java +++ b/tests/src/cgeo/geocaching/StaticMapsProviderTest.java @@ -4,10 +4,13 @@ import cgeo.geocaching.enumerations.WaypointType; import cgeo.geocaching.files.LocalStorage; import cgeo.geocaching.geopoint.Geopoint; -import java.io.File; - import junit.framework.TestCase; +import android.test.suitebuilder.annotation.Suppress; + +import java.io.File; + +@Suppress public class StaticMapsProviderTest extends TestCase { public static void testDownloadStaticMaps() { diff --git a/tests/src/cgeo/geocaching/activity/ProgressTest.java b/tests/src/cgeo/geocaching/activity/ProgressTest.java index e72c90a..e4b4289 100644 --- a/tests/src/cgeo/geocaching/activity/ProgressTest.java +++ b/tests/src/cgeo/geocaching/activity/ProgressTest.java @@ -1,14 +1,14 @@ package cgeo.geocaching.activity; -import cgeo.geocaching.cgeo; +import cgeo.geocaching.MainActivity; import android.annotation.TargetApi; import android.test.ActivityInstrumentationTestCase2; @TargetApi(8) -public class ProgressTest extends ActivityInstrumentationTestCase2<cgeo> { +public class ProgressTest extends ActivityInstrumentationTestCase2<MainActivity> { public ProgressTest() { - super(cgeo.class); + super(MainActivity.class); } public void testProgressWrapper() { diff --git a/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java b/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java index 35baa8c..cd70ffb 100644 --- a/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java +++ b/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java @@ -1,17 +1,17 @@ package cgeo.geocaching.compatibility; -import cgeo.geocaching.cgeo; +import cgeo.geocaching.MainActivity; import android.test.ActivityInstrumentationTestCase2; import junit.framework.Assert; -public class CompatibilityTest extends ActivityInstrumentationTestCase2<cgeo> { +public class CompatibilityTest extends ActivityInstrumentationTestCase2<MainActivity> { - private cgeo activity; + private MainActivity activity; public CompatibilityTest() { - super("cgeo.geocaching", cgeo.class); + super("cgeo.geocaching", MainActivity.class); } @Override diff --git a/tests/src/cgeo/geocaching/connector/gc/GCConstantsTest.java b/tests/src/cgeo/geocaching/connector/gc/GCConstantsTest.java index 8298ad7..4458789 100644 --- a/tests/src/cgeo/geocaching/connector/gc/GCConstantsTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/GCConstantsTest.java @@ -10,7 +10,7 @@ public class GCConstantsTest extends AndroidTestCase { // adapt the following after downloading new mock html files public static final String MOCK_LOGIN_NAME = "JoSaMaJa"; - public static final int MOCK_CACHES_FOUND = 419; + public static final int MOCK_CACHES_FOUND = 426; public static void testLocation() { // GC37GFJ diff --git a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java index cf1df46..ff7ddff 100644 --- a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java @@ -7,6 +7,7 @@ import cgeo.geocaching.Settings; import cgeo.geocaching.Waypoint; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.enumerations.StatusCode; +import cgeo.geocaching.enumerations.WaypointType; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; import cgeo.geocaching.test.R; @@ -22,6 +23,7 @@ import android.os.Handler; import android.test.suitebuilder.annotation.MediumTest; import java.util.ArrayList; +import java.util.List; public class GCParserTest extends AbstractResourceInstrumentationTestCase { @@ -187,6 +189,22 @@ public class GCParserTest extends AbstractResourceInstrumentationTestCase { assertEquals(13, cache.getWaypoints().size()); } + public static void testNoteParsingWaypointTypes() { + final Geocache cache = new Geocache(); + cache.setWaypoints(new ArrayList<Waypoint>(), false); + cache.setPersonalNote("\"Parking area at PARKING=N 50° 40.666E 006° 58.222\n" + + "My calculated final coordinates: FINAL=N 50° 40.777E 006° 58.111\n" + + "Get some ice cream at N 50° 40.555E 006° 58.000\""); + + cache.parseWaypointsFromNote(); + final List<Waypoint> waypoints = cache.getWaypoints(); + + assertEquals(3, waypoints.size()); + assertEquals(WaypointType.PARKING, waypoints.get(0).getWaypointType()); + assertEquals(WaypointType.FINAL, waypoints.get(1).getWaypointType()); + assertEquals(WaypointType.WAYPOINT, waypoints.get(2).getWaypointType()); + } + private Geocache parseCache(int resourceId) { final String page = getFileContent(resourceId); final SearchResult result = GCParser.parseCacheFromText(page, null); diff --git a/tests/src/cgeo/geocaching/connector/oc/OCXMLTest.java b/tests/src/cgeo/geocaching/connector/oc/OCXMLTest.java index 2e4855f..4709565 100644 --- a/tests/src/cgeo/geocaching/connector/oc/OCXMLTest.java +++ b/tests/src/cgeo/geocaching/connector/oc/OCXMLTest.java @@ -111,13 +111,13 @@ public class OCXMLTest extends CGeoTestCase { } public static void testRemoveMarkup() { - assertEquals("", OC11XMLParser.stripMarkup("")); - assertEquals("Test", OC11XMLParser.stripMarkup("Test")); - assertEquals("<b>bold and others not removed</b>", OC11XMLParser.stripMarkup("<b>bold and others not removed</b>")); - assertEquals("unnecessary paragraph", OC11XMLParser.stripMarkup("<p>unnecessary paragraph</p>")); - assertEquals("unnecessary span", OC11XMLParser.stripMarkup("<span>unnecessary span</span>")); - assertEquals("nested", OC11XMLParser.stripMarkup("<span><span>nested</span></span>")); - assertEquals("mixed", OC11XMLParser.stripMarkup("<span> <p> mixed </p> </span>")); - assertEquals("<p>not</p><p>removable</p>", OC11XMLParser.stripMarkup("<p>not</p><p>removable</p>")); + assertEquals("", OC11XMLParser.stripEmptyText("")); + assertEquals("Test", OC11XMLParser.stripEmptyText("Test")); + assertEquals("<b>bold and others not removed</b>", OC11XMLParser.stripEmptyText("<b>bold and others not removed</b>")); + assertEquals("unnecessary paragraph", OC11XMLParser.stripEmptyText("<p>unnecessary paragraph</p>")); + assertEquals("unnecessary span", OC11XMLParser.stripEmptyText("<span>unnecessary span</span>")); + assertEquals("nested", OC11XMLParser.stripEmptyText("<span><span>nested</span></span>")); + assertEquals("mixed", OC11XMLParser.stripEmptyText("<span> <p> mixed </p> </span>")); + assertEquals("<p>not</p><p>removable</p>", OC11XMLParser.stripEmptyText("<p>not</p><p>removable</p>")); } } diff --git a/tests/src/cgeo/geocaching/export/ExportTest.java b/tests/src/cgeo/geocaching/export/ExportTest.java index 7befacf..5b974e0 100644 --- a/tests/src/cgeo/geocaching/export/ExportTest.java +++ b/tests/src/cgeo/geocaching/export/ExportTest.java @@ -24,7 +24,7 @@ public class ExportTest extends CGeoTestCase { assertEquals("Non matching export " + logStr.toString(), "GCX1234,2012-11-18T13:20:20Z,Found it,\"Hidden in a tree\"\n", logStr.toString()); } - public static void testGpxExportSmilies() { + public static void testGpxExportSmilies() throws InterruptedException, ExecutionException { final Geocache cache = new Geocache(); cache.setGeocode("GCX1234"); cache.setCoords(new Geopoint("N 49 44.000 E 8 37.000")); @@ -37,10 +37,6 @@ public class ExportTest extends CGeoTestCase { File result = null; try { result = gpxExport.testExportSync(exportList); - } catch (InterruptedException e) { - fail(e.getCause().toString()); - } catch (ExecutionException e) { - fail(e.getCause().toString()); } finally { cgData.removeCache(cache.getGeocode(), LoadFlags.REMOVE_ALL); } @@ -57,10 +53,12 @@ public class ExportTest extends CGeoTestCase { } public File testExportSync(List<Geocache> caches) throws InterruptedException, ExecutionException { - ExportTask task = new ExportTask(caches, null); - - task.execute((Void) null); - + final ArrayList<String> geocodes = new ArrayList<String>(caches.size()); + for (final Geocache cache: caches) { + geocodes.add(cache.getGeocode()); + } + final ExportTask task = new ExportTask(null); + task.execute(geocodes.toArray(new String[geocodes.size()])); return task.get(); } diff --git a/tests/src/cgeo/geocaching/filter/DifficultyFilterTest.java b/tests/src/cgeo/geocaching/filter/DifficultyFilterTest.java index b3ff056..ebe4cf6 100644 --- a/tests/src/cgeo/geocaching/filter/DifficultyFilterTest.java +++ b/tests/src/cgeo/geocaching/filter/DifficultyFilterTest.java @@ -19,6 +19,6 @@ public class DifficultyFilterTest extends CGeoTestCase { } public static void testAllFilters() { - assertTrue(new DifficultyFilter.Factory().getFilters().length == 5); // difficulty ranges from 1 to 5 + assertTrue(new DifficultyFilter.Factory().getFilters().size() == 5); // difficulty ranges from 1 to 5 } } diff --git a/tests/src/cgeo/geocaching/filter/SizeFilterTest.java b/tests/src/cgeo/geocaching/filter/SizeFilterTest.java index 2c6552b..8b909f3 100644 --- a/tests/src/cgeo/geocaching/filter/SizeFilterTest.java +++ b/tests/src/cgeo/geocaching/filter/SizeFilterTest.java @@ -33,7 +33,7 @@ public class SizeFilterTest extends CGeoTestCase { public static void testGetAllFilters() { final int expectedSizes = CacheSize.values().length - 1; // hide "UNKNOWN" - assertEquals(expectedSizes, new SizeFilter.Factory().getFilters().length); + assertEquals(expectedSizes, new SizeFilter.Factory().getFilters().size()); } public void testFilter() { diff --git a/tests/src/cgeo/geocaching/filter/StateStoredFilterTest.java b/tests/src/cgeo/geocaching/filter/StateStoredFilterTest.java new file mode 100644 index 0000000..2f65a6b --- /dev/null +++ b/tests/src/cgeo/geocaching/filter/StateStoredFilterTest.java @@ -0,0 +1,27 @@ +package cgeo.geocaching.filter; + +import cgeo.CGeoTestCase; +import cgeo.geocaching.Geocache; +import cgeo.geocaching.filter.StateFilter.StateNotStoredFilter; +import cgeo.geocaching.filter.StateFilter.StateStoredFilter; + +public class StateStoredFilterTest extends CGeoTestCase { + + private StateFilter.StateStoredFilter storedFilter; + private StateFilter.StateNotStoredFilter notStoredFilter; + private Geocache cache; + + @Override + protected void setUp() throws Exception { + super.setUp(); + storedFilter = new StateStoredFilter(); + notStoredFilter = new StateNotStoredFilter(); + cache = new Geocache(); + } + + public void testAccepts() { + assertFalse(storedFilter.accepts(cache)); + assertTrue(notStoredFilter.accepts(cache)); + } + +} diff --git a/tests/src/cgeo/geocaching/filter/TerrainFilterTest.java b/tests/src/cgeo/geocaching/filter/TerrainFilterTest.java index d64f4d9..234af7e 100644 --- a/tests/src/cgeo/geocaching/filter/TerrainFilterTest.java +++ b/tests/src/cgeo/geocaching/filter/TerrainFilterTest.java @@ -19,6 +19,6 @@ public class TerrainFilterTest extends CGeoTestCase { } public static void testAllFilters() { - assertTrue(new TerrainFilter.Factory().getFilters().length == 5); // terrain ranges from 1 to 5 + assertTrue(new TerrainFilter.Factory().getFilters().size() == 5); // terrain ranges from 1 to 5 } } diff --git a/tests/src/cgeo/geocaching/filter/TypeFilterTest.java b/tests/src/cgeo/geocaching/filter/TypeFilterTest.java index 3a43b33..e813052 100644 --- a/tests/src/cgeo/geocaching/filter/TypeFilterTest.java +++ b/tests/src/cgeo/geocaching/filter/TypeFilterTest.java @@ -46,7 +46,7 @@ public class TypeFilterTest extends CGeoTestCase { public static void testGetAllFilters() { final int expectedEntries = CacheType.values().length - 1; // hide "all" - assertEquals(expectedEntries, new TypeFilter.Factory().getFilters().length); + assertEquals(expectedEntries, new TypeFilter.Factory().getFilters().size()); } } diff --git a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html index 28e9814..3ed30b0 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html +++ b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.html @@ -76,16 +76,16 @@ }
})();
</script>
-<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?wp=GC1ZXX2&Submit6=Go" property="og:url" /><meta name="og:description" content="Use a smartphone or GPS device to navigate to the provided coordinates. Look for a other hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 1.5 and difficulty is 3 (out of 5)." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/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." /><link rel="alternate" href="../datastore/rss_galleryimages.ashx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98" type="application/rss+xml" title="[Gallery Images]" id="GalleryImages" /></head>
+<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98" property="og:url" /><meta name="og:description" content="Use a smartphone or GPS device to navigate to the provided coordinates. Look for a other hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 1.5 and difficulty is 3 (out of 5)." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/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." /><link rel="alternate" href="../datastore/rss_galleryimages.ashx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98" type="application/rss+xml" title="[Gallery Images]" id="GalleryImages" /></head>
<body >
- <form name="aspnetForm" method="post" action="cache_details.aspx?wp=GC1ZXX2&Submit6=Go" id="aspnetForm">
+ <form name="aspnetForm" method="post" action="cache_details.aspx?guid=36d45871-b99d-46d6-95fc-ff86ab564c98" 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="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE0MzM5MDkWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFlQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZndwJTNkR0MxWlhYMiUyNlN1Ym1pdDYlM2RHb2RkAgsPFgIfAQUQNDE5IENhY2hlcyBGb3VuZGQCEQ8WAh8DZxYCAg0PDxYCHwUFQH4vdHJhY2svc2VhcmNoLmFzcHg/bz0xJnVpZD00ZDQxNjQ2MS1kMWE3LTRjYzUtOGVlNy0zMzZiYjkxMGZlYjhkZAIXDw8WAh8DZ2RkAiEPFgIfA2dkAk8PZBYEAgMPFgIfAQUHRW5nbGlzaGQCBQ8WAh4LXyFJdGVtQ291bnQCEhYkZg9kFgICAQ8PFggeD0NvbW1hbmRBcmd1bWVudAUFZW4tVVMeC0NvbW1hbmROYW1lBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2geEENhdXNlc1ZhbGlkYXRpb25oZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAIRD2QWAgIDDxYCHwNoZAITDxYCHgVjbGFzcwUMc3Bhbi0yNCBsYXN0FgICAQ9kFiwCAQ9kFgJmD2QWAgIBDw8WAh8BBQdHQzFaWFgyZGQCAg8WAh8BBaYBPGEgaHJlZj0iL2Fib3V0L2NhY2hlX3R5cGVzLmFzcHgiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iQWJvdXQgQ2FjaGUgVHlwZXMiPjxpbWcgc3JjPSIvaW1hZ2VzL1dwdFR5cGVzLzIuZ2lmIiBhbHQ9IlRyYWRpdGlvbmFsIENhY2hlIiB0aXRsZT0iVHJhZGl0aW9uYWwgQ2FjaGUiIC8+PC9hPmQCBg9kFgQCAQ8WAh8DZ2QCBg8WAh8DaGQCCw9kFgQCAQ8WAh8BBQI0MWQCBQ8PFgIfBQVEL3NlZWsvY2FjaGVfZmF2b3JpdGVkLmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOThkZAINDw8WAh8DaGRkAg8PFgQfAQW+ATxwIGNsYXNzPSJPbGRXYXJuaW5nIE5vQm90dG9tU3BhY2luZyI+PHN0cm9uZz5DYWNoZSBJc3N1ZXM6PC9zdHJvbmc+PC9wPjx1bCBjbGFzcz0iT2xkV2FybmluZyI+PGxpPlRoaXMgY2FjaGUgaGFzIGJlZW4gYXJjaGl2ZWQsIGJ1dCBpcyBhdmFpbGFibGUgZm9yIHZpZXdpbmcgZm9yIGFyY2hpdmFsIHB1cnBvc2VzLjwvbGk+PC91bD4fA2dkAhAPFgIfA2hkAhEPFgIfA2hkAhIPZBYMAgMPFgIeBXN0eWxlBQ9kaXNwbGF5OmlubGluZTsWAgIBDxYCHwEFG1VUTTogMzJVIEUgNTQ4Mzg5IE4gNTgwMjc4N2QCDQ8PFgIfBQUzY2RwZi5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4ZGQCDw8PFgIfBQU4Y2RwZi5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4JmxjPTVkZAIRDw8WAh8FBTljZHBmLmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOTgmbGM9MTBkZAITDw8WBB8FBYMBaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2Y9ZCZobD1lbiZzYWRkcj01Mi4yMTYyNSw5LjcxNDQ4MyAoSG9tZSBMb2NhdGlvbikmZGFkZHI9NTIuMzczMjE3LDkuNzEwOChIYW5ub3BvbHklM2ErRWlzbGlzZW5zdHJhc3NlKykeBlRhcmdldAUGX2JsYW5rZGQCGw9kFggCAQ8PFgQeCUZvcmVDb2xvcgweBF8hU0ICBGRkAgMPDxYEHw0MHw4CBGRkAgUPDxYCHwNnFgIeB29uY2xpY2sFO3MyZ3BzKCczNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOTgnKTtyZXR1cm4gZmFsc2U7ZAIHDw8WAh8DZxYCHw8FIHMycGhvbmUoJ0dDMVpYWDInKTtyZXR1cm4gZmFsc2U7ZAIUDxYCHwNnZAIXD2QWCGYPFgIfA2hkAgEPDxYCHwNoZGQCAg8PFgIfA2hkZAIDDxYCHwNoZAIYD2QWAgIDDw8WAh8BBRNObyBoaW50cyBhdmFpbGFibGUuFgIfDwUNcmV0dXJuIGZhbHNlO2QCGQ8WAh8DaGQCHA8WAh8DaGQCHg8WAh8DZ2QCHw8WAh8DaGQCIg9kFgICAw8WAh4JaW5uZXJodG1sBRNBZHZlcnRpc2luZyB3aXRoIFVzZAImD2QWBAIFDw8WAh8DZ2RkAgkPDxYCHwUFPH4vdHJhY2svc2VhcmNoLmFzcHg/d2lkPTM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OGRkAicPDxYCHwNnZBYCZg8WAh8GAgMWBgIBD2QWAmYPFQIA6gE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD00MWNkNTZiNi0wMGYxLTQ3MDItYjg2Ni0xYTI2OGM2NDlkMTMiPkFsbGUgSGFubm9wb2x5IENhY2hlczwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPWRmMjE4NGFiLWE5ZWEtNGQzMC05OGVkLWVjNGU4NTFjMzcwNiI+R3VtbWlzZWVsZTwvYT5kAgIPZBYCZg8V" />
-<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="Ag5BbHRlcm5hdGluZ1Jvd+EBPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9MGRjZjNmODYtOTM3Mi00OTljLThiNTctZWQ0MTliZDQ4ZTIxIj5NZWluZSBFbXBmZWhsdW5nPC9hPjxiciAvPiBieSA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9YzQ2NTQxZmMtNmFlOS00NDUyLTg4MzMtNDcwZGRmYmU5Y2VlIj5za3JlbGw8L2E+ZAIDD2QWAmYPFQIA2wE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD05YTI0OGRiOS0zMDYzLTQ0NTctOTIwNS04NTFmYmUwNmEwM2UiPkhhbm5vcG9seTwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTVjNGIwOTE1LTVjZWMtNGZhMS04YWZkLTRiM2NhNjdlMDA0ZSI+a2FpMjcwNzwvYT5kAikPZBYSAgEPDxYCHwNoZGQCAw9kFgICAQ8PFgIfBQVFL2hpZGUvd3B0bGlzdC5hc3B4P1JlZldwdElEPTM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OCZEUz0xZGQCBw8PFgYeBlJEUy5JRAspdkdyb3VuZHNwZWFrLldlYi5HUFguV3B0RGF0YVNvdXJjZXMsIFR1Y3Nvbi5Db21tb24uTGVnYWN5LCBWZXJzaW9uPTMuMC40ODEyLjE4MDc1LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwBHgdSV1BULklEKCsEBzE0MzM5MDkfA2hkZAIJDw8WAh8DZ2QWAgIBDw8WBB8FBSovbWFwL2RlZmF1bHQuYXNweD9sYXQ9NTIuMzczMjE3JmxuZz05LjcxMDgfA2dkZAIPDxYCHwEFhwEuLi5vdGhlciBjYWNoZXMgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3U9ZGFuaWVsMzU0Ij5oaWRkZW48L2E+IG9yIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD91bD1kYW5pZWwzNTQiPmZvdW5kPC9hPiBieSB0aGlzIHVzZXJkAhEPZBYGAgEPFgIfAQX/AS4uLm5lYXJieSA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dHg9MzJiYzkzMzMtNWU1Mi00OTU3LWIwZjYtNWEyYzhmYzdiMjU3JmxhdD01Mi4zNzMyMTcmbG5nPTkuNzEwODAwIj5jYWNoZXMgb2YgdGhpcyB0eXBlPC9hPiwgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3R4PTMyYmM5MzMzLTVlNTItNDk1Ny1iMGY2LTVhMmM4ZmM3YjI1NyZsYXQ9NTIuMzczMjE3JmxuZz05LjcxMDgwMCZmPTEiPnRoYXQgSSBoYXZlbid0IGZvdW5kPC9hPmQCAw8WAh8BBaYBLi4uYWxsIG5lYXJieSA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/bGF0PTUyLjM3MzIxNyZsbmc9OS43MTA4MDAiPmNhY2hlczwvYT4sIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NTIuMzczMjE3JmxuZz05LjcxMDgwMCZmPTEiPnRoYXQgSSBoYXZlbid0IGZvdW5kPC9hPmQCBQ8WAh8BBX4uLi5hbGwgbmVhcmJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cud2F5bWFya2luZy5jb20vZGlyZWN0b3J5LmFzcHg/Zj0xJmxhdD01Mi4zNzMyMTcmbG9uPTkuNzEwODAwIj53YXltYXJrcyBvbiBXYXltYXJraW5nLmNvbTwvYT5kAhMPFgIfA2hkAhcPZBYCAgEPDxYEHwEFrgc8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9tYXAvZGVmYXVsdC5hc3B4P2xhdD01Mi4zNzMyMiZsbmc9OS43MTA4IiB0YXJnZXQ9Il9ibGFuayI+R2VvY2FjaGluZy5jb20gTWFwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9xPU4rNTIlYzIlYjArMjIuMzkzK0UrMDA5JWMyJWIwKzQyLjY0OCsoR0MxWlhYMikrIiB0YXJnZXQ9Il9ibGFuayI+R29vZ2xlIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5tYXBxdWVzdC5jb20vbWFwcy9tYXAuYWRwP3NlYXJjaHR5cGU9YWRkcmVzcyZmb3JtdHlwZT1sYXRsb25nJmxhdGxvbmd0eXBlPWRlY2ltYWwmbGF0aXR1ZGU9NTIuMzczMjImbG9uZ2l0dWRlPTkuNzEwOCZ6b29tPTEwIiB0YXJnZXQ9Il9ibGFuayI+TWFwUXVlc3Q8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMueWFob28uY29tLyNsYXQ9NTIuMzczMjImbG9uPTkuNzEwOCZ6b29tPTE2JnE9NTIuMzczMjIsOS43MTA4JmNvbmY9MSZzdGFydD0xJm12dD1tJnRyZj0wIiB0YXJnZXQ9Il9ibGFuayI+WWFob28gTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmJpbmcuY29tL21hcHMvZGVmYXVsdC5hc3B4P3Y9MiZsdmw9MTQmc3A9cG9pbnQuNTIuMzczMjJfOS43MTA4X0dDMVpYWDIiIHRhcmdldD0iX2JsYW5rIj5CaW5nIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnLz96b29tPTEyJmxhdD01Mi4zNzMyMiZsb249OS43MTA4IiB0YXJnZXQ9Il9ibGFuayI+T3BlbkN5Y2xlTWFwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvP21sYXQ9NTIuMzczMjImbWxvbj05LjcxMDgmem9vbT0xMiIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5TdHJlZXRNYXA8L2E+PC9saT4fA2dkZAIbD2QWBgIBDxYCHwEFETQwMCBMb2dnZWQgVmlzaXRzZAIHDw8WAh8FBUN+L3NlZWsvY2FjaGVfbG9nYm9vay5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4ZGQCCQ8PFgQfBQU9fi9zZWVrL2dhbGxlcnkuYXNweD9ndWlkPTM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OB8BBSJWaWV3IHRoZSBJbWFnZSBHYWxsZXJ5IG9mIDIgaW1hZ2VzZGQCKg8WAh8BBQR0cnVlZAIrDxYCHwEFSWxhdD01Mi4zNzMyMTc7IGxuZz05LjcxMDg7IGd1aWQ9JzM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OCc7DQpkAhUPFgIfA2gWAgIBDw9kFgIfCwUMd2lkdGg6MTIwcHg7ZAIXD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIfBgISFiRmD2QWAgIBDw8WCB8HBQVlbi1VUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2gfCWhkZAIBD2QWAgIBDw8WCB8HBQVkZS1ERR8IBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCWhkZAICD2QWAgIBDw8WCB8HBQVmci1GUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8JaGRkAgMPZBYCAgEPDxYIHwcFBXB0LVBUHwgFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8JaGRkAgQPZBYCAgEPDxYIHwcFBWNzLUNaHwgFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwloZGQCBQ9kFgICAQ8PFggfBwUFc3YtU0UfCAUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwloZGQCBg9kFgICAQ8PFggfBwUFZXMtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8JaGRkAgcPZBYCAgEPDxYIHwcFBWV0LUVFHwgFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCWhkZAIID2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCQ9kFgICAQ8PFggfBwUFZWwtR1IfCAUNU2V0VGVtcExvY2FsZR8BBRDOlc67zrvOt869zrnOus6sHwloZGQCCg9kFgICAQ8PFggfBwUFbHYtTFYfCAUNU2V0VGVtcExvY2FsZR8BBQlMYXR2aWXFoXUfCWhkZAILD2QWAgIBDw8WCB8HBQVubC1OTB8IBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCWhkZAIMD2QWAgIBDw8WCB8HBQVjYS1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCWhkZAIND2QWAgIBDw8WCB8HBQVwbC1QTB8IBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8JaGRkAg4PZBYCAgEPDxYIHwcFBW5iLU5PHwgFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfCWhkZAIPD2QWAgIBDw8WCB8HBQVrby1LUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8JaGRkAhAPZBYCAgEPDxYIHwcFBWh1LUhVHwgFDVNldFRlbXBMb2NhbGUfAQUGTWFn" />
-<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="eWFyHwloZGQCEQ9kFgICAQ8PFggfBwUFcm8tUk8fCAUNU2V0VGVtcExvY2FsZR8BBQhSb23Dom7Egx8JaGRkAksPFgIfAQUQJmNvcHk7IDIwMDAtMjAxM2QCAw8WAh8BBStTZXJ2ZXI6IFdFQjA4OyBCdWlsZDogV2ViLkhvdEZpeF8yMDEzMDMwNS4xZGR4Jntj36ku3tBrrQpihiWzMaplAA==" />
+<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE0MzM5MDkWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFpQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmd1aWQlM2QzNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOThkZAILDxYCHwEFEDQyNiBDYWNoZXMgRm91bmRkAhEPFgIfA2cWAgINDw8WAh8FBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9NGQ0MTY0NjEtZDFhNy00Y2M1LThlZTctMzM2YmI5MTBmZWI4ZGQCFw8PFgIfA2dkZAIhDxYCHwNnZAJPD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIeC18hSXRlbUNvdW50AhIWJGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAggPZBYCAgEPDxYIHwcFBWl0LUlUHwgFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCWhkZAIJD2QWAgIBDw8WCB8HBQVlbC1HUh8IBQ1TZXRUZW1wTG9jYWxlHwEFEM6VzrvOu863zr3Ouc66zqwfCWhkZAIKD2QWAgIBDw8WCB8HBQVsdi1MVh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUxhdHZpZcWhdR8JaGRkAgsPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8JaGRkAgwPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAg0PZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCDg9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg8PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCEA9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIRD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCEQ9kFgICAw8WAh8DaGQCEw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBYuAgEPZBYCZg9kFgICAQ8PFgIfAQUHR0MxWlhYMmRkAgIPFgIfAQWmATxhIGhyZWY9Ii9hYm91dC9jYWNoZV90eXBlcy5hc3B4IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkFib3V0IENhY2hlIFR5cGVzIj48aW1nIHNyYz0iL2ltYWdlcy9XcHRUeXBlcy8yLmdpZiIgYWx0PSJUcmFkaXRpb25hbCBDYWNoZSIgdGl0bGU9IlRyYWRpdGlvbmFsIENhY2hlIiAvPjwvYT5kAgYPZBYEAgEPFgIfA2dkAgYPFgIfA2hkAgsPZBYEAgEPFgIfAQUCNDFkAgUPDxYCHwUFRC9zZWVrL2NhY2hlX2Zhdm9yaXRlZC5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4ZGQCDQ8PFgIfA2hkZAIPDxYEHwEFvgE8cCBjbGFzcz0iT2xkV2FybmluZyBOb0JvdHRvbVNwYWNpbmciPjxzdHJvbmc+Q2FjaGUgSXNzdWVzOjwvc3Ryb25nPjwvcD48dWwgY2xhc3M9Ik9sZFdhcm5pbmciPjxsaT5UaGlzIGNhY2hlIGhhcyBiZWVuIGFyY2hpdmVkLCBidXQgaXMgYXZhaWxhYmxlIGZvciB2aWV3aW5nIGZvciBhcmNoaXZhbCBwdXJwb3Nlcy48L2xpPjwvdWw+HwNnZAIQDxYCHwNoZAIRDxYCHwNoZAISD2QWDAIDDxYCHgVzdHlsZQUPZGlzcGxheTppbmxpbmU7FgICAQ8WAh8BBRtVVE06IDMyVSBFIDU0ODM4OSBOIDU4MDI3ODdkAg0PDxYCHwUFM2NkcGYuYXNweD9ndWlkPTM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OGRkAg8PDxYCHwUFOGNkcGYuYXNweD9ndWlkPTM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OCZsYz01ZGQCEQ8PFgIfBQU5Y2RwZi5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4JmxjPTEwZGQCEw8PFgQfBQWDAWh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9mPWQmaGw9ZW4mc2FkZHI9NTIuMjE2MjUsOS43MTQ0ODMgKEhvbWUgTG9jYXRpb24pJmRhZGRyPTUyLjM3MzIxNyw5LjcxMDgoSGFubm9wb2x5JTNhK0Vpc2xpc2Vuc3RyYXNzZSspHgZUYXJnZXQFBl9ibGFua2RkAhsPZBYIAgEPDxYEHglGb3JlQ29sb3IMHgRfIVNCAgRkZAIDDw8WBB8NDB8OAgRkZAIFDw8WAh8DZxYCHgdvbmNsaWNrBTtzMmdwcygnMzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4Jyk7cmV0dXJuIGZhbHNlO2QCBw8PFgIfA2cWAh8PBSBzMnBob25lKCdHQzFaWFgyJyk7cmV0dXJuIGZhbHNlO2QCFA8WAh8DZ2QCFw9kFghmDxYCHwNoZAIBDw8WAh8DaGRkAgIPDxYCHwNoZGQCAw8WAh8DaGQCGA9kFgICAw8PFgIfAQUTTm8gaGludHMgYXZhaWxhYmxlLhYCHw8FDXJldHVybiBmYWxzZTtkAhkPFgIfA2hkAhwPFgIfA2hkAh4PFgIfA2dkAh8PFgIfA2hkAiIPZBYCAgMPFgIeCWlubmVyaHRtbAUTQWR2ZXJ0aXNpbmcgd2l0aCBVc2QCJg9kFgQCBQ8PFgIfA2dkZAIJDw8WAh8FBTx+L3RyYWNrL3NlYXJjaC5hc3B4P3dpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOThkZAInDw8WAh8DZ2QWAmYPFgIfBgIDFgYCAQ9kFgJmDxUCAOoBPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9NDFjZDU2YjYtMDBmMS00NzAyLWI4NjYtMWEyNjhjNjQ5ZDEzIj5BbGxlIEhhbm5vcG9seSBDYWNoZXM8L2E+PGJyIC8+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD1kZjIxODRhYi1hOWVhLTRkMzAtOThlZC1lYzRlODUxYzM3MDYiPkd1bW1pc2Vl" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="bGU8L2E+ZAICD2QWAmYPFQIOQWx0ZXJuYXRpbmdSb3fhATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTBkY2YzZjg2LTkzNzItNDk5Yy04YjU3LWVkNDE5YmQ0OGUyMSI+TWVpbmUgRW1wZmVobHVuZzwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPWM0NjU0MWZjLTZhZTktNDQ1Mi04ODMzLTQ3MGRkZmJlOWNlZSI+c2tyZWxsPC9hPmQCAw9kFgJmDxUCANsBPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9OWEyNDhkYjktMzA2My00NDU3LTkyMDUtODUxZmJlMDZhMDNlIj5IYW5ub3BvbHk8L2E+PGJyIC8+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD01YzRiMDkxNS01Y2VjLTRmYTEtOGFmZC00YjNjYTY3ZTAwNGUiPmthaTI3MDc8L2E+ZAIoDw8WAh8DZ2QWAmYPFgIfBgIBFgICAQ9kFgJmDxUCAN0BPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9MTQ1NTE3MDgtMGMzYy00Zjk1LTkzNDItMWJiMzExOWU2ZWZlIj5jZ2VvIG1vY2tzPC9hPjxiciAvPiBieSA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9NGQ0MTY0NjEtZDFhNy00Y2M1LThlZTctMzM2YmI5MTBmZWI4Ij5Kb1NhTWFKYTwvYT5kAikPZBYSAgEPDxYCHwNoZGQCAw9kFgICAQ8PFgIfBQVFL2hpZGUvd3B0bGlzdC5hc3B4P1JlZldwdElEPTM2ZDQ1ODcxLWI5OWQtNDZkNi05NWZjLWZmODZhYjU2NGM5OCZEUz0xZGQCBw8PFgYeBlJEUy5JRAspdUdyb3VuZHNwZWFrLldlYi5HUFguV3B0RGF0YVNvdXJjZXMsIFR1Y3Nvbi5Db21tb24uTGVnYWN5LCBWZXJzaW9uPTMuMC40ODI2LjIwMzgsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAEeB1JXUFQuSUQoKwQHMTQzMzkwOR8DaGRkAgkPDxYCHwNnZBYCAgEPDxYEHwUFKi9tYXAvZGVmYXVsdC5hc3B4P2xhdD01Mi4zNzMyMTcmbG5nPTkuNzEwOB8DZ2RkAg8PFgIfAQWHAS4uLm90aGVyIGNhY2hlcyA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dT1kYW5pZWwzNTQiPmhpZGRlbjwvYT4gb3IgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3VsPWRhbmllbDM1NCI+Zm91bmQ8L2E+IGJ5IHRoaXMgdXNlcmQCEQ9kFgYCAQ8WAh8BBf8BLi4ubmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD0zMmJjOTMzMy01ZTUyLTQ5NTctYjBmNi01YTJjOGZjN2IyNTcmbGF0PTUyLjM3MzIxNyZsbmc9OS43MTA4MDAiPmNhY2hlcyBvZiB0aGlzIHR5cGU8L2E+LCA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dHg9MzJiYzkzMzMtNWU1Mi00OTU3LWIwZjYtNWEyYzhmYzdiMjU3JmxhdD01Mi4zNzMyMTcmbG5nPTkuNzEwODAwJmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIDDxYCHwEFpgEuLi5hbGwgbmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NTIuMzczMjE3JmxuZz05LjcxMDgwMCI+Y2FjaGVzPC9hPiwgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi4zNzMyMTcmbG5nPTkuNzEwODAwJmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIFDxYCHwEFfi4uLmFsbCBuZWFyYnkgPGEgaHJlZj0iaHR0cDovL3d3dy53YXltYXJraW5nLmNvbS9kaXJlY3RvcnkuYXNweD9mPTEmbGF0PTUyLjM3MzIxNyZsb249OS43MTA4MDAiPndheW1hcmtzIG9uIFdheW1hcmtpbmcuY29tPC9hPmQCEw8WAh8DaGQCFw9kFgICAQ8PFgQfAQWuBzxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL21hcC9kZWZhdWx0LmFzcHg/bGF0PTUyLjM3MzIyJmxuZz05LjcxMDgiIHRhcmdldD0iX2JsYW5rIj5HZW9jYWNoaW5nLmNvbSBNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP3E9Tis1MiVjMiViMCsyMi4zOTMrRSswMDklYzIlYjArNDIuNjQ4KyhHQzFaWFgyKSsiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGUgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm1hcHF1ZXN0LmNvbS9tYXBzL21hcC5hZHA/c2VhcmNodHlwZT1hZGRyZXNzJmZvcm10eXBlPWxhdGxvbmcmbGF0bG9uZ3R5cGU9ZGVjaW1hbCZsYXRpdHVkZT01Mi4zNzMyMiZsb25naXR1ZGU9OS43MTA4Jnpvb209MTAiIHRhcmdldD0iX2JsYW5rIj5NYXBRdWVzdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy55YWhvby5jb20vI2xhdD01Mi4zNzMyMiZsb249OS43MTA4Jnpvb209MTYmcT01Mi4zNzMyMiw5LjcxMDgmY29uZj0xJnN0YXJ0PTEmbXZ0PW0mdHJmPTAiIHRhcmdldD0iX2JsYW5rIj5ZYWhvbyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYmluZy5jb20vbWFwcy9kZWZhdWx0LmFzcHg/dj0yJmx2bD0xNCZzcD1wb2ludC41Mi4zNzMyMl85LjcxMDhfR0MxWlhYMiIgdGFyZ2V0PSJfYmxhbmsiPkJpbmcgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5jeWNsZW1hcC5vcmcvP3pvb209MTImbGF0PTUyLjM3MzIyJmxvbj05LjcxMDgiIHRhcmdldD0iX2JsYW5rIj5PcGVuQ3ljbGVNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy8/bWxhdD01Mi4zNzMyMiZtbG9uPTkuNzEwOCZ6b29tPTEyIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcDwvYT48L2xpPh8DZ2RkAhsPZBYGAgEPFgIfAQURNDAwIExvZ2dlZCBWaXNpdHNkAgcPDxYCHwUFQ34vc2Vlay9jYWNoZV9sb2dib29rLmFzcHg/Z3VpZD0zNmQ0NTg3MS1iOTlkLTQ2ZDYtOTVmYy1mZjg2YWI1NjRjOThkZAIJDw8WBB8FBT1+L3NlZWsvZ2FsbGVyeS5hc3B4P2d1aWQ9MzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4HwEFIlZpZXcgdGhlIEltYWdlIEdhbGxlcnkgb2YgMiBpbWFnZXNkZAIqDxYCHwEFBHRydWVkAisPFgIfAQVJbGF0PTUyLjM3MzIxNzsgbG5nPTkuNzEwODsgZ3VpZD0nMzZkNDU4NzEtYjk5ZC00NmQ2LTk1ZmMtZmY4NmFiNTY0Yzk4JzsNCmQCFQ8WAh8DaBYCAgEPD2QWAh8LBQx3aWR0aDoxNjBweDtkAhcPZBYEAgMPFgIfAQUHRW5nbGlzaGQCBQ8WAh8GAhIWJGYPZBYCAgEPDxYIHwcFBWVuLVVTHwgFDVNldFRlbXBMb2NhbGUfAQUHRW5nbGlzaB8JaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAggPZBYCAgEPDxYIHwcFBWl0LUlUHwgFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCWhkZAIJD2QWAgIBDw8WCB8HBQVlbC1HUh8IBQ1TZXRUZW1wTG9jYWxlHwEFEM6VzrvOu863zr3Ouc66zqwfCWhkZAIKD2QWAgIBDw8WCB8HBQVsdi1MVh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUxhdHZpZcWhdR8JaGRkAgsPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8J" />
+<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="aGRkAgwPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAg0PZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCDg9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg8PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCEA9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIRD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCSw8WAh8BBRAmY29weTsgMjAwMC0yMDEzZAIDDxYCHwEFLFNlcnZlcjogV0VCMDk7IEJ1aWxkOiBXZWIuUmVsZWFzZV8yMDEzMDMxOS4xZGRvH7LlKQnpBEwbxxKtYCWS+E7TsQ==" />
</div>
<script type="text/javascript">
@@ -105,13 +105,13 @@ function __doPostBack(eventTarget, eventArgument) { </script>
-<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981141913700679" type="text/javascript"></script>
+<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981142902716410" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=ffffffff940d030f" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=ffffffff940d030f" type="text/javascript"></script>
-<script src="/ScriptResource.axd?d=ta9FpyAxahVxAwIi4KH4fLrER4dhAHVZEHqfuwoMKeIFYco8rq2vTcJhj1C7m6CbnMvPzkWobIv3yy5Gw_S65pLlwJbbXfoezEw7VgaAOb0FZm5nUDhB0Kc7jUZu4axIWNPse9yi0WK2cMS3dxR0JscuXodah6lkVIrCxPN__ZGWWgILYh5DZwQF10JzlsBz09iE1PfC5MpOmaeQLW9DY5uWdcs1" type="text/javascript"></script>
-<script src="/ScriptResource.axd?d=Q8f2pHCS_7Lt124xuCpizHJtNYaT4mbZFqNy2qcC6Ub-FCnqvMJxQaypmTD3brUHXWmtBGNHVnSKkvDF5AJ-CP-xOVM9XwSTxUaDZ5N8uJ-c1mBAK1vrCLRpx11ypBcBHMtRrct5b01BiNMMlFWbjmjbQvTiyjey12gGn_LgcyNaBXqXp5kIh1ebWJv8jKqiiaCR_YgCduigOjHY_dAHWwuj2iWmtt0urJh-hhtC8RFW3R1h9Xkl25eIIwqB7CbXBKUY5SuLoyRBLDkJa4gVrGsSwsASy8bUQdYWndXTtY5m1MWUyPWaQYv3lSIxofT6UHM0OBe4wK6DfiD-BBOpddbZQjUBUu0vW6IXJkOjBIKAZWocaqVwoDdV6ftQioxWyVbnjlEV-9jMvlubz4L_kjw1QQ5kaXJHkdIzyklcybxnnH7t53OfdqkS115kiSPR64IJaV9K7Nf6_8oXEN2w3GuOduAPWG4gOnw_1-foqce_XcZBMACUvahRnbYhUKx9a5YQSVv49lH1kd_gowbVhv9WfJ_VbpJz48ieYoDTJ0DShpngm4IcE4CauWTqZ-KJDy6dssNfPEs8mUCjSflV6EzKZWx7apbxU9Ttm3gM-P-re5W2yUh6wfArc6tbvw93gkK8TxtzUeQo8Noel60oatAoQn68Ly1KlCK_PA9A-pahiK0R0" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=yD98wvSb5VN7041hOgZOmkqQVzI1tnBUcR4JaroKEQeSLINMok8wJkEpv14P0ALxKQMdX9Uy6nsNaPxA7d2UqjQ2sYLbpExAJ83JTyN-pkZ2bqOzcSw5bU6coW4Fkg68lE7WA86GU2ExfrvgRWgp0IApCrKMjNJUB5J7XE2OSt6MaXp0qMKnx4NX9LIX7va1Q_FvwA9UawNSTmt_G4BjUQv6zL81" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=UF7CoL95c_vLaLGsauDTR16zTvN9HxO7Z7dSX0HBBpXtTepxYlkbh743-78oMOEuI_3aLte7xb0-e6V19L_Hk7z4f9QOasPcNlM1hxpFexvFPJfRJzWGp-8O59Hd76flTCJMMO1C2W78ywI_ed1zlZ4zwqVTjLxFOBXV5gyTf5x5ufra9ngZk7bLz7abwYQrLLX-Cwy5EAIGUeMTbqaOmXIafG3b4qS3W0c8k0aCp7DUV1IsvjP1wvdHhxfDrdI5YdAx0kv6nXRWt5mJxjtPKXH1Qjpx8bXIz9rhEfO0oNqnuy_SMtZ1XLyp3UE9tPyWhVRhf6ti2PBL-2-gEWzl_Q0XDmTyGyzoLoLGrClYwEDjYrcQKrAAPM50g9OvnEA6pYxEz4kO7osR0kth80l5KSoEAR2cQvoMCckCOi5Ojw-yK2p56OY-JdKsXMLNNNYIPRfEgVrO6cHT5BV5A4fIUA4Q_B9w2iZFPVzFYxFbliC2fMFv7LYa1_eyTiqxiz_vfMIGPVpEr01CBIulzwpEoWlIwMZIYLmB9VOOk9GSERemTJdhwwVHI3lYYuxUfRn28bvxPZMqsUqhHKDd4m6CDKQqOB1VIdtgk63rJfVtmigIFAFFaV6K36rPqVAthL1_KdD41_RBQqEOvv8BAYDbV6PtCdoX9nRlMYdrXS9niT8A1JaT0" type="text/javascript"></script>
<script src="js/cachedetails.js" type="text/javascript"></script>
<script src="../js/latlng.js" type="text/javascript"></script>
<script type="text/javascript">
@@ -152,11 +152,11 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet </p>
<p class="SignedInText">
<strong>
- Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</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%3fwp%3dGC1ZXX2%26Submit6%3dGo">Sign Out</a>)<br />
+ Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</a></strong> (<a id="ctl00_hlSignOut" accesskey="s" title="Sign Out" href="https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2fseek%2fcache_details.aspx%3fguid%3d36d45871-b99d-46d6-95fc-ff86ab564c98">Sign Out</a>)<br />
<span id="ctl00_litPMLevel">Premium Member</span>
<strong style="display: block">
- 419 Caches Found</strong>
+ 426 Caches Found</strong>
</p>
</div>
@@ -732,14 +732,14 @@ Man weiß hier Bescheid. Dieser Cache ist rund um die Uhr zu finden, ohne ein Ge <script type='text/javascript'>
googletag.cmd.push(function() {{
-googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_38bcbf51-2a32-4a5c-814d-35c3a016a334').addService(googletag.pubads());
+googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_43624837-2087-4fc7-a1cb-2cbbb050d4dd').addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
}});
</script>
-<div id='div_38bcbf51-2a32-4a5c-814d-35c3a016a334'>
+<div id='div_43624837-2087-4fc7-a1cb-2cbbb050d4dd'>
<script type='text/javascript'>
-googletag.cmd.push(function() { googletag.display('div_38bcbf51-2a32-4a5c-814d-35c3a016a334'); });
+googletag.cmd.push(function() { googletag.display('div_43624837-2087-4fc7-a1cb-2cbbb050d4dd'); });
</script>
</div>
@@ -818,6 +818,31 @@ googletag.cmd.push(function() { googletag.display('div_38bcbf51-2a32-4a5c-814d-3 +<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">My Bookmark Lists</h3>
+ <div class="WidgetBody">
+
+
+ <ul class="BookmarkList">
+
+ <li class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=14551708-0c3c-4f95-9342-1bb3119e6efe">cgeo mocks</a><br /> by <a href="http://www.geocaching.com/profile/?guid=4d416461-d1a7-4cc5-8ee7-336bb910feb8">JoSaMaJa</a>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
</div>
@@ -935,7 +960,7 @@ googletag.cmd.push(function() { googletag.display('div_38bcbf51-2a32-4a5c-814d-3 </div>
<p>
<small>
- Current Time: <time datetime="2013-03-08T10:23:49Z">03/08/2013 10:23:49 (UTC-08:00) Pacific Time (US & Canada) (18:23 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2012-10-13T22:07:50Z">2012-10-13T22:07:50Z</time> on 10/13/2012 15:07:50 Pacific Daylight Time (22:07 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
+ Current Time: <time datetime="2013-03-27T04:22:51Z">03/27/2013 04:22:51 Pacific Daylight Time (11:22 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2012-10-13T22:07:50Z">2012-10-13T22:07:50Z</time> on 10/13/2012 15:07:50 Pacific Daylight Time (22:07 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
</small>
</p>
<div id="topScroll" class="TopScroll" style="display:none;">
@@ -1876,9 +1901,9 @@ var userDefinedCoords = {"status":"fail","data":{"isUserDefined":false,"oldLatLn mapLatLng = {"lat":52.37322,"lng":9.7108,"type":2,"name":"Hannopoly: Eislisenstrasse "};
var ccConversions = [{"t":"Decimal","k":"DD","d":"WGS84","v":"52.373217, 009.710800"},{"t":"DDD MM SS.SSS","k":"DMS","d":"WGS84","v":"N 52° 22' 23.581\" E 009° 42' 38.880\""},{"t":"UTM","k":"UTM","d":"WGS84","v":"32U E 548389 N 5802787"}];
userInfo = {ID: 4793174};
-userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4NSVGNBXHR5C6PR3SY43LQLEMQAK6P6L3C22DSDANGH7U74UR4YVOXN4MXX6S6OPU5PXVWO75AFYO4Q';
+userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4NSVGNBXHR5C6PR3SY43LQLEMQAK6P6L3C22DSDA4D72N4M4LT4RTMAINHDIQZVFWBKCSVGKFR2GWHQ';
includeAvatars = true;
-initalLogs = {"status":"success", "data": [{"LogID":196904781,"CacheID":1433909,"LogGuid":"26f89faf-aa71-406e-9ea3-cdfa18a846e6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"s. mein Log bei Seestr.","Created":"2011-11-05","Visited":"2011-11-05","UserName":"daniel354","MembershipLevel":3,"AccountID":1477880,"AccountGuid":"8186d342-6f46-4d9e-8ba3-2e7b51426798","Email":"","AvatarImage":"b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg","GeocacheFindCount":5221,"GeocacheHideCount":42,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":196899232,"CacheID":1433909,"LogGuid":"f755b34d-0cc1-4740-827a-07311fe1a3b1","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"Äh, Logbuch ist nicht mehr vor Ort - wie kann man da \"Found\" loggen ? Ansonsten würde ich auch \"Found\" loggen da ich Dienstag vor Ort war und genau weiß vor sich der Cache befand....","Created":"2011-11-05","Visited":"2011-11-05","UserName":"blafoo","MembershipLevel":3,"AccountID":1912314,"AccountGuid":"0564a940-8311-40ee-8e76-7e91b2cf6284","Email":"","AvatarImage":"50f83123-27d8-4dcf-9fde-2af006efaf2b.jpg","GeocacheFindCount":747,"GeocacheHideCount":8,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":189731769,"CacheID":1433909,"LogGuid":"e674d2ed-7cac-4b49-96b1-3020e5c7f479","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Archive","LogTypeImage":"5.png","LogText":"Auch hier fehlt mir leider eine passende neue Idee. Wie alle archivierten Hannopolys wird auch diese Besitzrechtskarte ab sofort auf www.hannopoly.de zu finden sein. Danke für die sehr schönen Logs!","Created":"2011-10-01","Visited":"2011-10-01","UserName":"daniel354","MembershipLevel":3,"AccountID":1477880,"AccountGuid":"8186d342-6f46-4d9e-8ba3-2e7b51426798","Email":"","AvatarImage":"b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg","GeocacheFindCount":5221,"GeocacheHideCount":42,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":189390319,"CacheID":1433909,"LogGuid":"4510051e-2c87-4d09-b77d-d90f645bafe9","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"wahrscheinlich nicht mehr so schön wie geplant, dennoch alles da, was der logger so braucht ... sogar´n herry ;-)<br /><br />dfdc","Created":"2011-09-29","Visited":"2011-09-29","UserName":"Sir5al","MembershipLevel":3,"AccountID":3229535,"AccountGuid":"66de7735-1888-479b-8dbd-ada710747374","Email":"","AvatarImage":"9da1d6ed-3a3f-47cb-aba3-f5550abe7d11.jpg","GeocacheFindCount":1065,"GeocacheHideCount":4,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":186118551,"CacheID":1433909,"LogGuid":"acce0114-1712-4f32-b120-4b8bd4ef7200","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Leider habe ich erst gesehen das der Cache auf Eis liegt nach dem ich ihn gefunden habe.<br /><br />Ich konnte ihn denn noch gut finden und mich im großem Logbuch eintragen!<br /><br /><br />DFDC","Created":"2011-09-11","Visited":"2011-08-27","UserName":"Smootje1","MembershipLevel":3,"AccountID":4186572,"AccountGuid":"41b96bb9-ed81-473a-9032-1096d5c94423","Email":"","AvatarImage":"6052e05a-f2ce-45f1-86c4-c56fe8da6d2b.jpg","GeocacheFindCount":4389,"GeocacheHideCount":37,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":171398380,"CacheID":1433909,"LogGuid":"845e6ead-bf44-4dd8-900e-81a78afc0887","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"Daniel, du sprichst uns aus der Seele.. gestern Nacht dagewesen, um ihn ENDLICH zu heben, aber ohne Erfolg.. SCHNIEF","Created":"2011-07-08","Visited":"2011-07-08","UserName":"Steinbreit","MembershipLevel":3,"AccountID":4430835,"AccountGuid":"86281f53-49a2-4051-bc15-394d43724d65","Email":"","AvatarImage":"90f468a9-7059-43a7-a3c5-256879458a63.jpg","GeocacheFindCount":495,"GeocacheHideCount":8,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":171063566,"CacheID":1433909,"LogGuid":"fc463b7b-ce41-4d16-a7a4-2107b8454a91","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Temporarily Disable Listing","LogTypeImage":"22.png","LogText":"Mist...","Created":"2011-07-06","Visited":"2011-07-06","UserName":"daniel354","MembershipLevel":3,"AccountID":1477880,"AccountGuid":"8186d342-6f46-4d9e-8ba3-2e7b51426798","Email":"","AvatarImage":"b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg","GeocacheFindCount":5221,"GeocacheHideCount":42,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":170116614,"CacheID":1433909,"LogGuid":"09c89c9c-ec9f-4387-a6ae-05fe6d11d9bf","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ging schneller als gedacht. :-)<br /><br />TFTC","Created":"2011-07-02","Visited":"2011-07-01","UserName":"urbannature","MembershipLevel":1,"AccountID":2510965,"AccountGuid":"1f223c0d-d9ee-44c4-b411-35eee724b868","Email":"","AvatarImage":"476ea58f-a917-46c4-8e5a-b99484b514f6.jpg","GeocacheFindCount":2213,"GeocacheHideCount":10,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":168683009,"CacheID":1433909,"LogGuid":"53e3436d-3bbc-4b46-aa34-ca28bbd0723a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Erster Hanopoly-Cach! Nach langem suchen und richtig lesen gefunden! ;)","Created":"2011-06-24","Visited":"2011-06-24","UserName":"anady","MembershipLevel":3,"AccountID":3551788,"AccountGuid":"c6d0f76b-df41-44d0-9d1f-e60b0ffa4f0a","Email":"","AvatarImage":"","GeocacheFindCount":148,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":168640932,"CacheID":1433909,"LogGuid":"fc364b9d-8ddb-4d0e-aa42-09b4dce93c94","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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! :-)","Created":"2011-06-24","Visited":"2011-06-24","UserName":"CriDi","MembershipLevel":3,"AccountID":3383487,"AccountGuid":"78aeaa8b-044d-40ac-8a80-656a1c7f85c1","Email":"","AvatarImage":"09f0aca7-6fcf-4d9a-bbf9-0f4b31c68f36.jpg","GeocacheFindCount":1087,"GeocacheHideCount":15,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":167383966,"CacheID":1433909,"LogGuid":"6a4c21a6-c795-4d8e-8f0c-a4d7a357f837","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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!","Created":"2011-06-18","Visited":"2011-06-18","UserName":"2bupa","MembershipLevel":3,"AccountID":2675170,"AccountGuid":"e6a84779-ad63-4ba1-93fa-558a7190c8b4","Email":"","AvatarImage":"e30c21ec-8bce-4b90-9c6f-ee7e618da9fe.jpg","GeocacheFindCount":4991,"GeocacheHideCount":14,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":167163052,"CacheID":1433909,"LogGuid":"2d51d81f-1581-4ae6-9254-0a5ffa163585","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"War schon öfters hier, aber die Muggels saßen da nur so rum. Heute früh aufgestanden....<br /><br />DFDC grüße Putze","Created":"2011-06-16","Visited":"2011-06-15","UserName":"Weltallputze","MembershipLevel":1,"AccountID":4512106,"AccountGuid":"07449e94-85c8-4d2f-b387-cb0910b2d854","Email":"","AvatarImage":"0b9746f6-1fd4-47b9-8f07-5b2bb3b21cc0.jpg","GeocacheFindCount":226,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":166633564,"CacheID":1433909,"LogGuid":"f6c8b6f6-527b-4ea0-ba85-8637cf47bd73","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Voll geil. Juhu und danke","Created":"2011-06-13","Visited":"2011-06-13","UserName":"Lumisch","MembershipLevel":1,"AccountID":4464524,"AccountGuid":"fcc7da31-928a-418f-ae3e-9f015b41ead6","Email":"","AvatarImage":"","GeocacheFindCount":54,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":165707570,"CacheID":1433909,"LogGuid":"1adb0f76-9bfa-47a4-a7f2-4b3aab0ffcfb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"lecker eis :)","Created":"2011-06-09","Visited":"2011-06-09","UserName":"Nico Rohrssen","MembershipLevel":1,"AccountID":4523346,"AccountGuid":"3c66a437-1bbc-4cb1-bda0-8f609ac6efef","Email":"","AvatarImage":"","GeocacheFindCount":25,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":164530395,"CacheID":1433909,"LogGuid":"477f0186-9c2a-40f9-8696-98afb9868205","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nach langer sorgfältiger Vorplanung (an welchem Tag lohnt sich das frühe Aufstehen?) bei Sonnenaufgang angeschlichen und... gefunden! Gotcha! DfdC!","Created":"2011-06-03","Visited":"2011-06-03","UserName":"Deistermonster","MembershipLevel":3,"AccountID":4165483,"AccountGuid":"116149cb-3e0f-4c50-b51e-95b756d64da4","Email":"","AvatarImage":"54fe057c-f79a-4d82-b587-53c5b2b9386f.jpg","GeocacheFindCount":1640,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":164413372,"CacheID":1433909,"LogGuid":"e2c9bdad-9282-49f2-aba4-7e2ac058afa5","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Morgens um 6 Uhr muggelfrei geloggt.<img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" />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","Created":"2011-06-03","Visited":"2011-06-03","UserName":"Soukousa","MembershipLevel":3,"AccountID":4154048,"AccountGuid":"399bef0c-1cdd-4024-a00e-3199484131af","Email":"","AvatarImage":"8480d5e4-f43e-48e5-a449-c01ce424ff05.jpg","GeocacheFindCount":1640,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":163515249,"CacheID":1433909,"LogGuid":"cda47e99-cd5f-4fc1-aa40-cb3bccff4f46","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Bei einem leckerem Eis das Logbuch siegniert.<br /><br />TFTC<br />Don Canallie","Created":"2011-05-29","Visited":"2011-05-29","UserName":"Don Canallie","MembershipLevel":3,"AccountID":3891097,"AccountGuid":"80970931-2e97-4291-abfd-564635f5d86f","Email":"","AvatarImage":"e6944e25-df18-45fb-acca-93ee08e923da.jpg","GeocacheFindCount":795,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":163307833,"CacheID":1433909,"LogGuid":"caad1abc-eb5c-4b99-ae92-232057825f41","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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\" />","Created":"2011-05-29","Visited":"2011-05-28","UserName":"rimini08","MembershipLevel":3,"AccountID":4088331,"AccountGuid":"2fe34526-d72d-478e-9b7f-9dc5c3e1d6c1","Email":"","AvatarImage":"","GeocacheFindCount":510,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":163325464,"CacheID":1433909,"LogGuid":"c3475f2f-1e55-43aa-89a8-3a1ce8ddc525","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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\" /><br /><br /><img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" /> <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\" /></font></font></font></font></font></font></font></font></font></font></font></b><font size=\"3\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"></font></font></font></font></font></font></font></font></font></font></font></font></b></font></b>","Created":"2011-05-29","Visited":"2011-05-22","UserName":"Johansibär","MembershipLevel":1,"AccountID":1858674,"AccountGuid":"05f9d911-9cdc-4224-84b3-8e4923228958","Email":"","AvatarImage":"4d235c2f-81b6-42c4-a28c-5df2182a289d.jpg","GeocacheFindCount":1199,"GeocacheHideCount":17,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":162246062,"CacheID":1433909,"LogGuid":"e9eec580-6831-40ba-8530-c9722017a142","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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.","Created":"2011-05-22","Visited":"2011-05-22","UserName":"Flunin","MembershipLevel":3,"AccountID":3435189,"AccountGuid":"4c851b2a-967c-427d-91eb-268b5ffb0f0a","Email":"","AvatarImage":"","GeocacheFindCount":625,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":161705502,"CacheID":1433909,"LogGuid":"0b303d23-fb26-4b29-b5d2-2bb8828682ae","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nach nem kleinen Tipp dann doch noch loggen können :-)<br />DFDC","Created":"2011-05-20","Visited":"2011-05-20","UserName":"Leafhoppers","MembershipLevel":1,"AccountID":3766111,"AccountGuid":"37bd64d5-a74f-4a12-b040-460f83652198","Email":"","AvatarImage":"","GeocacheFindCount":588,"GeocacheHideCount":0,"ChallengesCompleted":7,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":161990811,"CacheID":1433909,"LogGuid":"1ac63b3e-075a-48b7-9a1f-222b19c71868","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zusammen mit i-teg um 15:25 Uhr geloggt. <br />TFTC!<br />#488","Created":"2011-05-21","Visited":"2011-05-19","UserName":"justify-jay","MembershipLevel":1,"AccountID":3936481,"AccountGuid":"af49ff9e-5331-4565-97e8-5f5bf45e33b2","Email":"","AvatarImage":"198d173a-7efa-416c-b495-b15ed30f94a1.jpg","GeocacheFindCount":1105,"GeocacheHideCount":2,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":161988577,"CacheID":1433909,"LogGuid":"19a1ae8a-e3d7-492c-a866-002064968183","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf Spontantour zusammen mit justify-jay um 15:25 Uhr zum Logbuch durchgedrungen :-) ! <br />TFTC!<br />#488","Created":"2011-05-21","Visited":"2011-05-19","UserName":"i-teg","MembershipLevel":1,"AccountID":3936536,"AccountGuid":"a30caa8b-0ba4-4a20-875f-ac825eacbf41","Email":"","AvatarImage":"533a43c0-8416-452f-8011-f575dee42268.jpg","GeocacheFindCount":1105,"GeocacheHideCount":2,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":161489085,"CacheID":1433909,"LogGuid":"0686f7dd-e12b-4b99-b7c7-24df895f48fb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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","Created":"2011-05-18","Visited":"2011-05-18","UserName":"Kartoffelhunter","MembershipLevel":3,"AccountID":3579558,"AccountGuid":"344121a1-10f3-443a-9ff6-f90fc43ba8be","Email":"","AvatarImage":"61105259-e319-4793-9bc3-51aae0eb9e10.jpg","GeocacheFindCount":1027,"GeocacheHideCount":2,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":160254911,"CacheID":1433909,"LogGuid":"f315eb63-43e2-48ad-a3b9-fc775dfc9e27","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Unsere erste gefundene Hannopoly-Karte, bei bestem Wetter. Und zur Belohnung ein Lecker Eis für Leona, Tomke und mich.","Created":"2011-05-11","Visited":"2011-05-11","UserName":"janko74","MembershipLevel":1,"AccountID":4460156,"AccountGuid":"bc9f2cab-dad8-465f-8b73-0d7d420e043c","Email":"","AvatarImage":"","GeocacheFindCount":4,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 400, "rows": 400 } };
+initalLogs = {"status":"success", "data": [{"LogID":196904781,"CacheID":1433909,"LogGuid":"26f89faf-aa71-406e-9ea3-cdfa18a846e6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"s. mein Log bei Seestr.","Created":"2011-11-05","Visited":"2011-11-05","UserName":"daniel354","MembershipLevel":3,"AccountID":1477880,"AccountGuid":"8186d342-6f46-4d9e-8ba3-2e7b51426798","Email":"","AvatarImage":"b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg","GeocacheFindCount":5232,"GeocacheHideCount":42,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":196899232,"CacheID":1433909,"LogGuid":"f755b34d-0cc1-4740-827a-07311fe1a3b1","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"Äh, Logbuch ist nicht mehr vor Ort - wie kann man da \"Found\" loggen ? Ansonsten würde ich auch \"Found\" loggen da ich Dienstag vor Ort war und genau weiß vor sich der Cache befand....","Created":"2011-11-05","Visited":"2011-11-05","UserName":"blafoo","MembershipLevel":3,"AccountID":1912314,"AccountGuid":"0564a940-8311-40ee-8e76-7e91b2cf6284","Email":"","AvatarImage":"50f83123-27d8-4dcf-9fde-2af006efaf2b.jpg","GeocacheFindCount":747,"GeocacheHideCount":8,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":189731769,"CacheID":1433909,"LogGuid":"e674d2ed-7cac-4b49-96b1-3020e5c7f479","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Archive","LogTypeImage":"5.png","LogText":"Auch hier fehlt mir leider eine passende neue Idee. Wie alle archivierten Hannopolys wird auch diese Besitzrechtskarte ab sofort auf www.hannopoly.de zu finden sein. Danke für die sehr schönen Logs!","Created":"2011-10-01","Visited":"2011-10-01","UserName":"daniel354","MembershipLevel":3,"AccountID":1477880,"AccountGuid":"8186d342-6f46-4d9e-8ba3-2e7b51426798","Email":"","AvatarImage":"b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg","GeocacheFindCount":5232,"GeocacheHideCount":42,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":189390319,"CacheID":1433909,"LogGuid":"4510051e-2c87-4d09-b77d-d90f645bafe9","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"wahrscheinlich nicht mehr so schön wie geplant, dennoch alles da, was der logger so braucht ... sogar´n herry ;-)<br /><br />dfdc","Created":"2011-09-29","Visited":"2011-09-29","UserName":"Sir5al","MembershipLevel":3,"AccountID":3229535,"AccountGuid":"66de7735-1888-479b-8dbd-ada710747374","Email":"","AvatarImage":"9da1d6ed-3a3f-47cb-aba3-f5550abe7d11.jpg","GeocacheFindCount":1070,"GeocacheHideCount":5,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":186118551,"CacheID":1433909,"LogGuid":"acce0114-1712-4f32-b120-4b8bd4ef7200","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Leider habe ich erst gesehen das der Cache auf Eis liegt nach dem ich ihn gefunden habe.<br /><br />Ich konnte ihn denn noch gut finden und mich im großem Logbuch eintragen!<br /><br /><br />DFDC","Created":"2011-09-11","Visited":"2011-08-27","UserName":"Smootje1","MembershipLevel":3,"AccountID":4186572,"AccountGuid":"41b96bb9-ed81-473a-9032-1096d5c94423","Email":"","AvatarImage":"6052e05a-f2ce-45f1-86c4-c56fe8da6d2b.jpg","GeocacheFindCount":4498,"GeocacheHideCount":37,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":171398380,"CacheID":1433909,"LogGuid":"845e6ead-bf44-4dd8-900e-81a78afc0887","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"Daniel, du sprichst uns aus der Seele.. gestern Nacht dagewesen, um ihn ENDLICH zu heben, aber ohne Erfolg.. SCHNIEF","Created":"2011-07-08","Visited":"2011-07-08","UserName":"Steinbreit","MembershipLevel":3,"AccountID":4430835,"AccountGuid":"86281f53-49a2-4051-bc15-394d43724d65","Email":"","AvatarImage":"90f468a9-7059-43a7-a3c5-256879458a63.jpg","GeocacheFindCount":495,"GeocacheHideCount":8,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":171063566,"CacheID":1433909,"LogGuid":"fc463b7b-ce41-4d16-a7a4-2107b8454a91","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Temporarily Disable Listing","LogTypeImage":"22.png","LogText":"Mist...","Created":"2011-07-06","Visited":"2011-07-06","UserName":"daniel354","MembershipLevel":3,"AccountID":1477880,"AccountGuid":"8186d342-6f46-4d9e-8ba3-2e7b51426798","Email":"","AvatarImage":"b82a4dec-bd35-4cc8-b6dc-fe8bced5cbca.jpg","GeocacheFindCount":5232,"GeocacheHideCount":42,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":170116614,"CacheID":1433909,"LogGuid":"09c89c9c-ec9f-4387-a6ae-05fe6d11d9bf","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ging schneller als gedacht. :-)<br /><br />TFTC","Created":"2011-07-02","Visited":"2011-07-01","UserName":"urbannature","MembershipLevel":1,"AccountID":2510965,"AccountGuid":"1f223c0d-d9ee-44c4-b411-35eee724b868","Email":"","AvatarImage":"476ea58f-a917-46c4-8e5a-b99484b514f6.jpg","GeocacheFindCount":2228,"GeocacheHideCount":10,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":168683009,"CacheID":1433909,"LogGuid":"53e3436d-3bbc-4b46-aa34-ca28bbd0723a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Erster Hanopoly-Cach! Nach langem suchen und richtig lesen gefunden! ;)","Created":"2011-06-24","Visited":"2011-06-24","UserName":"anady","MembershipLevel":3,"AccountID":3551788,"AccountGuid":"c6d0f76b-df41-44d0-9d1f-e60b0ffa4f0a","Email":"","AvatarImage":"","GeocacheFindCount":148,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":168640932,"CacheID":1433909,"LogGuid":"fc364b9d-8ddb-4d0e-aa42-09b4dce93c94","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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! :-)","Created":"2011-06-24","Visited":"2011-06-24","UserName":"CriDi","MembershipLevel":3,"AccountID":3383487,"AccountGuid":"78aeaa8b-044d-40ac-8a80-656a1c7f85c1","Email":"","AvatarImage":"09f0aca7-6fcf-4d9a-bbf9-0f4b31c68f36.jpg","GeocacheFindCount":1147,"GeocacheHideCount":16,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":167383966,"CacheID":1433909,"LogGuid":"6a4c21a6-c795-4d8e-8f0c-a4d7a357f837","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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!","Created":"2011-06-18","Visited":"2011-06-18","UserName":"2bupa","MembershipLevel":3,"AccountID":2675170,"AccountGuid":"e6a84779-ad63-4ba1-93fa-558a7190c8b4","Email":"","AvatarImage":"e30c21ec-8bce-4b90-9c6f-ee7e618da9fe.jpg","GeocacheFindCount":5096,"GeocacheHideCount":14,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":167163052,"CacheID":1433909,"LogGuid":"2d51d81f-1581-4ae6-9254-0a5ffa163585","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"War schon öfters hier, aber die Muggels saßen da nur so rum. Heute früh aufgestanden....<br /><br />DFDC grüße Putze","Created":"2011-06-16","Visited":"2011-06-15","UserName":"Weltallputze","MembershipLevel":1,"AccountID":4512106,"AccountGuid":"07449e94-85c8-4d2f-b387-cb0910b2d854","Email":"","AvatarImage":"0b9746f6-1fd4-47b9-8f07-5b2bb3b21cc0.jpg","GeocacheFindCount":226,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":166633564,"CacheID":1433909,"LogGuid":"f6c8b6f6-527b-4ea0-ba85-8637cf47bd73","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Voll geil. Juhu und danke","Created":"2011-06-13","Visited":"2011-06-13","UserName":"Lumisch","MembershipLevel":1,"AccountID":4464524,"AccountGuid":"fcc7da31-928a-418f-ae3e-9f015b41ead6","Email":"","AvatarImage":"","GeocacheFindCount":54,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":165707570,"CacheID":1433909,"LogGuid":"1adb0f76-9bfa-47a4-a7f2-4b3aab0ffcfb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"lecker eis :)","Created":"2011-06-09","Visited":"2011-06-09","UserName":"Nico Rohrssen","MembershipLevel":1,"AccountID":4523346,"AccountGuid":"3c66a437-1bbc-4cb1-bda0-8f609ac6efef","Email":"","AvatarImage":"","GeocacheFindCount":25,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":164530395,"CacheID":1433909,"LogGuid":"477f0186-9c2a-40f9-8696-98afb9868205","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nach langer sorgfältiger Vorplanung (an welchem Tag lohnt sich das frühe Aufstehen?) bei Sonnenaufgang angeschlichen und... gefunden! Gotcha! DfdC!","Created":"2011-06-03","Visited":"2011-06-03","UserName":"Deistermonster","MembershipLevel":3,"AccountID":4165483,"AccountGuid":"116149cb-3e0f-4c50-b51e-95b756d64da4","Email":"","AvatarImage":"54fe057c-f79a-4d82-b587-53c5b2b9386f.jpg","GeocacheFindCount":1644,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":164413372,"CacheID":1433909,"LogGuid":"e2c9bdad-9282-49f2-aba4-7e2ac058afa5","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Morgens um 6 Uhr muggelfrei geloggt.<img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" />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","Created":"2011-06-03","Visited":"2011-06-03","UserName":"Soukousa","MembershipLevel":3,"AccountID":4154048,"AccountGuid":"399bef0c-1cdd-4024-a00e-3199484131af","Email":"","AvatarImage":"8480d5e4-f43e-48e5-a449-c01ce424ff05.jpg","GeocacheFindCount":1644,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":163515249,"CacheID":1433909,"LogGuid":"cda47e99-cd5f-4fc1-aa40-cb3bccff4f46","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Bei einem leckerem Eis das Logbuch siegniert.<br /><br />TFTC<br />Don Canallie","Created":"2011-05-29","Visited":"2011-05-29","UserName":"Don Canallie","MembershipLevel":3,"AccountID":3891097,"AccountGuid":"80970931-2e97-4291-abfd-564635f5d86f","Email":"","AvatarImage":"e6944e25-df18-45fb-acca-93ee08e923da.jpg","GeocacheFindCount":825,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":163307833,"CacheID":1433909,"LogGuid":"caad1abc-eb5c-4b99-ae92-232057825f41","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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\" />","Created":"2011-05-29","Visited":"2011-05-28","UserName":"rimini08","MembershipLevel":3,"AccountID":4088331,"AccountGuid":"2fe34526-d72d-478e-9b7f-9dc5c3e1d6c1","Email":"","AvatarImage":"","GeocacheFindCount":510,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":163325464,"CacheID":1433909,"LogGuid":"c3475f2f-1e55-43aa-89a8-3a1ce8ddc525","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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\" /><br /><br /><img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" /> <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\" /></font></font></font></font></font></font></font></font></font></font></font></b><font size=\"3\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"><font color=\"green\"><font color=\"black\"></font></font></font></font></font></font></font></font></font></font></font></font></b></font></b>","Created":"2011-05-29","Visited":"2011-05-22","UserName":"Johansibär","MembershipLevel":1,"AccountID":1858674,"AccountGuid":"05f9d911-9cdc-4224-84b3-8e4923228958","Email":"","AvatarImage":"4d235c2f-81b6-42c4-a28c-5df2182a289d.jpg","GeocacheFindCount":1199,"GeocacheHideCount":17,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":162246062,"CacheID":1433909,"LogGuid":"e9eec580-6831-40ba-8530-c9722017a142","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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.","Created":"2011-05-22","Visited":"2011-05-22","UserName":"Flunin","MembershipLevel":3,"AccountID":3435189,"AccountGuid":"4c851b2a-967c-427d-91eb-268b5ffb0f0a","Email":"","AvatarImage":"","GeocacheFindCount":625,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":161705502,"CacheID":1433909,"LogGuid":"0b303d23-fb26-4b29-b5d2-2bb8828682ae","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nach nem kleinen Tipp dann doch noch loggen können :-)<br />DFDC","Created":"2011-05-20","Visited":"2011-05-20","UserName":"Leafhoppers","MembershipLevel":1,"AccountID":3766111,"AccountGuid":"37bd64d5-a74f-4a12-b040-460f83652198","Email":"","AvatarImage":"","GeocacheFindCount":588,"GeocacheHideCount":0,"ChallengesCompleted":7,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":161990811,"CacheID":1433909,"LogGuid":"1ac63b3e-075a-48b7-9a1f-222b19c71868","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zusammen mit i-teg um 15:25 Uhr geloggt. <br />TFTC!<br />#488","Created":"2011-05-21","Visited":"2011-05-19","UserName":"justify-jay","MembershipLevel":1,"AccountID":3936481,"AccountGuid":"af49ff9e-5331-4565-97e8-5f5bf45e33b2","Email":"","AvatarImage":"198d173a-7efa-416c-b495-b15ed30f94a1.jpg","GeocacheFindCount":1105,"GeocacheHideCount":2,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":161988577,"CacheID":1433909,"LogGuid":"19a1ae8a-e3d7-492c-a866-002064968183","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf Spontantour zusammen mit justify-jay um 15:25 Uhr zum Logbuch durchgedrungen :-) ! <br />TFTC!<br />#488","Created":"2011-05-21","Visited":"2011-05-19","UserName":"i-teg","MembershipLevel":1,"AccountID":3936536,"AccountGuid":"a30caa8b-0ba4-4a20-875f-ac825eacbf41","Email":"","AvatarImage":"533a43c0-8416-452f-8011-f575dee42268.jpg","GeocacheFindCount":1107,"GeocacheHideCount":2,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":161489085,"CacheID":1433909,"LogGuid":"0686f7dd-e12b-4b99-b7c7-24df895f48fb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","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","Created":"2011-05-18","Visited":"2011-05-18","UserName":"Kartoffelhunter","MembershipLevel":1,"AccountID":3579558,"AccountGuid":"344121a1-10f3-443a-9ff6-f90fc43ba8be","Email":"","AvatarImage":"61105259-e319-4793-9bc3-51aae0eb9e10.jpg","GeocacheFindCount":1027,"GeocacheHideCount":2,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":160254911,"CacheID":1433909,"LogGuid":"f315eb63-43e2-48ad-a3b9-fc775dfc9e27","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Unsere erste gefundene Hannopoly-Karte, bei bestem Wetter. Und zur Belohnung ein Lecker Eis für Leona, Tomke und mich.","Created":"2011-05-11","Visited":"2011-05-11","UserName":"janko74","MembershipLevel":1,"AccountID":4460156,"AccountGuid":"bc9f2cab-dad8-465f-8b73-0d7d420e043c","Email":"","AvatarImage":"","GeocacheFindCount":4,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 400, "rows": 400 } };
$(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'Premium', null, true]); });var gaToken = 'UA-2020240-1';//]]>
</script>
</form>
@@ -2071,6 +2096,6 @@ $(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', </noscript>
</div>
<!-- End Quantcast tag -->
- <!-- Server: WEB08; Build: Web.HotFix_20130305.1 -->
+ <!-- Server: WEB09; Build: Web.Release_20130319.1 -->
</body>
</html>
diff --git a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html index 6321f1d..28fd6d7 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html +++ b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.html @@ -76,16 +76,16 @@ }
})();
</script>
-<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?wp=GC2CJPF&Submit6=Go" property="og:url" /><meta name="og:description" content="Use a smartphone or GPS device to navigate to the provided coordinates, which will then lead you to one or more locations. Look for a small hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 2 and difficulty is 2.5 (out of 5)." 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 07/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>
+<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376" property="og:url" /><meta name="og:description" content="Use a smartphone or GPS device to navigate to the provided coordinates, which will then lead you to one or more locations. Look for a small hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 2 and difficulty is 2.5 (out of 5)." 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 07/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?wp=GC2CJPF&Submit6=Go" id="aspnetForm">
+ <form name="aspnetForm" method="post" action="cache_details.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376" 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="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE4MTE0MDkWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFlQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZndwJTNkR0MyQ0pQRiUyNlN1Ym1pdDYlM2RHb2RkAgsPFgIfAQUQNDE5IENhY2hlcyBGb3VuZGQCEQ8WAh8DZxYCAg0PDxYCHwUFQH4vdHJhY2svc2VhcmNoLmFzcHg/bz0xJnVpZD00ZDQxNjQ2MS1kMWE3LTRjYzUtOGVlNy0zMzZiYjkxMGZlYjhkZAIXDw8WAh8DZ2RkAiEPFgIfA2dkAk8PZBYEAgMPFgIfAQUHRW5nbGlzaGQCBQ8WAh4LXyFJdGVtQ291bnQCEhYkZg9kFgICAQ8PFggeD0NvbW1hbmRBcmd1bWVudAUFZW4tVVMeC0NvbW1hbmROYW1lBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2geEENhdXNlc1ZhbGlkYXRpb25oZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAIRD2QWAgIDDxYCHwNoZAITDxYCHgVjbGFzcwUMc3Bhbi0yNCBsYXN0FgICAQ9kFioCAQ9kFgJmD2QWAgIBDw8WAh8BBQdHQzJDSlBGZGQCAg8WAh8BBZoBPGEgaHJlZj0iL2Fib3V0L2NhY2hlX3R5cGVzLmFzcHgiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iQWJvdXQgQ2FjaGUgVHlwZXMiPjxpbWcgc3JjPSIvaW1hZ2VzL1dwdFR5cGVzLzMuZ2lmIiBhbHQ9Ik11bHRpLWNhY2hlIiB0aXRsZT0iTXVsdGktY2FjaGUiIC8+PC9hPmQCBg9kFgQCAQ8WAh8DZ2QCBg8WAh8DaGQCCw9kFgQCAQ8WAh8BBQIxNmQCBQ8PFgIfBQVEL3NlZWsvY2FjaGVfZmF2b3JpdGVkLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzZkZAINDw8WAh8FBRlodHRwOi8vd3d3LmtpbmRlcndhbGQuZGUvZGQCEA8WAh8DaGQCEQ8WAh8DaGQCEg9kFgwCAw8WAh4Fc3R5bGUFD2Rpc3BsYXk6aW5saW5lOxYCAgEPFgIfAQUbVVRNOiAzMlUgRSA1NDUxNjQgTiA1ODA4NTI0ZAINDw8WAh8FBTNjZHBmLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzZkZAIPDw8WAh8FBThjZHBmLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYmbGM9NWRkAhEPDxYCHwUFOWNkcGYuYXNweD9ndWlkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZsYz0xMGRkAhMPDxYEHwUFdGh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9mPWQmaGw9ZW4mc2FkZHI9NTIuMjE2MjUsOS43MTQ0ODMgKEhvbWUgTG9jYXRpb24pJmRhZGRyPTUyLjQyNTA2Nyw5LjY2NDIoS2luZGVyd2FsZCtLaUMpHgZUYXJnZXQFBl9ibGFua2RkAhsPZBYIAgEPDxYEHglGb3JlQ29sb3IMHgRfIVNCAgRkZAIDDw8WBB8NDB8OAgRkZAIFDw8WAh8DZxYCHgdvbmNsaWNrBTtzMmdwcygnNzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2Jyk7cmV0dXJuIGZhbHNlO2QCBw8PFgIfA2cWAh8PBSBzMnBob25lKCdHQzJDSlBGJyk7cmV0dXJuIGZhbHNlO2QCFA8WAh8DZ2QCFw9kFghmDxYCHwNoZAIBDw8WAh8DaGRkAgIPDxYCHwNoZGQCAw8WAh8DaGQCGA9kFgICAw8PFgIfAQUHRGVjcnlwdGRkAhkPFgIfAQUbUW5mIFN2YW55IHZmZyBoYWdyZSBGZ3J2YXJhZAIcDxYCHwNoZAIeDxYCHwNnZAIfDxYCHwNoZAIiD2QWAgIDDxYCHglpbm5lcmh0bWwFE0FkdmVydGlzaW5nIHdpdGggVXNkAiYPZBYEAgUPDxYCHwNnZGQCCQ8PFgIfBQU8fi90cmFjay9zZWFyY2guYXNweD93aWQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2ZGQCJw8PFgIfA2dkFgJmDxYCHwYCARYCAgEPZBYCZg8VAgDjATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTNlZWVhMDU3LWY2MDUtNDg1YS1hNDVhLWY1ZmVhMTQyNjYxMiI+S2luZGVyY2FjaGVzIChLaUMpPC9hPjxiciAvPiBieSA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9MDU2NGE5NDAtODMxMS00MGVlLThlNzYtN2U5MWIyY2Y2Mjg0Ij5ibGFmb288L2E+ZAIpD2QWEAIDD2QWAgIBDw8WAh8FBUUvaGlkZS93cHRsaXN0LmFzcHg/UmVmV3B0SUQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JkRTPTFkZAIHDw8WBB4GUkRTLklECyl2R3JvdW5kc3BlYWsuV2ViLkdQWC5XcHREYXRhU291cmNlcywgVHVjc29uLkNvbW1vbi5MZWdhY3ksIFZlcnNpb249My4wLjQ4MTIuMTgwNzUsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49" />
-<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="bnVsbAEeB1JXUFQuSUQoKwQHMTgxMTQwOWQWAmYPFgIfBgIEFgpmD2QWAmYPDxYCHwNoZGQCAQ9kFg5mDxUCAAVmYWxzZWQCAg8VB3Q8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fbm9jb29yZHMuanBnIiBhbHQ9IkhpZGUgQ29vcmRpbmF0ZXMiIHRpdGxlPSJIaWRlIENvb3JkaW5hdGVzIiAvPoYBPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vZmxhZy5qcGciIGFsdD0iRmluYWwgTG9jYXRpb24iIHRpdGxlPSJGaW5hbCBMb2NhdGlvbiIgLz4CRk4CRk4FRklOQUywATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9MzBmMWIzN2MtZDM5NS00YzdhLTk0ZTItMGM2NDlkNWYyMzFiJlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5HQzJDSlBGIEZpbmFsPC9hPiAoRmluYWwgTG9jYXRpb24pAz8/P2QCBQ8PFgIeB1Rvb2xUaXAFBEVkaXRkZAIHDw8WAh8TBQNNYXBkZAILDw8WAh4NQWx0ZXJuYXRlVGV4dAUGUmVtb3ZlFgIfDwVAcmV0dXJuIGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyB3YXlwb2ludD8nKWQCDA8VAQBkAg4PFQEAZAICD2QWDmYPFQIOQWx0ZXJuYXRpbmdSb3cFZmFsc2VkAgIPFQdiPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iL2ltYWdlcy9pY29ucy9pY29uX3ZpZXdhYmxlLmpwZyIgYWx0PSJWaXNpYmxlIiB0aXRsZT0iVmlzaWJsZSIgLz6BATxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzcmM9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vaW1hZ2VzL3dwdHR5cGVzL3NtL3BrZy5qcGciIGFsdD0iUGFya2luZyBBcmVhIiB0aXRsZT0iUGFya2luZyBBcmVhIiAvPgJQSwJQSwZQQVJLTkewATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9OThjYjEzODctNDljZS00Zjk0LTliMDUtNWNiMDc5ZDMzMmIxJlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5HQzJDSlBGIFBhcmtpbmc8L2E+IChQYXJraW5nIEFyZWEpHE4gNTLCsCAyNS4zODQgRSAwMDnCsCAzOS4wMjNkAgUPDxYCHxMFBEVkaXRkZAIHDw8WAh8TBQNNYXBkZAILDw8WAh8UBQZSZW1vdmUWAh8PBUByZXR1cm4gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHdheXBvaW50PycpZAIMDxUBDkFsdGVybmF0aW5nUm93ZAIODxUBN0tlaW4gIm9mZml6aWVsbGVyIiBQYXJrcGxhdHosIFBhcmtlbiB0cm90emRlbSBtw7ZnbGljaC5kAgMPZBYOZg8VAgAFZmFsc2VkAgIPFQdiPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iL2ltYWdlcy9pY29ucy9pY29uX3ZpZXdhYmxlLmpwZyIgYWx0PSJWaXNpYmxlIiB0aXRsZT0iVmlzaWJsZSIgLz6QATxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzcmM9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vaW1hZ2VzL3dwdHR5cGVzL3NtL3B1enpsZS5qcGciIGFsdD0iUXVlc3Rpb24gdG8gQW5zd2VyIiB0aXRsZT0iUXVlc3Rpb24gdG8gQW5zd2VyIiAvPgJTVAJTVAVTVEFSVLQBPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9zZWVrL3dwdC5hc3B4P1dJRD0wNDExM2JhZC02NGNhLTQ5OWEtOTg0OC1iNTkzN2UxM2RhMWImUmVmSUQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JlJlZkRTPTEiPkdDMkNKUEYgU3RhcnQ8L2E+IChRdWVzdGlvbiB0byBBbnN3ZXIpHE4gNTLCsCAyNS41MDQgRSAwMDnCsCAzOS44NTJkAgUPDxYCHxMFBEVkaXRkZAIHDw8WAh8TBQNNYXBkZAILDw8WAh8UBQZSZW1vdmUWAh8PBUByZXR1cm4gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHdheXBvaW50PycpZAIMDxUBAGQCDg8VAQBkAgQPZBYOZg8VAg5BbHRlcm5hdGluZ1JvdwVmYWxzZWQCAg8VB2I8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fdmlld2FibGUuanBnIiBhbHQ9IlZpc2libGUiIHRpdGxlPSJWaXNpYmxlIiAvPowBPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vd2F5cG9pbnQuanBnIiBhbHQ9IlJlZmVyZW5jZSBQb2ludCIgdGl0bGU9IlJlZmVyZW5jZSBQb2ludCIgLz4CV08CV08GU0NFTklDsgE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3NlZWsvd3B0LmFzcHg/V0lEPWIyOGM1ODc5LTMxODEtNDUxMC05NGZhLTZlYzVlMzBmZDA1NiZSZWZJRD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYmUmVmRFM9MSI+QXVzc2ljaHRzcHVua3Q8L2E+IChSZWZlcmVuY2UgUG9pbnQpHE4gNTLCsCAyNS40ODggRSAwMDnCsCAzOS40MzJkAgUPDxYCHxMFBEVkaXRkZAIHDw8WAh8TBQNNYXBkZAILDw8WAh8UBQZSZW1vdmUWAh8PBUByZXR1cm4gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHdheXBvaW50PycpZAIMDxUBDkFsdGVybmF0aW5nUm93ZAIODxUBT0VoZW1hbGlnZSBGaW5hbGxvY2F0aW9uIHdvIGVzIGdlYnJhbm50IGhhdC4gR2xlaWNoemVpdGlnIG5ldHRlciBBdXNzaWNodHNwdW5rdC5kAgkPDxYCHwNnZBYCAgEPDxYEHwUFKi9tYXAvZGVmYXVsdC5hc3B4P2xhdD01Mi40MjUwNjcmbG5nPTkuNjY0Mh8DZ2RkAg8PFgIfAQV/Li4ub3RoZXIgY2FjaGVzIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD91PVRvbTAzIj5oaWRkZW48L2E+IG9yIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD91bD1Ub20wMyI+Zm91bmQ8L2E+IGJ5IHRoaXMgdXNlcmQCEQ9kFgYCAQ8WAh8BBf8BLi4ubmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD1hNWY2ZDBhZC1kMmYyLTQwMTEtOGMxNC05NDBhOWViZjNjNzQmbGF0PTUyLjQyNTA2NyZsbmc9OS42NjQyMDAiPmNhY2hlcyBvZiB0aGlzIHR5cGU8L2E+LCA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dHg9YTVmNmQwYWQtZDJmMi00MDExLThjMTQtOTQwYTllYmYzYzc0JmxhdD01Mi40MjUwNjcmbG5nPTkuNjY0MjAwJmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIDDxYCHwEFpgEuLi5hbGwgbmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NTIuNDI1MDY3JmxuZz05LjY2NDIwMCI+Y2FjaGVzPC9hPiwgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi40MjUwNjcmbG5nPTkuNjY0MjAwJmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIFDxYCHwEFfi4uLmFsbCBuZWFyYnkgPGEgaHJlZj0iaHR0cDovL3d3dy53YXltYXJraW5nLmNvbS9kaXJlY3RvcnkuYXNweD9mPTEmbGF0PTUyLjQyNTA2NyZsb249OS42NjQyMDAiPndheW1hcmtzIG9uIFdheW1hcmtpbmcuY29tPC9hPmQCEw8WAh8DaGQCFw9kFgICAQ8PFgQfAQWuBzxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL21hcC9kZWZhdWx0LmFzcHg/bGF0PTUyLjQyNTA3JmxuZz05LjY2NDIiIHRhcmdldD0iX2JsYW5rIj5HZW9jYWNoaW5nLmNvbSBNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP3E9Tis1MiVjMiViMCsyNS41MDQrRSswMDklYzIlYjArMzkuODUyKyhHQzJDSlBGKSsiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGUgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm1hcHF1ZXN0LmNvbS9tYXBzL21hcC5hZHA/c2VhcmNo" />
-<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="dHlwZT1hZGRyZXNzJmZvcm10eXBlPWxhdGxvbmcmbGF0bG9uZ3R5cGU9ZGVjaW1hbCZsYXRpdHVkZT01Mi40MjUwNyZsb25naXR1ZGU9OS42NjQyJnpvb209MTAiIHRhcmdldD0iX2JsYW5rIj5NYXBRdWVzdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy55YWhvby5jb20vI2xhdD01Mi40MjUwNyZsb249OS42NjQyJnpvb209MTYmcT01Mi40MjUwNyw5LjY2NDImY29uZj0xJnN0YXJ0PTEmbXZ0PW0mdHJmPTAiIHRhcmdldD0iX2JsYW5rIj5ZYWhvbyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYmluZy5jb20vbWFwcy9kZWZhdWx0LmFzcHg/dj0yJmx2bD0xNCZzcD1wb2ludC41Mi40MjUwN185LjY2NDJfR0MyQ0pQRiIgdGFyZ2V0PSJfYmxhbmsiPkJpbmcgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5jeWNsZW1hcC5vcmcvP3pvb209MTImbGF0PTUyLjQyNTA3Jmxvbj05LjY2NDIiIHRhcmdldD0iX2JsYW5rIj5PcGVuQ3ljbGVNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy8/bWxhdD01Mi40MjUwNyZtbG9uPTkuNjY0MiZ6b29tPTEyIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcDwvYT48L2xpPh8DZ2RkAhsPZBYGAgEPFgIfAQURMTUyIExvZ2dlZCBWaXNpdHNkAgcPDxYCHwUFQ34vc2Vlay9jYWNoZV9sb2dib29rLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzZkZAIJDw8WBB8FBT1+L3NlZWsvZ2FsbGVyeS5hc3B4P2d1aWQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2HwEFI1ZpZXcgdGhlIEltYWdlIEdhbGxlcnkgb2YgMTcgaW1hZ2VzZGQCKg8WAh8BBQVmYWxzZWQCKw8WAh8BBUlsYXQ9NTIuNDI1MDY3OyBsbmc9OS42NjQyOyBndWlkPSc3MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYnOw0KZAIVDxYCHwNoFgICAQ8PZBYCHwsFDHdpZHRoOjEyMHB4O2QCFw9kFgQCAw8WAh8BBQdFbmdsaXNoZAIFDxYCHwYCEhYkZg9kFgICAQ8PFggfBwUFZW4tVVMfCAUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHwloZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAJLDxYCHwEFECZjb3B5OyAyMDAwLTIwMTNkAgMPFgIfAQUrU2VydmVyOiBXRUIxNDsgQnVpbGQ6IFdlYi5Ib3RGaXhfMjAxMzAzMDUuMWRkHOsOttTiD2fNWBEugN9aNZb+n/s=" />
+<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE4MTE0MDkWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFpQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmd1aWQlM2Q3MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzZkZAILDxYCHwEFEDQyNiBDYWNoZXMgRm91bmRkAhEPFgIfA2cWAgINDw8WAh8FBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9NGQ0MTY0NjEtZDFhNy00Y2M1LThlZTctMzM2YmI5MTBmZWI4ZGQCFw8PFgIfA2dkZAIhDxYCHwNnZAJPD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIeC18hSXRlbUNvdW50AhIWJGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAggPZBYCAgEPDxYIHwcFBWl0LUlUHwgFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCWhkZAIJD2QWAgIBDw8WCB8HBQVlbC1HUh8IBQ1TZXRUZW1wTG9jYWxlHwEFEM6VzrvOu863zr3Ouc66zqwfCWhkZAIKD2QWAgIBDw8WCB8HBQVsdi1MVh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUxhdHZpZcWhdR8JaGRkAgsPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8JaGRkAgwPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAg0PZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCDg9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg8PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCEA9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIRD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCEQ9kFgICAw8WAh8DaGQCEw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBYsAgEPZBYCZg9kFgICAQ8PFgIfAQUHR0MyQ0pQRmRkAgIPFgIfAQWaATxhIGhyZWY9Ii9hYm91dC9jYWNoZV90eXBlcy5hc3B4IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkFib3V0IENhY2hlIFR5cGVzIj48aW1nIHNyYz0iL2ltYWdlcy9XcHRUeXBlcy8zLmdpZiIgYWx0PSJNdWx0aS1jYWNoZSIgdGl0bGU9Ik11bHRpLWNhY2hlIiAvPjwvYT5kAgYPZBYEAgEPFgIfA2dkAgYPFgIfA2hkAgsPZBYEAgEPFgIfAQUCMTZkAgUPDxYCHwUFRC9zZWVrL2NhY2hlX2Zhdm9yaXRlZC5hc3B4P2d1aWQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2ZGQCDQ8PFgIfBQUZaHR0cDovL3d3dy5raW5kZXJ3YWxkLmRlL2RkAhAPFgIfA2hkAhEPFgIfA2hkAhIPZBYMAgMPFgIeBXN0eWxlBQ9kaXNwbGF5OmlubGluZTsWAgIBDxYCHwEFG1VUTTogMzJVIEUgNTQ1MTY0IE4gNTgwODUyNGQCDQ8PFgIfBQUzY2RwZi5hc3B4P2d1aWQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2ZGQCDw8PFgIfBQU4Y2RwZi5hc3B4P2d1aWQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JmxjPTVkZAIRDw8WAh8FBTljZHBmLmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYmbGM9MTBkZAITDw8WBB8FBXRodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1kJmhsPWVuJnNhZGRyPTUyLjIxNjI1LDkuNzE0NDgzIChIb21lIExvY2F0aW9uKSZkYWRkcj01Mi40MjUwNjcsOS42NjQyKEtpbmRlcndhbGQrS2lDKR4GVGFyZ2V0BQZfYmxhbmtkZAIbD2QWCAIBDw8WBB4JRm9yZUNvbG9yDB4EXyFTQgIEZGQCAw8PFgQfDQwfDgIEZGQCBQ8PFgIfA2cWAh4Hb25jbGljawU7czJncHMoJzczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NicpO3JldHVybiBmYWxzZTtkAgcPDxYCHwNnFgIfDwUgczJwaG9uZSgnR0MyQ0pQRicpO3JldHVybiBmYWxzZTtkAhQPFgIfA2dkAhcPZBYIZg8WAh8DaGQCAQ8PFgIfA2hkZAICDw8WAh8DaGRkAgMPFgIfA2hkAhgPZBYCAgMPDxYCHwEFB0RlY3J5cHRkZAIZDxYCHwEFG1FuZiBTdmFueSB2ZmcgaGFncmUgRmdydmFyYWQCHA8WAh8DaGQCHg8WAh8DZ2QCHw8WAh8DaGQCIg9kFgICAw8WAh4JaW5uZXJodG1sBRNBZHZlcnRpc2luZyB3aXRoIFVzZAImD2QWBAIFDw8WAh8DZ2RkAgkPDxYCHwUFPH4vdHJhY2svc2VhcmNoLmFzcHg/d2lkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NmRkAicPDxYCHwNnZBYCZg8WAh8GAgEWAgIBD2QWAmYPFQIA4wE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD0zZWVlYTA1Ny1mNjA1LTQ4NWEtYTQ1YS1mNWZlYTE0MjY2MTIiPktpbmRlcmNhY2hlcyAoS2lDKTwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTA1NjRhOTQwLTgzMTEtNDBlZS04ZTc2LTdlOTFiMmNmNjI4NCI+YmxhZm9vPC9hPmQCKA8PFgIfA2dkFgJmDxYCHwYCARYCAgEPZBYCZg8VAgDdATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTE0NTUxNzA4LTBjM2MtNGY5NS05MzQyLTFiYjMxMTllNmVmZSI+Y2dlbyBtb2NrczwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTRk" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="NDE2NDYxLWQxYTctNGNjNS04ZWU3LTMzNmJiOTEwZmViOCI+Sm9TYU1hSmE8L2E+ZAIpD2QWEAIDD2QWAgIBDw8WAh8FBUUvaGlkZS93cHRsaXN0LmFzcHg/UmVmV3B0SUQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JkRTPTFkZAIHDw8WBB4GUkRTLklECyl1R3JvdW5kc3BlYWsuV2ViLkdQWC5XcHREYXRhU291cmNlcywgVHVjc29uLkNvbW1vbi5MZWdhY3ksIFZlcnNpb249My4wLjQ4MjYuMjAzOCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsAR4HUldQVC5JRCgrBAcxODExNDA5ZBYCZg8WAh8GAgQWCmYPZBYCZg8PFgIfA2hkZAIBD2QWDmYPFQIABWZhbHNlZAICDxUHdDxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzcmM9Ii9pbWFnZXMvaWNvbnMvaWNvbl9ub2Nvb3Jkcy5qcGciIGFsdD0iSGlkZSBDb29yZGluYXRlcyIgdGl0bGU9IkhpZGUgQ29vcmRpbmF0ZXMiIC8+hgE8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2ltYWdlcy93cHR0eXBlcy9zbS9mbGFnLmpwZyIgYWx0PSJGaW5hbCBMb2NhdGlvbiIgdGl0bGU9IkZpbmFsIExvY2F0aW9uIiAvPgJGTgJGTgVGSU5BTLABPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9zZWVrL3dwdC5hc3B4P1dJRD0zMGYxYjM3Yy1kMzk1LTRjN2EtOTRlMi0wYzY0OWQ1ZjIzMWImUmVmSUQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JlJlZkRTPTEiPkdDMkNKUEYgRmluYWw8L2E+IChGaW5hbCBMb2NhdGlvbikDPz8/ZAIFDw8WAh4HVG9vbFRpcAUERWRpdGRkAgcPDxYCHxMFA01hcGRkAgsPDxYCHg1BbHRlcm5hdGVUZXh0BQZSZW1vdmUWAh8PBUByZXR1cm4gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHdheXBvaW50PycpZAIMDxUBAGQCDg8VAQBkAgIPZBYOZg8VAg5BbHRlcm5hdGluZ1JvdwVmYWxzZWQCAg8VB2I8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fdmlld2FibGUuanBnIiBhbHQ9IlZpc2libGUiIHRpdGxlPSJWaXNpYmxlIiAvPoEBPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vcGtnLmpwZyIgYWx0PSJQYXJraW5nIEFyZWEiIHRpdGxlPSJQYXJraW5nIEFyZWEiIC8+AlBLAlBLBlBBUktOR7ABPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9zZWVrL3dwdC5hc3B4P1dJRD05OGNiMTM4Ny00OWNlLTRmOTQtOWIwNS01Y2IwNzlkMzMyYjEmUmVmSUQ9NzMyNDZhNWEtZWJiOS00ZDRmLThkYjktYTk1MTAzNmY1Mzc2JlJlZkRTPTEiPkdDMkNKUEYgUGFya2luZzwvYT4gKFBhcmtpbmcgQXJlYSkcTiA1MsKwIDI1LjM4NCBFIDAwOcKwIDM5LjAyM2QCBQ8PFgIfEwUERWRpdGRkAgcPDxYCHxMFA01hcGRkAgsPDxYCHxQFBlJlbW92ZRYCHw8FQHJldHVybiBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgd2F5cG9pbnQ/JylkAgwPFQEOQWx0ZXJuYXRpbmdSb3dkAg4PFQE3S2VpbiAib2ZmaXppZWxsZXIiIFBhcmtwbGF0eiwgUGFya2VuIHRyb3R6ZGVtIG3DtmdsaWNoLmQCAw9kFg5mDxUCAAVmYWxzZWQCAg8VB2I8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSIvaW1hZ2VzL2ljb25zL2ljb25fdmlld2FibGUuanBnIiBhbHQ9IlZpc2libGUiIHRpdGxlPSJWaXNpYmxlIiAvPpABPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vcHV6emxlLmpwZyIgYWx0PSJRdWVzdGlvbiB0byBBbnN3ZXIiIHRpdGxlPSJRdWVzdGlvbiB0byBBbnN3ZXIiIC8+AlNUAlNUBVNUQVJUtAE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3NlZWsvd3B0LmFzcHg/V0lEPTA0MTEzYmFkLTY0Y2EtNDk5YS05ODQ4LWI1OTM3ZTEzZGExYiZSZWZJRD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYmUmVmRFM9MSI+R0MyQ0pQRiBTdGFydDwvYT4gKFF1ZXN0aW9uIHRvIEFuc3dlcikcTiA1MsKwIDI1LjUwNCBFIDAwOcKwIDM5Ljg1MmQCBQ8PFgIfEwUERWRpdGRkAgcPDxYCHxMFA01hcGRkAgsPDxYCHxQFBlJlbW92ZRYCHw8FQHJldHVybiBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgd2F5cG9pbnQ/JylkAgwPFQEAZAIODxUBAGQCBA9kFg5mDxUCDkFsdGVybmF0aW5nUm93BWZhbHNlZAICDxUHYjxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzcmM9Ii9pbWFnZXMvaWNvbnMvaWNvbl92aWV3YWJsZS5qcGciIGFsdD0iVmlzaWJsZSIgdGl0bGU9IlZpc2libGUiIC8+jAE8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2ltYWdlcy93cHR0eXBlcy9zbS93YXlwb2ludC5qcGciIGFsdD0iUmVmZXJlbmNlIFBvaW50IiB0aXRsZT0iUmVmZXJlbmNlIFBvaW50IiAvPgJXTwJXTwZTQ0VOSUOyATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vc2Vlay93cHQuYXNweD9XSUQ9YjI4YzU4NzktMzE4MS00NTEwLTk0ZmEtNmVjNWUzMGZkMDU2JlJlZklEPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NiZSZWZEUz0xIj5BdXNzaWNodHNwdW5rdDwvYT4gKFJlZmVyZW5jZSBQb2ludCkcTiA1MsKwIDI1LjQ4OCBFIDAwOcKwIDM5LjQzMmQCBQ8PFgIfEwUERWRpdGRkAgcPDxYCHxMFA01hcGRkAgsPDxYCHxQFBlJlbW92ZRYCHw8FQHJldHVybiBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgd2F5cG9pbnQ/JylkAgwPFQEOQWx0ZXJuYXRpbmdSb3dkAg4PFQFPRWhlbWFsaWdlIEZpbmFsbG9jYXRpb24gd28gZXMgZ2VicmFubnQgaGF0LiBHbGVpY2h6ZWl0aWcgbmV0dGVyIEF1c3NpY2h0c3B1bmt0LmQCCQ8PFgIfA2dkFgICAQ8PFgQfBQUqL21hcC9kZWZhdWx0LmFzcHg/bGF0PTUyLjQyNTA2NyZsbmc9OS42NjQyHwNnZGQCDw8WAh8BBX8uLi5vdGhlciBjYWNoZXMgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3U9VG9tMDMiPmhpZGRlbjwvYT4gb3IgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3VsPVRvbTAzIj5mb3VuZDwvYT4gYnkgdGhpcyB1c2VyZAIRD2QWBgIBDxYCHwEF/wEuLi5uZWFyYnkgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3R4PWE1ZjZkMGFkLWQyZjItNDAxMS04YzE0LTk0MGE5ZWJmM2M3NCZsYXQ9NTIuNDI1MDY3JmxuZz05LjY2NDIwMCI+Y2FjaGVzIG9mIHRoaXMgdHlwZTwvYT4sIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD1hNWY2ZDBhZC1kMmYyLTQwMTEtOGMxNC05NDBhOWViZjNjNzQmbGF0PTUyLjQyNTA2NyZsbmc9OS42NjQyMDAmZj0xIj50aGF0IEkgaGF2ZW4ndCBmb3VuZDwvYT5kAgMPFgIfAQWmAS4uLmFsbCBuZWFyYnkgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi40MjUwNjcmbG5nPTkuNjY0MjAwIj5jYWNoZXM8L2E+LCA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/bGF0PTUyLjQyNTA2NyZsbmc9OS42NjQyMDAmZj0xIj50aGF0IEkgaGF2ZW4ndCBmb3VuZDwvYT5kAgUPFgIfAQV+Li4uYWxsIG5lYXJieSA8YSBocmVmPSJodHRwOi8vd3d3LndheW1hcmtpbmcuY29tL2RpcmVjdG9yeS5hc3B4P2Y9MSZsYXQ9NTIuNDI1MDY3Jmxvbj05LjY2NDIwMCI+d2F5bWFya3Mgb24gV2F5bWFya2luZy5jb208L2E+ZAITDxYCHwNoZAIXD2QWAgIBDw8WBB8BBa4HPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5j" />
+<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="b20vbWFwL2RlZmF1bHQuYXNweD9sYXQ9NTIuNDI1MDcmbG5nPTkuNjY0MiIgdGFyZ2V0PSJfYmxhbmsiPkdlb2NhY2hpbmcuY29tIE1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/cT1OKzUyJWMyJWIwKzI1LjUwNCtFKzAwOSVjMiViMCszOS44NTIrKEdDMkNKUEYpKyIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubWFwcXVlc3QuY29tL21hcHMvbWFwLmFkcD9zZWFyY2h0eXBlPWFkZHJlc3MmZm9ybXR5cGU9bGF0bG9uZyZsYXRsb25ndHlwZT1kZWNpbWFsJmxhdGl0dWRlPTUyLjQyNTA3JmxvbmdpdHVkZT05LjY2NDImem9vbT0xMCIgdGFyZ2V0PSJfYmxhbmsiPk1hcFF1ZXN0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXBzLnlhaG9vLmNvbS8jbGF0PTUyLjQyNTA3Jmxvbj05LjY2NDImem9vbT0xNiZxPTUyLjQyNTA3LDkuNjY0MiZjb25mPTEmc3RhcnQ9MSZtdnQ9bSZ0cmY9MCIgdGFyZ2V0PSJfYmxhbmsiPllhaG9vIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5iaW5nLmNvbS9tYXBzL2RlZmF1bHQuYXNweD92PTImbHZsPTE0JnNwPXBvaW50LjUyLjQyNTA3XzkuNjY0Ml9HQzJDSlBGIiB0YXJnZXQ9Il9ibGFuayI+QmluZyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbmN5Y2xlbWFwLm9yZy8/em9vbT0xMiZsYXQ9NTIuNDI1MDcmbG9uPTkuNjY0MiIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5DeWNsZU1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnLz9tbGF0PTUyLjQyNTA3Jm1sb249OS42NjQyJnpvb209MTIiIHRhcmdldD0iX2JsYW5rIj5PcGVuU3RyZWV0TWFwPC9hPjwvbGk+HwNnZGQCGw9kFgYCAQ8WAh8BBRExNTMgTG9nZ2VkIFZpc2l0c2QCBw8PFgIfBQVDfi9zZWVrL2NhY2hlX2xvZ2Jvb2suYXNweD9ndWlkPTczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3NmRkAgkPDxYEHwUFPX4vc2Vlay9nYWxsZXJ5LmFzcHg/Z3VpZD03MzI0NmE1YS1lYmI5LTRkNGYtOGRiOS1hOTUxMDM2ZjUzNzYfAQUjVmlldyB0aGUgSW1hZ2UgR2FsbGVyeSBvZiAxNyBpbWFnZXNkZAIqDxYCHwEFBWZhbHNlZAIrDxYCHwEFSWxhdD01Mi40MjUwNjc7IGxuZz05LjY2NDI7IGd1aWQ9JzczMjQ2YTVhLWViYjktNGQ0Zi04ZGI5LWE5NTEwMzZmNTM3Nic7DQpkAhUPFgIfA2gWAgIBDw9kFgIfCwUMd2lkdGg6MTYwcHg7ZAIXD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIfBgISFiRmD2QWAgIBDw8WCB8HBQVlbi1VUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2gfCWhkZAIBD2QWAgIBDw8WCB8HBQVkZS1ERR8IBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCWhkZAICD2QWAgIBDw8WCB8HBQVmci1GUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8JaGRkAgMPZBYCAgEPDxYIHwcFBXB0LVBUHwgFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8JaGRkAgQPZBYCAgEPDxYIHwcFBWNzLUNaHwgFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwloZGQCBQ9kFgICAQ8PFggfBwUFc3YtU0UfCAUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwloZGQCBg9kFgICAQ8PFggfBwUFZXMtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8JaGRkAgcPZBYCAgEPDxYIHwcFBWV0LUVFHwgFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCWhkZAIID2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCQ9kFgICAQ8PFggfBwUFZWwtR1IfCAUNU2V0VGVtcExvY2FsZR8BBRDOlc67zrvOt869zrnOus6sHwloZGQCCg9kFgICAQ8PFggfBwUFbHYtTFYfCAUNU2V0VGVtcExvY2FsZR8BBQlMYXR2aWXFoXUfCWhkZAILD2QWAgIBDw8WCB8HBQVubC1OTB8IBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCWhkZAIMD2QWAgIBDw8WCB8HBQVjYS1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCWhkZAIND2QWAgIBDw8WCB8HBQVwbC1QTB8IBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8JaGRkAg4PZBYCAgEPDxYIHwcFBW5iLU5PHwgFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfCWhkZAIPD2QWAgIBDw8WCB8HBQVrby1LUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8JaGRkAhAPZBYCAgEPDxYIHwcFBWh1LUhVHwgFDVNldFRlbXBMb2NhbGUfAQUGTWFneWFyHwloZGQCEQ9kFgICAQ8PFggfBwUFcm8tUk8fCAUNU2V0VGVtcExvY2FsZR8BBQhSb23Dom7Egx8JaGRkAksPFgIfAQUQJmNvcHk7IDIwMDAtMjAxM2QCAw8WAh8BBSxTZXJ2ZXI6IFdFQjExOyBCdWlsZDogV2ViLlJlbGVhc2VfMjAxMzAzMTkuMWRkebX9n1xYPQCGWhHlSVZPe8r4cHM=" />
</div>
<script type="text/javascript">
@@ -105,13 +105,13 @@ function __doPostBack(eventTarget, eventArgument) { </script>
-<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981131264989663" type="text/javascript"></script>
+<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981149668642275" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=ffffffff940d030f" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=ffffffff940d030f" type="text/javascript"></script>
-<script src="/ScriptResource.axd?d=Uh_lOa1hKj-GEwMC8mK4Mv8GIgfYnVMts1uBtWWtSfWP9ra-LKOpaRuqVLvjYmMdLsk7f65Q6jxy1BUjZtmsPSNvG8-NJhXvUvOP2jTpjiJF191yJjbg5eBWmdsFWFW4ajIe-GbXr7vIi2DeH9CErdgdlkf-f2cp7FtGEJ7sl3tidpi7pPZumnHP0HO2yu_GIN2h8uN1Q6-df-zQBu0zb4hnxqo1" type="text/javascript"></script>
-<script src="/ScriptResource.axd?d=838lRAslTnp-47XptApNagh_Uah2p52BYL-s1NNGNamd8V2w2Ky2y-qvXkjulQaOR_VLt0fkOoUQz2vo2Z8CX871dE4Ct-a7MylewJqtaQNwQglkQO1n6oSTN35sCFRQ7BXBPVoWxpehRPLX8sbeEAqBEHdYAcMHFjMXNlT9nze9HLuJQ15ocJVBJMlooE7lKvmObAIwFsFO9oMNMln41GfoOdjcCiPLIniUHBJavtIsfpZoHZ8IaaJ2mcqJncN2qtyp5jmDkuoZuDm5GuIm88GqPz0_pSJHgC9qf9O6DNr-mOaKWm2PxOwscK8hcP-TM7owfHLYw9rZkopbDljgiCl34QjGBJyaYBGV1VpLdEgR3hGToB-rM6c63T3SLN-7u0qtmvFBds8v5sZUeJLIdtTf9sQCJicp_lnWeZ0bB6SFFMA4I59lZp-wcxcp-MAvNwOsFbo_mUFDpDg-eM316f2OKs0FhopEcLk7jBG2aYLeOA3rVLZuidOCk3cFFBdvo8iogolMkemG1iSC_RSxXWQPLfa0ixp0WTyZPZYv0EQcHB2yShSl6FJxyxoifmdjO489-f3_nXuTeAo4L9mde7FqtE6t3Dj9oqxSDMJXEzU5OAocOzmor7yTRmzx40kgTPetF3I2yMBcbIPFCIfOHd8ua3EkwijkqG2CGEXLBCNr4vyi0" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=smO_g60huRlsbWz1fegS3GqJJP2TQaJZmOtbSzx_ALaWTu6YoRBQ7xbqknFxBjFgvfsh3d6K5K6x8elfekXkRnpMU4madSPoFfy1H3aNWawyjAdnnGc7IwJgxQdqOp6nLjRAnkT3LlqGl7j3RWuqZtOS_Q94Xt3GBIW4mwIlRJvVCUWxrvFldhQIjOAdAjg-pcbpuOo8TMzMZDtu62H4Agf744U1" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=E99XiNjK0biBGiFZgXwF93XUW_CgJvVjhSayq2p6PbMm0TLse1hdoGrLcso76MS5MRG0ieHaF_fOGnt9IIhDkPE62K0tTFHe6Meyvpu3682JqeImfgX_9iCDbXk31L800c6hYmZMNmw4ERVWvEuxaDZfMFTZrsfqHIXbRY_Rnw4Il4nVwePKahHfkDdjhaTVCSajUB26aD6_DaVQJwFhWCDPm68fZgUyRcn-6pCMOSdkHAgEh0RLzMzEXCbdBbMEdcuyaQ-GHljHxRQtY0s5-jZ8tPf73UgsrS1RX-Fzu_k-_31s-mUe0XBQD1hF5wEAQKtkQYTQL2XHikzB8tCTLxQthW5DiERyv0x5Fhpy1hf_tah8NbFIiZCM54BV0gBRUAaicWNZhs97gmXgYrwDX2FUWnGKFFcqSh1WWOw1rXjW7a4yv7bSgWqDZfA3ulJEHGeuBUsjY0BA0AtefLkkXvQRBLYoJKzCEjv51IDClsbakiRO4dePPsh6mL_E4Jq0hseSMIR97Sylr63OAy7zN0Eq4pxeJKN72I5YSyscfgT5Mt6AWJgOp5ilEPFlahapXOp1gt74_Ya_G_Na63aXBcg19iM1ba3lB2Zgj8As2G6BKBuk3O4vjKB2vmffoIRxiJwiw18E1KOPtoQz0SIuYeOMBDLvJ_BplG2HbvjWIApueXCB0" type="text/javascript"></script>
<script src="js/cachedetails.js" type="text/javascript"></script>
<script src="../js/latlng.js" type="text/javascript"></script>
<script type="text/javascript">
@@ -152,11 +152,11 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet </p>
<p class="SignedInText">
<strong>
- Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</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%3fwp%3dGC2CJPF%26Submit6%3dGo">Sign Out</a>)<br />
+ Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</a></strong> (<a id="ctl00_hlSignOut" accesskey="s" title="Sign Out" href="https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2fseek%2fcache_details.aspx%3fguid%3d73246a5a-ebb9-4d4f-8db9-a951036f5376">Sign Out</a>)<br />
<span id="ctl00_litPMLevel">Premium Member</span>
<strong style="display: block">
- 419 Caches Found</strong>
+ 426 Caches Found</strong>
</p>
</div>
@@ -714,14 +714,14 @@ P.S. An warmen Tagen Badesachen und Handtuch mitnehmen.</span> <script type='text/javascript'>
googletag.cmd.push(function() {{
-googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_48899bdd-4eec-42e1-a899-39615fd9ac03').addService(googletag.pubads());
+googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_d8d58515-576c-41ab-8548-5d87206b758f').addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
}});
</script>
-<div id='div_48899bdd-4eec-42e1-a899-39615fd9ac03'>
+<div id='div_d8d58515-576c-41ab-8548-5d87206b758f'>
<script type='text/javascript'>
-googletag.cmd.push(function() { googletag.display('div_48899bdd-4eec-42e1-a899-39615fd9ac03'); });
+googletag.cmd.push(function() { googletag.display('div_d8d58515-576c-41ab-8548-5d87206b758f'); });
</script>
</div>
@@ -792,6 +792,31 @@ googletag.cmd.push(function() { googletag.display('div_48899bdd-4eec-42e1-a899-3 +<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">My Bookmark Lists</h3>
+ <div class="WidgetBody">
+
+
+ <ul class="BookmarkList">
+
+ <li class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=14551708-0c3c-4f95-9342-1bb3119e6efe">cgeo mocks</a><br /> by <a href="http://www.geocaching.com/profile/?guid=4d416461-d1a7-4cc5-8ee7-336bb910feb8">JoSaMaJa</a>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
</div>
@@ -1186,13 +1211,13 @@ googletag.cmd.push(function() { googletag.display('div_48899bdd-4eec-42e1-a899-3 <div class="InformationWidget Clear">
<h3>
- 152 Logged Visits</h3>
+ 153 Logged Visits</h3>
<div class="EncryptDecrypt">
<a href="#" class="decrypt-link">
Decrypt
</a>
</div>
- <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 132 <img src="/images/logtypes/3.png" alt="Didn't find it" title="Didn't find it" /> 3 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 7 <img src="/images/logtypes/22.png" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> 2 <img src="/images/logtypes/23.png" alt="Enable Listing" title="Enable Listing" /> 2 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 1 <img src="/images/logtypes/45.png" alt="Needs Maintenance" title="Needs Maintenance" /> 2 <img src="/images/logtypes/46.png" alt="Owner Maintenance" title="Owner Maintenance" /> 3 </p></span>
+ <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 133 <img src="/images/logtypes/3.png" alt="Didn't find it" title="Didn't find it" /> 3 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 7 <img src="/images/logtypes/22.png" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> 2 <img src="/images/logtypes/23.png" alt="Enable Listing" title="Enable Listing" /> 2 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 1 <img src="/images/logtypes/45.png" alt="Needs Maintenance" title="Needs Maintenance" /> 2 <img src="/images/logtypes/46.png" alt="Owner Maintenance" title="Owner Maintenance" /> 3 </p></span>
<p class="HalfLeft">
<a id="ctl00_ContentBody_uxLogbookLink" href="cache_logbook.aspx?guid=73246a5a-ebb9-4d4f-8db9-a951036f5376">View Logbook</a> | <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 17 images</a>
</p>
@@ -1223,7 +1248,7 @@ googletag.cmd.push(function() { googletag.display('div_48899bdd-4eec-42e1-a899-3 </div>
<p>
<small>
- Current Time: <time datetime="2013-03-08T11:18:57Z">03/08/2013 11:18:57 (UTC-08:00) Pacific Time (US & Canada) (19:18 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2013-03-08T14:48:48Z">2013-03-08T14:48:48Z</time> on 03/08/2013 06:48:48 (UTC-08:00) Pacific Time (US & Canada) (14:48 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
+ Current Time: <time datetime="2013-03-27T04:36:03Z">03/27/2013 04:36:03 Pacific Daylight Time (11:36 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2013-03-26T14:44:26Z">2013-03-26T14:44:26Z</time> on 03/26/2013 07:44:26 Pacific Daylight Time (14:44 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
</small>
</p>
<div id="topScroll" class="TopScroll" style="display:none;">
@@ -2165,9 +2190,9 @@ cmapAdditionalWaypoints = [{"lat":52.42307,"lng":9.65038,"type":217,"name":"GC2C mapLatLng = {"lat":52.42507,"lng":9.6642,"type":3,"name":"Kinderwald KiC"};
var ccConversions = [{"t":"Decimal","k":"DD","d":"WGS84","v":"52.425067, 009.664200"},{"t":"DDD MM SS.SSS","k":"DMS","d":"WGS84","v":"N 52° 25' 30.241\" E 009° 39' 51.120\""},{"t":"UTM","k":"UTM","d":"WGS84","v":"32U E 545164 N 5808524"}];
userInfo = {ID: 4793174};
-userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4I6RAV2GHJDSEJCWVMDZN4MTGMAOEZUMRE4O275C47DFBAUAEYEXHIHL3BR5A4DYOXE55ALQR7XO4EA';
+userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4I6RAV2GHJDSEJCWVMDZN4MTGMAOEZUMRE4O275DCLT7PPQSTBRFVU4Z7CWFZEO4SX7NBZEL7LCNLAQ';
includeAvatars = true;
-initalLogs = {"status":"success", "data": [{"LogID":297431085,"CacheID":1811409,"LogGuid":"2c80abd0-d7de-4eeb-aba2-5e3d2c58ecb0","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auch wenn es zum Baden eindeutig noch zu kalt war, habe ich den Cache gut gefunden","Created":"2013-03-08","Visited":"2013-03-08","UserName":"loenni","MembershipLevel":3,"AccountID":4860261,"AccountGuid":"2df93c3f-982d-43fe-8b91-165bf2e3abf5","Email":"","AvatarImage":"","GeocacheFindCount":1943,"GeocacheHideCount":1,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297134777,"CacheID":1811409,"LogGuid":"0c6319f6-591d-42c6-b397-88e67447fe72","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf \"after-work-tour\" diesen Multi als NC absolviert. Alle Stationen konnten im Team mit Axel-Foley gut gefunden werden. Vielen Dank!","Created":"2013-03-06","Visited":"2013-03-05","UserName":"Nilleboy","MembershipLevel":3,"AccountID":1221755,"AccountGuid":"d038670b-5689-420e-950a-4d40967c9e64","Email":"","AvatarImage":"702eebc3-525e-46ae-ba95-a89b69b325fb.jpg","GeocacheFindCount":4068,"GeocacheHideCount":9,"ChallengesCompleted":47,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297117378,"CacheID":1811409,"LogGuid":"63b794b8-e4bd-410e-b1d1-5a7a46357f62","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf kleiner Cacherunde am Abend im Team mit Nilleboy auch diesen Multi durchlaufen. <br />TFTC","Created":"2013-03-05","Visited":"2013-03-05","UserName":"Axel-Foley","MembershipLevel":3,"AccountID":1836934,"AccountGuid":"342fa7de-405c-4d1c-b104-79c8d59ffb46","Email":"","AvatarImage":"83f5a949-9f61-4ac8-bc4f-f93630c0135c.jpg","GeocacheFindCount":5383,"GeocacheHideCount":35,"ChallengesCompleted":19,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":296501698,"CacheID":1811409,"LogGuid":"1e66c165-d70d-4783-ab65-c9db73a24882","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"#2283: Das war eine schöne Runde. Vom angegebenen Parkplatz aus sind wir die Stationen in umgekehrter Reihenfolge abgelaufen. So konnten wir auf dem Rückweg zum Cachemobil die anderen Stationen des Kinderwaldes erkunden. Für Cacher mit Kindern ist dieset Cache ein Muss.<br />Dafür gibt's einen FP.<br />DFDC <b><font color=\"blue\">mue-th</font></b><font color=\"blue\"></font>","Created":"2013-03-03","Visited":"2013-03-03","UserName":"mue-th","MembershipLevel":3,"AccountID":2601691,"AccountGuid":"473ce8cb-c95a-445c-805f-58e3c5442829","Email":"","AvatarImage":"a1a1d0fc-d54d-46f5-b2de-1b6149b7c234.jpg","GeocacheFindCount":2293,"GeocacheHideCount":9,"ChallengesCompleted":11,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":295044129,"CacheID":1811409,"LogGuid":"4cc3171f-1f0f-49c9-a0fd-30bb93a0945a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Es war sehr schon cach. <br />DFDC","Created":"2013-02-22","Visited":"2013-02-22","UserName":"nekolny","MembershipLevel":3,"AccountID":2018515,"AccountGuid":"ff452d34-4f18-4c2e-bce4-f11d2e65d056","Email":"","AvatarImage":"","GeocacheFindCount":163,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":294890152,"CacheID":1811409,"LogGuid":"3bb18a57-1986-4ee7-a4c4-83fbb6a9af01","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Bei der momentanen Kälte und den angedrohten Niederschlägen legten wir die heutige Runde ein wenig in den Wald. Das schützte ganz gut vor dem kalten Wind, und der zeitweise fallende Schneeregen wurde auch ein wenig gedämpft. So konnten wir diese schöne Runde ganz gut geniessen. Nur für die Badehose war heute definitiv nicht die geeignete Jahreszeit <img src=\"/images/icons/icon_smile_wink.gif\" border=\"0\" align=\"middle\" /><br />Schliesslich hatten wir alles beisammen, um die Dose gut finden zu können. <br />Vielen Dank für diese schöne Tour!","Created":"2013-02-20","Visited":"2013-01-27","UserName":"fafafafa","MembershipLevel":3,"AccountID":3536809,"AccountGuid":"8df66947-094c-42d9-a48c-cbb65732d7bd","Email":"","AvatarImage":"08b32861-980a-4e9d-ab58-8fe95549e1a5.jpg","GeocacheFindCount":1787,"GeocacheHideCount":8,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":291273728,"CacheID":1811409,"LogGuid":"e0fade10-d897-4387-9f36-cc7da4a8c360","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Dieser Cache im Kinderwald hat uns sehr gut gefallen.Vielen Dank fürs Zeigen sagt Immergruen61","Created":"2013-01-28","Visited":"2013-01-27","UserName":"Immergruen61","MembershipLevel":1,"AccountID":3510044,"AccountGuid":"bb127b72-e5d0-408f-be49-550ed59e8270","Email":"","AvatarImage":"","GeocacheFindCount":392,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":291118872,"CacheID":1811409,"LogGuid":"c667894e-9a88-41f4-8903-85d940199b0f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Vor einigen Jahren lernten wir den Kinderwald gemeinsam mit Immergrün61 bei einem Nachtcache (Nachts sind alle Katzen grau kennen) und schon damals nahmen wir uns vor, hier die Cachedogs mal bei Tag zu lüften.<br />Heute nahm das Projekt mit fafafafa und Immergrün61 Gestalt an und wir besuchten bei Tauwetter diesen Wald. Wir begannen im Osten mit dem Multi \"Schatzsuche\" und verlängerten die Tour nach Westen um diesen sehr schön gemachten Kindercache.<br />Auch für Erwachsene eine gute Tour, und die Cachedogs tobten hier um die Wette.<br />Vielen DAnk für diesen sympathischen Multi sagt GeoDachs<br />wir vergeben gerne einen FP","Created":"2013-01-27","Visited":"2013-01-27","UserName":"GeoDachs","MembershipLevel":3,"AccountID":1303409,"AccountGuid":"f6fe0c37-cdf4-485c-baa5-e5acf424ba5c","Email":"","AvatarImage":"eb2cc8ff-956a-49be-9066-fc4acfe712ed.jpg","GeocacheFindCount":1393,"GeocacheHideCount":28,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":290259183,"CacheID":1811409,"LogGuid":"bf90aca0-b7f1-4e66-b359-2f0133b6f085","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ein schöner Spaziergang verbunden mit gut lösbaren Rätseln lassen uns ein blaues Schleifchen hinterlegen. DfdC.","Created":"2013-01-20","Visited":"2013-01-20","UserName":"Hansabach","MembershipLevel":3,"AccountID":2609476,"AccountGuid":"3be322b5-d256-4976-b89a-5d9030743750","Email":"","AvatarImage":"92747f88-9167-452e-b3ba-84efe34d0a79.jpg","GeocacheFindCount":1733,"GeocacheHideCount":8,"ChallengesCompleted":13,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289228016,"CacheID":1811409,"LogGuid":"305bc4d9-e97d-4ddd-a297-f2560b428761","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zusammen mit michaelhoeynck und den 35 anderen Familienmitgliedern, Freunden und den 97 Kindern einen schoenen Winterausflug gemacht und die Aufgaben schnell und stressfrei rausgekriegt und dann die Dose nach einer Weile Steine drehen gefunden.<br /><br />Gruss und dfdc,<br /><br />KdoDonut","Created":"2013-01-13","Visited":"2013-01-13","UserName":"kdodonut","MembershipLevel":3,"AccountID":2604456,"AccountGuid":"90476ff4-c809-469e-9199-481c4d0ffb68","Email":"","AvatarImage":"962a83ca-8fa8-45c7-826b-127c9393bdf9.jpg","GeocacheFindCount":1196,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289212768,"CacheID":1811409,"LogGuid":"a4c59e67-be4b-4d0d-94b8-6c961b0c1e06","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Kalt und rutschig hier. Tftc!","Created":"2013-01-13","Visited":"2013-01-13","UserName":"MichaelHoeynck","MembershipLevel":1,"AccountID":6324182,"AccountGuid":"8c5d1f31-faa9-4e1b-a4a7-ad509c7dc249","Email":"","AvatarImage":"","GeocacheFindCount":25,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":289457694,"CacheID":1811409,"LogGuid":"076025fb-9392-4782-b79e-6e4f748152d5","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Die Idee des Kinderwaldes finde ich klasse. Hier haben Kinder sicher ihren Spaß. Lotterliese410 und ich hatten ihn bei der Beantwortung der Fragen und beim Finden der Dose auf jeden Fall. Danke fürs Verstecken und fürs Zeigen dieses Waldes.","Created":"2013-01-13","Visited":"2013-01-12","UserName":"CeKa82","MembershipLevel":3,"AccountID":4940226,"AccountGuid":"3d26d0b9-e0e3-4c2f-b6d3-7197de753557","Email":"","AvatarImage":"cb08e168-e416-4c56-87cb-6b65b2d99577.jpg","GeocacheFindCount":1151,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289193118,"CacheID":1811409,"LogGuid":"2a6bc254-9ff1-4bd0-9238-825829a6b056","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Diesen Cache haben CeKa82 und ich mal in einen NC umgewandelt. Die Stationen waren alle schnell und gut gefunden und die Ort ist für Kinder sicher der Hit.<br />Hat mir wirklich gut gefallen die Runde.<br /><br />DfdC + FP","Created":"2013-01-13","Visited":"2013-01-12","UserName":"Lotterliese410","MembershipLevel":3,"AccountID":4585091,"AccountGuid":"01ca9a18-52a8-491d-872d-eff1a9491523","Email":"","AvatarImage":"7b1b273a-bb8d-48c0-8e11-afc48eaa43ce.jpg","GeocacheFindCount":1416,"GeocacheHideCount":0,"ChallengesCompleted":20,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":279154355,"CacheID":1811409,"LogGuid":"8b405a78-1653-4809-b6ee-38f905db205e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"mit olla66 gefunden.","Created":"2012-11-12","Visited":"2012-11-10","UserName":"hjansen67","MembershipLevel":1,"AccountID":5614762,"AccountGuid":"fcdfa621-d616-4496-8ff8-5a5cba25dd75","Email":"","AvatarImage":"","GeocacheFindCount":407,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":278602993,"CacheID":1811409,"LogGuid":"a793e95e-ae4f-4461-9a45-13529479bca6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Hallo,<br />das es das Kinderwäldchen geben soll, hatte ich schon oft gehört. Früher schon immer mal mit den Kids hier her gewollt. Aber wie es ist... nix geworden.<br />Aber nun mit dem Caching Hobby.... Alles Toll. Hier werden wir im Sommer mal herkommen.<br />Danke für die Runde.<br />Am Ziel angekommen trafen wir Zwei Mitstreiter. Nach kurzem Plausch dann gesucht..gefunden und zusammen geloggt.<br /><br />+ Schleifchen<br /><br /><br />DFDC sagen olla und kids<br /><br />This entry was edited by olla66 on Saturday, 10 November 2012 at 17:31:53 UTC.","Created":"2012-11-10","Visited":"2012-11-10","UserName":"olla66","MembershipLevel":3,"AccountID":5570656,"AccountGuid":"3f8fbb08-da63-42f3-bbf5-13839fed8be3","Email":"","AvatarImage":"de9bc470-63a4-4f2c-9519-d3fbc228f2e2.gif","GeocacheFindCount":585,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":278588958,"CacheID":1811409,"LogGuid":"c0614861-49a3-4741-b002-652c0958ef7f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auch den haben wir endlich gefunden, beim ersten Anlauf war es uns fuers Final zu dunkel und regnerisch . Schön gemacht. Danke","Created":"2012-11-10","Visited":"2012-11-10","UserName":"Der Dicke Hund aus Bangkok","MembershipLevel":3,"AccountID":1045929,"AccountGuid":"fc110a3f-f712-4d97-9ff6-4d12df9ac5a9","Email":"","AvatarImage":"","GeocacheFindCount":2410,"GeocacheHideCount":5,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":277696513,"CacheID":1811409,"LogGuid":"b3b15708-9caa-4478-8ef7-3b22a6f5c50b","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Diesen Cache für einen Geburtstagsnachmittag genutzt. Die Kinder waren sehr begeistert, vorallem auch von der tollen Gegend. Vielen Dank für das Zeigen dieser schönen Gegend. TFTC","Created":"2012-11-04","Visited":"2012-11-03","UserName":"DanSte","MembershipLevel":3,"AccountID":2752144,"AccountGuid":"579ea9ad-7907-4b50-8923-7ccebc0d8a5f","Email":"","AvatarImage":"","GeocacheFindCount":505,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":276634237,"CacheID":1811409,"LogGuid":"bc9c31d0-b30b-4d0d-b952-8e86976f0046","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf kleiner Urlaubstour gut gefunden. Danke für den tollen Cache!","Created":"2012-10-30","Visited":"2012-10-30","UserName":"pille-palle84","MembershipLevel":3,"AccountID":1918474,"AccountGuid":"e5655c6f-dd64-47d5-abc3-85d4ec2d00b6","Email":"","AvatarImage":"c4226573-600e-4e17-8935-460fd7fbe6a7.jpg","GeocacheFindCount":5212,"GeocacheHideCount":6,"ChallengesCompleted":102,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":275550323,"CacheID":1811409,"LogGuid":"55664edc-8ed4-4b72-9be4-02283d371068","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Trotz schlechten Wetter gefunden.<br />DFDC","Created":"2012-10-25","Visited":"2012-10-25","UserName":"Kuha25","MembershipLevel":1,"AccountID":5428575,"AccountGuid":"dfcedce1-8dff-405e-87fc-76833f28a372","Email":"","AvatarImage":"","GeocacheFindCount":9,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":275549638,"CacheID":1811409,"LogGuid":"2f46d961-6d88-4e3f-9540-54365f38310a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Mit kuha25 die Aufgaben schnell gelöst und die Finale nach einer kurzen Suche gefunden.<br />DFDC","Created":"2012-10-25","Visited":"2012-10-25","UserName":"KariMikael","MembershipLevel":3,"AccountID":2796742,"AccountGuid":"986c9e4b-6848-4713-a849-514b7b5f8b60","Email":"","AvatarImage":"","GeocacheFindCount":370,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":273990958,"CacheID":1811409,"LogGuid":"5539fc01-708e-4b34-8996-68d77ef4f6bd","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Heute, auf Besuch in Hannover, hat es mich und meinen Neffen bei der \"Schatzsuche\" in den Kinderwald verschlagen. Die Stationen waren alle gut zu finden und während der Kleine fleißig zählte, habe ich den Rechenpart übernommen <img src=\"/images/icons/icon_smile_wink.gif\" border=\"0\" align=\"middle\" />. Die Dose war dann auch fix gefunden, nur leider war fast nix zum Tauschen darin <img src=\"/images/icons/icon_smile_sad.gif\" border=\"0\" align=\"middle\" />. Wir haben dann drei Wachskreiden reingelegt. <br />Von dem Wald waren wir beide begeistert, von den Tipis, dem Plumpsklo ..., nur die Seilfähre hat der Kleine arg vermisst, so dass ich ihm versprechen musste, im Sommer auf jeden Fall noch mal wiederzukommen <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" />.<br />Danke für´s Zeigen dieses schönen Kinderortes und viele Grüße aus NRW","Created":"2012-10-19","Visited":"2012-10-16","UserName":"Jinglebee","MembershipLevel":3,"AccountID":5128650,"AccountGuid":"365fd29b-2fb9-48ee-9cdf-9e09a274c52b","Email":"","AvatarImage":"023553d6-9924-40b4-8432-62f47433c145.jpg","GeocacheFindCount":273,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":273976850,"CacheID":1811409,"LogGuid":"3b5adf41-dfc9-45c5-acec-8894625101fc","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Als Mitglied im kinderwald e.V. hatte ich diesen schon lange machen wollen. Aber irgendwas kam immer dazwischen. <br />Heute war ich Alleine auf dem Gelände und konnte in Ruhe suchen und loggen.<br />DfdC sagt Hawkhunter.","Created":"2012-10-18","Visited":"2012-10-16","UserName":"Hawkhunter","MembershipLevel":3,"AccountID":1286695,"AccountGuid":"a8c0f0e5-58db-4d16-885e-87446a79ffdc","Email":"","AvatarImage":"c7ddc254-5f33-40e4-b9f0-0abaf89c8697.jpg","GeocacheFindCount":1981,"GeocacheHideCount":0,"ChallengesCompleted":7,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":269736455,"CacheID":1811409,"LogGuid":"8029670b-1e40-4828-947a-35b1bd384c08","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Schöner, entspannender Multi, hat Spaß gemacht<br /> 30.09.12 18:34 Find #112<br />DfdC :)","Created":"2012-09-30","Visited":"2012-09-30","UserName":"Vincent-Shezar","MembershipLevel":3,"AccountID":5412756,"AccountGuid":"ff83a8a9-95a6-4a3a-bff8-37ef16522000","Email":"","AvatarImage":"","GeocacheFindCount":305,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":269707464,"CacheID":1811409,"LogGuid":"5f3d71ed-a9f0-4c80-a18d-62853dc908b6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Schöner Cache mit interessanter Umgebung :) dfdc","Created":"2012-09-30","Visited":"2012-09-30","UserName":"OdessaXxX","MembershipLevel":3,"AccountID":4149541,"AccountGuid":"f936faba-1a7e-4868-94ef-a009b8cc8a81","Email":"","AvatarImage":"afb33499-53bd-4ea0-8e88-6f6e9eec822e.jpg","GeocacheFindCount":306,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":269588958,"CacheID":1811409,"LogGuid":"74492efd-6dd8-4a37-acb1-3ec4ec95501d","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Mit Familie Spürnase einen schönen Nachmittag an diesem für Kinder herrlichen Ort verbracht. Wir Großen haben es uns gemütlich gemacht und die Mädels haben in der Zeit das Rätsel gelöst, die Großen anschließend die Koordinaten überprüft und die Jungs das Final gesucht.<br /><br /><b><font color=\"orange\">cebu </font></b><font color=\"orange\"></font> <b><font color=\"blue\">68 </font></b><font color=\"blue\"></font> <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" /><br />- no owners - no caches - no fun !","Created":"2012-09-30","Visited":"2012-09-23","UserName":"Cebu68","MembershipLevel":3,"AccountID":3143046,"AccountGuid":"c55421d0-ebe4-4c3c-b792-2edc7740d2de","Email":"","AvatarImage":"845c5c2d-0c75-4320-9121-a239805920f1.jpg","GeocacheFindCount":419,"GeocacheHideCount":14,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 152, "rows": 152 } };
+initalLogs = {"status":"success", "data": [{"LogID":300774617,"CacheID":1811409,"LogGuid":"5ae17e51-fbfa-4049-b9b3-cb2dbcdc92a5","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"sehr schöner Cache. Leider war die Fähre nicht da doch dank des Tipps haben wir das Ziel doch gefunden.","Created":"2013-03-26","Visited":"2013-03-26","UserName":"TeamLeo00","MembershipLevel":3,"AccountID":5502709,"AccountGuid":"372916b2-a76d-4393-a831-d398cba13b71","Email":"","AvatarImage":"b0c9e3af-1785-4430-bb88-c80134d02684.jpg","GeocacheFindCount":94,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297431085,"CacheID":1811409,"LogGuid":"2c80abd0-d7de-4eeb-aba2-5e3d2c58ecb0","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auch wenn es zum Baden eindeutig noch zu kalt war, habe ich den Cache gut gefunden","Created":"2013-03-08","Visited":"2013-03-08","UserName":"loenni","MembershipLevel":3,"AccountID":4860261,"AccountGuid":"2df93c3f-982d-43fe-8b91-165bf2e3abf5","Email":"","AvatarImage":"","GeocacheFindCount":1965,"GeocacheHideCount":1,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297134777,"CacheID":1811409,"LogGuid":"0c6319f6-591d-42c6-b397-88e67447fe72","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf \"after-work-tour\" diesen Multi als NC absolviert. Alle Stationen konnten im Team mit Axel-Foley gut gefunden werden. Vielen Dank!","Created":"2013-03-06","Visited":"2013-03-05","UserName":"Nilleboy","MembershipLevel":3,"AccountID":1221755,"AccountGuid":"d038670b-5689-420e-950a-4d40967c9e64","Email":"","AvatarImage":"702eebc3-525e-46ae-ba95-a89b69b325fb.jpg","GeocacheFindCount":4181,"GeocacheHideCount":9,"ChallengesCompleted":47,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297117378,"CacheID":1811409,"LogGuid":"63b794b8-e4bd-410e-b1d1-5a7a46357f62","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf kleiner Cacherunde am Abend im Team mit Nilleboy auch diesen Multi durchlaufen. <br />TFTC","Created":"2013-03-05","Visited":"2013-03-05","UserName":"Axel-Foley","MembershipLevel":3,"AccountID":1836934,"AccountGuid":"342fa7de-405c-4d1c-b104-79c8d59ffb46","Email":"","AvatarImage":"83f5a949-9f61-4ac8-bc4f-f93630c0135c.jpg","GeocacheFindCount":5512,"GeocacheHideCount":35,"ChallengesCompleted":19,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":296501698,"CacheID":1811409,"LogGuid":"1e66c165-d70d-4783-ab65-c9db73a24882","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"#2283: Das war eine schöne Runde. Vom angegebenen Parkplatz aus sind wir die Stationen in umgekehrter Reihenfolge abgelaufen. So konnten wir auf dem Rückweg zum Cachemobil die anderen Stationen des Kinderwaldes erkunden. Für Cacher mit Kindern ist dieset Cache ein Muss.<br />Dafür gibt's einen FP.<br />DFDC <b><font color=\"blue\">mue-th</font></b><font color=\"blue\"></font>","Created":"2013-03-03","Visited":"2013-03-03","UserName":"mue-th","MembershipLevel":3,"AccountID":2601691,"AccountGuid":"473ce8cb-c95a-445c-805f-58e3c5442829","Email":"","AvatarImage":"a1a1d0fc-d54d-46f5-b2de-1b6149b7c234.jpg","GeocacheFindCount":2348,"GeocacheHideCount":9,"ChallengesCompleted":11,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":295044129,"CacheID":1811409,"LogGuid":"4cc3171f-1f0f-49c9-a0fd-30bb93a0945a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Es war sehr schon cach. <br />DFDC","Created":"2013-02-22","Visited":"2013-02-22","UserName":"nekolny","MembershipLevel":3,"AccountID":2018515,"AccountGuid":"ff452d34-4f18-4c2e-bce4-f11d2e65d056","Email":"","AvatarImage":"","GeocacheFindCount":163,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":294890152,"CacheID":1811409,"LogGuid":"3bb18a57-1986-4ee7-a4c4-83fbb6a9af01","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Bei der momentanen Kälte und den angedrohten Niederschlägen legten wir die heutige Runde ein wenig in den Wald. Das schützte ganz gut vor dem kalten Wind, und der zeitweise fallende Schneeregen wurde auch ein wenig gedämpft. So konnten wir diese schöne Runde ganz gut geniessen. Nur für die Badehose war heute definitiv nicht die geeignete Jahreszeit <img src=\"/images/icons/icon_smile_wink.gif\" border=\"0\" align=\"middle\" /><br />Schliesslich hatten wir alles beisammen, um die Dose gut finden zu können. <br />Vielen Dank für diese schöne Tour!","Created":"2013-02-20","Visited":"2013-01-27","UserName":"fafafafa","MembershipLevel":3,"AccountID":3536809,"AccountGuid":"8df66947-094c-42d9-a48c-cbb65732d7bd","Email":"","AvatarImage":"08b32861-980a-4e9d-ab58-8fe95549e1a5.jpg","GeocacheFindCount":1856,"GeocacheHideCount":8,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":291273728,"CacheID":1811409,"LogGuid":"e0fade10-d897-4387-9f36-cc7da4a8c360","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Dieser Cache im Kinderwald hat uns sehr gut gefallen.Vielen Dank fürs Zeigen sagt Immergruen61","Created":"2013-01-28","Visited":"2013-01-27","UserName":"Immergruen61","MembershipLevel":1,"AccountID":3510044,"AccountGuid":"bb127b72-e5d0-408f-be49-550ed59e8270","Email":"","AvatarImage":"","GeocacheFindCount":394,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":291118872,"CacheID":1811409,"LogGuid":"c667894e-9a88-41f4-8903-85d940199b0f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Vor einigen Jahren lernten wir den Kinderwald gemeinsam mit Immergrün61 bei einem Nachtcache (Nachts sind alle Katzen grau kennen) und schon damals nahmen wir uns vor, hier die Cachedogs mal bei Tag zu lüften.<br />Heute nahm das Projekt mit fafafafa und Immergrün61 Gestalt an und wir besuchten bei Tauwetter diesen Wald. Wir begannen im Osten mit dem Multi \"Schatzsuche\" und verlängerten die Tour nach Westen um diesen sehr schön gemachten Kindercache.<br />Auch für Erwachsene eine gute Tour, und die Cachedogs tobten hier um die Wette.<br />Vielen DAnk für diesen sympathischen Multi sagt GeoDachs<br />wir vergeben gerne einen FP","Created":"2013-01-27","Visited":"2013-01-27","UserName":"GeoDachs","MembershipLevel":3,"AccountID":1303409,"AccountGuid":"f6fe0c37-cdf4-485c-baa5-e5acf424ba5c","Email":"","AvatarImage":"eb2cc8ff-956a-49be-9066-fc4acfe712ed.jpg","GeocacheFindCount":1404,"GeocacheHideCount":28,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":290259183,"CacheID":1811409,"LogGuid":"bf90aca0-b7f1-4e66-b359-2f0133b6f085","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ein schöner Spaziergang verbunden mit gut lösbaren Rätseln lassen uns ein blaues Schleifchen hinterlegen. DfdC.","Created":"2013-01-20","Visited":"2013-01-20","UserName":"Hansabach","MembershipLevel":3,"AccountID":2609476,"AccountGuid":"3be322b5-d256-4976-b89a-5d9030743750","Email":"","AvatarImage":"92747f88-9167-452e-b3ba-84efe34d0a79.jpg","GeocacheFindCount":1759,"GeocacheHideCount":8,"ChallengesCompleted":13,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289228016,"CacheID":1811409,"LogGuid":"305bc4d9-e97d-4ddd-a297-f2560b428761","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zusammen mit michaelhoeynck und den 35 anderen Familienmitgliedern, Freunden und den 97 Kindern einen schoenen Winterausflug gemacht und die Aufgaben schnell und stressfrei rausgekriegt und dann die Dose nach einer Weile Steine drehen gefunden.<br /><br />Gruss und dfdc,<br /><br />KdoDonut","Created":"2013-01-13","Visited":"2013-01-13","UserName":"kdodonut","MembershipLevel":3,"AccountID":2604456,"AccountGuid":"90476ff4-c809-469e-9199-481c4d0ffb68","Email":"","AvatarImage":"962a83ca-8fa8-45c7-826b-127c9393bdf9.jpg","GeocacheFindCount":1203,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289212768,"CacheID":1811409,"LogGuid":"a4c59e67-be4b-4d0d-94b8-6c961b0c1e06","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Kalt und rutschig hier. Tftc!","Created":"2013-01-13","Visited":"2013-01-13","UserName":"MichaelHoeynck","MembershipLevel":1,"AccountID":6324182,"AccountGuid":"8c5d1f31-faa9-4e1b-a4a7-ad509c7dc249","Email":"","AvatarImage":"","GeocacheFindCount":25,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":289457694,"CacheID":1811409,"LogGuid":"076025fb-9392-4782-b79e-6e4f748152d5","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Die Idee des Kinderwaldes finde ich klasse. Hier haben Kinder sicher ihren Spaß. Lotterliese410 und ich hatten ihn bei der Beantwortung der Fragen und beim Finden der Dose auf jeden Fall. Danke fürs Verstecken und fürs Zeigen dieses Waldes.","Created":"2013-01-13","Visited":"2013-01-12","UserName":"CeKa82","MembershipLevel":3,"AccountID":4940226,"AccountGuid":"3d26d0b9-e0e3-4c2f-b6d3-7197de753557","Email":"","AvatarImage":"1565ca84-1552-4d67-ae70-ea5c488103b0.png","GeocacheFindCount":1266,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289193118,"CacheID":1811409,"LogGuid":"2a6bc254-9ff1-4bd0-9238-825829a6b056","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Diesen Cache haben CeKa82 und ich mal in einen NC umgewandelt. Die Stationen waren alle schnell und gut gefunden und die Ort ist für Kinder sicher der Hit.<br />Hat mir wirklich gut gefallen die Runde.<br /><br />DfdC + FP","Created":"2013-01-13","Visited":"2013-01-12","UserName":"Lotterliese410","MembershipLevel":3,"AccountID":4585091,"AccountGuid":"01ca9a18-52a8-491d-872d-eff1a9491523","Email":"","AvatarImage":"7b1b273a-bb8d-48c0-8e11-afc48eaa43ce.jpg","GeocacheFindCount":1532,"GeocacheHideCount":0,"ChallengesCompleted":20,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":279154355,"CacheID":1811409,"LogGuid":"8b405a78-1653-4809-b6ee-38f905db205e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"mit olla66 gefunden.","Created":"2012-11-12","Visited":"2012-11-10","UserName":"hjansen67","MembershipLevel":1,"AccountID":5614762,"AccountGuid":"fcdfa621-d616-4496-8ff8-5a5cba25dd75","Email":"","AvatarImage":"","GeocacheFindCount":407,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":278602993,"CacheID":1811409,"LogGuid":"a793e95e-ae4f-4461-9a45-13529479bca6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Hallo,<br />das es das Kinderwäldchen geben soll, hatte ich schon oft gehört. Früher schon immer mal mit den Kids hier her gewollt. Aber wie es ist... nix geworden.<br />Aber nun mit dem Caching Hobby.... Alles Toll. Hier werden wir im Sommer mal herkommen.<br />Danke für die Runde.<br />Am Ziel angekommen trafen wir Zwei Mitstreiter. Nach kurzem Plausch dann gesucht..gefunden und zusammen geloggt.<br /><br />+ Schleifchen<br /><br /><br />DFDC sagen olla und kids<br /><br />This entry was edited by olla66 on Saturday, 10 November 2012 at 17:31:53 UTC.","Created":"2012-11-10","Visited":"2012-11-10","UserName":"olla66","MembershipLevel":3,"AccountID":5570656,"AccountGuid":"3f8fbb08-da63-42f3-bbf5-13839fed8be3","Email":"","AvatarImage":"de9bc470-63a4-4f2c-9519-d3fbc228f2e2.gif","GeocacheFindCount":605,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":278588958,"CacheID":1811409,"LogGuid":"c0614861-49a3-4741-b002-652c0958ef7f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auch den haben wir endlich gefunden, beim ersten Anlauf war es uns fuers Final zu dunkel und regnerisch . Schön gemacht. Danke","Created":"2012-11-10","Visited":"2012-11-10","UserName":"Der Dicke Hund aus Bangkok","MembershipLevel":3,"AccountID":1045929,"AccountGuid":"fc110a3f-f712-4d97-9ff6-4d12df9ac5a9","Email":"","AvatarImage":"","GeocacheFindCount":2414,"GeocacheHideCount":5,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":277696513,"CacheID":1811409,"LogGuid":"b3b15708-9caa-4478-8ef7-3b22a6f5c50b","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Diesen Cache für einen Geburtstagsnachmittag genutzt. Die Kinder waren sehr begeistert, vorallem auch von der tollen Gegend. Vielen Dank für das Zeigen dieser schönen Gegend. TFTC","Created":"2012-11-04","Visited":"2012-11-03","UserName":"DanSte","MembershipLevel":3,"AccountID":2752144,"AccountGuid":"579ea9ad-7907-4b50-8923-7ccebc0d8a5f","Email":"","AvatarImage":"","GeocacheFindCount":505,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":276634237,"CacheID":1811409,"LogGuid":"bc9c31d0-b30b-4d0d-b952-8e86976f0046","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Auf kleiner Urlaubstour gut gefunden. Danke für den tollen Cache!","Created":"2012-10-30","Visited":"2012-10-30","UserName":"pille-palle84","MembershipLevel":3,"AccountID":1918474,"AccountGuid":"e5655c6f-dd64-47d5-abc3-85d4ec2d00b6","Email":"","AvatarImage":"c4226573-600e-4e17-8935-460fd7fbe6a7.jpg","GeocacheFindCount":5254,"GeocacheHideCount":6,"ChallengesCompleted":102,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":275550323,"CacheID":1811409,"LogGuid":"55664edc-8ed4-4b72-9be4-02283d371068","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Trotz schlechten Wetter gefunden.<br />DFDC","Created":"2012-10-25","Visited":"2012-10-25","UserName":"Kuha25","MembershipLevel":1,"AccountID":5428575,"AccountGuid":"dfcedce1-8dff-405e-87fc-76833f28a372","Email":"","AvatarImage":"","GeocacheFindCount":9,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":275549638,"CacheID":1811409,"LogGuid":"2f46d961-6d88-4e3f-9540-54365f38310a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Mit kuha25 die Aufgaben schnell gelöst und die Finale nach einer kurzen Suche gefunden.<br />DFDC","Created":"2012-10-25","Visited":"2012-10-25","UserName":"KariMikael","MembershipLevel":3,"AccountID":2796742,"AccountGuid":"986c9e4b-6848-4713-a849-514b7b5f8b60","Email":"","AvatarImage":"","GeocacheFindCount":370,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":273990958,"CacheID":1811409,"LogGuid":"5539fc01-708e-4b34-8996-68d77ef4f6bd","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Heute, auf Besuch in Hannover, hat es mich und meinen Neffen bei der \"Schatzsuche\" in den Kinderwald verschlagen. Die Stationen waren alle gut zu finden und während der Kleine fleißig zählte, habe ich den Rechenpart übernommen <img src=\"/images/icons/icon_smile_wink.gif\" border=\"0\" align=\"middle\" />. Die Dose war dann auch fix gefunden, nur leider war fast nix zum Tauschen darin <img src=\"/images/icons/icon_smile_sad.gif\" border=\"0\" align=\"middle\" />. Wir haben dann drei Wachskreiden reingelegt. <br />Von dem Wald waren wir beide begeistert, von den Tipis, dem Plumpsklo ..., nur die Seilfähre hat der Kleine arg vermisst, so dass ich ihm versprechen musste, im Sommer auf jeden Fall noch mal wiederzukommen <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" />.<br />Danke für´s Zeigen dieses schönen Kinderortes und viele Grüße aus NRW","Created":"2012-10-19","Visited":"2012-10-16","UserName":"Jinglebee","MembershipLevel":3,"AccountID":5128650,"AccountGuid":"365fd29b-2fb9-48ee-9cdf-9e09a274c52b","Email":"","AvatarImage":"023553d6-9924-40b4-8432-62f47433c145.jpg","GeocacheFindCount":273,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":273976850,"CacheID":1811409,"LogGuid":"3b5adf41-dfc9-45c5-acec-8894625101fc","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Als Mitglied im kinderwald e.V. hatte ich diesen schon lange machen wollen. Aber irgendwas kam immer dazwischen. <br />Heute war ich Alleine auf dem Gelände und konnte in Ruhe suchen und loggen.<br />DfdC sagt Hawkhunter.","Created":"2012-10-18","Visited":"2012-10-16","UserName":"Hawkhunter","MembershipLevel":3,"AccountID":1286695,"AccountGuid":"a8c0f0e5-58db-4d16-885e-87446a79ffdc","Email":"","AvatarImage":"c7ddc254-5f33-40e4-b9f0-0abaf89c8697.jpg","GeocacheFindCount":1981,"GeocacheHideCount":0,"ChallengesCompleted":7,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":269736455,"CacheID":1811409,"LogGuid":"8029670b-1e40-4828-947a-35b1bd384c08","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Schöner, entspannender Multi, hat Spaß gemacht<br /> 30.09.12 18:34 Find #112<br />DfdC :)","Created":"2012-09-30","Visited":"2012-09-30","UserName":"Vincent-Shezar","MembershipLevel":3,"AccountID":5412756,"AccountGuid":"ff83a8a9-95a6-4a3a-bff8-37ef16522000","Email":"","AvatarImage":"","GeocacheFindCount":337,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":269707464,"CacheID":1811409,"LogGuid":"5f3d71ed-a9f0-4c80-a18d-62853dc908b6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Schöner Cache mit interessanter Umgebung :) dfdc","Created":"2012-09-30","Visited":"2012-09-30","UserName":"OdessaXxX","MembershipLevel":3,"AccountID":4149541,"AccountGuid":"f936faba-1a7e-4868-94ef-a009b8cc8a81","Email":"","AvatarImage":"afb33499-53bd-4ea0-8e88-6f6e9eec822e.jpg","GeocacheFindCount":348,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 153, "rows": 153 } };
$(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'Premium', null, true]); });var gaToken = 'UA-2020240-1';//]]>
</script>
</form>
@@ -2360,6 +2385,6 @@ $(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', </noscript>
</div>
<!-- End Quantcast tag -->
- <!-- Server: WEB14; Build: Web.HotFix_20130305.1 -->
+ <!-- Server: WEB11; Build: Web.Release_20130319.1 -->
</body>
</html>
diff --git a/tests/src/cgeo/geocaching/test/mock/GC2JVEH.html b/tests/src/cgeo/geocaching/test/mock/GC2JVEH.html index 807d50c..9db5038 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC2JVEH.html +++ b/tests/src/cgeo/geocaching/test/mock/GC2JVEH.html @@ -76,16 +76,16 @@ }
})();
</script>
-<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?wp=GC2JVEH&Submit6=Go" property="og:url" /><meta name="og:description" content="Solve the mystery and then use a smartphone or GPS device to navigate to the solution coordinates. Look for a small hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 3 and difficulty is 5 (out of 5)." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/8.png" property="og:image" /><meta name="og:title" content="Auf den Spuren des Indianer Jones Teil 1" property="og:title" /><meta name="description" content="Auf den Spuren des Indianer Jones Teil 1 (GC2JVEH) was created by indianerjones on 11/28/2010. It's a Small size geocache, with difficulty of 5, terrain of 3. It's located in Niedersachsen, Germany. Aufgabe zum Start: Finde die Schattenlinie. !!!Die Skizze mit den Zahlen solltest du mitnehmen!!! Du solltest den cache so beginnen, das du station 2 in der Zeit von mo- fr von 11-19 Uhr und sa von 11-16 Uhr erledigt hast." /><link rel="alternate" href="../datastore/rss_galleryimages.ashx?guid=07270e8c-72ec-4821-8cb7-b01483f94cb5" type="application/rss+xml" title="[Gallery Images]" id="GalleryImages" /></head>
+<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?guid=07270e8c-72ec-4821-8cb7-b01483f94cb5" property="og:url" /><meta name="og:description" content="Solve the mystery and then use a smartphone or GPS device to navigate to the solution coordinates. Look for a small hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 3 and difficulty is 5 (out of 5)." property="og:description" /><meta name="og:image" content="http://www.geocaching.com/images/facebook/wpttypes/8.png" property="og:image" /><meta name="og:title" content="Auf den Spuren des Indianer Jones Teil 1" property="og:title" /><meta name="description" content="Auf den Spuren des Indianer Jones Teil 1 (GC2JVEH) was created by indianerjones on 11/28/2010. It's a Small size geocache, with difficulty of 5, terrain of 3. It's located in Niedersachsen, Germany. Aufgabe zum Start: Finde die Schattenlinie. !!!Die Skizze mit den Zahlen solltest du mitnehmen!!! Du solltest den cache so beginnen, das du station 2 in der Zeit von mo- fr von 11-19 Uhr und sa von 11-16 Uhr erledigt hast." /><link rel="alternate" href="../datastore/rss_galleryimages.ashx?guid=07270e8c-72ec-4821-8cb7-b01483f94cb5" type="application/rss+xml" title="[Gallery Images]" id="GalleryImages" /></head>
<body >
- <form name="aspnetForm" method="post" action="cache_details.aspx?wp=GC2JVEH&Submit6=Go" id="aspnetForm">
+ <form name="aspnetForm" method="post" action="cache_details.aspx?guid=07270e8c-72ec-4821-8cb7-b01483f94cb5" 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="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE5OTc1OTcWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFlQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZndwJTNkR0MySlZFSCUyNlN1Ym1pdDYlM2RHb2RkAgsPFgIfAQUQNDE5IENhY2hlcyBGb3VuZGQCEQ8WAh8DZxYCAg0PDxYCHwUFQH4vdHJhY2svc2VhcmNoLmFzcHg/bz0xJnVpZD00ZDQxNjQ2MS1kMWE3LTRjYzUtOGVlNy0zMzZiYjkxMGZlYjhkZAIXDw8WAh8DZ2RkAiEPFgIfA2dkAk8PZBYEAgMPFgIfAQUHRW5nbGlzaGQCBQ8WAh4LXyFJdGVtQ291bnQCEhYkZg9kFgICAQ8PFggeD0NvbW1hbmRBcmd1bWVudAUFZW4tVVMeC0NvbW1hbmROYW1lBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2geEENhdXNlc1ZhbGlkYXRpb25oZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAIRD2QWAgIDDxYCHwNoZAITDxYCHgVjbGFzcwUMc3Bhbi0yNCBsYXN0FgICAQ9kFi4CAQ9kFgJmD2QWAgIBDw8WAh8BBQdHQzJKVkVIZGQCAg8WAh8BBZ4BPGEgaHJlZj0iL2Fib3V0L2NhY2hlX3R5cGVzLmFzcHgiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iQWJvdXQgQ2FjaGUgVHlwZXMiPjxpbWcgc3JjPSIvaW1hZ2VzL1dwdFR5cGVzLzguZ2lmIiBhbHQ9IlVua25vd24gQ2FjaGUiIHRpdGxlPSJVbmtub3duIENhY2hlIiAvPjwvYT5kAgYPZBYEAgEPFgIfA2dkAgYPFgIfA2hkAgsPZBYEAgEPFgIfAQUCNTlkAgUPDxYCHwUFRC9zZWVrL2NhY2hlX2Zhdm9yaXRlZC5hc3B4P2d1aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1ZGQCDQ8PFgIfA2hkZAIODxYEHwEFSzxwIGNsYXNzPSJXYXJuaW5nIE5vQm90dG9tU3BhY2luZyI+VGhpcyBpcyBhIFByZW1pdW0gTWVtYmVyIE9ubHkgY2FjaGUuPC9wPh8DZ2QCEA8WAh8DaGQCEQ8WAh8DaGQCEg9kFgwCAw8WAh4Fc3R5bGUFD2Rpc3BsYXk6aW5saW5lOxYCAgEPFgIfAQUbVVRNOiAzMlUgRSA1NTAwNjMgTiA1ODAyNjk2ZAINDw8WAh8FBTNjZHBmLmFzcHg/Z3VpZD0wNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjVkZAIPDw8WAh8FBThjZHBmLmFzcHg/Z3VpZD0wNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjUmbGM9NWRkAhEPDxYCHwUFOWNkcGYuYXNweD9ndWlkPTA3MjcwZThjLTcyZWMtNDgyMS04Y2I3LWIwMTQ4M2Y5NGNiNSZsYz0xMGRkAhMPDxYEHwUFjwFodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1kJmhsPWVuJnNhZGRyPTUyLjIxNjI1LDkuNzE0NDgzIChIb21lIExvY2F0aW9uKSZkYWRkcj01Mi4zNzIyNSw5LjczNTM2NyhBdWYrZGVuK1NwdXJlbitkZXMrSW5kaWFuZXIrSm9uZXMrVGVpbCsxKR4GVGFyZ2V0BQZfYmxhbmtkZAIbD2QWCAIBDw8WBB4JRm9yZUNvbG9yDB4EXyFTQgIEZGQCAw8PFgQfDQwfDgIEZGQCBQ8PFgIfA2cWAh4Hb25jbGljawU7czJncHMoJzA3MjcwZThjLTcyZWMtNDgyMS04Y2I3LWIwMTQ4M2Y5NGNiNScpO3JldHVybiBmYWxzZTtkAgcPDxYCHwNnFgIfDwUgczJwaG9uZSgnR0MySlZFSCcpO3JldHVybiBmYWxzZTtkAhQPFgIfA2dkAhcPZBYIZg8WAh8DaGQCAQ8PFgIfA2hkZAICDw8WAh8DaGRkAgMPFgIfA2hkAhgPZBYCAgMPDxYCHwEFE05vIGhpbnRzIGF2YWlsYWJsZS4WAh8PBQ1yZXR1cm4gZmFsc2U7ZAIZDxYCHwNoZAIcD2QWBAICDw8WBB4IQ3NzQ2xhc3NkHw4CAmRkAgQPFgIfAQUCMjRkAh0PZBYCAgEPFgIfA2cWAgIBDw8WAh8FBTgvc2Vlay9sb2cuYXNweD9MVUlEPTA3Nzc1YzM1LTA0ZDAtNGFlYi1hMzU2LTdjZDk4ZWI0NThjMmRkAh4PFgIfA2dkAh8PFgIfA2hkAiIPZBYCAgMPFgIeCWlubmVyaHRtbAUTQWR2ZXJ0aXNpbmcgd2l0aCBVc2QCJg9kFgYCAw8WAh8GAgEWAgIBD2QWAmYPFQNWaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS90cmFjay9kZXRhaWxzLmFzcHg/Z3VpZD1lMzI5MTlkMy1lYjk1LTRkMDMtYTZjNC1kMGFkZmZmOTc4NjUzaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9pbWFnZXMvd3B0dHlwZXMvc20vMjEuZ2lmFUljaHRoeW9zYXVydXMgSHVtZXJ1c2QCBw8PFgIfA2dkFgICAQ8PFgQfAQUTVmlldyBhbGwgVHJhY2thYmxlcx8FBUl+L3RyYWNrL3NlYXJjaC5hc3B4P3dpZD0wNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjUmY2NpZD0xOTk3NTk3ZGQCCQ8PFgIfBQU8fi90cmFjay9zZWFyY2guYXNweD93aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThj" />
-<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="YjctYjAxNDgzZjk0Y2I1ZGQCJw8PFgIfA2dkFgJmDxYCHwYCAxYGAgEPZBYCZg8VAgDfATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTc2MGViMzE0LTgzOGQtNGFmYy1hYTViLTQ1YjIyMTJlZTQ5YyI+VDUgYWJzb2x2aWVydDwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTVjNGIwOTE1LTVjZWMtNGZhMS04YWZkLTRiM2NhNjdlMDA0ZSI+a2FpMjcwNzwvYT5kAgIPZBYCZg8VAg5BbHRlcm5hdGluZ1Jvd9UBPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9MGEyZTRiMzItMTFjZC00ZTQ2LWI1MmItYWZhNmJmYzg0ZGQyIj5Ub0RvPC9hPjxiciAvPiBieSA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL3Byb2ZpbGUvP2d1aWQ9ODIyYzBmZWItNGRkMC00MzE4LTliZGYtZWExOTc2NDE5M2E4Ij5ILldhaWk8L2E+ZAIDD2QWAmYPFQIA7AE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD04MzAxNjJjMi03MmRlLTQ4NzYtYmYyMi0yNDRkNTlmOGJhMjciPkRpZXNlIHNpbmQgbm9jaCBmJiMyMjg7bGxpZzwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPWYzYjllNjA5LTYzM2ItNDNhZi05ZTM0LTFmOGY1NGI4NmE5ZSI+Y2Vld2VlPC9hPmQCKQ9kFhICAQ8PFgIfA2hkZAIDD2QWAgIBDw8WAh8FBUUvaGlkZS93cHRsaXN0LmFzcHg/UmVmV3B0SUQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1JkRTPTFkZAIHDw8WBh4GUkRTLklECyl2R3JvdW5kc3BlYWsuV2ViLkdQWC5XcHREYXRhU291cmNlcywgVHVjc29uLkNvbW1vbi5MZWdhY3ksIFZlcnNpb249My4wLjQ4MTIuMTgwNzUsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAEeB1JXUFQuSUQoKwQHMTk5NzU5Nx8DaGRkAgkPDxYCHwNnZBYCAgEPDxYEHwUFKy9tYXAvZGVmYXVsdC5hc3B4P2xhdD01Mi4zNzIyNSZsbmc9OS43MzUzNjcfA2dkZAIPDxYCHwEFjwEuLi5vdGhlciBjYWNoZXMgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3U9aW5kaWFuZXJqb25lcyI+aGlkZGVuPC9hPiBvciA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dWw9aW5kaWFuZXJqb25lcyI+Zm91bmQ8L2E+IGJ5IHRoaXMgdXNlcmQCEQ9kFgYCAQ8WAh8BBf8BLi4ubmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD00MDg2MTgyMS0xODM1LTRlMTEtYjY2Ni04ZDQxMDY0ZDAzZmUmbGF0PTUyLjM3MjI1MCZsbmc9OS43MzUzNjciPmNhY2hlcyBvZiB0aGlzIHR5cGU8L2E+LCA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dHg9NDA4NjE4MjEtMTgzNS00ZTExLWI2NjYtOGQ0MTA2NGQwM2ZlJmxhdD01Mi4zNzIyNTAmbG5nPTkuNzM1MzY3JmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIDDxYCHwEFpgEuLi5hbGwgbmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NTIuMzcyMjUwJmxuZz05LjczNTM2NyI+Y2FjaGVzPC9hPiwgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi4zNzIyNTAmbG5nPTkuNzM1MzY3JmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIFDxYCHwEFfi4uLmFsbCBuZWFyYnkgPGEgaHJlZj0iaHR0cDovL3d3dy53YXltYXJraW5nLmNvbS9kaXJlY3RvcnkuYXNweD9mPTEmbGF0PTUyLjM3MjI1MCZsb249OS43MzUzNjciPndheW1hcmtzIG9uIFdheW1hcmtpbmcuY29tPC9hPmQCEw8WAh8DaGQCFw9kFgICAQ8PFgQfAQW1BzxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL21hcC9kZWZhdWx0LmFzcHg/bGF0PTUyLjM3MjI1JmxuZz05LjczNTM3IiB0YXJnZXQ9Il9ibGFuayI+R2VvY2FjaGluZy5jb20gTWFwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9xPU4rNTIlYzIlYjArMjIuMzM1K0UrMDA5JWMyJWIwKzQ0LjEyMisoR0MySlZFSCkrIiB0YXJnZXQ9Il9ibGFuayI+R29vZ2xlIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5tYXBxdWVzdC5jb20vbWFwcy9tYXAuYWRwP3NlYXJjaHR5cGU9YWRkcmVzcyZmb3JtdHlwZT1sYXRsb25nJmxhdGxvbmd0eXBlPWRlY2ltYWwmbGF0aXR1ZGU9NTIuMzcyMjUmbG9uZ2l0dWRlPTkuNzM1Mzcmem9vbT0xMCIgdGFyZ2V0PSJfYmxhbmsiPk1hcFF1ZXN0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXBzLnlhaG9vLmNvbS8jbGF0PTUyLjM3MjI1Jmxvbj05LjczNTM3Jnpvb209MTYmcT01Mi4zNzIyNSw5LjczNTM3JmNvbmY9MSZzdGFydD0xJm12dD1tJnRyZj0wIiB0YXJnZXQ9Il9ibGFuayI+WWFob28gTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmJpbmcuY29tL21hcHMvZGVmYXVsdC5hc3B4P3Y9MiZsdmw9MTQmc3A9cG9pbnQuNTIuMzcyMjVfOS43MzUzN19HQzJKVkVIIiB0YXJnZXQ9Il9ibGFuayI+QmluZyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbmN5Y2xlbWFwLm9yZy8/em9vbT0xMiZsYXQ9NTIuMzcyMjUmbG9uPTkuNzM1MzciIHRhcmdldD0iX2JsYW5rIj5PcGVuQ3ljbGVNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy8/bWxhdD01Mi4zNzIyNSZtbG9uPTkuNzM1Mzcmem9vbT0xMiIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5TdHJlZXRNYXA8L2E+PC9saT4fA2dkZAIbD2QWBgIBDxYCHwEFETEyNCBMb2dnZWQgVmlzaXRzZAIHDw8WAh8FBUN+L3NlZWsvY2FjaGVfbG9nYm9vay5hc3B4P2d1aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1ZGQCCQ8PFgQfBQU9fi9zZWVrL2dhbGxlcnkuYXNweD9ndWlkPTA3MjcwZThjLTcyZWMtNDgyMS04Y2I3LWIwMTQ4M2Y5NGNiNR8BBSJWaWV3IHRoZSBJbWFnZSBHYWxsZXJ5IG9mIDQgaW1hZ2VzZGQCKg8WAh8BBQR0cnVlZAIrDxYCHwEFSmxhdD01Mi4zNzIyNTsgbG5nPTkuNzM1MzY3OyBndWlkPScwNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjUnOw0KZAIVDxYCHwNoFgICAQ8PZBYCHwsFDHdpZHRoOjEyMHB4O2QCFw9kFgQCAw8WAh8BBQdFbmdsaXNoZAIFDxYCHwYCEhYkZg9kFgICAQ8PFggfBwUFZW4tVVMfCAUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHwloZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwt" />
-<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="TkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAJLDxYCHwEFECZjb3B5OyAyMDAwLTIwMTNkAgMPFgIfAQUrU2VydmVyOiBXRUIxNDsgQnVpbGQ6IFdlYi5Ib3RGaXhfMjAxMzAzMDUuMWRk8QtTGapFF/8sYutMmBIWHXWScJk=" />
+<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzE5OTc1OTcWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFpQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmd1aWQlM2QwNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjVkZAILDxYCHwEFEDQyNiBDYWNoZXMgRm91bmRkAhEPFgIfA2cWAgINDw8WAh8FBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9NGQ0MTY0NjEtZDFhNy00Y2M1LThlZTctMzM2YmI5MTBmZWI4ZGQCFw8PFgIfA2dkZAIhDxYCHwNnZAJPD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIeC18hSXRlbUNvdW50AhIWJGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAggPZBYCAgEPDxYIHwcFBWl0LUlUHwgFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCWhkZAIJD2QWAgIBDw8WCB8HBQVlbC1HUh8IBQ1TZXRUZW1wTG9jYWxlHwEFEM6VzrvOu863zr3Ouc66zqwfCWhkZAIKD2QWAgIBDw8WCB8HBQVsdi1MVh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUxhdHZpZcWhdR8JaGRkAgsPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8JaGRkAgwPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAg0PZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCDg9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg8PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCEA9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIRD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCEQ9kFgICAw8WAh8DaGQCEw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBYwAgEPZBYCZg9kFgICAQ8PFgIfAQUHR0MySlZFSGRkAgIPFgIfAQWeATxhIGhyZWY9Ii9hYm91dC9jYWNoZV90eXBlcy5hc3B4IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkFib3V0IENhY2hlIFR5cGVzIj48aW1nIHNyYz0iL2ltYWdlcy9XcHRUeXBlcy84LmdpZiIgYWx0PSJVbmtub3duIENhY2hlIiB0aXRsZT0iVW5rbm93biBDYWNoZSIgLz48L2E+ZAIGD2QWBAIBDxYCHwNnZAIGDxYCHwNoZAILD2QWBAIBDxYCHwEFAjYwZAIFDw8WAh8FBUQvc2Vlay9jYWNoZV9mYXZvcml0ZWQuYXNweD9ndWlkPTA3MjcwZThjLTcyZWMtNDgyMS04Y2I3LWIwMTQ4M2Y5NGNiNWRkAg0PDxYCHwNoZGQCDg8WBB8BBUs8cCBjbGFzcz0iV2FybmluZyBOb0JvdHRvbVNwYWNpbmciPlRoaXMgaXMgYSBQcmVtaXVtIE1lbWJlciBPbmx5IGNhY2hlLjwvcD4fA2dkAhAPFgIfA2hkAhEPFgIfA2hkAhIPZBYMAgMPFgIeBXN0eWxlBQ9kaXNwbGF5OmlubGluZTsWAgIBDxYCHwEFG1VUTTogMzJVIEUgNTUwMDYzIE4gNTgwMjY5NmQCDQ8PFgIfBQUzY2RwZi5hc3B4P2d1aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1ZGQCDw8PFgIfBQU4Y2RwZi5hc3B4P2d1aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1JmxjPTVkZAIRDw8WAh8FBTljZHBmLmFzcHg/Z3VpZD0wNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjUmbGM9MTBkZAITDw8WBB8FBY8BaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2Y9ZCZobD1lbiZzYWRkcj01Mi4yMTYyNSw5LjcxNDQ4MyAoSG9tZSBMb2NhdGlvbikmZGFkZHI9NTIuMzcyMjUsOS43MzUzNjcoQXVmK2RlbitTcHVyZW4rZGVzK0luZGlhbmVyK0pvbmVzK1RlaWwrMSkeBlRhcmdldAUGX2JsYW5rZGQCGw9kFggCAQ8PFgQeCUZvcmVDb2xvcgweBF8hU0ICBGRkAgMPDxYEHw0MHw4CBGRkAgUPDxYCHwNnFgIeB29uY2xpY2sFO3MyZ3BzKCcwNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjUnKTtyZXR1cm4gZmFsc2U7ZAIHDw8WAh8DZxYCHw8FIHMycGhvbmUoJ0dDMkpWRUgnKTtyZXR1cm4gZmFsc2U7ZAIUDxYCHwNnZAIXD2QWCGYPFgIfA2hkAgEPDxYCHwNoZGQCAg8PFgIfA2hkZAIDDxYCHwNoZAIYD2QWAgIDDw8WAh8BBRNObyBoaW50cyBhdmFpbGFibGUuFgIfDwUNcmV0dXJuIGZhbHNlO2QCGQ8WAh8DaGQCHA9kFgQCAg8PFgQeCENzc0NsYXNzZB8OAgJkZAIEDxYCHwEFAjIzZAIdD2QWAgIBDxYCHwNnFgICAQ8PFgIfBQU4L3NlZWsvbG9nLmFzcHg/TFVJRD0wNzc3NWMzNS0wNGQwLTRhZWItYTM1Ni03Y2Q5OGViNDU4YzJkZAIeDxYCHwNnZAIfDxYCHwNoZAIiD2QWAgIDDxYCHglpbm5lcmh0bWwFE0FkdmVydGlzaW5nIHdpdGggVXNkAiYPZBYGAgMPFgIfBgIBFgICAQ9kFgJmDxUDVmh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vdHJhY2svZGV0YWlscy5hc3B4P2d1aWQ9ZTMyOTE5ZDMtZWI5NS00ZDAzLWE2YzQtZDBhZGZmZjk3ODY1M2h0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vaW1hZ2VzL3dwdHR5cGVzL3NtLzIxLmdpZhVJY2h0aHlvc2F1cnVzIEh1bWVydXNkAgcPDxYCHwNnZBYCAgEPDxYEHwEFE1ZpZXcgYWxsIFRyYWNrYWJsZXMfBQVJfi90cmFjay9zZWFyY2guYXNweD93aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1JmNjaWQ9MTk5NzU5N2RkAgkPDxYCHwUFPH4vdHJhY2svc2VhcmNoLmFzcHg/d2lkPTA3Mjcw" />
+<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="ZThjLTcyZWMtNDgyMS04Y2I3LWIwMTQ4M2Y5NGNiNWRkAicPDxYCHwNnZBYCZg8WAh8GAgMWBgIBD2QWAmYPFQIA3wE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD03NjBlYjMxNC04MzhkLTRhZmMtYWE1Yi00NWIyMjEyZWU0OWMiPlQ1IGFic29sdmllcnQ8L2E+PGJyIC8+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD01YzRiMDkxNS01Y2VjLTRmYTEtOGFmZC00YjNjYTY3ZTAwNGUiPmthaTI3MDc8L2E+ZAICD2QWAmYPFQIOQWx0ZXJuYXRpbmdSb3fVATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTBhMmU0YjMyLTExY2QtNGU0Ni1iNTJiLWFmYTZiZmM4NGRkMiI+VG9EbzwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTgyMmMwZmViLTRkZDAtNDMxOC05YmRmLWVhMTk3NjQxOTNhOCI+SC5XYWlpPC9hPmQCAw9kFgJmDxUCAOwBPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9ib29rbWFya3Mvdmlldy5hc3B4P2d1aWQ9ODMwMTYyYzItNzJkZS00ODc2LWJmMjItMjQ0ZDU5ZjhiYTI3Ij5EaWVzZSBzaW5kIG5vY2ggZiYjMjI4O2xsaWc8L2E+PGJyIC8+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD1mM2I5ZTYwOS02MzNiLTQzYWYtOWUzNC0xZjhmNTRiODZhOWUiPmNlZXdlZTwvYT5kAigPDxYCHwNnZBYCZg8WAh8GAgEWAgIBD2QWAmYPFQIA3QE8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL2Jvb2ttYXJrcy92aWV3LmFzcHg/Z3VpZD0xNDU1MTcwOC0wYzNjLTRmOTUtOTM0Mi0xYmIzMTE5ZTZlZmUiPmNnZW8gbW9ja3M8L2E+PGJyIC8+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vcHJvZmlsZS8/Z3VpZD00ZDQxNjQ2MS1kMWE3LTRjYzUtOGVlNy0zMzZiYjkxMGZlYjgiPkpvU2FNYUphPC9hPmQCKQ9kFhICAQ8PFgIfA2hkZAIDD2QWAgIBDw8WAh8FBUUvaGlkZS93cHRsaXN0LmFzcHg/UmVmV3B0SUQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1JkRTPTFkZAIHDw8WBh4GUkRTLklECyl1R3JvdW5kc3BlYWsuV2ViLkdQWC5XcHREYXRhU291cmNlcywgVHVjc29uLkNvbW1vbi5MZWdhY3ksIFZlcnNpb249My4wLjQ4MjYuMjAzOCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsAR4HUldQVC5JRCgrBAcxOTk3NTk3HwNoZGQCCQ8PFgIfA2dkFgICAQ8PFgQfBQUrL21hcC9kZWZhdWx0LmFzcHg/bGF0PTUyLjM3MjI1JmxuZz05LjczNTM2Nx8DZ2RkAg8PFgIfAQWPAS4uLm90aGVyIGNhY2hlcyA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dT1pbmRpYW5lcmpvbmVzIj5oaWRkZW48L2E+IG9yIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD91bD1pbmRpYW5lcmpvbmVzIj5mb3VuZDwvYT4gYnkgdGhpcyB1c2VyZAIRD2QWBgIBDxYCHwEF/wEuLi5uZWFyYnkgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3R4PTQwODYxODIxLTE4MzUtNGUxMS1iNjY2LThkNDEwNjRkMDNmZSZsYXQ9NTIuMzcyMjUwJmxuZz05LjczNTM2NyI+Y2FjaGVzIG9mIHRoaXMgdHlwZTwvYT4sIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD00MDg2MTgyMS0xODM1LTRlMTEtYjY2Ni04ZDQxMDY0ZDAzZmUmbGF0PTUyLjM3MjI1MCZsbmc9OS43MzUzNjcmZj0xIj50aGF0IEkgaGF2ZW4ndCBmb3VuZDwvYT5kAgMPFgIfAQWmAS4uLmFsbCBuZWFyYnkgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD01Mi4zNzIyNTAmbG5nPTkuNzM1MzY3Ij5jYWNoZXM8L2E+LCA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/bGF0PTUyLjM3MjI1MCZsbmc9OS43MzUzNjcmZj0xIj50aGF0IEkgaGF2ZW4ndCBmb3VuZDwvYT5kAgUPFgIfAQV+Li4uYWxsIG5lYXJieSA8YSBocmVmPSJodHRwOi8vd3d3LndheW1hcmtpbmcuY29tL2RpcmVjdG9yeS5hc3B4P2Y9MSZsYXQ9NTIuMzcyMjUwJmxvbj05LjczNTM2NyI+d2F5bWFya3Mgb24gV2F5bWFya2luZy5jb208L2E+ZAITDxYCHwNoZAIXD2QWAgIBDw8WBB8BBbUHPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vbWFwL2RlZmF1bHQuYXNweD9sYXQ9NTIuMzcyMjUmbG5nPTkuNzM1MzciIHRhcmdldD0iX2JsYW5rIj5HZW9jYWNoaW5nLmNvbSBNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP3E9Tis1MiVjMiViMCsyMi4zMzUrRSswMDklYzIlYjArNDQuMTIyKyhHQzJKVkVIKSsiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGUgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm1hcHF1ZXN0LmNvbS9tYXBzL21hcC5hZHA/c2VhcmNodHlwZT1hZGRyZXNzJmZvcm10eXBlPWxhdGxvbmcmbGF0bG9uZ3R5cGU9ZGVjaW1hbCZsYXRpdHVkZT01Mi4zNzIyNSZsb25naXR1ZGU9OS43MzUzNyZ6b29tPTEwIiB0YXJnZXQ9Il9ibGFuayI+TWFwUXVlc3Q8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMueWFob28uY29tLyNsYXQ9NTIuMzcyMjUmbG9uPTkuNzM1Mzcmem9vbT0xNiZxPTUyLjM3MjI1LDkuNzM1MzcmY29uZj0xJnN0YXJ0PTEmbXZ0PW0mdHJmPTAiIHRhcmdldD0iX2JsYW5rIj5ZYWhvbyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYmluZy5jb20vbWFwcy9kZWZhdWx0LmFzcHg/dj0yJmx2bD0xNCZzcD1wb2ludC41Mi4zNzIyNV85LjczNTM3X0dDMkpWRUgiIHRhcmdldD0iX2JsYW5rIj5CaW5nIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnLz96b29tPTEyJmxhdD01Mi4zNzIyNSZsb249OS43MzUzNyIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5DeWNsZU1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnLz9tbGF0PTUyLjM3MjI1Jm1sb249OS43MzUzNyZ6b29tPTEyIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcDwvYT48L2xpPh8DZ2RkAhsPZBYGAgEPFgIfAQURMTI1IExvZ2dlZCBWaXNpdHNkAgcPDxYCHwUFQ34vc2Vlay9jYWNoZV9sb2dib29rLmFzcHg/Z3VpZD0wNzI3MGU4Yy03MmVjLTQ4MjEtOGNiNy1iMDE0ODNmOTRjYjVkZAIJDw8WBB8FBT1+L3NlZWsvZ2FsbGVyeS5hc3B4P2d1aWQ9MDcyNzBlOGMtNzJlYy00ODIxLThjYjctYjAxNDgzZjk0Y2I1HwEFIlZpZXcgdGhlIEltYWdlIEdhbGxlcnkgb2YgNCBpbWFnZXNkZAIqDxYCHwEFBHRydWVkAisPFgIfAQVKbGF0PTUyLjM3MjI1OyBsbmc9OS43MzUzNjc7IGd1aWQ9JzA3MjcwZThjLTcyZWMtNDgyMS04Y2I3LWIwMTQ4M2Y5NGNiNSc7DQpkAhUPFgIfA2gWAgIBDw9kFgIfCwUMd2lkdGg6MTYwcHg7ZAIXD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIfBgISFiRmD2QWAgIBDw8WCB8HBQVlbi1VUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2gfCWhkZAIBD2QWAgIBDw8WCB8HBQVkZS1ERR8IBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCWhkZAICD2QWAgIBDw8WCB8HBQVmci1GUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8JaGRkAgMPZBYCAgEPDxYIHwcFBXB0LVBUHwgFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8JaGRkAgQPZBYCAgEPDxYIHwcFBWNzLUNaHwgFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwloZGQCBQ9kFgICAQ8PFggfBwUFc3YtU0UfCAUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwloZGQCBg9kFgICAQ8PFggfBwUFZXMtRVMfCAUNU2V0" />
+<input type="hidden" name="__VIEWSTATE2" id="__VIEWSTATE2" value="VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8JaGRkAgcPZBYCAgEPDxYIHwcFBWV0LUVFHwgFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCWhkZAIID2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCQ9kFgICAQ8PFggfBwUFZWwtR1IfCAUNU2V0VGVtcExvY2FsZR8BBRDOlc67zrvOt869zrnOus6sHwloZGQCCg9kFgICAQ8PFggfBwUFbHYtTFYfCAUNU2V0VGVtcExvY2FsZR8BBQlMYXR2aWXFoXUfCWhkZAILD2QWAgIBDw8WCB8HBQVubC1OTB8IBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCWhkZAIMD2QWAgIBDw8WCB8HBQVjYS1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCWhkZAIND2QWAgIBDw8WCB8HBQVwbC1QTB8IBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8JaGRkAg4PZBYCAgEPDxYIHwcFBW5iLU5PHwgFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfCWhkZAIPD2QWAgIBDw8WCB8HBQVrby1LUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8JaGRkAhAPZBYCAgEPDxYIHwcFBWh1LUhVHwgFDVNldFRlbXBMb2NhbGUfAQUGTWFneWFyHwloZGQCEQ9kFgICAQ8PFggfBwUFcm8tUk8fCAUNU2V0VGVtcExvY2FsZR8BBQhSb23Dom7Egx8JaGRkAksPFgIfAQUQJmNvcHk7IDIwMDAtMjAxM2QCAw8WAh8BBSxTZXJ2ZXI6IFdFQjA5OyBCdWlsZDogV2ViLlJlbGVhc2VfMjAxMzAzMTkuMWRkOtJtgd+T04XrlGGojTAVYl961Wk=" />
</div>
<script type="text/javascript">
@@ -105,13 +105,13 @@ function __doPostBack(eventTarget, eventArgument) { </script>
-<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981131264989663" type="text/javascript"></script>
+<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981142902716410" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=ffffffff940d030f" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=ffffffff940d030f" type="text/javascript"></script>
-<script src="/ScriptResource.axd?d=Uh_lOa1hKj-GEwMC8mK4Mv8GIgfYnVMts1uBtWWtSfWP9ra-LKOpaRuqVLvjYmMdLsk7f65Q6jxy1BUjZtmsPSNvG8-NJhXvUvOP2jTpjiJF191yJjbg5eBWmdsFWFW4ajIe-GbXr7vIi2DeH9CErdgdlkf-f2cp7FtGEJ7sl3tidpi7pPZumnHP0HO2yu_GIN2h8uN1Q6-df-zQBu0zb4hnxqo1" type="text/javascript"></script>
-<script src="/ScriptResource.axd?d=838lRAslTnp-47XptApNagh_Uah2p52BYL-s1NNGNamd8V2w2Ky2y-qvXkjulQaOR_VLt0fkOoUQz2vo2Z8CX871dE4Ct-a7MylewJqtaQNwQglkQO1n6oSTN35sCFRQ7BXBPVoWxpehRPLX8sbeEAqBEHdYAcMHFjMXNlT9nze9HLuJQ15ocJVBJMlooE7lKvmObAIwFsFO9oMNMln41GfoOdjcCiPLIniUHBJavtIsfpZoHZ8IaaJ2mcqJncN2qtyp5jmDkuoZuDm5GuIm88GqPz0_pSJHgC9qf9O6DNr-mOaKWm2PxOwscK8hcP-TM7owfHLYw9rZkopbDljgiCl34QjGBJyaYBGV1VpLdEgR3hGToB-rM6c63T3SLN-7u0qtmvFBds8v5sZUeJLIdtTf9sQCJicp_lnWeZ0bB6SFFMA4I59lZp-wcxcp-MAvNwOsFbo_mUFDpDg-eM316f2OKs0FhopEcLk7jBG2aYLeOA3rVLZuidOCk3cFFBdvo8iogolMkemG1iSC_RSxXWQPLfa0ixp0WTyZPZYv0EQcHB2yShSl6FJxyxoifmdjO489-f3_nXuTeAo4L9mde7FqtE6t3Dj9oqxSDMJXEzU5OAocOzmor7yTRmzx40kgTPetF3I2yMBcbIPFCIfOHd8ua3EkwijkqG2CGEXLBCNr4vyi0" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=yD98wvSb5VN7041hOgZOmkqQVzI1tnBUcR4JaroKEQeSLINMok8wJkEpv14P0ALxKQMdX9Uy6nsNaPxA7d2UqjQ2sYLbpExAJ83JTyN-pkZ2bqOzcSw5bU6coW4Fkg68lE7WA86GU2ExfrvgRWgp0IApCrKMjNJUB5J7XE2OSt6MaXp0qMKnx4NX9LIX7va1Q_FvwA9UawNSTmt_G4BjUQv6zL81" type="text/javascript"></script>
+<script src="/ScriptResource.axd?d=UF7CoL95c_vLaLGsauDTR16zTvN9HxO7Z7dSX0HBBpXtTepxYlkbh743-78oMOEuI_3aLte7xb0-e6V19L_Hk7z4f9QOasPcNlM1hxpFexvFPJfRJzWGp-8O59Hd76flTCJMMO1C2W78ywI_ed1zlZ4zwqVTjLxFOBXV5gyTf5x5ufra9ngZk7bLz7abwYQrLLX-Cwy5EAIGUeMTbqaOmXIafG3b4qS3W0c8k0aCp7DUV1IsvjP1wvdHhxfDrdI5YdAx0kv6nXRWt5mJxjtPKXH1Qjpx8bXIz9rhEfO0oNqnuy_SMtZ1XLyp3UE9tPyWhVRhf6ti2PBL-2-gEWzl_Q0XDmTyGyzoLoLGrClYwEDjYrcQKrAAPM50g9OvnEA6pYxEz4kO7osR0kth80l5KSoEAR2cQvoMCckCOi5Ojw-yK2p56OY-JdKsXMLNNNYIPRfEgVrO6cHT5BV5A4fIUA4Q_B9w2iZFPVzFYxFbliC2fMFv7LYa1_eyTiqxiz_vfMIGPVpEr01CBIulzwpEoWlIwMZIYLmB9VOOk9GSERemTJdhwwVHI3lYYuxUfRn28bvxPZMqsUqhHKDd4m6CDKQqOB1VIdtgk63rJfVtmigIFAFFaV6K36rPqVAthL1_KdD41_RBQqEOvv8BAYDbV6PtCdoX9nRlMYdrXS9niT8A1JaT0" type="text/javascript"></script>
<script src="js/cachedetails.js" type="text/javascript"></script>
<script src="../js/latlng.js" type="text/javascript"></script>
<script type="text/javascript">
@@ -152,11 +152,11 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet </p>
<p class="SignedInText">
<strong>
- Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</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%3fwp%3dGC2JVEH%26Submit6%3dGo">Sign Out</a>)<br />
+ Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</a></strong> (<a id="ctl00_hlSignOut" accesskey="s" title="Sign Out" href="https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2fseek%2fcache_details.aspx%3fguid%3d07270e8c-72ec-4821-8cb7-b01483f94cb5">Sign Out</a>)<br />
<span id="ctl00_litPMLevel">Premium Member</span>
<strong style="display: block">
- 419 Caches Found</strong>
+ 426 Caches Found</strong>
</p>
</div>
@@ -465,7 +465,7 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet <a id="uxFavContainerLink" href="javascript:void(0);">
<div class="favorite-container">
<span class="favorite-value">
- 59</span><br />
+ 60</span><br />
Favorites
<img id="imgFavoriteArrow" src="/images/arrow-down.png" alt="Expand" title="Expand" />
</div>
@@ -659,7 +659,7 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet </div>
<p>
<span class="favorite-rank Clear">
- 24
+ 23
</span>
<a id="ctl00_ContentBody_hlFavoritePointsRemaining" href="/my/favorites.aspx">Favorite points remaining</a>
</p>
@@ -705,14 +705,14 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet <script type='text/javascript'>
googletag.cmd.push(function() {{
-googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_47262cb6-7f2f-4cf1-9386-ead3bc7faa87').addService(googletag.pubads());
+googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_f619842c-1009-4d99-b538-92a9c286950d').addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
}});
</script>
-<div id='div_47262cb6-7f2f-4cf1-9386-ead3bc7faa87'>
+<div id='div_f619842c-1009-4d99-b538-92a9c286950d'>
<script type='text/javascript'>
-googletag.cmd.push(function() { googletag.display('div_47262cb6-7f2f-4cf1-9386-ead3bc7faa87'); });
+googletag.cmd.push(function() { googletag.display('div_f619842c-1009-4d99-b538-92a9c286950d'); });
</script>
</div>
@@ -800,6 +800,31 @@ googletag.cmd.push(function() { googletag.display('div_47262cb6-7f2f-4cf1-9386-e +<div class="CacheDetailNavigationWidget">
+
+ <h3 class="WidgetHeader">My Bookmark Lists</h3>
+ <div class="WidgetBody">
+
+
+ <ul class="BookmarkList">
+
+ <li class=''>
+ <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=14551708-0c3c-4f95-9342-1bb3119e6efe">cgeo mocks</a><br /> by <a href="http://www.geocaching.com/profile/?guid=4d416461-d1a7-4cc5-8ee7-336bb910feb8">JoSaMaJa</a>
+ </li>
+
+ </ul>
+
+ <p class="NoBottomSpacing">
+
+ </p>
+
+ </div>
+
+
+</div>
+
+
+
</div>
@@ -880,13 +905,13 @@ googletag.cmd.push(function() { googletag.display('div_47262cb6-7f2f-4cf1-9386-e <div class="InformationWidget Clear">
<h3>
- 124 Logged Visits</h3>
+ 125 Logged Visits</h3>
<div class="EncryptDecrypt">
<a href="#" class="decrypt-link">
Decrypt
</a>
</div>
- <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 113 <img src="/images/logtypes/3.png" alt="Didn't find it" title="Didn't find it" /> 1 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 7 <img src="/images/logtypes/22.png" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> 1 <img src="/images/logtypes/23.png" alt="Enable Listing" title="Enable Listing" /> 1 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 1 </p></span>
+ <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 114 <img src="/images/logtypes/3.png" alt="Didn't find it" title="Didn't find it" /> 1 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 7 <img src="/images/logtypes/22.png" alt="Temporarily Disable Listing" title="Temporarily Disable Listing" /> 1 <img src="/images/logtypes/23.png" alt="Enable Listing" title="Enable Listing" /> 1 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 1 </p></span>
<p class="HalfLeft">
<a id="ctl00_ContentBody_uxLogbookLink" href="cache_logbook.aspx?guid=07270e8c-72ec-4821-8cb7-b01483f94cb5">View Logbook</a> | <a id="ctl00_ContentBody_uxGalleryImagesLink" DisplayFormatPlural="View the Image Gallery of {0:#,###} images" DisplayFormatSingular="View the Image Gallery" href="gallery.aspx?guid=07270e8c-72ec-4821-8cb7-b01483f94cb5">View the Image Gallery of 4 images</a>
</p>
@@ -917,7 +942,7 @@ googletag.cmd.push(function() { googletag.display('div_47262cb6-7f2f-4cf1-9386-e </div>
<p>
<small>
- Current Time: <time datetime="2013-03-08T11:19:49Z">03/08/2013 11:19:49 (UTC-08:00) Pacific Time (US & Canada) (19:19 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2013-03-08T17:44:40Z">2013-03-08T17:44:40Z</time> on 03/08/2013 09:44:40 (UTC-08:00) Pacific Time (US & Canada) (17:44 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
+ Current Time: <time datetime="2013-03-27T04:22:49Z">03/27/2013 04:22:49 Pacific Daylight Time (11:22 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2013-03-09T19:57:33Z">2013-03-09T19:57:33Z</time> on 03/09/2013 11:57:33 (UTC-08:00) Pacific Time (US & Canada) (19:57 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum
</small>
</p>
<div id="topScroll" class="TopScroll" style="display:none;">
@@ -1858,9 +1883,9 @@ var userDefinedCoords = {"status":"success","data":{"isUserDefined":false,"oldLa mapLatLng = {"lat":52.37225,"lng":9.73537,"type":8,"name":"Auf den Spuren des Indianer Jones Teil 1"};
var ccConversions = [{"t":"Decimal","k":"DD","d":"WGS84","v":"52.372250, 009.735367"},{"t":"DDD MM SS.SSS","k":"DMS","d":"WGS84","v":"N 52° 22' 20.100\" E 009° 44' 07.321\""},{"t":"UTM","k":"UTM","d":"WGS84","v":"32U E 550063 N 5802696"}];
userInfo = {ID: 4793174};
-userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4KGHNNCGHRXDAQ7IGVLP2WYPUSOZZMJF23ZKPTFAMCWZA6AHMOHYXI2PDWWRZLXEI7SA3O6S5N7ZDLA';
+userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4KGHNNCGHRXDAQ7IGVLP2WYPUSOZZMJF23ZKPTFASIZH7OFPQ6IVQZEJZJH3GF7IHEINTMDU2OCTIUQ';
includeAvatars = true;
-initalLogs = {"status":"success", "data": [{"LogID":297456097,"CacheID":1997597,"LogGuid":"fb6eec9b-5d30-4e65-8a5b-adffa3afb239","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Horido, ich hab ihn, Dank einer Teamleistung. <br />Den Einstieg habe ich glücklicherweise schnell gefunden. Am kommenden Tag bin ich mit dem falsch skalierten Zettel dort aufgerauscht. So direkt war nun nix zu machen. Also habe ich die Infos mit zur Koordinate home genommen. Dort bekam ich die nächste Station heraus. Sehr schöne Ecke dort, ich habe mich gefreut, hier wieder einmal einen Besuch machen zu können. Auch hier hatte ich schnell Erfolg, nur was mache ich mit den gefunden Informationen. Von nun an war der Cache dann deutlich schwieriger. Wir haben zu dritt einige Tage rumgedeutelt. Eine unserer Deutungen führte dann auch zum Ergebnis. Alleine hätte ich das nicht so schnell gelöst. Die Unschärfen verstecken hier die Lösung länger als nötig, fanden wir. Die ist aber auch die einzige Kritik (diese erlaube ich mir mal) am Cache. <br /><br />Am Final hat uns ein Vorlogger das Leben etwas erschwert. Wir haben die Dose wieder zum rechten Ort zurück geführt.<br />Von mir gibt es eine Schleife, denn das Konzept des Caches fand ich wirklich gut. Außerdem gab es einiges Sehenswertes dazu.","Created":"2013-03-08","Visited":"2013-03-08","UserName":"cosylight","MembershipLevel":3,"AccountID":2953880,"AccountGuid":"b4445988-f55b-498d-9140-a82020ac2be0","Email":"","AvatarImage":"","GeocacheFindCount":916,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297455097,"CacheID":1997597,"LogGuid":"573abf18-f05a-4aef-902c-98714689a0b9","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"So, den verlorenen Schatz haben wir schon mal bergen können. Wobei ich ja anmerken muss, daß ich mir ob des Versteckortes recht sicher bin, daß die vorherigen Finder/Verstecker das letzte Teilrätsel nicht in Gänze gelöst oder doch zumindest nicht in Gänze verstanden haben. Somit mussten wir, das Rätselteam \"Reißverschluss\", leider etwas länger in der Kälte und an diesem Ort herumsuchen, als eigentlich nötig gewesen wären. <br /><br />Die Eingangsspur hab ich schon vor langer Zeit immerhin schon mal online ausgemacht. Aber erst, als der Herr Cosylight endlich Premium wurde, kam dieser Schatz wieder ins Radar. Wir teilten brüderlich die Aufgaben und die Verwirrung und hatten nun auch endlich mal herausgefunden, daß nicht jedes Kauderwelsch unverständlich bleiben muss. <br /><br />Danke für die Rätsel und die Stationen, die allesamt an sehr sehenswerten Orten waren. Vor allem der von Station 1 hat mich eine ganze Weile länger behalten, als für die Suche nötig gewesen wäre. <br /><br />Herr Dr. Henry Walton Jones, Jr., wir werden uns in Kürze sicherlich wiedersehen!","Created":"2013-03-08","Visited":"2013-03-08","UserName":"nike1972","MembershipLevel":3,"AccountID":2892759,"AccountGuid":"749fe082-37c5-4439-8855-431c6dba5e77","Email":"","AvatarImage":"d8114f24-3aec-4096-976c-77e4d59ae450.jpg","GeocacheFindCount":1653,"GeocacheHideCount":9,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":294035406,"CacheID":1997597,"LogGuid":"fc2eb4a2-5526-436c-81bf-6fa4e396cf72","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Hier brauchten wir allein für das Finale zwei Anläufe, beim ersten mal war das Finale von städtischen Angestelleten überfüllt. Die anderen tollen Stationen waren auch nicht an einem Tag gemacht.<br /><br />Danke für diesen aufregenden Cache<br /><br />hobatt","Created":"2013-02-16","Visited":"2013-02-14","UserName":"hobatt","MembershipLevel":3,"AccountID":940348,"AccountGuid":"36d0e6e3-91cc-4074-b157-74e7296bd174","Email":"","AvatarImage":"2918f53e-fe84-45aa-9f48-4a24c5f87060.jpg","GeocacheFindCount":3585,"GeocacheHideCount":8,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":293767350,"CacheID":1997597,"LogGuid":"321726fe-0b63-46ff-b055-c398b64cf8c8","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Das war nicht unser erster Besuch für diesen Cache...<br />...aber heute konnten wir das Logbuch finden und das ganze zum Abschluß bringen!<br />Gemeinsam mit hobatt machte ich mich mal wieder auf den Weg nach Hannover.<br /><br />Danke an den Owner für diesen Kracher, die komplette Serie ist der Wahnsinn!<br />Jack La Grotta","Created":"2013-02-14","Visited":"2013-02-14","UserName":"Jack La Grotta","MembershipLevel":3,"AccountID":2524398,"AccountGuid":"d4b82b2b-b444-4e3f-a08c-d69e9fc6d717","Email":"","AvatarImage":"a3580e63-cc2f-40bc-98eb-414397a4c5c4.jpg","GeocacheFindCount":3372,"GeocacheHideCount":24,"ChallengesCompleted":51,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":292031329,"CacheID":1997597,"LogGuid":"b5707ecc-f213-471a-91a3-63db0c14e008","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"<img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Nachdem wir schon den anderen Teil erleben durften<img src=\"/images/icons/icon_smile_tongue.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br />wurde Ende letzten Jahres auch dieser in \"Angriff \" genommen!<br />Auch Wir haben diesen in mehreren Etappen absolviert und jede ZS genossen!!!! <br />Heute Mittag konnten wir das Logbuch in den Händen halten<img src=\"/images/icons/icon_smile_tongue.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_approve.gif\" border=\"0\" align=\"middle\" /><br />(Das L-Buch ist recht voll)<br /><img src=\"/images/icons/icon_smile_cool.gif\" border=\"0\" align=\"middle\" />Hammmer was Indi da wieder gezaubert hat<img src=\"/images/icons/icon_smile_cool.gif\" border=\"0\" align=\"middle\" /><br /><br /><br />Danke sagt Merliah1","Created":"2013-02-03","Visited":"2013-02-03","UserName":"Merliah1","MembershipLevel":3,"AccountID":5247226,"AccountGuid":"8c771c70-52a4-4d23-9681-4c1b657f98f8","Email":"","AvatarImage":"f541ae7f-f54a-41bd-a512-e1a82af63bb1.jpg","GeocacheFindCount":1898,"GeocacheHideCount":0,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289745310,"CacheID":1997597,"LogGuid":"2567672f-a760-4c51-92b6-cdfbcd2dc104","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Jo, der hat sich ganz schön gezogen......beim publish hatte ich noch so gar keine Ahnung, worum es geht und was der Indy von uns wollte. Deshalb wurde das ganze erst mal beiseite gelegt - und die Zeit verging. <br />Erst vor ein paar Wochen stieß ich wieder auf dieses Rätsel und ich begab mich abermals daran. Nach intensiver Recherche kam dann auch brauchbares zutage - der Start war gemacht. Die 1.ZS ergab sich über den schwierigeren Weg für mich jedoch erstaunlich flott. Danach war ich wieder schnell auf der richtigen Spur, nur interpretierte ich hier etwas zuuuviel rein, so daß ich mir schließlich einen Tipp holen musste. Da kam auch sofort die Bestätigung: viel zu kompliziert gedacht. Danach war die nächste ZS geknackt und heute endlich machte ich mich auf zum Final - wobei der Cachergott barmherzig mit mir war: lange suchen musste ich nicht......<br /><br />Insgesamt ist dies ein sehr schön ausgearbeiteter MysteryMulti mit stimmigen Stationen, der richtig Spaß machen und man sich auf die Fortsetzung dieser Reihe freut. Dies sind die Caches, die dieses Hobby ausmachen! Mehr davon!......ein Schleifchen ist Ehrensache.<br /><br />--- T4TC ---","Created":"2013-01-16","Visited":"2013-01-16","UserName":"DeLaTrick","MembershipLevel":3,"AccountID":3696982,"AccountGuid":"44cfcd2c-d3f9-49b8-828a-9f692939f7ab","Email":"","AvatarImage":"9aeb67b2-40e5-4532-8443-312222cd0e4f.jpg","GeocacheFindCount":3818,"GeocacheHideCount":1,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":287979054,"CacheID":1997597,"LogGuid":"aaa8676e-be1b-4f91-a1fb-7eb6e66b3ed7","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Didn't find it","LogTypeImage":"3.png","LogText":"hier sind wir heute schon am start gescheitert.<br />zwar haben wir den ausgangsort, wie uns später bestätigt wurde, richtig gefunden, dort haben uns aber scheinbar diverse hinterlassenschaften anderer oder archivierter caches in die falsche richtung geführt.<br />dann schloss sich das zeitfenster und wir hatten heute keine möglichket mehr, hier noch weiter zu kommen.<br />vielleicht sollte der owner, um weitere verwirrung zu verhindern, die altlasten mal beseitigen.<br />mal schauen, wann wir es zu einem zweiten versuch nach hannover schaffen.","Created":"2013-01-05","Visited":"2013-01-05","UserName":"die schnucks","MembershipLevel":3,"AccountID":1478522,"AccountGuid":"fbb6d57b-aa25-4917-9090-d766e8516d20","Email":"","AvatarImage":"e70b7715-2beb-413f-ab91-8995bcc2f5a9.jpg","GeocacheFindCount":949,"GeocacheHideCount":3,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":287615679,"CacheID":1997597,"LogGuid":"e3ac23a1-4af6-4319-9b47-0179a1fac335","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Beim Weihnachtsmarkt zufällig auf den Start gestossen, dann zwischen den Jahren etwas geforscht und auf einmal hatten wir überraschenderweise die Dose in der Hand.<br />Aber jetzt soll es ja erst losgehen....","Created":"2013-01-04","Visited":"2012-12-28","UserName":"Zab13","MembershipLevel":3,"AccountID":5041977,"AccountGuid":"091aaf9d-0c38-4f41-956b-51dbcb087d24","Email":"","AvatarImage":"bd5c3de5-c261-433d-8b80-2463b6e32a36.gif","GeocacheFindCount":551,"GeocacheHideCount":4,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":286019562,"CacheID":1997597,"LogGuid":"d7ae5c34-6902-49f6-bef7-c8fb0e4c9a77","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Im Dreierteam gesucht und gefunden. Tolle Raetsel, das Final ein wenig zu schwach, hat aber trotzdem Spass gemacht. Dauer mit 2 kleinen Autofahrten (a ca. ~6 km) lag bei 4 Stunden.<br />Im Frühjahr kommt dann Bonus und Teil 2 dran.<br />Alles in allem ein Fav.-Pkt. Wert.","Created":"2012-12-29","Visited":"2012-12-28","UserName":"noeckerli","MembershipLevel":3,"AccountID":2286299,"AccountGuid":"0400dbd1-dc84-4d7c-bf54-28ea45fe14bd","Email":"","AvatarImage":"c92a987d-2a1a-4ae5-bac5-ff9af4a447a7.jpg","GeocacheFindCount":353,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285190211,"CacheID":1997597,"LogGuid":"0df1be28-9fa5-4e3f-bb31-e62e2614992e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Den kann man wirklich nur im Team gut lösen. Driskos hatte sehr gut vorgearbeitet aber auch am Final mussten wir und Le Bock noch laaange suchen bis die entscheidende Information gefunden war. In mehreren Etappen heute erfolgreich gefunden. Eine nette vorweihnachtliche Überraschung. Der Bonus scheint auch geknackt zu sein. Das werden wir uns die Tage mal ansehen. Da freuen wir uns schon drauf. DFDC.<br />Natürlich ist das einen FAV wert.","Created":"2012-12-24","Visited":"2012-12-22","UserName":"geritors","MembershipLevel":3,"AccountID":1849979,"AccountGuid":"2feb648f-2f98-4f2a-a2d3-f88848cf334e","Email":"","AvatarImage":"","GeocacheFindCount":2288,"GeocacheHideCount":0,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285188952,"CacheID":1997597,"LogGuid":"5df4c99d-5c29-4b03-8f3c-5f83fab2338e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nachdem DRISKOS hier schon vorgearbeitet hatte, konnten er, GERITORS und ich heute die Restarbeiten erledigen. Am Finale zog sich die Suche wegen Dunkelheit erheblich in die Länge. Doch dann war das Glück uns hold und die Dose unser. Eine feine Sachel die richtig Spaß gemacht hat. DFDC","Created":"2012-12-24","Visited":"2012-12-22","UserName":"le Bock","MembershipLevel":3,"AccountID":1988166,"AccountGuid":"6905cd04-cdc9-4680-8db2-be5398cbaf64","Email":"","AvatarImage":"ffe95982-32c3-436d-8d81-007f00683217.jpg","GeocacheFindCount":3450,"GeocacheHideCount":4,"ChallengesCompleted":8,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284997331,"CacheID":1997597,"LogGuid":"971ccb0a-3e79-479c-b774-a94c40054500","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Joo, wie im Listing beschrieben hat der sich ganz schön in die Länge gezogen. Etwas Hilfe war auch noch erforderlich. <br />Nachdem der Start und die ZS zum Teil einzeln ausgearbeitet wurden, haben LeBock, geritors und ich uns heute an der Final-Location getroffen. Es war dunkel, kalt und nass. Nach ca. 1/2 h hatten wir es aber geschafft. Das Döschen war entdeckt.<br />Sehr schöne Ideen, die uns lange beschäftigt haben. <br /><br />Danke für das kleine Abenteuer. <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br /> __o driskos<br />_`\\<,_<br />(*)/ (*)<br />---------------","Created":"2012-12-23","Visited":"2012-12-22","UserName":"driskos","MembershipLevel":3,"AccountID":1176435,"AccountGuid":"ead42c32-b7ad-4a38-93dc-7d1af5da94f2","Email":"","AvatarImage":"ce1a44ae-00f3-4eda-bfba-03e73fc7cda8.jpg","GeocacheFindCount":1567,"GeocacheHideCount":22,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":275052035,"CacheID":1997597,"LogGuid":"bfdce334-fc48-426a-8088-fb3d18e630fe","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Wirklich schöne Ideen sind in diesem Cache integriert, wofür sich auch die etwas weiteren Wege zwischen den Stationen lohnen. Am mit einem mobilen Cachemobil ist auch das kein Problem. Nur irgendwie hatten wir uns auch auf mehr Stationen eingestellt und somit waren wir am Final ziemlich erstaunt, als wir plötzlich eine Dose mit Logbuch in der Hand hielten ;-) Somit heisst es jetzt also: Auf zu den nächsten Teilen!<br /><br />Dnake sagt,<br />Team mcruiser","Created":"2012-10-22","Visited":"2012-10-19","UserName":"mcruiser","MembershipLevel":3,"AccountID":2871577,"AccountGuid":"b9304189-bc78-46ad-8030-de65273ab51f","Email":"","AvatarImage":"db316631-c9a7-445d-abaf-a8f279395c3e.jpg","GeocacheFindCount":751,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":274038781,"CacheID":1997597,"LogGuid":"34c782af-80bb-4cf8-b24a-f3f95dd17392","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Sehr sehr schön gemacht, nur warum war er so schnell vorbei? Da standen wir nun und hatten die Barmherzigkeit gefunden ... Schöne Statíonen, Klasse umsetzung. TFTC und Gruß Team Zaboe","Created":"2012-10-19","Visited":"2012-10-19","UserName":"Zaboe","MembershipLevel":1,"AccountID":1317590,"AccountGuid":"f0e14fc7-7199-425c-8d27-7d7b9713bf40","Email":"","AvatarImage":"1bdd7883-33ef-40fe-b422-59b07b196be3.jpg","GeocacheFindCount":3312,"GeocacheHideCount":73,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":269970920,"CacheID":1997597,"LogGuid":"deae18a7-b101-486e-ad07-8026343d765d","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Endlich geschafft...Hat lange gedauert und war jede Minute Einsatz wert.<br />Vielen Dank für die Herausforderung...<br />DFDC und Fav. Punkt","Created":"2012-09-30","Visited":"2012-09-26","UserName":"leonberger307","MembershipLevel":3,"AccountID":1179496,"AccountGuid":"d017e12b-83b3-4ec9-bd05-54cbb0d9c150","Email":"","AvatarImage":"112aa46e-fe0a-464c-990e-6bff1c61bda7.jpg","GeocacheFindCount":2525,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":256692614,"CacheID":1997597,"LogGuid":"0b464bea-2c26-4f71-a750-4503a55e901f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Was soll ich nur schreiben, was noch nicht geschrieben wurde?<br />Obwohl ich ja schon einige von Indi gemacht habe, wird man jedesmal wieder positiv überrascht.<br />Da ich nicht oft nach Hannover komme, musst ich diesen mysteriösen Multi stückeln um zum gewünschten Erfolg zu kommen. <br />Vielen Dank für diese tolle Tour, die natürlich (wie schon so oft bei den Indi-Dosen) eine blaue Schleife bekommt.<br /><br />Schöne Grüße,<br />Majoti","Created":"2012-08-11","Visited":"2012-08-11","UserName":"Majoti","MembershipLevel":3,"AccountID":3432542,"AccountGuid":"1ec93712-382c-4859-aa64-1eca126b5914","Email":"","AvatarImage":"22a4b94a-a38b-4db1-8ac3-0582a6281759.jpg","GeocacheFindCount":1662,"GeocacheHideCount":15,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":255282680,"CacheID":1997597,"LogGuid":"f7cb6941-dcea-4c31-ba43-f3d9d3cf3862","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Irgendwie fehlte immer die Zeit mit dieser tollen Serie endlich einmal anzufangen.<br />Dies wurde dann in den letzten Tagen in kleinen Mittagspausenetappen peu a peu nachgeholt.<br /><br />Schnell waren wir gefangen von den tollen Rätseln, die - ohne viel übertriebenem Pomp - die Stimmung der Filme gut eingefangen haben.<br /><br />Wie bei guten Filmen schwang dann heute mit dem Fund des Finals auch ein wenig Wehmut - wie schon vorbei? - mit.<br />Glücklicherweise haben wir ja noch 3 Teile dieser tollen Serie vor uns, auf die wir uns freuen können <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Die Wurms bedanken sich für diesen tollen ersten Teil und steigen ein in die Planung von Bonus, Teil 2 und Megabonus","Created":"2012-08-06","Visited":"2012-08-06","UserName":"Wurms","MembershipLevel":3,"AccountID":1807277,"AccountGuid":"77ee9fa9-15ae-49f6-9fea-1a9617fd69e2","Email":"","AvatarImage":"4dcfbc24-ff19-439d-bc08-78eea619a9ad.jpg","GeocacheFindCount":1167,"GeocacheHideCount":3,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":248418841,"CacheID":1997597,"LogGuid":"fa0a5d50-393b-42cf-be22-04e92fcc406c","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Geschafft! Aus Zeitgründen in mehreren Etappen die Angaben für den Bonus erarbeitet (auch dieser wird wieder eine separate Etappe). SEHR schöne Rätsel, wie von Indy nicht anders erwartet.<br />Freuen uns schon auf den Bonus und vor allem auf Teil 2!<br /><br />TFTC!<br /><br />Und natürlich gibt es hier einen FAV-Punkt!","Created":"2012-07-12","Visited":"2012-07-11","UserName":"Bergwerksdirektor","MembershipLevel":3,"AccountID":1953807,"AccountGuid":"a48e7098-1972-4401-8dda-92e242fda777","Email":"","AvatarImage":"2f8cb388-7ef0-4b76-8e4b-2de047e69d8e.jpg","GeocacheFindCount":2593,"GeocacheHideCount":11,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":248535464,"CacheID":1997597,"LogGuid":"73524950-f7ab-4f42-9152-7867210357ca","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Puh, das war eine harte Nuss. Es bedurfte mehrerer Anläufe und der tatkräftigen Hilfe eines größeren Herrns, bis wir endlich vor dem Final standen. Tolle Locations, knackige Rätsel, abwechslungsreiche Stationen,so macht Geocaching richtig Spaß. Und das Beste: Mit diesem Fund ist unsere Matrix voll. Ich freue mich schon auf Teil 2.<br />Danke für für diesen Supercache, das ist einen FP wert.","Created":"2012-07-12","Visited":"2012-07-08","UserName":"I Carbonari","MembershipLevel":3,"AccountID":2941642,"AccountGuid":"3b9ac9a6-3d82-48aa-ab00-caf78d1de23a","Email":"","AvatarImage":"","GeocacheFindCount":1396,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":247532751,"CacheID":1997597,"LogGuid":"57ea561d-40ad-4dee-bfe7-a2cef652ebc6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Mit den ausgezeichnet ausgewählten Stationen und den zugehörigen tollen Rätseln konnte ich sehr gut in die Rolle des Indiana Jones schlüpfen. Das war eine klasse Runde!<br /><br />An der schönen Finallokation zelebrierten die manchmal hier anzutreffenden Bacchus-Muggel aufgrund des vorangegangen Regens wahrscheinlich anderorts, so dass sich das Final relativ ungestört finden lies.<br /><br />DfdC, der von mir einen FP bekommt.","Created":"2012-07-08","Visited":"2012-07-08","UserName":"CaptnSharky","MembershipLevel":3,"AccountID":3673438,"AccountGuid":"357368ce-02f6-4419-8ba7-279afe889345","Email":"","AvatarImage":"c4a9b686-1602-4ee2-a252-2ba59921867d.jpg","GeocacheFindCount":773,"GeocacheHideCount":1,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":245388909,"CacheID":1997597,"LogGuid":"b8a06f0a-05e6-4dea-ab27-53a5f0026e51","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Vor einem halben Jahr hatte ich endlich die richtige Idee wo die Schattenlinie zu finden ist. Aber wieso steht in den Attributen das Kletterausrüstung benötigt wird ? Sicherheitshalber noch mal den Owner kontaktiert, Entwarnung ! Passenderweise bin ich den Tag drauf in der Nähe des Starts, wo ich schon zwei Wochen zuvor nichtsahnend gewesen bin...<br /><br />Der Start: Es ist dunkel. Es ist ein LP mitten in der City !. Niemand da. Das was ich suche, finde ich nicht. Dafür etwas anderes Brauchbares. Also auf gut Glück versucht. Und siehe da: Erfolg ! Aber was ist das: wo zeigen die KOs hin ? Doch klettern ? Kurz die Gegend abgecheckt, Spoiler rausgekramt... Erneut Entwarnung. Kleinen Umweg für den nächsten Tag eingeplant.<br /><br />ZS1: Ich bin ganz allein auf dem großen Gelände. Da es schon dunkel wird kommt richtig Grusel-Stimmung auf. Die ZS kann ich schnell finden. Zum Enträtseln vor Ort ist es mir aber zu kalt.<br /><br />ZS2: Die Location kann zügig ermittelt werden. Da ich nur sehr selten in dieser Gegend bin übernimmt ein befreundeter Cacher die \"Besorgung\".<br /><br />Finale: Zusammen mit JoSaMaJa suche ich erneut das Finale auf nach dem ich unter der Woche keinen Erfolg hatte (starker Regen & nichtseßhafte Person direkt vor Ort). Heute haben wir bei diesem LP Erfolg !<br /><br />Fazit: Großes Kino - ein Cache der bei mir das richtige Indianer Jones Feeling aufkommen ließ. Tolle LPs in der Stadt, Archäologen-Tätigkeiten, was will man mehr !","Created":"2012-06-30","Visited":"2012-06-30","UserName":"blafoo","MembershipLevel":3,"AccountID":1912314,"AccountGuid":"0564a940-8311-40ee-8e76-7e91b2cf6284","Email":"","AvatarImage":"50f83123-27d8-4dcf-9fde-2af006efaf2b.jpg","GeocacheFindCount":747,"GeocacheHideCount":8,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":245426156,"CacheID":1997597,"LogGuid":"07775c35-04d0-4aeb-a356-7cd98eb458c2","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ohne Blafoo hätte ich den nie geschafft. Durch Zufall und mit viel Hilfe konnte ich dann auch hier zugreifen. Vielen Dank an den Owner vom Nachbarort!","Created":"2012-06-30","Visited":"2012-06-29","UserName":"JoSaMaJa","MembershipLevel":3,"AccountID":4793174,"AccountGuid":"4d416461-d1a7-4cc5-8ee7-336bb910feb8","Email":"","AvatarImage":"e8a97a05-a051-4da9-bc93-6a830b866aff.jpg","GeocacheFindCount":419,"GeocacheHideCount":4,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":241251492,"CacheID":1997597,"LogGuid":"87247535-a79a-468e-985e-5d99abd07729","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"<img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /> Nr. 2.000 <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Schon vor einiger Zeit haben wir überlegt, was wohl ein würdiger Cache für unser Jubiläum sein könnte. Schnell einigten wir uns darauf, dafür den Spuren des Indianer Jones zu folgen.<br />Also den Schlapphut aufgesetzt und die Peitsche aus der SM-Schublade geschnappt und los ging's! Von Station zu Station hangelten wir uns Prof-Jones-like vorwärts und wurden heute mit dem Fund der Dose punktgenau nach dem 1999. gestern belohnt! <br />Die Wahl war die richtige: Ein ganz toller Cache, der uns sehr viel Spaß gemacht hat und an den wir uns jetzt immer, wenn wir unsere Statistik ansehen, erinnern können. Natürlich gibt's dafür einen Favoritenpunkt von uns. Dann noch ein herzliches Dankeschön und viele Grüße an Indi, den Merlyn und Reflektordetektor!<br /><br />P.S. Wir freuen uns schon auf Teil 2. Hoffen aber, dass wir ihn vor dem 3000. finden werden!<br />P.P.S. Vielen Dank an die Baumfee und den Schnatzfänger für die Begleitung, die Glückwünsche und das Erinnerungsfoto!","Created":"2012-06-10","Visited":"2012-06-10","UserName":"4Engel","MembershipLevel":3,"AccountID":2473723,"AccountGuid":"e5356bcb-f3b4-4b90-89a7-e01fb70d5ebb","Email":"","AvatarImage":"1eafbd7c-d6e2-4f57-86bf-05f316ec9026.jpg","GeocacheFindCount":2375,"GeocacheHideCount":20,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":241063085,"CacheID":1997597,"LogGuid":"0b32b7a8-2a91-465a-8917-00f15371cbc7","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"# 1691 - als uns die 4Engel vor einigen Tagen ansprachen, ob wir gemeinsam diesen Indiana Jones Cache angehen wollen, war ich sofort \"Feuer und Flamme\". Schließlich hat man diese Filme schon mehrfach im Kino bzw. im Fernsehen mit Begeisterung angeschaut.<br />In mehreren Etappen haben wir uns dem Final genähert. Bei der Sucherei und Recherche konnte man<br />gut in die Rolle des Dr. Jones schlüpfen. Besonders gut gefallen hat mir dabei die Station 1.<br />Für diesen etwas anderen Cache bedanke ich mich beim Owner und natürlich bei dem Team - Schnatzfänger<br /><br />Werden weitere Abenteuer folgen??? Auf jeden Fall erst einmal einen Fav.-Punkt.<br />Die 4Engel hatten heute ein weiteren Grund zum Feiern - dieser besondere Cache war die Nr. 2000","Created":"2012-06-10","Visited":"2012-06-10","UserName":"Schnatzfänger","MembershipLevel":3,"AccountID":3963266,"AccountGuid":"deef3a33-242e-44a3-9520-30105d838d7b","Email":"","AvatarImage":"bc17b3a6-29ee-427d-b819-755b1e6986e3.jpg","GeocacheFindCount":2427,"GeocacheHideCount":4,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[{"ImageID":14387354,"ImageGuid":"7f0e3db3-8969-4c35-a14d-f0af69f0b652","Name":"die glücklichen 4Engel","Descr":"Glückwunsch zum 2000. Cache am 10.06.2012","FileName":"7f0e3db3-8969-4c35-a14d-f0af69f0b652.jpg","Created":"2012-06-10","LogID":241063085,"CacheID":1997597,"ImageUrl":null}]},{"LogID":240175314,"CacheID":1997597,"LogGuid":"5021a2d1-63be-4e67-ab1b-4c45ecf2e3eb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Das ist doch mal ein schönes Beispiel eines urbanen Caches, der intelligent gemacht ist. <br /><br />Schöne Tour, die viel Spass gemacht hat. Leider ist das Gebiet rund ums Final ziemlich verdreckt und teilweise echt mit Vorsicht zu geniessen. Trotzdem: Fav-Punkt von mir...<br /><br />Gruß<br />Alex","Created":"2012-06-07","Visited":"2012-06-07","UserName":"GrafEssinghausen","MembershipLevel":3,"AccountID":1724814,"AccountGuid":"637708df-0b93-4ff8-a20b-48ed5d1ab2eb","Email":"","AvatarImage":"691d0302-1e78-4fa5-9570-1b5aaf899f5c.jpg","GeocacheFindCount":967,"GeocacheHideCount":13,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 124, "rows": 124 } };
+initalLogs = {"status":"success", "data": [{"LogID":297676999,"CacheID":1997597,"LogGuid":"c542ac7f-4c1e-4ffc-8c30-cceec0ce44db","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Wow, doch noch geschafft... <br />Manche Teile und das Konzept selbst fand ich sehr schön, das Finalversteck allerdings nicht so. An der letzten Hürde konnte man etwas länger knabbern und interpretieren. Eine vage Andeutung entpuppte sich aber dann doch noch als heiße Spur, so daß wir diese Aufgabe noch abschließen konnten. <br />Zum Glück waren uns keine Banditen und wilde Tiere auf den Fersen, unter Zeitdruck oder mit Schußwunden mag ich nicht rätseln ;)<br />dfdc","Created":"2013-03-09","Visited":"2013-03-08","UserName":"Geoklops","MembershipLevel":3,"AccountID":2867564,"AccountGuid":"9f5facb2-17b6-4214-a1e9-18c04605dc2c","Email":"","AvatarImage":"535acff7-d181-45e2-9488-cf0683bb3e19.jpg","GeocacheFindCount":1526,"GeocacheHideCount":3,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297456097,"CacheID":1997597,"LogGuid":"fb6eec9b-5d30-4e65-8a5b-adffa3afb239","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Horido, ich hab ihn, Dank einer Teamleistung. <br />Den Einstieg habe ich glücklicherweise schnell gefunden. Am kommenden Tag bin ich mit dem falsch skalierten Zettel dort aufgerauscht. So direkt war nun nix zu machen. Also habe ich die Infos mit zur Koordinate home genommen. Dort bekam ich die nächste Station heraus. Sehr schöne Ecke dort, ich habe mich gefreut, hier wieder einmal einen Besuch machen zu können. Auch hier hatte ich schnell Erfolg, nur was mache ich mit den gefunden Informationen. Von nun an war der Cache dann deutlich schwieriger. Wir haben zu dritt einige Tage rumgedeutelt. Eine unserer Deutungen führte dann auch zum Ergebnis. Alleine hätte ich das nicht so schnell gelöst. Die Unschärfen verstecken hier die Lösung länger als nötig, fanden wir. Die ist aber auch die einzige Kritik (diese erlaube ich mir mal) am Cache. <br /><br />Am Final hat uns ein Vorlogger das Leben etwas erschwert. Wir haben die Dose wieder zum rechten Ort zurück geführt.<br />Von mir gibt es eine Schleife, denn das Konzept des Caches fand ich wirklich gut. Außerdem gab es einiges Sehenswertes dazu.","Created":"2013-03-08","Visited":"2013-03-08","UserName":"cosylight","MembershipLevel":3,"AccountID":2953880,"AccountGuid":"b4445988-f55b-498d-9140-a82020ac2be0","Email":"","AvatarImage":"","GeocacheFindCount":926,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":297455097,"CacheID":1997597,"LogGuid":"573abf18-f05a-4aef-902c-98714689a0b9","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"So, den verlorenen Schatz haben wir schon mal bergen können. Wobei ich ja anmerken muss, daß ich mir ob des Versteckortes recht sicher bin, daß die vorherigen Finder/Verstecker das letzte Teilrätsel nicht in Gänze gelöst oder doch zumindest nicht in Gänze verstanden haben. Somit mussten wir, das Rätselteam \"Reißverschluss\", leider etwas länger in der Kälte und an diesem Ort herumsuchen, als eigentlich nötig gewesen wären. <br /><br />Die Eingangsspur hab ich schon vor langer Zeit immerhin schon mal online ausgemacht. Aber erst, als der Herr Cosylight endlich Premium wurde, kam dieser Schatz wieder ins Radar. Wir teilten brüderlich die Aufgaben und die Verwirrung und hatten nun auch endlich mal herausgefunden, daß nicht jedes Kauderwelsch unverständlich bleiben muss. <br /><br />Danke für die Rätsel und die Stationen, die allesamt an sehr sehenswerten Orten waren. Vor allem der von Station 1 hat mich eine ganze Weile länger behalten, als für die Suche nötig gewesen wäre. <br /><br />Herr Dr. Henry Walton Jones, Jr., wir werden uns in Kürze sicherlich wiedersehen!","Created":"2013-03-08","Visited":"2013-03-08","UserName":"nike1972","MembershipLevel":3,"AccountID":2892759,"AccountGuid":"749fe082-37c5-4439-8855-431c6dba5e77","Email":"","AvatarImage":"d8114f24-3aec-4096-976c-77e4d59ae450.jpg","GeocacheFindCount":1675,"GeocacheHideCount":9,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":294035406,"CacheID":1997597,"LogGuid":"fc2eb4a2-5526-436c-81bf-6fa4e396cf72","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Hier brauchten wir allein für das Finale zwei Anläufe, beim ersten mal war das Finale von städtischen Angestelleten überfüllt. Die anderen tollen Stationen waren auch nicht an einem Tag gemacht.<br /><br />Danke für diesen aufregenden Cache<br /><br />hobatt","Created":"2013-02-16","Visited":"2013-02-14","UserName":"hobatt","MembershipLevel":3,"AccountID":940348,"AccountGuid":"36d0e6e3-91cc-4074-b157-74e7296bd174","Email":"","AvatarImage":"2918f53e-fe84-45aa-9f48-4a24c5f87060.jpg","GeocacheFindCount":3625,"GeocacheHideCount":8,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":293767350,"CacheID":1997597,"LogGuid":"321726fe-0b63-46ff-b055-c398b64cf8c8","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Das war nicht unser erster Besuch für diesen Cache...<br />...aber heute konnten wir das Logbuch finden und das ganze zum Abschluß bringen!<br />Gemeinsam mit hobatt machte ich mich mal wieder auf den Weg nach Hannover.<br /><br />Danke an den Owner für diesen Kracher, die komplette Serie ist der Wahnsinn!<br />Jack La Grotta","Created":"2013-02-14","Visited":"2013-02-14","UserName":"Jack La Grotta","MembershipLevel":3,"AccountID":2524398,"AccountGuid":"d4b82b2b-b444-4e3f-a08c-d69e9fc6d717","Email":"","AvatarImage":"a3580e63-cc2f-40bc-98eb-414397a4c5c4.jpg","GeocacheFindCount":3333,"GeocacheHideCount":24,"ChallengesCompleted":51,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":292031329,"CacheID":1997597,"LogGuid":"b5707ecc-f213-471a-91a3-63db0c14e008","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"<img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Nachdem wir schon den anderen Teil erleben durften<img src=\"/images/icons/icon_smile_tongue.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br />wurde Ende letzten Jahres auch dieser in \"Angriff \" genommen!<br />Auch Wir haben diesen in mehreren Etappen absolviert und jede ZS genossen!!!! <br />Heute Mittag konnten wir das Logbuch in den Händen halten<img src=\"/images/icons/icon_smile_tongue.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_approve.gif\" border=\"0\" align=\"middle\" /><br />(Das L-Buch ist recht voll)<br /><img src=\"/images/icons/icon_smile_cool.gif\" border=\"0\" align=\"middle\" />Hammmer was Indi da wieder gezaubert hat<img src=\"/images/icons/icon_smile_cool.gif\" border=\"0\" align=\"middle\" /><br /><br /><br />Danke sagt Merliah1","Created":"2013-02-03","Visited":"2013-02-03","UserName":"Merliah1","MembershipLevel":3,"AccountID":5247226,"AccountGuid":"8c771c70-52a4-4d23-9681-4c1b657f98f8","Email":"","AvatarImage":"f541ae7f-f54a-41bd-a512-e1a82af63bb1.jpg","GeocacheFindCount":1950,"GeocacheHideCount":0,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":289745310,"CacheID":1997597,"LogGuid":"2567672f-a760-4c51-92b6-cdfbcd2dc104","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Jo, der hat sich ganz schön gezogen......beim publish hatte ich noch so gar keine Ahnung, worum es geht und was der Indy von uns wollte. Deshalb wurde das ganze erst mal beiseite gelegt - und die Zeit verging. <br />Erst vor ein paar Wochen stieß ich wieder auf dieses Rätsel und ich begab mich abermals daran. Nach intensiver Recherche kam dann auch brauchbares zutage - der Start war gemacht. Die 1.ZS ergab sich über den schwierigeren Weg für mich jedoch erstaunlich flott. Danach war ich wieder schnell auf der richtigen Spur, nur interpretierte ich hier etwas zuuuviel rein, so daß ich mir schließlich einen Tipp holen musste. Da kam auch sofort die Bestätigung: viel zu kompliziert gedacht. Danach war die nächste ZS geknackt und heute endlich machte ich mich auf zum Final - wobei der Cachergott barmherzig mit mir war: lange suchen musste ich nicht......<br /><br />Insgesamt ist dies ein sehr schön ausgearbeiteter MysteryMulti mit stimmigen Stationen, der richtig Spaß machen und man sich auf die Fortsetzung dieser Reihe freut. Dies sind die Caches, die dieses Hobby ausmachen! Mehr davon!......ein Schleifchen ist Ehrensache.<br /><br />--- T4TC ---","Created":"2013-01-16","Visited":"2013-01-16","UserName":"DeLaTrick","MembershipLevel":3,"AccountID":3696982,"AccountGuid":"44cfcd2c-d3f9-49b8-828a-9f692939f7ab","Email":"","AvatarImage":"9aeb67b2-40e5-4532-8443-312222cd0e4f.jpg","GeocacheFindCount":3963,"GeocacheHideCount":1,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":287979054,"CacheID":1997597,"LogGuid":"aaa8676e-be1b-4f91-a1fb-7eb6e66b3ed7","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Didn't find it","LogTypeImage":"3.png","LogText":"hier sind wir heute schon am start gescheitert.<br />zwar haben wir den ausgangsort, wie uns später bestätigt wurde, richtig gefunden, dort haben uns aber scheinbar diverse hinterlassenschaften anderer oder archivierter caches in die falsche richtung geführt.<br />dann schloss sich das zeitfenster und wir hatten heute keine möglichket mehr, hier noch weiter zu kommen.<br />vielleicht sollte der owner, um weitere verwirrung zu verhindern, die altlasten mal beseitigen.<br />mal schauen, wann wir es zu einem zweiten versuch nach hannover schaffen.","Created":"2013-01-05","Visited":"2013-01-05","UserName":"die schnucks","MembershipLevel":3,"AccountID":1478522,"AccountGuid":"fbb6d57b-aa25-4917-9090-d766e8516d20","Email":"","AvatarImage":"e70b7715-2beb-413f-ab91-8995bcc2f5a9.jpg","GeocacheFindCount":949,"GeocacheHideCount":3,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":287615679,"CacheID":1997597,"LogGuid":"e3ac23a1-4af6-4319-9b47-0179a1fac335","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Beim Weihnachtsmarkt zufällig auf den Start gestossen, dann zwischen den Jahren etwas geforscht und auf einmal hatten wir überraschenderweise die Dose in der Hand.<br />Aber jetzt soll es ja erst losgehen....","Created":"2013-01-04","Visited":"2012-12-28","UserName":"Zab13","MembershipLevel":3,"AccountID":5041977,"AccountGuid":"091aaf9d-0c38-4f41-956b-51dbcb087d24","Email":"","AvatarImage":"bd5c3de5-c261-433d-8b80-2463b6e32a36.gif","GeocacheFindCount":562,"GeocacheHideCount":4,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":286019562,"CacheID":1997597,"LogGuid":"d7ae5c34-6902-49f6-bef7-c8fb0e4c9a77","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Im Dreierteam gesucht und gefunden. Tolle Raetsel, das Final ein wenig zu schwach, hat aber trotzdem Spass gemacht. Dauer mit 2 kleinen Autofahrten (a ca. ~6 km) lag bei 4 Stunden.<br />Im Frühjahr kommt dann Bonus und Teil 2 dran.<br />Alles in allem ein Fav.-Pkt. Wert.","Created":"2012-12-29","Visited":"2012-12-28","UserName":"noeckerli","MembershipLevel":3,"AccountID":2286299,"AccountGuid":"0400dbd1-dc84-4d7c-bf54-28ea45fe14bd","Email":"","AvatarImage":"c92a987d-2a1a-4ae5-bac5-ff9af4a447a7.jpg","GeocacheFindCount":355,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285190211,"CacheID":1997597,"LogGuid":"0df1be28-9fa5-4e3f-bb31-e62e2614992e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Den kann man wirklich nur im Team gut lösen. Driskos hatte sehr gut vorgearbeitet aber auch am Final mussten wir und Le Bock noch laaange suchen bis die entscheidende Information gefunden war. In mehreren Etappen heute erfolgreich gefunden. Eine nette vorweihnachtliche Überraschung. Der Bonus scheint auch geknackt zu sein. Das werden wir uns die Tage mal ansehen. Da freuen wir uns schon drauf. DFDC.<br />Natürlich ist das einen FAV wert.","Created":"2012-12-24","Visited":"2012-12-22","UserName":"geritors","MembershipLevel":3,"AccountID":1849979,"AccountGuid":"2feb648f-2f98-4f2a-a2d3-f88848cf334e","Email":"","AvatarImage":"","GeocacheFindCount":2297,"GeocacheHideCount":0,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285188952,"CacheID":1997597,"LogGuid":"5df4c99d-5c29-4b03-8f3c-5f83fab2338e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nachdem DRISKOS hier schon vorgearbeitet hatte, konnten er, GERITORS und ich heute die Restarbeiten erledigen. Am Finale zog sich die Suche wegen Dunkelheit erheblich in die Länge. Doch dann war das Glück uns hold und die Dose unser. Eine feine Sachel die richtig Spaß gemacht hat. DFDC","Created":"2012-12-24","Visited":"2012-12-22","UserName":"le Bock","MembershipLevel":3,"AccountID":1988166,"AccountGuid":"6905cd04-cdc9-4680-8db2-be5398cbaf64","Email":"","AvatarImage":"ffe95982-32c3-436d-8d81-007f00683217.jpg","GeocacheFindCount":3479,"GeocacheHideCount":4,"ChallengesCompleted":8,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284997331,"CacheID":1997597,"LogGuid":"971ccb0a-3e79-479c-b774-a94c40054500","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Joo, wie im Listing beschrieben hat der sich ganz schön in die Länge gezogen. Etwas Hilfe war auch noch erforderlich. <br />Nachdem der Start und die ZS zum Teil einzeln ausgearbeitet wurden, haben LeBock, geritors und ich uns heute an der Final-Location getroffen. Es war dunkel, kalt und nass. Nach ca. 1/2 h hatten wir es aber geschafft. Das Döschen war entdeckt.<br />Sehr schöne Ideen, die uns lange beschäftigt haben. <br /><br />Danke für das kleine Abenteuer. <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br /> __o driskos<br />_`\\<,_<br />(*)/ (*)<br />---------------","Created":"2012-12-23","Visited":"2012-12-22","UserName":"driskos","MembershipLevel":3,"AccountID":1176435,"AccountGuid":"ead42c32-b7ad-4a38-93dc-7d1af5da94f2","Email":"","AvatarImage":"ce1a44ae-00f3-4eda-bfba-03e73fc7cda8.jpg","GeocacheFindCount":1582,"GeocacheHideCount":22,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":275052035,"CacheID":1997597,"LogGuid":"bfdce334-fc48-426a-8088-fb3d18e630fe","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Wirklich schöne Ideen sind in diesem Cache integriert, wofür sich auch die etwas weiteren Wege zwischen den Stationen lohnen. Am mit einem mobilen Cachemobil ist auch das kein Problem. Nur irgendwie hatten wir uns auch auf mehr Stationen eingestellt und somit waren wir am Final ziemlich erstaunt, als wir plötzlich eine Dose mit Logbuch in der Hand hielten ;-) Somit heisst es jetzt also: Auf zu den nächsten Teilen!<br /><br />Dnake sagt,<br />Team mcruiser","Created":"2012-10-22","Visited":"2012-10-19","UserName":"mcruiser","MembershipLevel":3,"AccountID":2871577,"AccountGuid":"b9304189-bc78-46ad-8030-de65273ab51f","Email":"","AvatarImage":"db316631-c9a7-445d-abaf-a8f279395c3e.jpg","GeocacheFindCount":751,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":274038781,"CacheID":1997597,"LogGuid":"34c782af-80bb-4cf8-b24a-f3f95dd17392","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Sehr sehr schön gemacht, nur warum war er so schnell vorbei? Da standen wir nun und hatten die Barmherzigkeit gefunden ... Schöne Statíonen, Klasse umsetzung. TFTC und Gruß Team Zaboe","Created":"2012-10-19","Visited":"2012-10-19","UserName":"Zaboe","MembershipLevel":1,"AccountID":1317590,"AccountGuid":"f0e14fc7-7199-425c-8d27-7d7b9713bf40","Email":"","AvatarImage":"1bdd7883-33ef-40fe-b422-59b07b196be3.jpg","GeocacheFindCount":3317,"GeocacheHideCount":73,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":269970920,"CacheID":1997597,"LogGuid":"deae18a7-b101-486e-ad07-8026343d765d","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Endlich geschafft...Hat lange gedauert und war jede Minute Einsatz wert.<br />Vielen Dank für die Herausforderung...<br />DFDC und Fav. Punkt","Created":"2012-09-30","Visited":"2012-09-26","UserName":"leonberger307","MembershipLevel":3,"AccountID":1179496,"AccountGuid":"d017e12b-83b3-4ec9-bd05-54cbb0d9c150","Email":"","AvatarImage":"112aa46e-fe0a-464c-990e-6bff1c61bda7.jpg","GeocacheFindCount":2528,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":256692614,"CacheID":1997597,"LogGuid":"0b464bea-2c26-4f71-a750-4503a55e901f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Was soll ich nur schreiben, was noch nicht geschrieben wurde?<br />Obwohl ich ja schon einige von Indi gemacht habe, wird man jedesmal wieder positiv überrascht.<br />Da ich nicht oft nach Hannover komme, musst ich diesen mysteriösen Multi stückeln um zum gewünschten Erfolg zu kommen. <br />Vielen Dank für diese tolle Tour, die natürlich (wie schon so oft bei den Indi-Dosen) eine blaue Schleife bekommt.<br /><br />Schöne Grüße,<br />Majoti","Created":"2012-08-11","Visited":"2012-08-11","UserName":"Majoti","MembershipLevel":3,"AccountID":3432542,"AccountGuid":"1ec93712-382c-4859-aa64-1eca126b5914","Email":"","AvatarImage":"22a4b94a-a38b-4db1-8ac3-0582a6281759.jpg","GeocacheFindCount":1665,"GeocacheHideCount":16,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":255282680,"CacheID":1997597,"LogGuid":"f7cb6941-dcea-4c31-ba43-f3d9d3cf3862","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Irgendwie fehlte immer die Zeit mit dieser tollen Serie endlich einmal anzufangen.<br />Dies wurde dann in den letzten Tagen in kleinen Mittagspausenetappen peu a peu nachgeholt.<br /><br />Schnell waren wir gefangen von den tollen Rätseln, die - ohne viel übertriebenem Pomp - die Stimmung der Filme gut eingefangen haben.<br /><br />Wie bei guten Filmen schwang dann heute mit dem Fund des Finals auch ein wenig Wehmut - wie schon vorbei? - mit.<br />Glücklicherweise haben wir ja noch 3 Teile dieser tollen Serie vor uns, auf die wir uns freuen können <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Die Wurms bedanken sich für diesen tollen ersten Teil und steigen ein in die Planung von Bonus, Teil 2 und Megabonus","Created":"2012-08-06","Visited":"2012-08-06","UserName":"Wurms","MembershipLevel":3,"AccountID":1807277,"AccountGuid":"77ee9fa9-15ae-49f6-9fea-1a9617fd69e2","Email":"","AvatarImage":"4dcfbc24-ff19-439d-bc08-78eea619a9ad.jpg","GeocacheFindCount":1180,"GeocacheHideCount":3,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":248418841,"CacheID":1997597,"LogGuid":"fa0a5d50-393b-42cf-be22-04e92fcc406c","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Geschafft! Aus Zeitgründen in mehreren Etappen die Angaben für den Bonus erarbeitet (auch dieser wird wieder eine separate Etappe). SEHR schöne Rätsel, wie von Indy nicht anders erwartet.<br />Freuen uns schon auf den Bonus und vor allem auf Teil 2!<br /><br />TFTC!<br /><br />Und natürlich gibt es hier einen FAV-Punkt!","Created":"2012-07-12","Visited":"2012-07-11","UserName":"Bergwerksdirektor","MembershipLevel":3,"AccountID":1953807,"AccountGuid":"a48e7098-1972-4401-8dda-92e242fda777","Email":"","AvatarImage":"2f8cb388-7ef0-4b76-8e4b-2de047e69d8e.jpg","GeocacheFindCount":2599,"GeocacheHideCount":11,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":248535464,"CacheID":1997597,"LogGuid":"73524950-f7ab-4f42-9152-7867210357ca","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Puh, das war eine harte Nuss. Es bedurfte mehrerer Anläufe und der tatkräftigen Hilfe eines größeren Herrns, bis wir endlich vor dem Final standen. Tolle Locations, knackige Rätsel, abwechslungsreiche Stationen,so macht Geocaching richtig Spaß. Und das Beste: Mit diesem Fund ist unsere Matrix voll. Ich freue mich schon auf Teil 2.<br />Danke für für diesen Supercache, das ist einen FP wert.","Created":"2012-07-12","Visited":"2012-07-08","UserName":"I Carbonari","MembershipLevel":3,"AccountID":2941642,"AccountGuid":"3b9ac9a6-3d82-48aa-ab00-caf78d1de23a","Email":"","AvatarImage":"","GeocacheFindCount":1397,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":247532751,"CacheID":1997597,"LogGuid":"57ea561d-40ad-4dee-bfe7-a2cef652ebc6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Mit den ausgezeichnet ausgewählten Stationen und den zugehörigen tollen Rätseln konnte ich sehr gut in die Rolle des Indiana Jones schlüpfen. Das war eine klasse Runde!<br /><br />An der schönen Finallokation zelebrierten die manchmal hier anzutreffenden Bacchus-Muggel aufgrund des vorangegangen Regens wahrscheinlich anderorts, so dass sich das Final relativ ungestört finden lies.<br /><br />DfdC, der von mir einen FP bekommt.","Created":"2012-07-08","Visited":"2012-07-08","UserName":"CaptnSharky","MembershipLevel":3,"AccountID":3673438,"AccountGuid":"357368ce-02f6-4419-8ba7-279afe889345","Email":"","AvatarImage":"c4a9b686-1602-4ee2-a252-2ba59921867d.jpg","GeocacheFindCount":776,"GeocacheHideCount":1,"ChallengesCompleted":2,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":245388909,"CacheID":1997597,"LogGuid":"b8a06f0a-05e6-4dea-ab27-53a5f0026e51","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Vor einem halben Jahr hatte ich endlich die richtige Idee wo die Schattenlinie zu finden ist. Aber wieso steht in den Attributen das Kletterausrüstung benötigt wird ? Sicherheitshalber noch mal den Owner kontaktiert, Entwarnung ! Passenderweise bin ich den Tag drauf in der Nähe des Starts, wo ich schon zwei Wochen zuvor nichtsahnend gewesen bin...<br /><br />Der Start: Es ist dunkel. Es ist ein LP mitten in der City !. Niemand da. Das was ich suche, finde ich nicht. Dafür etwas anderes Brauchbares. Also auf gut Glück versucht. Und siehe da: Erfolg ! Aber was ist das: wo zeigen die KOs hin ? Doch klettern ? Kurz die Gegend abgecheckt, Spoiler rausgekramt... Erneut Entwarnung. Kleinen Umweg für den nächsten Tag eingeplant.<br /><br />ZS1: Ich bin ganz allein auf dem großen Gelände. Da es schon dunkel wird kommt richtig Grusel-Stimmung auf. Die ZS kann ich schnell finden. Zum Enträtseln vor Ort ist es mir aber zu kalt.<br /><br />ZS2: Die Location kann zügig ermittelt werden. Da ich nur sehr selten in dieser Gegend bin übernimmt ein befreundeter Cacher die \"Besorgung\".<br /><br />Finale: Zusammen mit JoSaMaJa suche ich erneut das Finale auf nach dem ich unter der Woche keinen Erfolg hatte (starker Regen & nichtseßhafte Person direkt vor Ort). Heute haben wir bei diesem LP Erfolg !<br /><br />Fazit: Großes Kino - ein Cache der bei mir das richtige Indianer Jones Feeling aufkommen ließ. Tolle LPs in der Stadt, Archäologen-Tätigkeiten, was will man mehr !","Created":"2012-06-30","Visited":"2012-06-30","UserName":"blafoo","MembershipLevel":3,"AccountID":1912314,"AccountGuid":"0564a940-8311-40ee-8e76-7e91b2cf6284","Email":"","AvatarImage":"50f83123-27d8-4dcf-9fde-2af006efaf2b.jpg","GeocacheFindCount":747,"GeocacheHideCount":8,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":245426156,"CacheID":1997597,"LogGuid":"07775c35-04d0-4aeb-a356-7cd98eb458c2","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ohne Blafoo hätte ich den nie geschafft. Durch Zufall und mit viel Hilfe konnte ich dann auch hier zugreifen. Vielen Dank an den Owner vom Nachbarort!","Created":"2012-06-30","Visited":"2012-06-29","UserName":"JoSaMaJa","MembershipLevel":3,"AccountID":4793174,"AccountGuid":"4d416461-d1a7-4cc5-8ee7-336bb910feb8","Email":"","AvatarImage":"e8a97a05-a051-4da9-bc93-6a830b866aff.jpg","GeocacheFindCount":426,"GeocacheHideCount":4,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":241251492,"CacheID":1997597,"LogGuid":"87247535-a79a-468e-985e-5d99abd07729","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"<img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /> Nr. 2.000 <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Schon vor einiger Zeit haben wir überlegt, was wohl ein würdiger Cache für unser Jubiläum sein könnte. Schnell einigten wir uns darauf, dafür den Spuren des Indianer Jones zu folgen.<br />Also den Schlapphut aufgesetzt und die Peitsche aus der SM-Schublade geschnappt und los ging's! Von Station zu Station hangelten wir uns Prof-Jones-like vorwärts und wurden heute mit dem Fund der Dose punktgenau nach dem 1999. gestern belohnt! <br />Die Wahl war die richtige: Ein ganz toller Cache, der uns sehr viel Spaß gemacht hat und an den wir uns jetzt immer, wenn wir unsere Statistik ansehen, erinnern können. Natürlich gibt's dafür einen Favoritenpunkt von uns. Dann noch ein herzliches Dankeschön und viele Grüße an Indi, den Merlyn und Reflektordetektor!<br /><br />P.S. Wir freuen uns schon auf Teil 2. Hoffen aber, dass wir ihn vor dem 3000. finden werden!<br />P.P.S. Vielen Dank an die Baumfee und den Schnatzfänger für die Begleitung, die Glückwünsche und das Erinnerungsfoto!","Created":"2012-06-10","Visited":"2012-06-10","UserName":"4Engel","MembershipLevel":3,"AccountID":2473723,"AccountGuid":"e5356bcb-f3b4-4b90-89a7-e01fb70d5ebb","Email":"","AvatarImage":"1eafbd7c-d6e2-4f57-86bf-05f316ec9026.jpg","GeocacheFindCount":2398,"GeocacheHideCount":20,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":241063085,"CacheID":1997597,"LogGuid":"0b32b7a8-2a91-465a-8917-00f15371cbc7","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"# 1691 - als uns die 4Engel vor einigen Tagen ansprachen, ob wir gemeinsam diesen Indiana Jones Cache angehen wollen, war ich sofort \"Feuer und Flamme\". Schließlich hat man diese Filme schon mehrfach im Kino bzw. im Fernsehen mit Begeisterung angeschaut.<br />In mehreren Etappen haben wir uns dem Final genähert. Bei der Sucherei und Recherche konnte man<br />gut in die Rolle des Dr. Jones schlüpfen. Besonders gut gefallen hat mir dabei die Station 1.<br />Für diesen etwas anderen Cache bedanke ich mich beim Owner und natürlich bei dem Team - Schnatzfänger<br /><br />Werden weitere Abenteuer folgen??? Auf jeden Fall erst einmal einen Fav.-Punkt.<br />Die 4Engel hatten heute ein weiteren Grund zum Feiern - dieser besondere Cache war die Nr. 2000","Created":"2012-06-10","Visited":"2012-06-10","UserName":"Schnatzfänger","MembershipLevel":3,"AccountID":3963266,"AccountGuid":"deef3a33-242e-44a3-9520-30105d838d7b","Email":"","AvatarImage":"bc17b3a6-29ee-427d-b819-755b1e6986e3.jpg","GeocacheFindCount":2472,"GeocacheHideCount":4,"ChallengesCompleted":3,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[{"ImageID":14387354,"ImageGuid":"7f0e3db3-8969-4c35-a14d-f0af69f0b652","Name":"die glücklichen 4Engel","Descr":"Glückwunsch zum 2000. Cache am 10.06.2012","FileName":"7f0e3db3-8969-4c35-a14d-f0af69f0b652.jpg","Created":"2012-06-10","LogID":241063085,"CacheID":1997597,"ImageUrl":null}]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 125, "rows": 125 } };
$(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'Premium', null, true]); });var gaToken = 'UA-2020240-1';//]]>
</script>
</form>
@@ -2053,6 +2078,6 @@ $(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', </noscript>
</div>
<!-- End Quantcast tag -->
- <!-- Server: WEB14; Build: Web.HotFix_20130305.1 -->
+ <!-- Server: WEB09; Build: Web.Release_20130319.1 -->
</body>
</html>
diff --git a/tests/src/cgeo/geocaching/test/mock/GC3XX5J.html b/tests/src/cgeo/geocaching/test/mock/GC3XX5J.html index db89925..6cd1881 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC3XX5J.html +++ b/tests/src/cgeo/geocaching/test/mock/GC3XX5J.html @@ -76,15 +76,15 @@ } })(); </script> -<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?wp=GC3XX5J&Submit6=Go" property="og:url" /><meta name="og:description" content="Use a smartphone or GPS device to navigate to the provided coordinates. Look for a small hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 2 and difficulty is 1.5 (out of 5)." 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="Zaraščen Tir" property="og:title" /><meta name="description" content="Zaraščen Tir (GC3XX5J) was created by David & Ajda on 10/01/2012. It's a Small size geocache, with difficulty of 1.5, terrain of 2. It's located in Slovenia. Kadar zbolimo nam pomaga...When we get sick, they are helpful... SLO:tir je danes zapuščen, včasih pa so ga uporabljala različna podjetja, da so po njem dostavljali material in odvažali končne izdelke." /></head> +<meta name="og:site_name" content="Geocaching.com" property="og:site_name" /><meta name="og:type" content="article" property="og:type" /><meta name="fb:app_id" content="251051881589204" property="fb:app_id" /><meta name="og:url" content="http://www.geocaching.com/seek/cache_details.aspx?guid=51e40dec-6272-4dad-934b-e175daaac265" property="og:url" /><meta name="og:description" content="Use a smartphone or GPS device to navigate to the provided coordinates. Look for a small hidden container. When you find it, write your name and date in the logbook. If you take something from the container, leave something in exchange. The terrain is 2 and difficulty is 1.5 (out of 5)." 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="Zaraščen Tir" property="og:title" /><meta name="description" content="Zaraščen Tir (GC3XX5J) was created by David & Ajda on 10/01/2012. It's a Small size geocache, with difficulty of 1.5, terrain of 2. It's located in Slovenia. Kadar zbolimo nam pomaga...When we get sick, they are helpful... SLO:tir je danes zapuščen, včasih pa so ga uporabljala različna podjetja, da so po njem dostavljali material in odvažali končne izdelke." /><link rel="alternate" href="../datastore/rss_galleryimages.ashx?guid=51e40dec-6272-4dad-934b-e175daaac265" type="application/rss+xml" title="[Gallery Images]" id="GalleryImages" /></head> <body background="https://lh6.googleusercontent.com/-PoDn9PmtYmg/UGnOZLEQboI/AAAAAAAAAHM/hBXxerWnSdA/s254/lek-verovskova.jpg" class="CacheDetailsPage"> - <form name="aspnetForm" method="post" action="cache_details.aspx?wp=GC3XX5J&Submit6=Go" id="aspnetForm"> + <form name="aspnetForm" method="post" action="cache_details.aspx?guid=51e40dec-6272-4dad-934b-e175daaac265" 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="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzMyMjA2NzIWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFlQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZndwJTNkR0MzWFg1SiUyNlN1Ym1pdDYlM2RHb2RkAgsPFgIfAQUQNDE5IENhY2hlcyBGb3VuZGQCEQ8WAh8DZxYCAg0PDxYCHwUFQH4vdHJhY2svc2VhcmNoLmFzcHg/bz0xJnVpZD00ZDQxNjQ2MS1kMWE3LTRjYzUtOGVlNy0zMzZiYjkxMGZlYjhkZAIXDw8WAh8DZ2RkAiEPFgIfA2dkAk8PZBYEAgMPFgIfAQUHRW5nbGlzaGQCBQ8WAh4LXyFJdGVtQ291bnQCEhYkZg9kFgICAQ8PFggeD0NvbW1hbmRBcmd1bWVudAUFZW4tVVMeC0NvbW1hbmROYW1lBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2geEENhdXNlc1ZhbGlkYXRpb25oZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAIRD2QWAgIDDxYCHwNoZAITDxYCHgVjbGFzcwUMc3Bhbi0yNCBsYXN0FgICAQ9kFioCAQ9kFgJmD2QWAgIBDw8WAh8BBQdHQzNYWDVKZGQCAg8WAh8BBaYBPGEgaHJlZj0iL2Fib3V0L2NhY2hlX3R5cGVzLmFzcHgiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iQWJvdXQgQ2FjaGUgVHlwZXMiPjxpbWcgc3JjPSIvaW1hZ2VzL1dwdFR5cGVzLzIuZ2lmIiBhbHQ9IlRyYWRpdGlvbmFsIENhY2hlIiB0aXRsZT0iVHJhZGl0aW9uYWwgQ2FjaGUiIC8+PC9hPmQCBg9kFgQCAQ8WAh8DZ2QCBg8WAh8DaGQCCw9kFgQCAQ8WAh8BBQExZAIFDw8WAh8FBUQvc2Vlay9jYWNoZV9mYXZvcml0ZWQuYXNweD9ndWlkPTUxZTQwZGVjLTYyNzItNGRhZC05MzRiLWUxNzVkYWFhYzI2NWRkAg0PDxYCHwNoZGQCEA8WAh8DaGQCEQ8WAh8DaGQCEg9kFgwCAw8WAh4Fc3R5bGUFD2Rpc3BsYXk6aW5saW5lOxYCAgEPFgIfAQUbVVRNOiAzM1QgRSA0NjEzNDAgTiA1MTAzMTA5ZAINDw8WAh8FBTNjZHBmLmFzcHg/Z3VpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjVkZAIPDw8WAh8FBThjZHBmLmFzcHg/Z3VpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjUmbGM9NWRkAhEPDxYCHwUFOWNkcGYuYXNweD9ndWlkPTUxZTQwZGVjLTYyNzItNGRhZC05MzRiLWUxNzVkYWFhYzI2NSZsYz0xMGRkAhMPDxYEHwUFemh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9mPWQmaGw9ZW4mc2FkZHI9NTIuMjE2MjUsOS43MTQ0ODMgKEhvbWUgTG9jYXRpb24pJmRhZGRyPTQ2LjA4MDQ2NywxNC41KFphcmElYzUlYTElYzQlOGRlbitUaXIpHgZUYXJnZXQFBl9ibGFua2RkAhsPZBYIAgEPDxYEHglGb3JlQ29sb3IMHgRfIVNCAgRkZAIDDw8WBB8NDB8OAgRkZAIFDw8WAh8DZxYCHgdvbmNsaWNrBTtzMmdwcygnNTFlNDBkZWMtNjI3Mi00ZGFkLTkzNGItZTE3NWRhYWFjMjY1Jyk7cmV0dXJuIGZhbHNlO2QCBw8PFgIfA2cWAh8PBSBzMnBob25lKCdHQzNYWDVKJyk7cmV0dXJuIGZhbHNlO2QCFA8WAh8DZ2QCFw9kFghmDxYCHwNoZAIBDw8WAh8DaGRkAgIPDxYCHwNoZGQCAw8WAh8DaGQCGA9kFgICAw8PFgIfAQUHRGVjcnlwdGRkAhkPFgIfAQVCQnF6bnhhdiB4bnpyYSBibyBndmVoIC8gRXJ6YmlyIGd1ciBmZ2JhciBqdnB1IHl2cmYgb3JmdnFyIGd1ciBlbnZ5ZAIcDxYCHwNoZAIdDw8WAh8DaGQWAgIDDw8WAh8DaGRkAh4PFgIfA2dkAh8PFgIfA2hkAiIPZBYCAgMPFgIeCWlubmVyaHRtbAUTQWR2ZXJ0aXNpbmcgd2l0aCBVc2QCJg9kFgQCBQ8PFgIfA2dkZAIJDw8WAh8FBTx+L3RyYWNrL3NlYXJjaC5hc3B4P3dpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjVkZAIpD2QWEgIBDw8WAh8DaGRkAgMPZBYCAgEPDxYCHwUFRS9oaWRlL3dwdGxpc3QuYXNweD9SZWZXcHRJRD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjUmRFM9MWRkAgcPDxYGHgZSRFMuSUQLKXZHcm91bmRzcGVhay5XZWIuR1BYLldwdERhdGFTb3VyY2VzLCBUdWNzb24uQ29tbW9uLkxlZ2FjeSwgVmVyc2lvbj0zLjAuNDgxMi4xODA3NSwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsAR4HUldQVC5JRCgrBAczMjIwNjcyHwNoZGQCCQ8PFgIfA2dkFgICAQ8PFgQfBQUoL21hcC9kZWZhdWx0LmFzcHg/bGF0PTQ2LjA4MDQ2NyZsbmc9MTQuNR8DZ2RkAg8PFgIfAQWRAS4uLm90aGVyIGNhY2hlcyA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dT1EYXZpZCslMjYrQWpkYSI+aGlkZGVuPC9hPiBvciA8YSBocmVmPSIvc2Vlay9u" /> -<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="ZWFyZXN0LmFzcHg/dWw9RGF2aWQrJTI2K0FqZGEiPmZvdW5kPC9hPiBieSB0aGlzIHVzZXJkAhEPZBYGAgEPFgIfAQWBAi4uLm5lYXJieSA8YSBocmVmPSIvc2Vlay9uZWFyZXN0LmFzcHg/dHg9MzJiYzkzMzMtNWU1Mi00OTU3LWIwZjYtNWEyYzhmYzdiMjU3JmxhdD00Ni4wODA0NjcmbG5nPTE0LjUwMDAwMCI+Y2FjaGVzIG9mIHRoaXMgdHlwZTwvYT4sIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD0zMmJjOTMzMy01ZTUyLTQ5NTctYjBmNi01YTJjOGZjN2IyNTcmbGF0PTQ2LjA4MDQ2NyZsbmc9MTQuNTAwMDAwJmY9MSI+dGhhdCBJIGhhdmVuJ3QgZm91bmQ8L2E+ZAIDDxYCHwEFqAEuLi5hbGwgbmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NDYuMDgwNDY3JmxuZz0xNC41MDAwMDAiPmNhY2hlczwvYT4sIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD9sYXQ9NDYuMDgwNDY3JmxuZz0xNC41MDAwMDAmZj0xIj50aGF0IEkgaGF2ZW4ndCBmb3VuZDwvYT5kAgUPFgIfAQV/Li4uYWxsIG5lYXJieSA8YSBocmVmPSJodHRwOi8vd3d3LndheW1hcmtpbmcuY29tL2RpcmVjdG9yeS5hc3B4P2Y9MSZsYXQ9NDYuMDgwNDY3Jmxvbj0xNC41MDAwMDAiPndheW1hcmtzIG9uIFdheW1hcmtpbmcuY29tPC9hPmQCEw8WAh8DaGQCFw9kFgICAQ8PFgQfAQWgBzxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NhY2hpbmcuY29tL21hcC9kZWZhdWx0LmFzcHg/bGF0PTQ2LjA4MDQ3JmxuZz0xNC41IiB0YXJnZXQ9Il9ibGFuayI+R2VvY2FjaGluZy5jb20gTWFwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9xPU4rNDYlYzIlYjArMDQuODI4K0UrMDE0JWMyJWIwKzMwLjAwMCsoR0MzWFg1SikrIiB0YXJnZXQ9Il9ibGFuayI+R29vZ2xlIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5tYXBxdWVzdC5jb20vbWFwcy9tYXAuYWRwP3NlYXJjaHR5cGU9YWRkcmVzcyZmb3JtdHlwZT1sYXRsb25nJmxhdGxvbmd0eXBlPWRlY2ltYWwmbGF0aXR1ZGU9NDYuMDgwNDcmbG9uZ2l0dWRlPTE0LjUmem9vbT0xMCIgdGFyZ2V0PSJfYmxhbmsiPk1hcFF1ZXN0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXBzLnlhaG9vLmNvbS8jbGF0PTQ2LjA4MDQ3Jmxvbj0xNC41Jnpvb209MTYmcT00Ni4wODA0NywxNC41JmNvbmY9MSZzdGFydD0xJm12dD1tJnRyZj0wIiB0YXJnZXQ9Il9ibGFuayI+WWFob28gTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmJpbmcuY29tL21hcHMvZGVmYXVsdC5hc3B4P3Y9MiZsdmw9MTQmc3A9cG9pbnQuNDYuMDgwNDdfMTQuNV9HQzNYWDVKIiB0YXJnZXQ9Il9ibGFuayI+QmluZyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbmN5Y2xlbWFwLm9yZy8/em9vbT0xMiZsYXQ9NDYuMDgwNDcmbG9uPTE0LjUiIHRhcmdldD0iX2JsYW5rIj5PcGVuQ3ljbGVNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy8/bWxhdD00Ni4wODA0NyZtbG9uPTE0LjUmem9vbT0xMiIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5TdHJlZXRNYXA8L2E+PC9saT4fA2dkZAIbD2QWBgIBDxYCHwEFEDc5IExvZ2dlZCBWaXNpdHNkAgcPDxYCHwUFQ34vc2Vlay9jYWNoZV9sb2dib29rLmFzcHg/Z3VpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjVkZAIJDw8WBB8FBT1+L3NlZWsvZ2FsbGVyeS5hc3B4P2d1aWQ9NTFlNDBkZWMtNjI3Mi00ZGFkLTkzNGItZTE3NWRhYWFjMjY1HwEFFlZpZXcgdGhlIEltYWdlIEdhbGxlcnlkZAIqDxYCHwEFBWZhbHNlZAIrDxYCHwEFR2xhdD00Ni4wODA0Njc7IGxuZz0xNC41OyBndWlkPSc1MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjUnOw0KZAIVDxYCHwNoFgICAQ8PZBYCHwsFDHdpZHRoOjEyMHB4O2QCFw9kFgQCAw8WAh8BBQdFbmdsaXNoZAIFDxYCHwYCEhYkZg9kFgICAQ8PFggfBwUFZW4tVVMfCAUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHwloZGQCAQ9kFgICAQ8PFggfBwUFZGUtREUfCAUNU2V0VGVtcExvY2FsZR8BBQdEZXV0c2NoHwloZGQCAg9kFgICAQ8PFggfBwUFZnItRlIfCAUNU2V0VGVtcExvY2FsZR8BBQlGcmFuw6dhaXMfCWhkZAIDD2QWAgIBDw8WCB8HBQVwdC1QVB8IBQ1TZXRUZW1wTG9jYWxlHwEFClBvcnR1Z3XDqnMfCWhkZAIED2QWAgIBDw8WCB8HBQVjcy1DWh8IBQ1TZXRUZW1wTG9jYWxlHwEFCcSMZcWhdGluYR8JaGRkAgUPZBYCAgEPDxYIHwcFBXN2LVNFHwgFDVNldFRlbXBMb2NhbGUfAQUHU3ZlbnNrYR8JaGRkAgYPZBYCAgEPDxYIHwcFBWVzLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUIRXNwYcOxb2wfCWhkZAIHD2QWAgIBDw8WCB8HBQVldC1FRR8IBQ1TZXRUZW1wTG9jYWxlHwEFBUVlc3RpHwloZGQCCA9kFgICAQ8PFggfBwUFaXQtSVQfCAUNU2V0VGVtcExvY2FsZR8BBQhJdGFsaWFubx8JaGRkAgkPZBYCAgEPDxYIHwcFBWVsLUdSHwgFDVNldFRlbXBMb2NhbGUfAQUQzpXOu867zrfOvc65zrrOrB8JaGRkAgoPZBYCAgEPDxYIHwcFBWx2LUxWHwgFDVNldFRlbXBMb2NhbGUfAQUJTGF0dmllxaF1HwloZGQCCw9kFgICAQ8PFggfBwUFbmwtTkwfCAUNU2V0VGVtcExvY2FsZR8BBQpOZWRlcmxhbmRzHwloZGQCDA9kFgICAQ8PFggfBwUFY2EtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQdDYXRhbMOgHwloZGQCDQ9kFgICAQ8PFggfBwUFcGwtUEwfCAUNU2V0VGVtcExvY2FsZR8BBQZQb2xza2kfCWhkZAIOD2QWAgIBDw8WCB8HBQVuYi1OTx8IBQ1TZXRUZW1wTG9jYWxlHwEFDk5vcnNrLCBCb2ttw6VsHwloZGQCDw9kFgICAQ8PFggfBwUFa28tS1IfCAUNU2V0VGVtcExvY2FsZR8BBQntlZzqta3slrQfCWhkZAIQD2QWAgIBDw8WCB8HBQVodS1IVR8IBQ1TZXRUZW1wTG9jYWxlHwEFBk1hZ3lhch8JaGRkAhEPZBYCAgEPDxYIHwcFBXJvLVJPHwgFDVNldFRlbXBMb2NhbGUfAQUIUm9tw6JuxIMfCWhkZAJLDxYCHwEFECZjb3B5OyAyMDAwLTIwMTNkAgMPFgIfAQUrU2VydmVyOiBXRUIxNDsgQnVpbGQ6IFdlYi5Ib3RGaXhfMjAxMzAzMDUuMWRkt3d9B0qvuX8L1Hd6xudtLXs61Aw=" /> +<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTc2NzEwMTEyNw8WAh4EQy5JRCgpWVN5c3RlbS5JbnQ2NCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BzMyMjA2NzIWAmYPZBYGZg9kFgoCBg8WAh4EVGV4dAViPG1ldGEgbmFtZT0iQ29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz5kAgcPFgIfAQVHPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBHcm91bmRzcGVhaywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5kAhkPFgIeBGhyZWYFHX4vY3NzL3Rsbk1hc3RlclNjcmVlbi5jc3M/cj0xZAIaDxYCHwIFFX4vY3NzL3Rsbk1haW4uY3NzP3I9MWQCHw8WAh4HVmlzaWJsZWhkAgEPZBYOAgsPFgIfAWRkAg0PZBYKAgcPFgIfA2cWCAIBDw8WAh4ISW1hZ2VVcmwFTmh0dHA6Ly9pbWcuZ2VvY2FjaGluZy5jb20vdXNlci9hdmF0YXIvZThhOTdhMDUtYTA1MS00ZGE5LWJjOTMtNmE4MzBiODY2YWZmLmpwZ2RkAgMPFgIfAQVsSGVsbG8sIDxhIGhyZWY9Ii9teS9kZWZhdWx0LmFzcHgiIHRpdGxlPSJWaWV3IFByb2ZpbGUgZm9yIEpvU2FNYUphIiBjbGFzcz0iU2lnbmVkSW5Qcm9maWxlTGluayI+Sm9TYU1hSmE8L2E+ZAIFDw8WAh4LTmF2aWdhdGVVcmwFpQFodHRwczovL3d3dy5nZW9jYWNoaW5nLmNvbS9sb2dpbi9kZWZhdWx0LmFzcHg/UkVTRVQ9WSZyZWRpcj1odHRwJTNhJTJmJTJmd3d3Lmdlb2NhY2hpbmcuY29tJTJmc2VlayUyZmNhY2hlX2RldGFpbHMuYXNweCUzZmd1aWQlM2Q1MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjVkZAILDxYCHwEFEDQyNiBDYWNoZXMgRm91bmRkAhEPFgIfA2cWAgINDw8WAh8FBUB+L3RyYWNrL3NlYXJjaC5hc3B4P289MSZ1aWQ9NGQ0MTY0NjEtZDFhNy00Y2M1LThlZTctMzM2YmI5MTBmZWI4ZGQCFw8PFgIfA2dkZAIhDxYCHwNnZAJPD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIeC18hSXRlbUNvdW50AhIWJGYPZBYCAgEPDxYIHg9Db21tYW5kQXJndW1lbnQFBWVuLVVTHgtDb21tYW5kTmFtZQUNU2V0VGVtcExvY2FsZR8BBQdFbmdsaXNoHhBDYXVzZXNWYWxpZGF0aW9uaGRkAgEPZBYCAgEPDxYIHwcFBWRlLURFHwgFDVNldFRlbXBMb2NhbGUfAQUHRGV1dHNjaB8JaGRkAgIPZBYCAgEPDxYIHwcFBWZyLUZSHwgFDVNldFRlbXBMb2NhbGUfAQUJRnJhbsOnYWlzHwloZGQCAw9kFgICAQ8PFggfBwUFcHQtUFQfCAUNU2V0VGVtcExvY2FsZR8BBQpQb3J0dWd1w6pzHwloZGQCBA9kFgICAQ8PFggfBwUFY3MtQ1ofCAUNU2V0VGVtcExvY2FsZR8BBQnEjGXFoXRpbmEfCWhkZAIFD2QWAgIBDw8WCB8HBQVzdi1TRR8IBQ1TZXRUZW1wTG9jYWxlHwEFB1N2ZW5za2EfCWhkZAIGD2QWAgIBDw8WCB8HBQVlcy1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFCEVzcGHDsW9sHwloZGQCBw9kFgICAQ8PFggfBwUFZXQtRUUfCAUNU2V0VGVtcExvY2FsZR8BBQVFZXN0aR8JaGRkAggPZBYCAgEPDxYIHwcFBWl0LUlUHwgFDVNldFRlbXBMb2NhbGUfAQUISXRhbGlhbm8fCWhkZAIJD2QWAgIBDw8WCB8HBQVlbC1HUh8IBQ1TZXRUZW1wTG9jYWxlHwEFEM6VzrvOu863zr3Ouc66zqwfCWhkZAIKD2QWAgIBDw8WCB8HBQVsdi1MVh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUxhdHZpZcWhdR8JaGRkAgsPZBYCAgEPDxYIHwcFBW5sLU5MHwgFDVNldFRlbXBMb2NhbGUfAQUKTmVkZXJsYW5kcx8JaGRkAgwPZBYCAgEPDxYIHwcFBWNhLUVTHwgFDVNldFRlbXBMb2NhbGUfAQUHQ2F0YWzDoB8JaGRkAg0PZBYCAgEPDxYIHwcFBXBsLVBMHwgFDVNldFRlbXBMb2NhbGUfAQUGUG9sc2tpHwloZGQCDg9kFgICAQ8PFggfBwUFbmItTk8fCAUNU2V0VGVtcExvY2FsZR8BBQ5Ob3JzaywgQm9rbcOlbB8JaGRkAg8PZBYCAgEPDxYIHwcFBWtvLUtSHwgFDVNldFRlbXBMb2NhbGUfAQUJ7ZWc6rWt7Ja0HwloZGQCEA9kFgICAQ8PFggfBwUFaHUtSFUfCAUNU2V0VGVtcExvY2FsZR8BBQZNYWd5YXIfCWhkZAIRD2QWAgIBDw8WCB8HBQVyby1STx8IBQ1TZXRUZW1wTG9jYWxlHwEFCFJvbcOibsSDHwloZGQCEQ9kFgICAw8WAh8DaGQCEw8WAh4FY2xhc3MFDHNwYW4tMjQgbGFzdBYCAgEPZBYsAgEPZBYCZg9kFgICAQ8PFgIfAQUHR0MzWFg1SmRkAgIPFgIfAQWmATxhIGhyZWY9Ii9hYm91dC9jYWNoZV90eXBlcy5hc3B4IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkFib3V0IENhY2hlIFR5cGVzIj48aW1nIHNyYz0iL2ltYWdlcy9XcHRUeXBlcy8yLmdpZiIgYWx0PSJUcmFkaXRpb25hbCBDYWNoZSIgdGl0bGU9IlRyYWRpdGlvbmFsIENhY2hlIiAvPjwvYT5kAgYPZBYEAgEPFgIfA2dkAgYPFgIfA2hkAgsPZBYEAgEPFgIfAQUBMWQCBQ8PFgIfBQVEL3NlZWsvY2FjaGVfZmF2b3JpdGVkLmFzcHg/Z3VpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjVkZAINDw8WAh8DaGRkAhAPFgIfA2hkAhEPFgIfA2hkAhIPZBYMAgMPFgIeBXN0eWxlBQ9kaXNwbGF5OmlubGluZTsWAgIBDxYCHwEFG1VUTTogMzNUIEUgNDYxMzQwIE4gNTEwMzEwOWQCDQ8PFgIfBQUzY2RwZi5hc3B4P2d1aWQ9NTFlNDBkZWMtNjI3Mi00ZGFkLTkzNGItZTE3NWRhYWFjMjY1ZGQCDw8PFgIfBQU4Y2RwZi5hc3B4P2d1aWQ9NTFlNDBkZWMtNjI3Mi00ZGFkLTkzNGItZTE3NWRhYWFjMjY1JmxjPTVkZAIRDw8WAh8FBTljZHBmLmFzcHg/Z3VpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjUmbGM9MTBkZAITDw8WBB8FBXpodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1kJmhsPWVuJnNhZGRyPTUyLjIxNjI1LDkuNzE0NDgzIChIb21lIExvY2F0aW9uKSZkYWRkcj00Ni4wODA0NjcsMTQuNShaYXJhJWM1JWExJWM0JThkZW4rVGlyKR4GVGFyZ2V0BQZfYmxhbmtkZAIbD2QWCAIBDw8WBB4JRm9yZUNvbG9yDB4EXyFTQgIEZGQCAw8PFgQfDQwfDgIEZGQCBQ8PFgIfA2cWAh4Hb25jbGljawU7czJncHMoJzUxZTQwZGVjLTYyNzItNGRhZC05MzRiLWUxNzVkYWFhYzI2NScpO3JldHVybiBmYWxzZTtkAgcPDxYCHwNnFgIfDwUgczJwaG9uZSgnR0MzWFg1SicpO3JldHVybiBmYWxzZTtkAhQPFgIfA2dkAhcPZBYIZg8WAh8DaGQCAQ8PFgIfA2hkZAICDw8WAh8DaGRkAgMPFgIfA2hkAhgPZBYCAgMPDxYCHwEFB0RlY3J5cHRkZAIZDxYCHwEFQkJxem54YXYgeG56cmEgYm8gZ3ZlaCAvIEVyemJpciBndXIgZmdiYXIganZwdSB5dnJmIG9yZnZxciBndXIgZW52eWQCHA8WAh8DaGQCHQ8PFgIfA2hkFgICAw8PFgIfA2hkZAIeDxYCHwNnZAIfDxYCHwNoZAIiD2QWAgIDDxYCHglpbm5lcmh0bWwFE0FkdmVydGlzaW5nIHdpdGggVXNkAiYPZBYEAgUPDxYCHwNnZGQCCQ8PFgIfBQU8fi90cmFjay9zZWFyY2guYXNweD93aWQ9NTFlNDBkZWMtNjI3Mi00ZGFkLTkzNGItZTE3NWRhYWFjMjY1ZGQCKA8PFgIfA2dkFgJmDxYCHwYCARYCAgEPZBYCZg8VAgDdATxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vYm9va21hcmtzL3ZpZXcuYXNweD9ndWlkPTE0NTUxNzA4LTBjM2MtNGY5NS05MzQyLTFiYjMxMTllNmVmZSI+Y2dlbyBtb2NrczwvYT48YnIgLz4gYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5nZW9jYWNoaW5nLmNvbS9wcm9maWxlLz9ndWlkPTRkNDE2NDYxLWQxYTctNGNjNS04ZWU3LTMzNmJiOTEwZmViOCI+Sm9TYU1hSmE8L2E+ZAIpD2QWEgIBDw8WAh8DaGRkAgMPZBYCAgEPDxYCHwUFRS9oaWRlL3dwdGxpc3QuYXNweD9SZWZXcHRJRD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjUmRFM9MWRkAgcPDxYGHgZSRFMuSUQLKXVHcm91bmRzcGVhay5XZWIuR1BYLldwdERhdGFTb3VyY2VzLCBUdWNz" /> +<input type="hidden" name="__VIEWSTATE1" id="__VIEWSTATE1" value="b24uQ29tbW9uLkxlZ2FjeSwgVmVyc2lvbj0zLjAuNDgyNi4yMDM4LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwBHgdSV1BULklEKCsEBzMyMjA2NzIfA2hkZAIJDw8WAh8DZ2QWAgIBDw8WBB8FBSgvbWFwL2RlZmF1bHQuYXNweD9sYXQ9NDYuMDgwNDY3JmxuZz0xNC41HwNnZGQCDw8WAh8BBZEBLi4ub3RoZXIgY2FjaGVzIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD91PURhdmlkKyUyNitBamRhIj5oaWRkZW48L2E+IG9yIDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD91bD1EYXZpZCslMjYrQWpkYSI+Zm91bmQ8L2E+IGJ5IHRoaXMgdXNlcmQCEQ9kFgYCAQ8WAh8BBYECLi4ubmVhcmJ5IDxhIGhyZWY9Ii9zZWVrL25lYXJlc3QuYXNweD90eD0zMmJjOTMzMy01ZTUyLTQ5NTctYjBmNi01YTJjOGZjN2IyNTcmbGF0PTQ2LjA4MDQ2NyZsbmc9MTQuNTAwMDAwIj5jYWNoZXMgb2YgdGhpcyB0eXBlPC9hPiwgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P3R4PTMyYmM5MzMzLTVlNTItNDk1Ny1iMGY2LTVhMmM4ZmM3YjI1NyZsYXQ9NDYuMDgwNDY3JmxuZz0xNC41MDAwMDAmZj0xIj50aGF0IEkgaGF2ZW4ndCBmb3VuZDwvYT5kAgMPFgIfAQWoAS4uLmFsbCBuZWFyYnkgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD00Ni4wODA0NjcmbG5nPTE0LjUwMDAwMCI+Y2FjaGVzPC9hPiwgPGEgaHJlZj0iL3NlZWsvbmVhcmVzdC5hc3B4P2xhdD00Ni4wODA0NjcmbG5nPTE0LjUwMDAwMCZmPTEiPnRoYXQgSSBoYXZlbid0IGZvdW5kPC9hPmQCBQ8WAh8BBX8uLi5hbGwgbmVhcmJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cud2F5bWFya2luZy5jb20vZGlyZWN0b3J5LmFzcHg/Zj0xJmxhdD00Ni4wODA0NjcmbG9uPTE0LjUwMDAwMCI+d2F5bWFya3Mgb24gV2F5bWFya2luZy5jb208L2E+ZAITDxYCHwNoZAIXD2QWAgIBDw8WBB8BBaAHPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2FjaGluZy5jb20vbWFwL2RlZmF1bHQuYXNweD9sYXQ9NDYuMDgwNDcmbG5nPTE0LjUiIHRhcmdldD0iX2JsYW5rIj5HZW9jYWNoaW5nLmNvbSBNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP3E9Tis0NiVjMiViMCswNC44MjgrRSswMTQlYzIlYjArMzAuMDAwKyhHQzNYWDVKKSsiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGUgTWFwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm1hcHF1ZXN0LmNvbS9tYXBzL21hcC5hZHA/c2VhcmNodHlwZT1hZGRyZXNzJmZvcm10eXBlPWxhdGxvbmcmbGF0bG9uZ3R5cGU9ZGVjaW1hbCZsYXRpdHVkZT00Ni4wODA0NyZsb25naXR1ZGU9MTQuNSZ6b29tPTEwIiB0YXJnZXQ9Il9ibGFuayI+TWFwUXVlc3Q8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcHMueWFob28uY29tLyNsYXQ9NDYuMDgwNDcmbG9uPTE0LjUmem9vbT0xNiZxPTQ2LjA4MDQ3LDE0LjUmY29uZj0xJnN0YXJ0PTEmbXZ0PW0mdHJmPTAiIHRhcmdldD0iX2JsYW5rIj5ZYWhvbyBNYXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYmluZy5jb20vbWFwcy9kZWZhdWx0LmFzcHg/dj0yJmx2bD0xNCZzcD1wb2ludC40Ni4wODA0N18xNC41X0dDM1hYNUoiIHRhcmdldD0iX2JsYW5rIj5CaW5nIE1hcHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnLz96b29tPTEyJmxhdD00Ni4wODA0NyZsb249MTQuNSIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5DeWNsZU1hcDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnLz9tbGF0PTQ2LjA4MDQ3Jm1sb249MTQuNSZ6b29tPTEyIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcDwvYT48L2xpPh8DZ2RkAhsPZBYGAgEPFgIfAQUQODIgTG9nZ2VkIFZpc2l0c2QCBw8PFgIfBQVDfi9zZWVrL2NhY2hlX2xvZ2Jvb2suYXNweD9ndWlkPTUxZTQwZGVjLTYyNzItNGRhZC05MzRiLWUxNzVkYWFhYzI2NWRkAgkPDxYEHwUFPX4vc2Vlay9nYWxsZXJ5LmFzcHg/Z3VpZD01MWU0MGRlYy02MjcyLTRkYWQtOTM0Yi1lMTc1ZGFhYWMyNjUfAQUiVmlldyB0aGUgSW1hZ2UgR2FsbGVyeSBvZiAzIGltYWdlc2RkAioPFgIfAQUFZmFsc2VkAisPFgIfAQVHbGF0PTQ2LjA4MDQ2NzsgbG5nPTE0LjU7IGd1aWQ9JzUxZTQwZGVjLTYyNzItNGRhZC05MzRiLWUxNzVkYWFhYzI2NSc7DQpkAhUPFgIfA2gWAgIBDw9kFgIfCwUMd2lkdGg6MTYwcHg7ZAIXD2QWBAIDDxYCHwEFB0VuZ2xpc2hkAgUPFgIfBgISFiRmD2QWAgIBDw8WCB8HBQVlbi1VUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0VuZ2xpc2gfCWhkZAIBD2QWAgIBDw8WCB8HBQVkZS1ERR8IBQ1TZXRUZW1wTG9jYWxlHwEFB0RldXRzY2gfCWhkZAICD2QWAgIBDw8WCB8HBQVmci1GUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCUZyYW7Dp2Fpcx8JaGRkAgMPZBYCAgEPDxYIHwcFBXB0LVBUHwgFDVNldFRlbXBMb2NhbGUfAQUKUG9ydHVndcOqcx8JaGRkAgQPZBYCAgEPDxYIHwcFBWNzLUNaHwgFDVNldFRlbXBMb2NhbGUfAQUJxIxlxaF0aW5hHwloZGQCBQ9kFgICAQ8PFggfBwUFc3YtU0UfCAUNU2V0VGVtcExvY2FsZR8BBQdTdmVuc2thHwloZGQCBg9kFgICAQ8PFggfBwUFZXMtRVMfCAUNU2V0VGVtcExvY2FsZR8BBQhFc3Bhw7FvbB8JaGRkAgcPZBYCAgEPDxYIHwcFBWV0LUVFHwgFDVNldFRlbXBMb2NhbGUfAQUFRWVzdGkfCWhkZAIID2QWAgIBDw8WCB8HBQVpdC1JVB8IBQ1TZXRUZW1wTG9jYWxlHwEFCEl0YWxpYW5vHwloZGQCCQ9kFgICAQ8PFggfBwUFZWwtR1IfCAUNU2V0VGVtcExvY2FsZR8BBRDOlc67zrvOt869zrnOus6sHwloZGQCCg9kFgICAQ8PFggfBwUFbHYtTFYfCAUNU2V0VGVtcExvY2FsZR8BBQlMYXR2aWXFoXUfCWhkZAILD2QWAgIBDw8WCB8HBQVubC1OTB8IBQ1TZXRUZW1wTG9jYWxlHwEFCk5lZGVybGFuZHMfCWhkZAIMD2QWAgIBDw8WCB8HBQVjYS1FUx8IBQ1TZXRUZW1wTG9jYWxlHwEFB0NhdGFsw6AfCWhkZAIND2QWAgIBDw8WCB8HBQVwbC1QTB8IBQ1TZXRUZW1wTG9jYWxlHwEFBlBvbHNraR8JaGRkAg4PZBYCAgEPDxYIHwcFBW5iLU5PHwgFDVNldFRlbXBMb2NhbGUfAQUOTm9yc2ssIEJva23DpWwfCWhkZAIPD2QWAgIBDw8WCB8HBQVrby1LUh8IBQ1TZXRUZW1wTG9jYWxlHwEFCe2VnOq1reyWtB8JaGRkAhAPZBYCAgEPDxYIHwcFBWh1LUhVHwgFDVNldFRlbXBMb2NhbGUfAQUGTWFneWFyHwloZGQCEQ9kFgICAQ8PFggfBwUFcm8tUk8fCAUNU2V0VGVtcExvY2FsZR8BBQhSb23Dom7Egx8JaGRkAksPFgIfAQUQJmNvcHk7IDIwMDAtMjAxM2QCAw8WAh8BBSxTZXJ2ZXI6IFdFQjExOyBCdWlsZDogV2ViLlJlbGVhc2VfMjAxMzAzMTkuMWRkhzEcYX7/qkI3PMuti6CYilguPR0=" /> </div> <script type="text/javascript"> @@ -104,13 +104,13 @@ function __doPostBack(eventTarget, eventArgument) { </script> -<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981131264989663" type="text/javascript"></script> +<script src="/WebResource.axd?d=Dh2VENdI9XyWNN0f7DnYfR8WWRCRIzdVqal2y0yjiQ5nC_eHhLchYgnQDHIk0d3RCcSUMVZ36ciRD0qmhXKmeu3S_RE1&t=634981149668642275" type="text/javascript"></script> <script src="/ScriptResource.axd?d=I9_m2Hb1Tv_B0qTMDG8bMbnkNSHUkv5oUaG9-V5NZ8qQ2VFlu60I8y8gfr3vPmZjbiPnu43MOQdFVDeYF-nDAEKBLmyxD3DCTGmes9NNbbvaDEHyEuuRWgccIkK3ik5TI48YGDxjHjqdn-gTK4Fkgd17LGw1&t=ffffffff940d030f" type="text/javascript"></script> <script src="/ScriptResource.axd?d=8vNbe34dAujgZMPnfnacfjeoweX1vHgyns8KlAV4vpGpsZC9Cf3pro__lv8ekBa0NiCgXGMMolzOUNH__lrnEI_qjlNBIAuuLeemtAXV_i6E0QIMZa8nGSYmWGF5nQOJK3rmZzvTxsr2Mh4Ebdba_1ywGLUSH_U_XIe-jzecfRQwwvjZ0&t=ffffffff940d030f" type="text/javascript"></script> -<script src="/ScriptResource.axd?d=Uh_lOa1hKj-GEwMC8mK4Mv8GIgfYnVMts1uBtWWtSfWP9ra-LKOpaRuqVLvjYmMdLsk7f65Q6jxy1BUjZtmsPSNvG8-NJhXvUvOP2jTpjiJF191yJjbg5eBWmdsFWFW4ajIe-GbXr7vIi2DeH9CErdgdlkf-f2cp7FtGEJ7sl3tidpi7pPZumnHP0HO2yu_GIN2h8uN1Q6-df-zQBu0zb4hnxqo1" type="text/javascript"></script> -<script src="/ScriptResource.axd?d=838lRAslTnp-47XptApNagh_Uah2p52BYL-s1NNGNamd8V2w2Ky2y-qvXkjulQaOR_VLt0fkOoUQz2vo2Z8CX871dE4Ct-a7MylewJqtaQNwQglkQO1n6oSTN35sCFRQ7BXBPVoWxpehRPLX8sbeEAqBEHdYAcMHFjMXNlT9nze9HLuJQ15ocJVBJMlooE7lKvmObAIwFsFO9oMNMln41GfoOdjcCiPLIniUHBJavtIsfpZoHZ8IaaJ2mcqJncN2qtyp5jmDkuoZuDm5GuIm88GqPz0_pSJHgC9qf9O6DNr-mOaKWm2PxOwscK8hcP-TM7owfHLYw9rZkopbDljgiCl34QjGBJyaYBGV1VpLdEgR3hGToB-rM6c63T3SLN-7u0qtmvFBds8v5sZUeJLIdtTf9sQCJicp_lnWeZ0bB6SFFMA4I59lZp-wcxcp-MAvNwOsFbo_mUFDpDg-eM316f2OKs0FhopEcLk7jBG2aYLeOA3rVLZuidOCk3cFFBdvo8iogolMkemG1iSC_RSxXWQPLfa0ixp0WTyZPZYv0EQcHB2yShSl6FJxyxoifmdjO489-f3_nXuTeAo4L9mde7FqtE6t3Dj9oqxSDMJXEzU5OAocOzmor7yTRmzx40kgTPetF3I2yMBcbIPFCIfOHd8ua3EkwijkqG2CGEXLBCNr4vyi0" type="text/javascript"></script> +<script src="/ScriptResource.axd?d=smO_g60huRlsbWz1fegS3GqJJP2TQaJZmOtbSzx_ALaWTu6YoRBQ7xbqknFxBjFgvfsh3d6K5K6x8elfekXkRnpMU4madSPoFfy1H3aNWawyjAdnnGc7IwJgxQdqOp6nLjRAnkT3LlqGl7j3RWuqZtOS_Q94Xt3GBIW4mwIlRJvVCUWxrvFldhQIjOAdAjg-pcbpuOo8TMzMZDtu62H4Agf744U1" type="text/javascript"></script> +<script src="/ScriptResource.axd?d=E99XiNjK0biBGiFZgXwF93XUW_CgJvVjhSayq2p6PbMm0TLse1hdoGrLcso76MS5MRG0ieHaF_fOGnt9IIhDkPE62K0tTFHe6Meyvpu3682JqeImfgX_9iCDbXk31L800c6hYmZMNmw4ERVWvEuxaDZfMFTZrsfqHIXbRY_Rnw4Il4nVwePKahHfkDdjhaTVCSajUB26aD6_DaVQJwFhWCDPm68fZgUyRcn-6pCMOSdkHAgEh0RLzMzEXCbdBbMEdcuyaQ-GHljHxRQtY0s5-jZ8tPf73UgsrS1RX-Fzu_k-_31s-mUe0XBQD1hF5wEAQKtkQYTQL2XHikzB8tCTLxQthW5DiERyv0x5Fhpy1hf_tah8NbFIiZCM54BV0gBRUAaicWNZhs97gmXgYrwDX2FUWnGKFFcqSh1WWOw1rXjW7a4yv7bSgWqDZfA3ulJEHGeuBUsjY0BA0AtefLkkXvQRBLYoJKzCEjv51IDClsbakiRO4dePPsh6mL_E4Jq0hseSMIR97Sylr63OAy7zN0Eq4pxeJKN72I5YSyscfgT5Mt6AWJgOp5ilEPFlahapXOp1gt74_Ya_G_Na63aXBcg19iM1ba3lB2Zgj8As2G6BKBuk3O4vjKB2vmffoIRxiJwiw18E1KOPtoQz0SIuYeOMBDLvJ_BplG2HbvjWIApueXCB0" type="text/javascript"></script> <script src="js/cachedetails.js" type="text/javascript"></script> <script src="../js/latlng.js" type="text/javascript"></script> <script type="text/javascript"> @@ -151,11 +151,11 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet </p> <p class="SignedInText"> <strong> - Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</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%3fwp%3dGC3XX5J%26Submit6%3dGo">Sign Out</a>)<br /> + Hello, <a href="/my/default.aspx" title="View Profile for JoSaMaJa" class="SignedInProfileLink">JoSaMaJa</a></strong> (<a id="ctl00_hlSignOut" accesskey="s" title="Sign Out" href="https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2fseek%2fcache_details.aspx%3fguid%3d51e40dec-6272-4dad-934b-e175daaac265">Sign Out</a>)<br /> <span id="ctl00_litPMLevel">Premium Member</span> <strong style="display: block"> - 419 Caches Found</strong> + 426 Caches Found</strong> </p> </div> @@ -673,14 +673,14 @@ PRINESI SVOJE PISALO / BRING YOUR OWN PEN<br /></span> <script type='text/javascript'> googletag.cmd.push(function() {{ -googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_32925fc2-f8e5-433a-aaef-7caee5114f34').addService(googletag.pubads()); +googletag.defineSlot('/1011121/cache_details_120x240', [120, 240], 'div_35364ae2-05f1-4494-9913-f8f938f51a56').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); }}); </script> -<div id='div_32925fc2-f8e5-433a-aaef-7caee5114f34'> +<div id='div_35364ae2-05f1-4494-9913-f8f938f51a56'> <script type='text/javascript'> -googletag.cmd.push(function() { googletag.display('div_32925fc2-f8e5-433a-aaef-7caee5114f34'); }); +googletag.cmd.push(function() { googletag.display('div_35364ae2-05f1-4494-9913-f8f938f51a56'); }); </script> </div> @@ -726,6 +726,31 @@ googletag.cmd.push(function() { googletag.display('div_32925fc2-f8e5-433a-aaef-7 +<div class="CacheDetailNavigationWidget"> + + <h3 class="WidgetHeader">My Bookmark Lists</h3> + <div class="WidgetBody"> + + + <ul class="BookmarkList"> + + <li class=''> + <a href="http://www.geocaching.com/bookmarks/view.aspx?guid=14551708-0c3c-4f95-9342-1bb3119e6efe">cgeo mocks</a><br /> by <a href="http://www.geocaching.com/profile/?guid=4d416461-d1a7-4cc5-8ee7-336bb910feb8">JoSaMaJa</a> + </li> + + </ul> + + <p class="NoBottomSpacing"> + + </p> + + </div> + + +</div> + + + </div> @@ -806,15 +831,15 @@ googletag.cmd.push(function() { googletag.display('div_32925fc2-f8e5-433a-aaef-7 <div class="InformationWidget Clear"> <h3> - 79 Logged Visits</h3> + 82 Logged Visits</h3> <div class="EncryptDecrypt"> <a href="#" class="decrypt-link"> Decrypt </a> </div> - <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 74 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 1 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 2 <img src="/images/logtypes/25.png" alt="Retract Listing" title="Retract Listing" /> 1 <img src="/images/logtypes/45.png" alt="Needs Maintenance" title="Needs Maintenance" /> 1 </p></span> + <span id="ctl00_ContentBody_lblFindCounts"><p class="LogTotals"><img src="/images/logtypes/2.png" alt="Found it" title="Found it" /> 77 <img src="/images/logtypes/4.png" alt="Write note" title="Write note" /> 1 <img src="/images/logtypes/24.png" alt="Publish Listing" title="Publish Listing" /> 2 <img src="/images/logtypes/25.png" alt="Retract Listing" title="Retract Listing" /> 1 <img src="/images/logtypes/45.png" alt="Needs Maintenance" title="Needs Maintenance" /> 1 </p></span> <p class="HalfLeft"> - <a id="ctl00_ContentBody_uxLogbookLink" href="cache_logbook.aspx?guid=51e40dec-6272-4dad-934b-e175daaac265">View Logbook</a> | <a id="ctl00_ContentBody_uxGalleryImagesLink" DisplayFormatPlural="View the Image Gallery of {0:#,###} images" DisplayFormatSingular="View the Image Gallery" href="gallery.aspx?guid=51e40dec-6272-4dad-934b-e175daaac265">View the Image Gallery</a> + <a id="ctl00_ContentBody_uxLogbookLink" href="cache_logbook.aspx?guid=51e40dec-6272-4dad-934b-e175daaac265">View Logbook</a> | <a id="ctl00_ContentBody_uxGalleryImagesLink" DisplayFormatPlural="View the Image Gallery of {0:#,###} images" DisplayFormatSingular="View the Image Gallery" href="gallery.aspx?guid=51e40dec-6272-4dad-934b-e175daaac265">View the Image Gallery of 3 images</a> </p> <p class="NoBottomSpacing AlignRight"> <span class="Warning">**Warning!</span> <a href="/about/glossary.aspx#spoiler" title="Spoilers">Spoilers</a> may be included in the descriptions or links. @@ -843,7 +868,7 @@ googletag.cmd.push(function() { googletag.display('div_32925fc2-f8e5-433a-aaef-7 </div> <p> <small> - Current Time: <time datetime="2013-03-08T11:20:52Z">03/08/2013 11:20:52 (UTC-08:00) Pacific Time (US & Canada) (19:20 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2013-02-02T12:26:38Z">2013-02-02T12:26:38Z</time> on 02/02/2013 04:26:38 (UTC-08:00) Pacific Time (US & Canada) (12:26 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum + Current Time: <time datetime="2013-03-27T04:36:03Z">03/27/2013 04:36:03 Pacific Daylight Time (11:36 GMT)</time><br/>Last Updated: <time class="timeago" datetime="2013-03-16T18:38:54Z">2013-03-16T18:38:54Z</time> on 03/16/2013 11:38:54 Pacific Daylight Time (18:38 GMT) <br/>Rendered From:Unknown<br />Coordinates are in the WGS84 datum </small> </p> <div id="topScroll" class="TopScroll" style="display:none;"> @@ -1784,9 +1809,9 @@ var userDefinedCoords = {"status":"fail","data":{"isUserDefined":false,"oldLatLn mapLatLng = {"lat":46.08047,"lng":14.5,"type":2,"name":"Zaraščen Tir"}; var ccConversions = [{"t":"Decimal","k":"DD","d":"WGS84","v":"46.080467, 014.500000"},{"t":"DDD MM SS.SSS","k":"DMS","d":"WGS84","v":"N 46° 04' 49.681\" E 014° 30' 00.000\""},{"t":"UTM","k":"UTM","d":"WGS84","v":"33T E 461340 N 5103109"}]; userInfo = {ID: 4793174}; -userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4PZHXTIASIYWFYVKCUOKL22KFA6QAHSYC5LPKUTBIZSQGHR7TKGQNSHYUVIO2QXLWNJMJ7YUVJZ3X5A'; +userToken = '4OB3GFHLRR3CGMZFUAPD6CWPE24ZHP6Q7KCBEDNYY5CUNWNQIA32GZPVPFMH6IGAEYKVNNSFLMQ7BBGFDKQBT3BZGZBYKVQ4H5BWKD6MVBKYBTM627XPOUSUP6U4JF7NKKEOYJ4A6LEG2T5B6MG5AMMFOS27KNE4U2BAU4PZHXTIASIYWFYVKCUOKL22KFA6QAHSYC5LPKUTBGNPWYZGNG62UST5ZUKNLJN57H3YYHQOKWQGEDPA'; includeAvatars = true; -initalLogs = {"status":"success", "data": [{"LogID":291786242,"CacheID":3220672,"LogGuid":"17a2f63c-5e61-433a-96a0-10f257502719","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"it will be repaired a.s.a.p.","Created":"2013-02-02","Visited":"2013-02-02","UserName":"David & Ajda","MembershipLevel":3,"AccountID":5991956,"AccountGuid":"7b1ed479-e378-4cfd-a5b4-3bd47bab619f","Email":"","AvatarImage":"0bafa82b-6510-4903-bb6a-68dd455eb971.jpg","GeocacheFindCount":157,"GeocacheHideCount":14,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":290898328,"CacheID":3220672,"LogGuid":"1f560d5b-84fb-4e55-95e2-11b9b191a88a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Needs Maintenance","LogTypeImage":"45.png","LogText":"Danes smo želeli odložiti TB-ja, pa smo našli zakladek popolnoma premocen. Pokrov škatlice je pocen in zakladek je potreben skrbnikovega servisa.","Created":"2013-01-26","Visited":"2013-01-26","UserName":"Speluzek","MembershipLevel":1,"AccountID":6288657,"AccountGuid":"4fab190c-2dfe-451c-8e3f-124925d4fc17","Email":"","AvatarImage":"64a0b2d9-c112-476d-9ecc-f6798e0ab3db.jpg","GeocacheFindCount":126,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":287805685,"CacheID":3220672,"LogGuid":"0dcb5b57-e9be-4d07-83b8-99b310e4ea51","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Kul skrito. Edin cist je premocen... :/","Created":"2013-01-05","Visited":"2013-01-05","UserName":"kukimonster","MembershipLevel":1,"AccountID":6153796,"AccountGuid":"c1c7b6c4-7780-49f7-bdce-177624cebc41","Email":"","AvatarImage":"8cc5a445-6e3c-4f49-b5a1-24c4a402523c.jpg","GeocacheFindCount":28,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":285180390,"CacheID":3220672,"LogGuid":"00877bdf-2318-4def-9cb1-a87e81ab2d87","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"TFTC! #180","Created":"2012-12-24","Visited":"2012-12-24","UserName":"Marsovci","MembershipLevel":1,"AccountID":5274309,"AccountGuid":"8690463c-93b7-4861-bf73-e66ac9bd8fdc","Email":"","AvatarImage":"2cd6c202-efd6-449f-bdbe-005f51bcad4b.jpg","GeocacheFindCount":208,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":285038477,"CacheID":3220672,"LogGuid":"97729bf6-e94f-484e-a2bf-79e8b2b11f7f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"tftc tnln","Created":"2012-12-23","Visited":"2012-12-23","UserName":"misica","MembershipLevel":1,"AccountID":5838221,"AccountGuid":"c06519b0-4416-482f-ae5a-9095d99ce3d0","Email":"","AvatarImage":"","GeocacheFindCount":214,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":291060633,"CacheID":3220672,"LogGuid":"9d56bebd-9eaa-4078-9b8e-302ea5bd3a0f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"as it turns out, the parking can get difficult in ljubljana :D we parked a bit away, walked back towards it (luckily maki didn't go after my idea or we woould be walking for some time :D:D)<br />it was freezing cold so we tried to rush it... once we were close we started looking at all the usual suspects but couldn't find it... then we turned to the most usual one it was a hit :D<br />nice one, i like the idea of an abandoned railway :D<br /><br />tftc","Created":"2013-01-27","Visited":"2012-12-22","UserName":"heroj_ulice","MembershipLevel":3,"AccountID":3633527,"AccountGuid":"cc0277a5-d83f-4046-9d46-f74c71cce655","Email":"","AvatarImage":"76551c2f-e9eb-4502-b49d-8e2b8e5da7d0.jpg","GeocacheFindCount":819,"GeocacheHideCount":28,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285660405,"CacheID":3220672,"LogGuid":"6fc86bfd-b85c-40de-8d67-ce08485bf4ad","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Our cache pick up on the north continues :) we had to kill time until the parking in the center becomes free so we picked an area and went for it. <br />As we were approaching the site, there were gates and we were confused should have we come from a different side but than the lonely track appeared :D<br />I looked at the hiding spot but thought it couldn't fit there...I was wrong :)<br />TFTC","Created":"2012-12-27","Visited":"2012-12-22","UserName":"maki433","MembershipLevel":3,"AccountID":3854944,"AccountGuid":"b543d9c6-b02c-4f6d-8a49-32cf5c01509e","Email":"","AvatarImage":"7d3543ee-c029-4dc3-bb1f-0bd4527a53c8.jpg","GeocacheFindCount":755,"GeocacheHideCount":18,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284924916,"CacheID":3220672,"LogGuid":"0e8f0317-bb4b-4bf4-a005-338860773b5b","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Na pot sem se podal skupaj z mojimi prijatelji. Na jutranjem srecanju smo bili prikrajšani za spektakularen konec sveta, zato smo se morali potolažiti s številnimi novimi najdbami.<br /><br />TFTC!","Created":"2012-12-22","Visited":"2012-12-21","UserName":"Vanja&Valdi","MembershipLevel":3,"AccountID":126472,"AccountGuid":"2338a519-1454-43ce-b31c-a29b7994888e","Email":"","AvatarImage":"a2501c6b-7c4b-4749-9f7c-db97e3aea6c9.jpg","GeocacheFindCount":1929,"GeocacheHideCount":8,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284825582,"CacheID":3220672,"LogGuid":"7279e0d8-c908-456e-8f62-db5e8012cfad","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Na dan,ko naj bi bil konec sveta,sem se v prijetni druzbi 5r,lagosi in Vanja&Valdi odpravili v prestolnico kjer naj bi docakali skupen konec sveta z nasimi somisljeniki.Ko je prisel cas ki smo ga cakali smo videli da smo se vsi na kupu in da bomo se naprej lahko uzivali v nasem hobiju ,smo se kar podvizali in zaceli turnejo po se neodkritih skatlicah .Hvala za prijetno druzbo in se kdaj.HZZ?<br /><br />This entry was edited by AADT on Saturday, 22 December 2012 at 15:33:00 UTC.","Created":"2012-12-21","Visited":"2012-12-21","UserName":"AADT","MembershipLevel":3,"AccountID":3214400,"AccountGuid":"cede632d-87a9-47d0-a6a2-68a5100faa30","Email":"","AvatarImage":"7f7d67eb-0bfe-4e34-83db-31c9d0767979.png","GeocacheFindCount":1269,"GeocacheHideCount":13,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284813482,"CacheID":3220672,"LogGuid":"5f8a97b1-3007-43f5-83e8-32b3642434f8","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Na dan, ko naj bi bilo konec sveta, smo se v družbi predstavnikov ekip lagosi, AADT ter Vanja&Valdi, odpravili na geocachersko ekspedicijo v te kraje: da doživimo konec sveta pri svojem najljubšem hobiju <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Prav zanimiv koticek Ljubljane <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" /><br />Po kratkem sprehodu od ceste, smo škatlico našli v trenutku, v njej pa - BLJAK: vsebina razmocena do te mere, da smo opustili poskus vpisovanja v tisto, kar je nekoc bilo logbook.<br />Donirali smo \"emergency\" mikro container s suhim logbookom, tako da bo za nekaj casa verjetno možen normalen vpis.<br />Lastniku vsekakor toplo priporocamo obisk zakladka in malo popravila!<br /><br />TFTC<br />5r & family<br /><br /><br />","Created":"2012-12-21","Visited":"2012-12-21","UserName":"5r","MembershipLevel":3,"AccountID":1876775,"AccountGuid":"5122b2fe-bc8f-4049-a5bc-1c2bf730857c","Email":"","AvatarImage":"98edc335-f8ce-4ec9-818b-9ee7bc4a14dc.jpg","GeocacheFindCount":3374,"GeocacheHideCount":21,"ChallengesCompleted":6,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284264670,"CacheID":3220672,"LogGuid":"5374daff-1731-4690-b124-522d5764b469","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nedeljski sprehod po tirih nas je pripeljal do tega zakladka. Vsebina je že mokra, tako da bi svetoval vsaj še vrecko za okoli škatlice. <br /><br />Mnogo mirnejše kot pa prek delovnih dni. Hvala zaklad.","Created":"2012-12-16","Visited":"2012-12-16","UserName":"Cvickovi","MembershipLevel":1,"AccountID":6415308,"AccountGuid":"42007102-c603-4415-8f6a-af4885d93c0e","Email":"","AvatarImage":"0b864934-3b76-4f4e-860e-72b48774fc38.jpg","GeocacheFindCount":90,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":282928300,"CacheID":3220672,"LogGuid":"04183b59-fd84-4880-9195-edac89ffecd6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zakladek nas je pripeljal v zanimiv industrijski del Ljubljane. V okolici smo bili že velikokrat, a tale košcek \"zemljišca\" nam je bil neznan. Sprehod je bil zanimiv in v bližini je dišalo - po plinu. Tu si verjetno res ni najbolje vzeti pavzo za cigareto <img src=\"/images/icons/icon_smile_wink.gif\" border=\"0\" align=\"middle\" />. Se pa seveda lahko poišce zakladek. <br /><br />Bunkeljni na okoliških delovišcih so usmerjeni v izvedbo svojih del in nalog, tako da geosledcem pristop ne bi smel biti problematicen - No, vsaj nam ni povzrocal težav. V bližini je sicer varnostna kamera a mislimo, da je zakladek dovolj dalec, da se varnostnikom na drugi strani ne prižigajo rdece lucke.<br /><br />Škatlico smo našli brez vecjih težav a zapis naše najdbe v knjižico obiskov je bil nekoliko težaven. Listki so namrec popolnoma premoceni! Bilo bi dobro, da bi lastniki opravili vzdrževalna dela!!!<br /><br />Hvala za zakladek!<br />---------------------------<br />This cache will take you to a lost place in the industrial part of Ljubljana. It si an interesting experience<br /><br />The box is wet and log book is soaked. Needs maintenance.<br /><br />TFTC!","Created":"2012-12-05","Visited":"2012-12-02","UserName":"sonček","MembershipLevel":3,"AccountID":312137,"AccountGuid":"658a025e-b36f-417c-b929-6ed7bf85b790","Email":"","AvatarImage":"11e42460-b659-47b2-a22f-79d6798b92c7.jpg","GeocacheFindCount":1724,"GeocacheHideCount":12,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":282298908,"CacheID":3220672,"LogGuid":"9cefe38c-acfe-4512-a394-dd9d08bfb32c","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Našli po hitrem postopku.","Created":"2012-12-01","Visited":"2012-12-01","UserName":"tomsetki","MembershipLevel":1,"AccountID":5435784,"AccountGuid":"653835a9-cb32-4792-b226-fd2667163c8e","Email":"","AvatarImage":"4c5d43fd-cbfd-4d8e-adad-6de55fc43e47.jpg","GeocacheFindCount":523,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":281522369,"CacheID":3220672,"LogGuid":"c290e3ef-7354-49d7-b885-f596519a08fb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zanimiva, kolesarska, \"blatna\" jesenska sobota je minila v duhu geolova, 17 najdenih zakladov in spoznavanje kotickov Ljubljane. Hitro najden tir, zakladek pa me je malo begal, najprej sem morala odstraniti tone listja, ker so koordinate nekoliko mimo, nato sem iskala kamen...a je bilo nato ocitno, saj sem že prej gledala kupcek, he, he. HZZ<br />YakominiYi","Created":"2012-11-25","Visited":"2012-11-24","UserName":"YakominiYi","MembershipLevel":3,"AccountID":4304234,"AccountGuid":"e785ce97-a1b3-4aae-8bc0-28b43186be31","Email":"","AvatarImage":"c13b9ef5-0c39-4dfa-a94a-a1335ca0ff19.jpg","GeocacheFindCount":853,"GeocacheHideCount":56,"ChallengesCompleted":16,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":280713139,"CacheID":3220672,"LogGuid":"b22275bb-798b-4010-9293-8f8eca9ff941","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Uspelo mi je izbrati pravi dostop in do kecka sem pristopil brez težav. Na sreco v dopoldanskem casu ni bilo zaposlenih na dvorišcih levo ali desno, verjetno je bilo premraz za cikanje in kafetkanje. tako sem lahko v miru opravil svoje...<br />Na lov sem šel brez pisala, pa tudi v zakladku ni nobenega. Na sreco je telefon ovekovecil mojo najdbo <img src=\"/images/icons/icon_smile_cool.gif\" border=\"0\" align=\"middle\" />","Created":"2012-11-20","Visited":"2012-11-20","UserName":"ATA ORU","MembershipLevel":1,"AccountID":4495291,"AccountGuid":"5e4c6b0d-c81f-4519-a5cb-0b6fb02f764b","Email":"","AvatarImage":"f24d91bd-2c43-4e50-aa29-b263ed988be2.jpg","GeocacheFindCount":865,"GeocacheHideCount":0,"ChallengesCompleted":14,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[{"ImageID":16223026,"ImageGuid":"bfaea6a8-502d-4095-9e84-6888e33c920a","Name":"2012-11-20 09.13.39","Descr":"","FileName":"bfaea6a8-502d-4095-9e84-6888e33c920a.jpg","Created":"2012-11-20","LogID":280713139,"CacheID":3220672,"ImageUrl":null}]},{"LogID":280243063,"CacheID":3220672,"LogGuid":"6ddcafde-f5e6-4e79-9915-341f154bb2aa","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"TFTC","Created":"2012-11-18","Visited":"2012-11-18","UserName":"AndyDee","MembershipLevel":1,"AccountID":5069819,"AccountGuid":"ff6c96c4-8972-46f9-849f-89766e2fc2eb","Email":"","AvatarImage":"a79d055f-6449-498d-8441-3bf81650209e.jpg","GeocacheFindCount":125,"GeocacheHideCount":3,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":280233178,"CacheID":3220672,"LogGuid":"71462f9c-73cd-4290-a540-25ce5ccb9ac1","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Logbook je bil kar precej namocen, ampak je vpis vseeno vspel, HZZ.","Created":"2012-11-18","Visited":"2012-11-18","UserName":"rain.si","MembershipLevel":3,"AccountID":4209103,"AccountGuid":"85668cec-e8af-4a66-882a-1cea1639ac02","Email":"","AvatarImage":"d07ac7bb-d91d-4217-b630-d63c09c247cd.jpg","GeocacheFindCount":125,"GeocacheHideCount":5,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":280210122,"CacheID":3220672,"LogGuid":"523b8ff9-d3f2-440e-8624-e207df957028","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"TFTC :) T & J <br />in: TB<br />out: smrkec","Created":"2012-11-18","Visited":"2012-11-18","UserName":"GeoCachingSLO","MembershipLevel":1,"AccountID":6088292,"AccountGuid":"3f88e53f-3b03-4a88-b054-c8cd91fb0afd","Email":"","AvatarImage":"7f6b598c-7514-48f1-8f01-8e600710bd2d.jpg","GeocacheFindCount":28,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":279931139,"CacheID":3220672,"LogGuid":"9604d087-268d-46f0-b52f-6fadfaadfc1e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Malce sem se vozil naokoli, da sem našel pravi pristop...<br />Vmes mi je še skoraj nov mobitel padel na tla iz kolesa in staknil lepo odgrnino...vsaj zakladek sem našel <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" />","Created":"2012-11-17","Visited":"2012-11-17","UserName":"Vrhobir","MembershipLevel":1,"AccountID":5222683,"AccountGuid":"062b9547-7973-4438-9ff6-ddecdd117c3f","Email":"","AvatarImage":"","GeocacheFindCount":222,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":281037984,"CacheID":3220672,"LogGuid":"064708a3-2727-44a4-a250-c5c44ed74c12","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Pr' tolk kamna je blo težko najdt pravega :)","Created":"2012-11-23","Visited":"2012-11-14","UserName":"alenka12","MembershipLevel":1,"AccountID":6546465,"AccountGuid":"dfa1727c-ab02-4529-9cf3-04781671e0d2","Email":"","AvatarImage":"","GeocacheFindCount":62,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":279501752,"CacheID":3220672,"LogGuid":"4fcd61ba-0090-46d9-b7cf-0682d7f21b49","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ce sem pred tem našel 3 zaklade takoj, pa mi tukaj ni šlo najhitreje, pa vseeno v 10ih minutah. HZZ","Created":"2012-11-14","Visited":"2012-11-14","UserName":"Simon07","MembershipLevel":3,"AccountID":4074208,"AccountGuid":"88adea12-ae5a-471b-97b2-413e6c4e5433","Email":"","AvatarImage":"178d4ebe-bb91-4c26-a4ab-0a81e7ea7cdc.jpg","GeocacheFindCount":744,"GeocacheHideCount":13,"ChallengesCompleted":22,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":278635825,"CacheID":3220672,"LogGuid":"e4134282-8ea2-4324-b5d6-afdcf662acc8","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Kar s kolesom po slepem tiru do zakladka! :)<br />HZZ","Created":"2012-11-10","Visited":"2012-11-10","UserName":"strgacom","MembershipLevel":1,"AccountID":5106851,"AccountGuid":"7aa5ff75-478e-441a-9c2c-146ba7445777","Email":"","AvatarImage":"731d212e-0986-4081-a3e9-166bd77a7215.jpg","GeocacheFindCount":422,"GeocacheHideCount":4,"ChallengesCompleted":24,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":278635402,"CacheID":3220672,"LogGuid":"9624533c-5edc-445e-ac9d-0698cc937816","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Sploh nisem vedla, da je tukaj se en tir, poleg ocitnega :-).<br />HZZ","Created":"2012-11-10","Visited":"2012-11-10","UserName":"str82barby","MembershipLevel":1,"AccountID":6023888,"AccountGuid":"c60d7b09-831a-42a1-b965-df2d004ce0b0","Email":"","AvatarImage":"7767e510-ff52-4a4b-a104-73bb3bf33d9b.jpg","GeocacheFindCount":298,"GeocacheHideCount":3,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":278619491,"CacheID":3220672,"LogGuid":"264118b6-aaf9-42fe-975f-6df477442b07","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Danes smo se sprehodili in našli....","Created":"2012-11-10","Visited":"2012-11-10","UserName":"AfnGuncarji","MembershipLevel":1,"AccountID":6325823,"AccountGuid":"dc951c8c-94da-4db3-af7b-9b3ff8d0f96d","Email":"","AvatarImage":"7349fbca-0f34-4a9c-b187-24e6366cd130.jpg","GeocacheFindCount":20,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":278382644,"CacheID":3220672,"LogGuid":"45d0864d-6514-4554-97a1-c20b3077a289","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Wasn't to hard, nice walk on the railroad. ;-)","Created":"2012-11-08","Visited":"2012-11-08","UserName":"Heybobby5","MembershipLevel":1,"AccountID":5595016,"AccountGuid":"2ea83205-4232-4a17-aff6-38e1adeb29e0","Email":"","AvatarImage":"","GeocacheFindCount":242,"GeocacheHideCount":2,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 79, "rows": 79 } }; +initalLogs = {"status":"success", "data": [{"LogID":298864285,"CacheID":3220672,"LogGuid":"c519c9ae-99e5-42f2-af60-273b4b3ad8a5","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Interesting location. The box could be found quickly. TFTC.","Created":"2013-03-16","Visited":"2013-03-16","UserName":"Lear61","MembershipLevel":3,"AccountID":4121426,"AccountGuid":"ecff7e04-2437-4b2b-ad6f-b76fc6ae96d2","Email":"","AvatarImage":"d6ebfb07-b3df-41d5-9d44-2d92c919002a.jpg","GeocacheFindCount":2285,"GeocacheHideCount":23,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":298673669,"CacheID":3220672,"LogGuid":"4c28851e-2d6d-41e6-875a-1516ffa06b9f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"easy to find, but cache need new box, because many water was inside box,","Created":"2013-03-15","Visited":"2013-03-15","UserName":"macor2008a","MembershipLevel":1,"AccountID":2505786,"AccountGuid":"cfcdedbb-bdce-449c-aaa2-23b76c86794b","Email":"","AvatarImage":"2571f9f9-6d78-4151-a4a3-95a3875e1c11.jpg","GeocacheFindCount":65,"GeocacheHideCount":0,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[{"ImageID":17052072,"ImageGuid":"7f521565-33ec-46a7-bb96-c3edf82c8bd5","Name":"2013-03-15 18.03.52","Descr":"","FileName":"7f521565-33ec-46a7-bb96-c3edf82c8bd5.jpg","Created":"2013-03-15","LogID":298673669,"CacheID":3220672,"ImageUrl":null},{"ImageID":17052082,"ImageGuid":"1928471f-6d9a-48f0-9bc4-fc594d795a3e","Name":"2013-03-15 18.04.53","Descr":"","FileName":"1928471f-6d9a-48f0-9bc4-fc594d795a3e.jpg","Created":"2013-03-15","LogID":298673669,"CacheID":3220672,"ImageUrl":null}]},{"LogID":297698994,"CacheID":3220672,"LogGuid":"0c91866b-0bd3-4cf5-aa80-a7d2e5159994","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"#32<br /><br />Hitra nočna najdba. Kot so napisali predhodniki - vsebina je premočena, logbook je pa nekdo očitno zamenjal, tako da je suh...<br /><br />HZZ","Created":"2013-03-09","Visited":"2013-03-09","UserName":"Ridler & Cmokica","MembershipLevel":1,"AccountID":5103702,"AccountGuid":"01676f06-5a97-41dc-b496-adf36ab69e93","Email":"","AvatarImage":"5a209b32-da06-447d-a523-5295d2c61b6e.png","GeocacheFindCount":70,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":291786242,"CacheID":3220672,"LogGuid":"17a2f63c-5e61-433a-96a0-10f257502719","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Write note","LogTypeImage":"4.png","LogText":"it will be repaired a.s.a.p.","Created":"2013-02-02","Visited":"2013-02-02","UserName":"David & Ajda","MembershipLevel":3,"AccountID":5991956,"AccountGuid":"7b1ed479-e378-4cfd-a5b4-3bd47bab619f","Email":"","AvatarImage":"0bafa82b-6510-4903-bb6a-68dd455eb971.jpg","GeocacheFindCount":157,"GeocacheHideCount":14,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":290898328,"CacheID":3220672,"LogGuid":"1f560d5b-84fb-4e55-95e2-11b9b191a88a","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Needs Maintenance","LogTypeImage":"45.png","LogText":"Danes smo želeli odložiti TB-ja, pa smo našli zakladek popolnoma premocen. Pokrov škatlice je pocen in zakladek je potreben skrbnikovega servisa.","Created":"2013-01-26","Visited":"2013-01-26","UserName":"Speluzek","MembershipLevel":3,"AccountID":6288657,"AccountGuid":"4fab190c-2dfe-451c-8e3f-124925d4fc17","Email":"","AvatarImage":"64a0b2d9-c112-476d-9ecc-f6798e0ab3db.jpg","GeocacheFindCount":127,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":287805685,"CacheID":3220672,"LogGuid":"0dcb5b57-e9be-4d07-83b8-99b310e4ea51","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Kul skrito. Edin cist je premocen... :/","Created":"2013-01-05","Visited":"2013-01-05","UserName":"kukimonster","MembershipLevel":1,"AccountID":6153796,"AccountGuid":"c1c7b6c4-7780-49f7-bdce-177624cebc41","Email":"","AvatarImage":"8cc5a445-6e3c-4f49-b5a1-24c4a402523c.jpg","GeocacheFindCount":28,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":285180390,"CacheID":3220672,"LogGuid":"00877bdf-2318-4def-9cb1-a87e81ab2d87","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"TFTC! #180","Created":"2012-12-24","Visited":"2012-12-24","UserName":"Marsovci","MembershipLevel":3,"AccountID":5274309,"AccountGuid":"8690463c-93b7-4861-bf73-e66ac9bd8fdc","Email":"","AvatarImage":"2cd6c202-efd6-449f-bdbe-005f51bcad4b.jpg","GeocacheFindCount":210,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285038477,"CacheID":3220672,"LogGuid":"97729bf6-e94f-484e-a2bf-79e8b2b11f7f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"tftc tnln","Created":"2012-12-23","Visited":"2012-12-23","UserName":"misica","MembershipLevel":1,"AccountID":5838221,"AccountGuid":"c06519b0-4416-482f-ae5a-9095d99ce3d0","Email":"","AvatarImage":"","GeocacheFindCount":220,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":291060633,"CacheID":3220672,"LogGuid":"9d56bebd-9eaa-4078-9b8e-302ea5bd3a0f","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"as it turns out, the parking can get difficult in ljubljana :D we parked a bit away, walked back towards it (luckily maki didn't go after my idea or we woould be walking for some time :D:D)<br />it was freezing cold so we tried to rush it... once we were close we started looking at all the usual suspects but couldn't find it... then we turned to the most usual one it was a hit :D<br />nice one, i like the idea of an abandoned railway :D<br /><br />tftc","Created":"2013-01-27","Visited":"2012-12-22","UserName":"heroj_ulice","MembershipLevel":3,"AccountID":3633527,"AccountGuid":"cc0277a5-d83f-4046-9d46-f74c71cce655","Email":"","AvatarImage":"76551c2f-e9eb-4502-b49d-8e2b8e5da7d0.jpg","GeocacheFindCount":822,"GeocacheHideCount":29,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":285660405,"CacheID":3220672,"LogGuid":"6fc86bfd-b85c-40de-8d67-ce08485bf4ad","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Our cache pick up on the north continues :) we had to kill time until the parking in the center becomes free so we picked an area and went for it. <br />As we were approaching the site, there were gates and we were confused should have we come from a different side but than the lonely track appeared :D<br />I looked at the hiding spot but thought it couldn't fit there...I was wrong :)<br />TFTC","Created":"2012-12-27","Visited":"2012-12-22","UserName":"maki433","MembershipLevel":3,"AccountID":3854944,"AccountGuid":"b543d9c6-b02c-4f6d-8a49-32cf5c01509e","Email":"","AvatarImage":"7d3543ee-c029-4dc3-bb1f-0bd4527a53c8.jpg","GeocacheFindCount":816,"GeocacheHideCount":18,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284924916,"CacheID":3220672,"LogGuid":"0e8f0317-bb4b-4bf4-a005-338860773b5b","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Na pot sem se podal skupaj z mojimi prijatelji. Na jutranjem srecanju smo bili prikrajšani za spektakularen konec sveta, zato smo se morali potolažiti s številnimi novimi najdbami.<br /><br />TFTC!","Created":"2012-12-22","Visited":"2012-12-21","UserName":"Vanja&Valdi","MembershipLevel":3,"AccountID":126472,"AccountGuid":"2338a519-1454-43ce-b31c-a29b7994888e","Email":"","AvatarImage":"a2501c6b-7c4b-4749-9f7c-db97e3aea6c9.jpg","GeocacheFindCount":1948,"GeocacheHideCount":8,"ChallengesCompleted":1,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284825582,"CacheID":3220672,"LogGuid":"7279e0d8-c908-456e-8f62-db5e8012cfad","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Na dan,ko naj bi bil konec sveta,sem se v prijetni druzbi 5r,lagosi in Vanja&Valdi odpravili v prestolnico kjer naj bi docakali skupen konec sveta z nasimi somisljeniki.Ko je prisel cas ki smo ga cakali smo videli da smo se vsi na kupu in da bomo se naprej lahko uzivali v nasem hobiju ,smo se kar podvizali in zaceli turnejo po se neodkritih skatlicah .Hvala za prijetno druzbo in se kdaj.HZZ?<br /><br />This entry was edited by AADT on Saturday, 22 December 2012 at 15:33:00 UTC.","Created":"2012-12-21","Visited":"2012-12-21","UserName":"AADT","MembershipLevel":3,"AccountID":3214400,"AccountGuid":"cede632d-87a9-47d0-a6a2-68a5100faa30","Email":"","AvatarImage":"7f7d67eb-0bfe-4e34-83db-31c9d0767979.png","GeocacheFindCount":1474,"GeocacheHideCount":13,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284813482,"CacheID":3220672,"LogGuid":"5f8a97b1-3007-43f5-83e8-32b3642434f8","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Na dan, ko naj bi bilo konec sveta, smo se v družbi predstavnikov ekip lagosi, AADT ter Vanja&Valdi, odpravili na geocachersko ekspedicijo v te kraje: da doživimo konec sveta pri svojem najljubšem hobiju <img src=\"/images/icons/icon_smile_big.gif\" border=\"0\" align=\"middle\" /><br /><br />Prav zanimiv koticek Ljubljane <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" /><br />Po kratkem sprehodu od ceste, smo škatlico našli v trenutku, v njej pa - BLJAK: vsebina razmocena do te mere, da smo opustili poskus vpisovanja v tisto, kar je nekoc bilo logbook.<br />Donirali smo \"emergency\" mikro container s suhim logbookom, tako da bo za nekaj casa verjetno možen normalen vpis.<br />Lastniku vsekakor toplo priporocamo obisk zakladka in malo popravila!<br /><br />TFTC<br />5r & family<br /><br /><br />","Created":"2012-12-21","Visited":"2012-12-21","UserName":"5r","MembershipLevel":3,"AccountID":1876775,"AccountGuid":"5122b2fe-bc8f-4049-a5bc-1c2bf730857c","Email":"","AvatarImage":"98edc335-f8ce-4ec9-818b-9ee7bc4a14dc.jpg","GeocacheFindCount":3591,"GeocacheHideCount":21,"ChallengesCompleted":6,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":284264670,"CacheID":3220672,"LogGuid":"5374daff-1731-4690-b124-522d5764b469","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Nedeljski sprehod po tirih nas je pripeljal do tega zakladka. Vsebina je že mokra, tako da bi svetoval vsaj še vrecko za okoli škatlice. <br /><br />Mnogo mirnejše kot pa prek delovnih dni. Hvala zaklad.","Created":"2012-12-16","Visited":"2012-12-16","UserName":"Cvickovi","MembershipLevel":1,"AccountID":6415308,"AccountGuid":"42007102-c603-4415-8f6a-af4885d93c0e","Email":"","AvatarImage":"0b864934-3b76-4f4e-860e-72b48774fc38.jpg","GeocacheFindCount":90,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":282928300,"CacheID":3220672,"LogGuid":"04183b59-fd84-4880-9195-edac89ffecd6","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zakladek nas je pripeljal v zanimiv industrijski del Ljubljane. V okolici smo bili že velikokrat, a tale košcek \"zemljišca\" nam je bil neznan. Sprehod je bil zanimiv in v bližini je dišalo - po plinu. Tu si verjetno res ni najbolje vzeti pavzo za cigareto <img src=\"/images/icons/icon_smile_wink.gif\" border=\"0\" align=\"middle\" />. Se pa seveda lahko poišce zakladek. <br /><br />Bunkeljni na okoliških delovišcih so usmerjeni v izvedbo svojih del in nalog, tako da geosledcem pristop ne bi smel biti problematicen - No, vsaj nam ni povzrocal težav. V bližini je sicer varnostna kamera a mislimo, da je zakladek dovolj dalec, da se varnostnikom na drugi strani ne prižigajo rdece lucke.<br /><br />Škatlico smo našli brez vecjih težav a zapis naše najdbe v knjižico obiskov je bil nekoliko težaven. Listki so namrec popolnoma premoceni! Bilo bi dobro, da bi lastniki opravili vzdrževalna dela!!!<br /><br />Hvala za zakladek!<br />---------------------------<br />This cache will take you to a lost place in the industrial part of Ljubljana. It si an interesting experience<br /><br />The box is wet and log book is soaked. Needs maintenance.<br /><br />TFTC!","Created":"2012-12-05","Visited":"2012-12-02","UserName":"sonček","MembershipLevel":3,"AccountID":312137,"AccountGuid":"658a025e-b36f-417c-b929-6ed7bf85b790","Email":"","AvatarImage":"11e42460-b659-47b2-a22f-79d6798b92c7.jpg","GeocacheFindCount":1724,"GeocacheHideCount":12,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":282298908,"CacheID":3220672,"LogGuid":"9cefe38c-acfe-4512-a394-dd9d08bfb32c","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Našli po hitrem postopku.","Created":"2012-12-01","Visited":"2012-12-01","UserName":"tomsetki","MembershipLevel":1,"AccountID":5435784,"AccountGuid":"653835a9-cb32-4792-b226-fd2667163c8e","Email":"","AvatarImage":"4c5d43fd-cbfd-4d8e-adad-6de55fc43e47.jpg","GeocacheFindCount":568,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":281522369,"CacheID":3220672,"LogGuid":"c290e3ef-7354-49d7-b885-f596519a08fb","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Zanimiva, kolesarska, \"blatna\" jesenska sobota je minila v duhu geolova, 17 najdenih zakladov in spoznavanje kotickov Ljubljane. Hitro najden tir, zakladek pa me je malo begal, najprej sem morala odstraniti tone listja, ker so koordinate nekoliko mimo, nato sem iskala kamen...a je bilo nato ocitno, saj sem že prej gledala kupcek, he, he. HZZ<br />YakominiYi","Created":"2012-11-25","Visited":"2012-11-24","UserName":"YakominiYi","MembershipLevel":3,"AccountID":4304234,"AccountGuid":"e785ce97-a1b3-4aae-8bc0-28b43186be31","Email":"","AvatarImage":"c13b9ef5-0c39-4dfa-a94a-a1335ca0ff19.jpg","GeocacheFindCount":875,"GeocacheHideCount":56,"ChallengesCompleted":16,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":280713139,"CacheID":3220672,"LogGuid":"b22275bb-798b-4010-9293-8f8eca9ff941","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Uspelo mi je izbrati pravi dostop in do kecka sem pristopil brez težav. Na sreco v dopoldanskem casu ni bilo zaposlenih na dvorišcih levo ali desno, verjetno je bilo premraz za cikanje in kafetkanje. tako sem lahko v miru opravil svoje...<br />Na lov sem šel brez pisala, pa tudi v zakladku ni nobenega. Na sreco je telefon ovekovecil mojo najdbo <img src=\"/images/icons/icon_smile_cool.gif\" border=\"0\" align=\"middle\" />","Created":"2012-11-20","Visited":"2012-11-20","UserName":"ATA ORU","MembershipLevel":1,"AccountID":4495291,"AccountGuid":"5e4c6b0d-c81f-4519-a5cb-0b6fb02f764b","Email":"","AvatarImage":"f24d91bd-2c43-4e50-aa29-b263ed988be2.jpg","GeocacheFindCount":915,"GeocacheHideCount":0,"ChallengesCompleted":14,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[{"ImageID":16223026,"ImageGuid":"bfaea6a8-502d-4095-9e84-6888e33c920a","Name":"2012-11-20 09.13.39","Descr":"","FileName":"bfaea6a8-502d-4095-9e84-6888e33c920a.jpg","Created":"2012-11-20","LogID":280713139,"CacheID":3220672,"ImageUrl":null}]},{"LogID":280243063,"CacheID":3220672,"LogGuid":"6ddcafde-f5e6-4e79-9915-341f154bb2aa","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"TFTC","Created":"2012-11-18","Visited":"2012-11-18","UserName":"AndyDee","MembershipLevel":1,"AccountID":5069819,"AccountGuid":"ff6c96c4-8972-46f9-849f-89766e2fc2eb","Email":"","AvatarImage":"a79d055f-6449-498d-8441-3bf81650209e.jpg","GeocacheFindCount":125,"GeocacheHideCount":3,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":280233178,"CacheID":3220672,"LogGuid":"71462f9c-73cd-4290-a540-25ce5ccb9ac1","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Logbook je bil kar precej namocen, ampak je vpis vseeno vspel, HZZ.","Created":"2012-11-18","Visited":"2012-11-18","UserName":"rain.si","MembershipLevel":1,"AccountID":4209103,"AccountGuid":"85668cec-e8af-4a66-882a-1cea1639ac02","Email":"","AvatarImage":"d07ac7bb-d91d-4217-b630-d63c09c247cd.jpg","GeocacheFindCount":125,"GeocacheHideCount":5,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":280210122,"CacheID":3220672,"LogGuid":"523b8ff9-d3f2-440e-8624-e207df957028","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"TFTC :) T & J <br />in: TB<br />out: smrkec","Created":"2012-11-18","Visited":"2012-11-18","UserName":"GeoCachingSLO","MembershipLevel":1,"AccountID":6088292,"AccountGuid":"3f88e53f-3b03-4a88-b054-c8cd91fb0afd","Email":"","AvatarImage":"7f6b598c-7514-48f1-8f01-8e600710bd2d.jpg","GeocacheFindCount":28,"GeocacheHideCount":1,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":279931139,"CacheID":3220672,"LogGuid":"9604d087-268d-46f0-b52f-6fadfaadfc1e","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Malce sem se vozil naokoli, da sem našel pravi pristop...<br />Vmes mi je še skoraj nov mobitel padel na tla iz kolesa in staknil lepo odgrnino...vsaj zakladek sem našel <img src=\"/images/icons/icon_smile.gif\" border=\"0\" align=\"middle\" />","Created":"2012-11-17","Visited":"2012-11-17","UserName":"Vrhobir","MembershipLevel":1,"AccountID":5222683,"AccountGuid":"062b9547-7973-4438-9ff6-ddecdd117c3f","Email":"","AvatarImage":"","GeocacheFindCount":222,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":281037984,"CacheID":3220672,"LogGuid":"064708a3-2727-44a4-a250-c5c44ed74c12","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Pr' tolk kamna je blo težko najdt pravega :)","Created":"2012-11-23","Visited":"2012-11-14","UserName":"alenka12","MembershipLevel":1,"AccountID":6546465,"AccountGuid":"dfa1727c-ab02-4529-9cf3-04781671e0d2","Email":"","AvatarImage":"","GeocacheFindCount":62,"GeocacheHideCount":0,"ChallengesCompleted":0,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]},{"LogID":279501752,"CacheID":3220672,"LogGuid":"4fcd61ba-0090-46d9-b7cf-0682d7f21b49","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Ce sem pred tem našel 3 zaklade takoj, pa mi tukaj ni šlo najhitreje, pa vseeno v 10ih minutah. HZZ","Created":"2012-11-14","Visited":"2012-11-14","UserName":"Simon07","MembershipLevel":3,"AccountID":4074208,"AccountGuid":"88adea12-ae5a-471b-97b2-413e6c4e5433","Email":"","AvatarImage":"178d4ebe-bb91-4c26-a4ab-0a81e7ea7cdc.jpg","GeocacheFindCount":746,"GeocacheHideCount":13,"ChallengesCompleted":22,"IsEncoded":false,"creator":{"GroupTitle":"Premium Member","GroupImageUrl":"/images/icons/prem_user.gif"},"Images":[]},{"LogID":278635825,"CacheID":3220672,"LogGuid":"e4134282-8ea2-4324-b5d6-afdcf662acc8","Latitude":null,"Longitude":null,"LatLonString":"","LogType":"Found it","LogTypeImage":"2.png","LogText":"Kar s kolesom po slepem tiru do zakladka! :)<br />HZZ","Created":"2012-11-10","Visited":"2012-11-10","UserName":"strgacom","MembershipLevel":1,"AccountID":5106851,"AccountGuid":"7aa5ff75-478e-441a-9c2c-146ba7445777","Email":"","AvatarImage":"731d212e-0986-4081-a3e9-166bd77a7215.jpg","GeocacheFindCount":422,"GeocacheHideCount":4,"ChallengesCompleted":24,"IsEncoded":false,"creator":{"GroupTitle":"Member","GroupImageUrl":"/images/icons/reg_user.gif"},"Images":[]}], "pageInfo": { "idx":1, "size": 25, "totalRows": 82, "rows": 82 } }; $(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', 'Premium', null, true]); });var gaToken = 'UA-2020240-1';//]]> </script> </form> @@ -1979,6 +2004,6 @@ $(function() { _gaq.push(['_trackEvent', 'Geocaching', 'CacheDetailsMemberType', </noscript> </div> <!-- End Quantcast tag --> - <!-- Server: WEB14; Build: Web.HotFix_20130305.1 --> + <!-- Server: WEB11; Build: Web.Release_20130319.1 --> </body> </html> diff --git a/tests/src/cgeo/geocaching/twitter/TwitterTest.java b/tests/src/cgeo/geocaching/twitter/TwitterTest.java new file mode 100644 index 0000000..a27e57a --- /dev/null +++ b/tests/src/cgeo/geocaching/twitter/TwitterTest.java @@ -0,0 +1,37 @@ +package cgeo.geocaching.twitter; + +import cgeo.geocaching.Geocache; +import cgeo.geocaching.Settings; +import cgeo.geocaching.Trackable; + +import junit.framework.TestCase; + +public class TwitterTest extends TestCase { + + public static void testTrackableMessage() { + Trackable tb = new Trackable(); + tb.setName("Travel bug"); + tb.setGeocode("TB1234"); + assertEquals("I touched Travel bug (http://www.geocaching.com//track/details.aspx?tracker=TB1234)! #cgeo #geocaching", Twitter.getStatusMessage(tb)); + } + + public static void testCacheMessage() { + Geocache cache = new Geocache(); + cache.setGeocode("GC1234"); + cache.setName("TwitterTest"); + assertEquals("I found TwitterTest (http://coord.info/GC1234) #cgeo #geocaching", Twitter.getStatusMessage(cache)); + } + + public static void testAvoidDuplicateTags() { + String oldMessage = Settings.getCacheTwitterMessage(); + try { + Geocache cache = new Geocache(); + cache.setGeocode("GC1234"); + cache.setName("TwitterTest"); + Settings.setCacheTwitterMessage("[NAME] #cgeo"); + assertEquals("TwitterTest #cgeo #geocaching", Twitter.getStatusMessage(cache)); + } finally { + Settings.setCacheTwitterMessage(oldMessage); + } + } +} |
